1
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2009 Sun Microsystems, Inc.
4
* Copyright (C) 2009 Sun Microsystems
6
6
* This program is free software; you can redistribute it and/or modify
7
7
* it under the terms of the GNU General Public License as published by
35
inline value_type add_and_fetch(volatile value_type *value, D addend )
35
/* YES. I know these are semantically backwards...
36
* so... TODO: Ensure we're doing the "right" thing here
38
inline value_type fetch_and_add(volatile value_type *value, D addend )
37
40
return __sync_add_and_fetch(value, addend);
40
inline value_type fetch_and_add(volatile value_type *value, D addend )
42
return __sync_fetch_and_add(value, addend);
45
43
inline value_type fetch_and_increment(volatile value_type *value)
47
return __sync_fetch_and_add(value, 1);
45
return __sync_add_and_fetch(value, 1);
50
48
inline value_type fetch_and_decrement(volatile value_type *value)
52
return __sync_fetch_and_sub(value, 1);
50
return __sync_sub_and_fetch(value, 1);
55
53
inline value_type fetch_and_store(volatile value_type *value,
56
54
value_type new_value)
56
/* TODO: Is this the right one? */
58
57
return __sync_lock_test_and_set(value, new_value);
61
inline bool compare_and_swap(volatile value_type *value,
60
inline value_type compare_and_swap(volatile value_type *value,
62
61
value_type new_value,
63
62
value_type comparand )
65
return __sync_bool_compare_and_swap(value, comparand, new_value);
64
return __sync_val_compare_and_swap(value, comparand, new_value);
68
67
inline value_type fetch(const volatile value_type *value) const volatile
77
76
* Look at how to rewrite the below to something that ICC feels is
78
77
* OK and yet respects memory barriers.
80
return __sync_fetch_and_add(const_cast<value_type *>(value), 0);
79
return __sync_add_and_fetch(const_cast<value_type *>(value), 0);
83
82
inline value_type store_with_release(volatile value_type *value,