1/* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC 4.4" "fetch_and_nand" { target *-*-* } 0 } */ 2/* { dg-message "note: '__sync_nand_and_fetch' changed semantics in GCC 4.4" "nand_and_fetch" { target *-*-* } 0 } */ 3/* { dg-options "-ffat-lto-objects" } */ 4 5/* Validate that each of the __sync builtins compiles. This won't 6 necessarily link, since the target might not support the builtin, 7 so this may result in external library calls. */ 8 9signed char sc; 10unsigned char uc; 11signed short ss; 12unsigned short us; 13signed int si; 14unsigned int ui; 15signed long sl; 16unsigned long ul; 17signed long long sll; 18unsigned long long ull; 19void *vp; 20int *ip; 21struct S { struct S *next; int x; } *sp; 22 23void test_op_ignore (void) 24{ 25 (void) __sync_fetch_and_add (&sc, 1); 26 (void) __sync_fetch_and_add (&uc, 1); 27 (void) __sync_fetch_and_add (&ss, 1); 28 (void) __sync_fetch_and_add (&us, 1); 29 (void) __sync_fetch_and_add (&si, 1); 30 (void) __sync_fetch_and_add (&ui, 1); 31 (void) __sync_fetch_and_add (&sl, 1); 32 (void) __sync_fetch_and_add (&ul, 1); 33 (void) __sync_fetch_and_add (&sll, 1); 34 (void) __sync_fetch_and_add (&ull, 1); 35 36 (void) __sync_fetch_and_sub (&sc, 1); 37 (void) __sync_fetch_and_sub (&uc, 1); 38 (void) __sync_fetch_and_sub (&ss, 1); 39 (void) __sync_fetch_and_sub (&us, 1); 40 (void) __sync_fetch_and_sub (&si, 1); 41 (void) __sync_fetch_and_sub (&ui, 1); 42 (void) __sync_fetch_and_sub (&sl, 1); 43 (void) __sync_fetch_and_sub (&ul, 1); 44 (void) __sync_fetch_and_sub (&sll, 1); 45 (void) __sync_fetch_and_sub (&ull, 1); 46 47 (void) __sync_fetch_and_or (&sc, 1); 48 (void) __sync_fetch_and_or (&uc, 1); 49 (void) __sync_fetch_and_or (&ss, 1); 50 (void) __sync_fetch_and_or (&us, 1); 51 (void) __sync_fetch_and_or (&si, 1); 52 (void) __sync_fetch_and_or (&ui, 1); 53 (void) __sync_fetch_and_or (&sl, 1); 54 (void) __sync_fetch_and_or (&ul, 1); 55 (void) __sync_fetch_and_or (&sll, 1); 56 (void) __sync_fetch_and_or (&ull, 1); 57 58 (void) __sync_fetch_and_xor (&sc, 1); 59 (void) __sync_fetch_and_xor (&uc, 1); 60 (void) __sync_fetch_and_xor (&ss, 1); 61 (void) __sync_fetch_and_xor (&us, 1); 62 (void) __sync_fetch_and_xor (&si, 1); 63 (void) __sync_fetch_and_xor (&ui, 1); 64 (void) __sync_fetch_and_xor (&sl, 1); 65 (void) __sync_fetch_and_xor (&ul, 1); 66 (void) __sync_fetch_and_xor (&sll, 1); 67 (void) __sync_fetch_and_xor (&ull, 1); 68 69 (void) __sync_fetch_and_and (&sc, 1); 70 (void) __sync_fetch_and_and (&uc, 1); 71 (void) __sync_fetch_and_and (&ss, 1); 72 (void) __sync_fetch_and_and (&us, 1); 73 (void) __sync_fetch_and_and (&si, 1); 74 (void) __sync_fetch_and_and (&ui, 1); 75 (void) __sync_fetch_and_and (&sl, 1); 76 (void) __sync_fetch_and_and (&ul, 1); 77 (void) __sync_fetch_and_and (&sll, 1); 78 (void) __sync_fetch_and_and (&ull, 1); 79 80 (void) __sync_fetch_and_nand (&sc, 1); 81 (void) __sync_fetch_and_nand (&uc, 1); 82 (void) __sync_fetch_and_nand (&ss, 1); 83 (void) __sync_fetch_and_nand (&us, 1); 84 (void) __sync_fetch_and_nand (&si, 1); 85 (void) __sync_fetch_and_nand (&ui, 1); 86 (void) __sync_fetch_and_nand (&sl, 1); 87 (void) __sync_fetch_and_nand (&ul, 1); 88 (void) __sync_fetch_and_nand (&sll, 1); 89 (void) __sync_fetch_and_nand (&ull, 1); 90} 91 92void test_fetch_and_op (void) 93{ 94 sc = __sync_fetch_and_add (&sc, 11); 95 uc = __sync_fetch_and_add (&uc, 11); 96 ss = __sync_fetch_and_add (&ss, 11); 97 us = __sync_fetch_and_add (&us, 11); 98 si = __sync_fetch_and_add (&si, 11); 99 ui = __sync_fetch_and_add (&ui, 11); 100 sl = __sync_fetch_and_add (&sl, 11); 101 ul = __sync_fetch_and_add (&ul, 11); 102 sll = __sync_fetch_and_add (&sll, 11); 103 ull = __sync_fetch_and_add (&ull, 11); 104 105 sc = __sync_fetch_and_sub (&sc, 11); 106 uc = __sync_fetch_and_sub (&uc, 11); 107 ss = __sync_fetch_and_sub (&ss, 11); 108 us = __sync_fetch_and_sub (&us, 11); 109 si = __sync_fetch_and_sub (&si, 11); 110 ui = __sync_fetch_and_sub (&ui, 11); 111 sl = __sync_fetch_and_sub (&sl, 11); 112 ul = __sync_fetch_and_sub (&ul, 11); 113 sll = __sync_fetch_and_sub (&sll, 11); 114 ull = __sync_fetch_and_sub (&ull, 11); 115 116 sc = __sync_fetch_and_or (&sc, 11); 117 uc = __sync_fetch_and_or (&uc, 11); 118 ss = __sync_fetch_and_or (&ss, 11); 119 us = __sync_fetch_and_or (&us, 11); 120 si = __sync_fetch_and_or (&si, 11); 121 ui = __sync_fetch_and_or (&ui, 11); 122 sl = __sync_fetch_and_or (&sl, 11); 123 ul = __sync_fetch_and_or (&ul, 11); 124 sll = __sync_fetch_and_or (&sll, 11); 125 ull = __sync_fetch_and_or (&ull, 11); 126 127 sc = __sync_fetch_and_xor (&sc, 11); 128 uc = __sync_fetch_and_xor (&uc, 11); 129 ss = __sync_fetch_and_xor (&ss, 11); 130 us = __sync_fetch_and_xor (&us, 11); 131 si = __sync_fetch_and_xor (&si, 11); 132 ui = __sync_fetch_and_xor (&ui, 11); 133 sl = __sync_fetch_and_xor (&sl, 11); 134 ul = __sync_fetch_and_xor (&ul, 11); 135 sll = __sync_fetch_and_xor (&sll, 11); 136 ull = __sync_fetch_and_xor (&ull, 11); 137 138 sc = __sync_fetch_and_and (&sc, 11); 139 uc = __sync_fetch_and_and (&uc, 11); 140 ss = __sync_fetch_and_and (&ss, 11); 141 us = __sync_fetch_and_and (&us, 11); 142 si = __sync_fetch_and_and (&si, 11); 143 ui = __sync_fetch_and_and (&ui, 11); 144 sl = __sync_fetch_and_and (&sl, 11); 145 ul = __sync_fetch_and_and (&ul, 11); 146 sll = __sync_fetch_and_and (&sll, 11); 147 ull = __sync_fetch_and_and (&ull, 11); 148 149 sc = __sync_fetch_and_nand (&sc, 11); 150 uc = __sync_fetch_and_nand (&uc, 11); 151 ss = __sync_fetch_and_nand (&ss, 11); 152 us = __sync_fetch_and_nand (&us, 11); 153 si = __sync_fetch_and_nand (&si, 11); 154 ui = __sync_fetch_and_nand (&ui, 11); 155 sl = __sync_fetch_and_nand (&sl, 11); 156 ul = __sync_fetch_and_nand (&ul, 11); 157 sll = __sync_fetch_and_nand (&sll, 11); 158 ull = __sync_fetch_and_nand (&ull, 11); 159} 160 161void test_op_and_fetch (void) 162{ 163 sc = __sync_add_and_fetch (&sc, uc); 164 uc = __sync_add_and_fetch (&uc, uc); 165 ss = __sync_add_and_fetch (&ss, uc); 166 us = __sync_add_and_fetch (&us, uc); 167 si = __sync_add_and_fetch (&si, uc); 168 ui = __sync_add_and_fetch (&ui, uc); 169 sl = __sync_add_and_fetch (&sl, uc); 170 ul = __sync_add_and_fetch (&ul, uc); 171 sll = __sync_add_and_fetch (&sll, uc); 172 ull = __sync_add_and_fetch (&ull, uc); 173 174 sc = __sync_sub_and_fetch (&sc, uc); 175 uc = __sync_sub_and_fetch (&uc, uc); 176 ss = __sync_sub_and_fetch (&ss, uc); 177 us = __sync_sub_and_fetch (&us, uc); 178 si = __sync_sub_and_fetch (&si, uc); 179 ui = __sync_sub_and_fetch (&ui, uc); 180 sl = __sync_sub_and_fetch (&sl, uc); 181 ul = __sync_sub_and_fetch (&ul, uc); 182 sll = __sync_sub_and_fetch (&sll, uc); 183 ull = __sync_sub_and_fetch (&ull, uc); 184 185 sc = __sync_or_and_fetch (&sc, uc); 186 uc = __sync_or_and_fetch (&uc, uc); 187 ss = __sync_or_and_fetch (&ss, uc); 188 us = __sync_or_and_fetch (&us, uc); 189 si = __sync_or_and_fetch (&si, uc); 190 ui = __sync_or_and_fetch (&ui, uc); 191 sl = __sync_or_and_fetch (&sl, uc); 192 ul = __sync_or_and_fetch (&ul, uc); 193 sll = __sync_or_and_fetch (&sll, uc); 194 ull = __sync_or_and_fetch (&ull, uc); 195 196 sc = __sync_xor_and_fetch (&sc, uc); 197 uc = __sync_xor_and_fetch (&uc, uc); 198 ss = __sync_xor_and_fetch (&ss, uc); 199 us = __sync_xor_and_fetch (&us, uc); 200 si = __sync_xor_and_fetch (&si, uc); 201 ui = __sync_xor_and_fetch (&ui, uc); 202 sl = __sync_xor_and_fetch (&sl, uc); 203 ul = __sync_xor_and_fetch (&ul, uc); 204 sll = __sync_xor_and_fetch (&sll, uc); 205 ull = __sync_xor_and_fetch (&ull, uc); 206 207 sc = __sync_and_and_fetch (&sc, uc); 208 uc = __sync_and_and_fetch (&uc, uc); 209 ss = __sync_and_and_fetch (&ss, uc); 210 us = __sync_and_and_fetch (&us, uc); 211 si = __sync_and_and_fetch (&si, uc); 212 ui = __sync_and_and_fetch (&ui, uc); 213 sl = __sync_and_and_fetch (&sl, uc); 214 ul = __sync_and_and_fetch (&ul, uc); 215 sll = __sync_and_and_fetch (&sll, uc); 216 ull = __sync_and_and_fetch (&ull, uc); 217 218 sc = __sync_nand_and_fetch (&sc, uc); 219 uc = __sync_nand_and_fetch (&uc, uc); 220 ss = __sync_nand_and_fetch (&ss, uc); 221 us = __sync_nand_and_fetch (&us, uc); 222 si = __sync_nand_and_fetch (&si, uc); 223 ui = __sync_nand_and_fetch (&ui, uc); 224 sl = __sync_nand_and_fetch (&sl, uc); 225 ul = __sync_nand_and_fetch (&ul, uc); 226 sll = __sync_nand_and_fetch (&sll, uc); 227 ull = __sync_nand_and_fetch (&ull, uc); 228} 229 230void test_compare_and_swap (void) 231{ 232 sc = __sync_val_compare_and_swap (&sc, uc, sc); 233 uc = __sync_val_compare_and_swap (&uc, uc, sc); 234 ss = __sync_val_compare_and_swap (&ss, uc, sc); 235 us = __sync_val_compare_and_swap (&us, uc, sc); 236 si = __sync_val_compare_and_swap (&si, uc, sc); 237 ui = __sync_val_compare_and_swap (&ui, uc, sc); 238 sl = __sync_val_compare_and_swap (&sl, uc, sc); 239 ul = __sync_val_compare_and_swap (&ul, uc, sc); 240 sll = __sync_val_compare_and_swap (&sll, uc, sc); 241 ull = __sync_val_compare_and_swap (&ull, uc, sc); 242 243 ui = __sync_bool_compare_and_swap (&sc, uc, sc); 244 ui = __sync_bool_compare_and_swap (&uc, uc, sc); 245 ui = __sync_bool_compare_and_swap (&ss, uc, sc); 246 ui = __sync_bool_compare_and_swap (&us, uc, sc); 247 ui = __sync_bool_compare_and_swap (&si, uc, sc); 248 ui = __sync_bool_compare_and_swap (&ui, uc, sc); 249 ui = __sync_bool_compare_and_swap (&sl, uc, sc); 250 ui = __sync_bool_compare_and_swap (&ul, uc, sc); 251 ui = __sync_bool_compare_and_swap (&sll, uc, sc); 252 ui = __sync_bool_compare_and_swap (&ull, uc, sc); 253} 254 255void test_lock (void) 256{ 257 sc = __sync_lock_test_and_set (&sc, 1); 258 uc = __sync_lock_test_and_set (&uc, 1); 259 ss = __sync_lock_test_and_set (&ss, 1); 260 us = __sync_lock_test_and_set (&us, 1); 261 si = __sync_lock_test_and_set (&si, 1); 262 ui = __sync_lock_test_and_set (&ui, 1); 263 sl = __sync_lock_test_and_set (&sl, 1); 264 ul = __sync_lock_test_and_set (&ul, 1); 265 sll = __sync_lock_test_and_set (&sll, 1); 266 ull = __sync_lock_test_and_set (&ull, 1); 267 268 __sync_synchronize (); 269 270 __sync_lock_release (&sc); 271 __sync_lock_release (&uc); 272 __sync_lock_release (&ss); 273 __sync_lock_release (&us); 274 __sync_lock_release (&si); 275 __sync_lock_release (&ui); 276 __sync_lock_release (&sl); 277 __sync_lock_release (&ul); 278 __sync_lock_release (&sll); 279 __sync_lock_release (&ull); 280} 281