diff options
| author | Jérémy Zurcher <jeremy@asynk.ch> | 2013-01-30 11:18:39 +0100 | 
|---|---|---|
| committer | Jérémy Zurcher <jeremy@asynk.ch> | 2013-01-30 11:18:39 +0100 | 
| commit | 0042a0da85c2bd0d321e1e6ec22dfe0330ba6b9b (patch) | |
| tree | cbf22fefafa1b891875743e741826cfad8fab5a2 | |
| parent | 4e1cc10bb6763bb034acab3e12b6dce0d5570386 (diff) | |
| download | lock_free-0042a0da85c2bd0d321e1e6ec22dfe0330ba6b9b.zip lock_free-0042a0da85c2bd0d321e1e6ec22dfe0330ba6b9b.tar.gz  | |
code cleanup
| -rw-r--r-- | cas.c | 8 | ||||
| -rw-r--r-- | cas.h | 56 | ||||
| -rw-r--r-- | container_of.c | 24 | 
3 files changed, 47 insertions, 41 deletions
@@ -1,7 +1,7 @@  /*   * File     : cas.c   * Author   : Jérémy Zurcher  <jeremy@asynk.ch> - * Date     : 01/11/09 + * Date     : 2009/11/01   * License  :   *   *  Permission is hereby granted, free of charge, to any person obtaining @@ -75,6 +75,12 @@ int main( int argc, char*argv[], char*env[] )     _check((_hi_eq(mem,&v5)),"3 hi value is wrong");     _check((_lo_eq(mem,&v1)),"3 lo value is wrong"); +   _hi(old_val,&v1); _lo(old_val,&v2); +   _hi(mem,&v4); _lo(mem,&v5); +   mem = old_val; +   _check((_hi_eq(mem,&v1)),"4 lo value is wrong"); +   _check((_lo_eq(mem,&v2)),"4 lo value is wrong"); +     printf("success\n");     return EXIT_SUCCESS; @@ -1,7 +1,7 @@  /*   * File     : cas.h   * Author   : Jérémy Zurcher  <jeremy@asynk.ch> - * Date     : 25/01/13 + * Date     : 2013/01/25   * License  :   *   *  Permission is hereby granted, free of charge, to any person obtaining @@ -50,8 +50,8 @@ extern "C" {  struct _cas_pointer_t  { -    _cas_field_t lo; -    _cas_field_t hi; +   _cas_field_t lo; +   _cas_field_t hi;  } __attribute__ (( __aligned__( _cas_aligned ) ));  typedef struct _cas_pointer_t cas_pointer_t; @@ -63,39 +63,39 @@ typedef struct _cas_pointer_t cas_pointer_t;  inline int cas(volatile cas_pointer_t* mem, cas_pointer_t old_val, cas_pointer_t new_val)  { -    char success; +   char success;  #if defined(__i386__) && defined(__GNUC__) -    asm volatile("lock cmpxchg8b (%6);" -            "setz %7;" -            : "=a" ( old_val.lo ), -              "=d" ( old_val.hi ) -            : "0"  ( old_val.lo ), -              "1"  ( old_val.hi ), -              "b"  ( new_val.lo ), -              "c"  ( new_val.hi ), -              "r"  ( mem ), -              "m"  ( success ) -            : "cc", "memory" -            ); +   asm volatile("lock cmpxchg8b (%6);" +         "setz %7;" +         : "=a" ( old_val.lo ) +         , "=d" ( old_val.hi ) +         : "0"  ( old_val.lo ) +         , "1"  ( old_val.hi ) +         , "b"  ( new_val.lo ) +         , "c"  ( new_val.hi ) +         , "r"  ( mem ) +         , "m"  ( success ) +         : "cc", "memory" +         );  #elif defined(__x86_64__) && defined(__GNUC__) -    asm volatile ( -            "lock cmpxchg16b %1;" -            "setz %0;" -            : "=q" ( success ) -            , "+m" ( *mem ) -            , "+d" ( old_val.hi ) -            , "+a" ( old_val.lo ) -            : "c"  ( new_val.hi ) -            , "b"  ( new_val.lo ) -            : "cc", "memory" -            ); +   asm volatile ( +         "lock cmpxchg16b %1;" +         "setz %0;" +         : "=q" ( success ) +         , "+m" ( *mem ) +         , "+d" ( old_val.hi ) +         , "+a" ( old_val.lo ) +         : "c"  ( new_val.hi ) +         , "b"  ( new_val.lo ) +         : "cc", "memory" +         );  #endif -    return (int)success; +   return (int)success;  }  # ifdef __cplusplus diff --git a/container_of.c b/container_of.c index 13f8e69..53e6ffe 100644 --- a/container_of.c +++ b/container_of.c @@ -1,7 +1,7 @@  /*   * File     : container_of.c   * Author   : Jérémy Zurcher  <jeremy@asynk.ch> - * Date     : 01/11/09 + * Date     : 2009/11/01   * License  :   *   *  Permission is hereby granted, free of charge, to any person obtaining @@ -48,7 +48,7 @@ static void _check(int cond, const char *msg)  {     if(!cond)       { -        fprintf(stderr,"%s\n",msg); +        fprintf(stderr,"%s failed\n",msg);          exit(EXIT_FAILURE);       }  } @@ -57,17 +57,17 @@ int main(int argc, char *argv[])  {     struct node n; -   _check((&n==container_of( &n.data1, struct node, data1)),"1 container_of failed"); -   _check((&n==container_of( &n.data2, struct node, data2)),"2 container_of failed"); -   _check((&n==container_of( &n.data3, struct node, data3)),"3 container_of failed"); -   _check((&n==container_of( &n.data4, struct node, data4)),"4 container_of failed"); -   _check((&n==container_of( &n.data5, struct node, data5)),"5 container_of failed"); +   _check((&n==container_of( &n.data1, struct node, data1)),"1 container_of"); +   _check((&n==container_of( &n.data2, struct node, data2)),"2 container_of"); +   _check((&n==container_of( &n.data3, struct node, data3)),"3 container_of"); +   _check((&n==container_of( &n.data4, struct node, data4)),"4 container_of"); +   _check((&n==container_of( &n.data5, struct node, data5)),"5 container_of"); -   _check((&n==containerof( &n.data1, struct node, data1)),"1 container_of failed"); -   _check((&n==containerof( &n.data2, struct node, data2)),"2 container_of failed"); -   _check((&n==containerof( &n.data3, struct node, data3)),"3 container_of failed"); -   _check((&n==containerof( &n.data4, struct node, data4)),"4 container_of failed"); -   _check((&n==containerof( &n.data5, struct node, data5)),"5 container_of failed"); +   _check((&n==containerof( &n.data1, struct node, data1)),"1 containerof"); +   _check((&n==containerof( &n.data2, struct node, data2)),"2 containerof"); +   _check((&n==containerof( &n.data3, struct node, data3)),"3 containerof"); +   _check((&n==containerof( &n.data4, struct node, data4)),"4 containerof"); +   _check((&n==containerof( &n.data5, struct node, data5)),"5 containerof");     printf("success\n");  | 
