PageRenderTime 13ms CodeModel.GetById 9ms app.highlight 1ms RepoModel.GetById 1ms app.codeStats 0ms

/External/Mysql-5.0/include/atomic/gcc_builtins.h

http://awoe.googlecode.com/
C++ Header | 38 lines | 20 code | 4 blank | 14 comment | 2 complexity | 19ac3ac62851d1182ed6d994d9a79dcb MD5 | raw file
 1/* Copyright (C) 2008 MySQL AB
 2
 3   This program is free software; you can redistribute it and/or modify
 4   it under the terms of the GNU General Public License as published by
 5   the Free Software Foundation; version 2 of the License.
 6
 7   This program is distributed in the hope that it will be useful,
 8   but WITHOUT ANY WARRANTY; without even the implied warranty of
 9   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10   GNU General Public License for more details.
11
12   You should have received a copy of the GNU General Public License
13   along with this program; if not, write to the Free Software
14   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
15
16#define MY_ATOMIC_MODE "atomic_builtins"
17
18#define make_atomic_add_body(S)                     \
19  v= __sync_fetch_and_add(a, v);
20#define make_atomic_swap_body(S)                    \
21  v= __sync_lock_test_and_set(a, v);
22#define make_atomic_cas_body(S)                     \
23  int ## S sav;                                     \
24  sav= __sync_val_compare_and_swap(a, *cmp, set);   \
25  if (!(ret= (sav == *cmp))) *cmp= sav;
26
27#ifdef MY_ATOMIC_MODE_DUMMY
28#define make_atomic_load_body(S)   ret= *a
29#define make_atomic_store_body(S)  *a= v
30#define MY_ATOMIC_MODE "gcc-builtins-up"
31
32#else
33#define MY_ATOMIC_MODE "gcc-builtins-smp"
34#define make_atomic_load_body(S)                    \
35  ret= __sync_fetch_and_or(a, 0);
36#define make_atomic_store_body(S)                   \
37  (void) __sync_lock_test_and_set(a, v);
38#endif