18 #if (KMP_ARCH_X86 || KMP_ARCH_X86_64) 22 kmp_int8 __kmp_test_then_or8(
volatile kmp_int8 *p, kmp_int8 d) {
23 kmp_int8 old_value, new_value;
25 old_value = TCR_1(*p);
26 new_value = old_value | d;
28 while (!__kmp_compare_and_store8(p, old_value, new_value)) {
30 old_value = TCR_1(*p);
31 new_value = old_value | d;
36 kmp_int8 __kmp_test_then_and8(
volatile kmp_int8 *p, kmp_int8 d) {
37 kmp_int8 old_value, new_value;
39 old_value = TCR_1(*p);
40 new_value = old_value & d;
42 while (!__kmp_compare_and_store8(p, old_value, new_value)) {
44 old_value = TCR_1(*p);
45 new_value = old_value & d;
50 kmp_uint32 __kmp_test_then_or32(
volatile kmp_uint32 *p, kmp_uint32 d) {
51 kmp_uint32 old_value, new_value;
53 old_value = TCR_4(*p);
54 new_value = old_value | d;
56 while (!__kmp_compare_and_store32((
volatile kmp_int32 *)p, old_value,
59 old_value = TCR_4(*p);
60 new_value = old_value | d;
65 kmp_uint32 __kmp_test_then_and32(
volatile kmp_uint32 *p, kmp_uint32 d) {
66 kmp_uint32 old_value, new_value;
68 old_value = TCR_4(*p);
69 new_value = old_value & d;
71 while (!__kmp_compare_and_store32((
volatile kmp_int32 *)p, old_value,
74 old_value = TCR_4(*p);
75 new_value = old_value & d;
80 kmp_int8 __kmp_test_then_add8(
volatile kmp_int8 *p, kmp_int8 d) {
81 kmp_int64 old_value, new_value;
83 old_value = TCR_1(*p);
84 new_value = old_value + d;
85 while (!__kmp_compare_and_store8(p, old_value, new_value)) {
87 old_value = TCR_1(*p);
88 new_value = old_value + d;
94 kmp_int64 __kmp_test_then_add64(
volatile kmp_int64 *p, kmp_int64 d) {
95 kmp_int64 old_value, new_value;
97 old_value = TCR_8(*p);
98 new_value = old_value + d;
99 while (!__kmp_compare_and_store64(p, old_value, new_value)) {
101 old_value = TCR_8(*p);
102 new_value = old_value + d;
108 kmp_uint64 __kmp_test_then_or64(
volatile kmp_uint64 *p, kmp_uint64 d) {
109 kmp_uint64 old_value, new_value;
111 old_value = TCR_8(*p);
112 new_value = old_value | d;
113 while (!__kmp_compare_and_store64((
volatile kmp_int64 *)p, old_value,
116 old_value = TCR_8(*p);
117 new_value = old_value | d;
123 kmp_uint64 __kmp_test_then_and64(
volatile kmp_uint64 *p, kmp_uint64 d) {
124 kmp_uint64 old_value, new_value;
126 old_value = TCR_8(*p);
127 new_value = old_value & d;
128 while (!__kmp_compare_and_store64((
volatile kmp_int64 *)p, old_value,
131 old_value = TCR_8(*p);
132 new_value = old_value & d;