16 #if (KMP_ARCH_X86 || KMP_ARCH_X86_64) 20 kmp_int8 __kmp_test_then_or8(
volatile kmp_int8 *p, kmp_int8 d) {
21 kmp_int8 old_value, new_value;
23 old_value = TCR_1(*p);
24 new_value = old_value | d;
26 while (!__kmp_compare_and_store8(p, old_value, new_value)) {
28 old_value = TCR_1(*p);
29 new_value = old_value | d;
34 kmp_int8 __kmp_test_then_and8(
volatile kmp_int8 *p, kmp_int8 d) {
35 kmp_int8 old_value, new_value;
37 old_value = TCR_1(*p);
38 new_value = old_value & d;
40 while (!__kmp_compare_and_store8(p, old_value, new_value)) {
42 old_value = TCR_1(*p);
43 new_value = old_value & d;
48 kmp_uint32 __kmp_test_then_or32(
volatile kmp_uint32 *p, kmp_uint32 d) {
49 kmp_uint32 old_value, new_value;
51 old_value = TCR_4(*p);
52 new_value = old_value | d;
54 while (!__kmp_compare_and_store32((
volatile kmp_int32 *)p, old_value,
57 old_value = TCR_4(*p);
58 new_value = old_value | d;
63 kmp_uint32 __kmp_test_then_and32(
volatile kmp_uint32 *p, kmp_uint32 d) {
64 kmp_uint32 old_value, new_value;
66 old_value = TCR_4(*p);
67 new_value = old_value & d;
69 while (!__kmp_compare_and_store32((
volatile kmp_int32 *)p, old_value,
72 old_value = TCR_4(*p);
73 new_value = old_value & d;
78 kmp_int8 __kmp_test_then_add8(
volatile kmp_int8 *p, kmp_int8 d) {
79 kmp_int64 old_value, new_value;
81 old_value = TCR_1(*p);
82 new_value = old_value + d;
83 while (!__kmp_compare_and_store8(p, old_value, new_value)) {
85 old_value = TCR_1(*p);
86 new_value = old_value + d;
92 kmp_int64 __kmp_test_then_add64(
volatile kmp_int64 *p, kmp_int64 d) {
93 kmp_int64 old_value, new_value;
95 old_value = TCR_8(*p);
96 new_value = old_value + d;
97 while (!__kmp_compare_and_store64(p, old_value, new_value)) {
99 old_value = TCR_8(*p);
100 new_value = old_value + d;
106 kmp_uint64 __kmp_test_then_or64(
volatile kmp_uint64 *p, kmp_uint64 d) {
107 kmp_uint64 old_value, new_value;
109 old_value = TCR_8(*p);
110 new_value = old_value | d;
111 while (!__kmp_compare_and_store64((
volatile kmp_int64 *)p, old_value,
114 old_value = TCR_8(*p);
115 new_value = old_value | d;
121 kmp_uint64 __kmp_test_then_and64(
volatile kmp_uint64 *p, kmp_uint64 d) {
122 kmp_uint64 old_value, new_value;
124 old_value = TCR_8(*p);
125 new_value = old_value & d;
126 while (!__kmp_compare_and_store64((
volatile kmp_int64 *)p, old_value,
129 old_value = TCR_8(*p);
130 new_value = old_value & d;