1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68000 --code-model=large | FileCheck %s --check-prefix=NO-ATOMIC
3 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68010 --code-model=large | FileCheck %s --check-prefix=NO-ATOMIC
4 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68000 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=NO-ATOMIC-PIC
5 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68010 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=NO-ATOMIC-PIC
6 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68020 --code-model=large | FileCheck %s --check-prefix=ATOMIC
7 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68030 --code-model=large | FileCheck %s --check-prefix=ATOMIC
8 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68040 --code-model=large | FileCheck %s --check-prefix=ATOMIC
9 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68020 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC
10 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68030 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC
11 ; RUN: llc %s -o - -mtriple=m68k -mcpu=M68040 --code-model=large --relocation-model=pic | FileCheck %s --check-prefix=ATOMIC-PIC
13 define i8 @atomic_load_i8_unordered(ptr %a) nounwind {
14 ; NO-ATOMIC-LABEL: atomic_load_i8_unordered:
16 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
17 ; NO-ATOMIC-NEXT: move.b (%a0), %d0
20 ; NO-ATOMIC-PIC-LABEL: atomic_load_i8_unordered:
21 ; NO-ATOMIC-PIC: ; %bb.0:
22 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
23 ; NO-ATOMIC-PIC-NEXT: move.b (%a0), %d0
24 ; NO-ATOMIC-PIC-NEXT: rts
26 ; ATOMIC-LABEL: atomic_load_i8_unordered:
28 ; ATOMIC-NEXT: move.l (4,%sp), %a0
29 ; ATOMIC-NEXT: move.b (%a0), %d0
32 ; ATOMIC-PIC-LABEL: atomic_load_i8_unordered:
33 ; ATOMIC-PIC: ; %bb.0:
34 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
35 ; ATOMIC-PIC-NEXT: move.b (%a0), %d0
36 ; ATOMIC-PIC-NEXT: rts
37 %1 = load atomic i8, ptr %a unordered, align 1
41 define i8 @atomic_load_i8_monotonic(ptr %a) nounwind {
42 ; NO-ATOMIC-LABEL: atomic_load_i8_monotonic:
44 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
45 ; NO-ATOMIC-NEXT: move.b (%a0), %d0
48 ; NO-ATOMIC-PIC-LABEL: atomic_load_i8_monotonic:
49 ; NO-ATOMIC-PIC: ; %bb.0:
50 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
51 ; NO-ATOMIC-PIC-NEXT: move.b (%a0), %d0
52 ; NO-ATOMIC-PIC-NEXT: rts
54 ; ATOMIC-LABEL: atomic_load_i8_monotonic:
56 ; ATOMIC-NEXT: move.l (4,%sp), %a0
57 ; ATOMIC-NEXT: move.b (%a0), %d0
60 ; ATOMIC-PIC-LABEL: atomic_load_i8_monotonic:
61 ; ATOMIC-PIC: ; %bb.0:
62 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
63 ; ATOMIC-PIC-NEXT: move.b (%a0), %d0
64 ; ATOMIC-PIC-NEXT: rts
65 %1 = load atomic i8, ptr %a monotonic, align 1
69 define i8 @atomic_load_i8_acquire(ptr %a) nounwind {
70 ; NO-ATOMIC-LABEL: atomic_load_i8_acquire:
72 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
73 ; NO-ATOMIC-NEXT: move.b (%a0), %d0
76 ; NO-ATOMIC-PIC-LABEL: atomic_load_i8_acquire:
77 ; NO-ATOMIC-PIC: ; %bb.0:
78 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
79 ; NO-ATOMIC-PIC-NEXT: move.b (%a0), %d0
80 ; NO-ATOMIC-PIC-NEXT: rts
82 ; ATOMIC-LABEL: atomic_load_i8_acquire:
84 ; ATOMIC-NEXT: move.l (4,%sp), %a0
85 ; ATOMIC-NEXT: move.b (%a0), %d0
88 ; ATOMIC-PIC-LABEL: atomic_load_i8_acquire:
89 ; ATOMIC-PIC: ; %bb.0:
90 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
91 ; ATOMIC-PIC-NEXT: move.b (%a0), %d0
92 ; ATOMIC-PIC-NEXT: rts
93 %1 = load atomic i8, ptr %a acquire, align 1
97 define i8 @atomic_load_i8_seq_cst(ptr %a) nounwind {
98 ; NO-ATOMIC-LABEL: atomic_load_i8_seq_cst:
100 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
101 ; NO-ATOMIC-NEXT: move.b (%a0), %d0
102 ; NO-ATOMIC-NEXT: rts
104 ; NO-ATOMIC-PIC-LABEL: atomic_load_i8_seq_cst:
105 ; NO-ATOMIC-PIC: ; %bb.0:
106 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
107 ; NO-ATOMIC-PIC-NEXT: move.b (%a0), %d0
108 ; NO-ATOMIC-PIC-NEXT: rts
110 ; ATOMIC-LABEL: atomic_load_i8_seq_cst:
112 ; ATOMIC-NEXT: move.l (4,%sp), %a0
113 ; ATOMIC-NEXT: move.b (%a0), %d0
116 ; ATOMIC-PIC-LABEL: atomic_load_i8_seq_cst:
117 ; ATOMIC-PIC: ; %bb.0:
118 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
119 ; ATOMIC-PIC-NEXT: move.b (%a0), %d0
120 ; ATOMIC-PIC-NEXT: rts
121 %1 = load atomic i8, ptr %a seq_cst, align 1
125 define i16 @atomic_load_i16_unordered(ptr %a) nounwind {
126 ; NO-ATOMIC-LABEL: atomic_load_i16_unordered:
127 ; NO-ATOMIC: ; %bb.0:
128 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
129 ; NO-ATOMIC-NEXT: move.w (%a0), %d0
130 ; NO-ATOMIC-NEXT: rts
132 ; NO-ATOMIC-PIC-LABEL: atomic_load_i16_unordered:
133 ; NO-ATOMIC-PIC: ; %bb.0:
134 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
135 ; NO-ATOMIC-PIC-NEXT: move.w (%a0), %d0
136 ; NO-ATOMIC-PIC-NEXT: rts
138 ; ATOMIC-LABEL: atomic_load_i16_unordered:
140 ; ATOMIC-NEXT: move.l (4,%sp), %a0
141 ; ATOMIC-NEXT: move.w (%a0), %d0
144 ; ATOMIC-PIC-LABEL: atomic_load_i16_unordered:
145 ; ATOMIC-PIC: ; %bb.0:
146 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
147 ; ATOMIC-PIC-NEXT: move.w (%a0), %d0
148 ; ATOMIC-PIC-NEXT: rts
149 %1 = load atomic i16, ptr %a unordered, align 2
153 define i16 @atomic_load_i16_monotonic(ptr %a) nounwind {
154 ; NO-ATOMIC-LABEL: atomic_load_i16_monotonic:
155 ; NO-ATOMIC: ; %bb.0:
156 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
157 ; NO-ATOMIC-NEXT: move.w (%a0), %d0
158 ; NO-ATOMIC-NEXT: rts
160 ; NO-ATOMIC-PIC-LABEL: atomic_load_i16_monotonic:
161 ; NO-ATOMIC-PIC: ; %bb.0:
162 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
163 ; NO-ATOMIC-PIC-NEXT: move.w (%a0), %d0
164 ; NO-ATOMIC-PIC-NEXT: rts
166 ; ATOMIC-LABEL: atomic_load_i16_monotonic:
168 ; ATOMIC-NEXT: move.l (4,%sp), %a0
169 ; ATOMIC-NEXT: move.w (%a0), %d0
172 ; ATOMIC-PIC-LABEL: atomic_load_i16_monotonic:
173 ; ATOMIC-PIC: ; %bb.0:
174 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
175 ; ATOMIC-PIC-NEXT: move.w (%a0), %d0
176 ; ATOMIC-PIC-NEXT: rts
177 %1 = load atomic i16, ptr %a monotonic, align 2
181 define i16 @atomic_load_i16_acquire(ptr %a) nounwind {
182 ; NO-ATOMIC-LABEL: atomic_load_i16_acquire:
183 ; NO-ATOMIC: ; %bb.0:
184 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
185 ; NO-ATOMIC-NEXT: move.w (%a0), %d0
186 ; NO-ATOMIC-NEXT: rts
188 ; NO-ATOMIC-PIC-LABEL: atomic_load_i16_acquire:
189 ; NO-ATOMIC-PIC: ; %bb.0:
190 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
191 ; NO-ATOMIC-PIC-NEXT: move.w (%a0), %d0
192 ; NO-ATOMIC-PIC-NEXT: rts
194 ; ATOMIC-LABEL: atomic_load_i16_acquire:
196 ; ATOMIC-NEXT: move.l (4,%sp), %a0
197 ; ATOMIC-NEXT: move.w (%a0), %d0
200 ; ATOMIC-PIC-LABEL: atomic_load_i16_acquire:
201 ; ATOMIC-PIC: ; %bb.0:
202 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
203 ; ATOMIC-PIC-NEXT: move.w (%a0), %d0
204 ; ATOMIC-PIC-NEXT: rts
205 %1 = load atomic i16, ptr %a acquire, align 2
209 define i16 @atomic_load_i16_seq_cst(ptr %a) nounwind {
210 ; NO-ATOMIC-LABEL: atomic_load_i16_seq_cst:
211 ; NO-ATOMIC: ; %bb.0:
212 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
213 ; NO-ATOMIC-NEXT: move.w (%a0), %d0
214 ; NO-ATOMIC-NEXT: rts
216 ; NO-ATOMIC-PIC-LABEL: atomic_load_i16_seq_cst:
217 ; NO-ATOMIC-PIC: ; %bb.0:
218 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
219 ; NO-ATOMIC-PIC-NEXT: move.w (%a0), %d0
220 ; NO-ATOMIC-PIC-NEXT: rts
222 ; ATOMIC-LABEL: atomic_load_i16_seq_cst:
224 ; ATOMIC-NEXT: move.l (4,%sp), %a0
225 ; ATOMIC-NEXT: move.w (%a0), %d0
228 ; ATOMIC-PIC-LABEL: atomic_load_i16_seq_cst:
229 ; ATOMIC-PIC: ; %bb.0:
230 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
231 ; ATOMIC-PIC-NEXT: move.w (%a0), %d0
232 ; ATOMIC-PIC-NEXT: rts
233 %1 = load atomic i16, ptr %a seq_cst, align 2
237 define i32 @atomic_load_i32_unordered(ptr %a) nounwind {
238 ; NO-ATOMIC-LABEL: atomic_load_i32_unordered:
239 ; NO-ATOMIC: ; %bb.0:
240 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
241 ; NO-ATOMIC-NEXT: move.l (%a0), %d0
242 ; NO-ATOMIC-NEXT: rts
244 ; NO-ATOMIC-PIC-LABEL: atomic_load_i32_unordered:
245 ; NO-ATOMIC-PIC: ; %bb.0:
246 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
247 ; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0
248 ; NO-ATOMIC-PIC-NEXT: rts
250 ; ATOMIC-LABEL: atomic_load_i32_unordered:
252 ; ATOMIC-NEXT: move.l (4,%sp), %a0
253 ; ATOMIC-NEXT: move.l (%a0), %d0
256 ; ATOMIC-PIC-LABEL: atomic_load_i32_unordered:
257 ; ATOMIC-PIC: ; %bb.0:
258 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
259 ; ATOMIC-PIC-NEXT: move.l (%a0), %d0
260 ; ATOMIC-PIC-NEXT: rts
261 %1 = load atomic i32, ptr %a unordered, align 4
265 define i32 @atomic_load_i32_monotonic(ptr %a) nounwind {
266 ; NO-ATOMIC-LABEL: atomic_load_i32_monotonic:
267 ; NO-ATOMIC: ; %bb.0:
268 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
269 ; NO-ATOMIC-NEXT: move.l (%a0), %d0
270 ; NO-ATOMIC-NEXT: rts
272 ; NO-ATOMIC-PIC-LABEL: atomic_load_i32_monotonic:
273 ; NO-ATOMIC-PIC: ; %bb.0:
274 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
275 ; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0
276 ; NO-ATOMIC-PIC-NEXT: rts
278 ; ATOMIC-LABEL: atomic_load_i32_monotonic:
280 ; ATOMIC-NEXT: move.l (4,%sp), %a0
281 ; ATOMIC-NEXT: move.l (%a0), %d0
284 ; ATOMIC-PIC-LABEL: atomic_load_i32_monotonic:
285 ; ATOMIC-PIC: ; %bb.0:
286 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
287 ; ATOMIC-PIC-NEXT: move.l (%a0), %d0
288 ; ATOMIC-PIC-NEXT: rts
289 %1 = load atomic i32, ptr %a monotonic, align 4
293 define i32 @atomic_load_i32_acquire(ptr %a) nounwind {
294 ; NO-ATOMIC-LABEL: atomic_load_i32_acquire:
295 ; NO-ATOMIC: ; %bb.0:
296 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
297 ; NO-ATOMIC-NEXT: move.l (%a0), %d0
298 ; NO-ATOMIC-NEXT: rts
300 ; NO-ATOMIC-PIC-LABEL: atomic_load_i32_acquire:
301 ; NO-ATOMIC-PIC: ; %bb.0:
302 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
303 ; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0
304 ; NO-ATOMIC-PIC-NEXT: rts
306 ; ATOMIC-LABEL: atomic_load_i32_acquire:
308 ; ATOMIC-NEXT: move.l (4,%sp), %a0
309 ; ATOMIC-NEXT: move.l (%a0), %d0
312 ; ATOMIC-PIC-LABEL: atomic_load_i32_acquire:
313 ; ATOMIC-PIC: ; %bb.0:
314 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
315 ; ATOMIC-PIC-NEXT: move.l (%a0), %d0
316 ; ATOMIC-PIC-NEXT: rts
317 %1 = load atomic i32, ptr %a acquire, align 4
321 define i32 @atomic_load_i32_seq_cst(ptr %a) nounwind {
322 ; NO-ATOMIC-LABEL: atomic_load_i32_seq_cst:
323 ; NO-ATOMIC: ; %bb.0:
324 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
325 ; NO-ATOMIC-NEXT: move.l (%a0), %d0
326 ; NO-ATOMIC-NEXT: rts
328 ; NO-ATOMIC-PIC-LABEL: atomic_load_i32_seq_cst:
329 ; NO-ATOMIC-PIC: ; %bb.0:
330 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
331 ; NO-ATOMIC-PIC-NEXT: move.l (%a0), %d0
332 ; NO-ATOMIC-PIC-NEXT: rts
334 ; ATOMIC-LABEL: atomic_load_i32_seq_cst:
336 ; ATOMIC-NEXT: move.l (4,%sp), %a0
337 ; ATOMIC-NEXT: move.l (%a0), %d0
340 ; ATOMIC-PIC-LABEL: atomic_load_i32_seq_cst:
341 ; ATOMIC-PIC: ; %bb.0:
342 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
343 ; ATOMIC-PIC-NEXT: move.l (%a0), %d0
344 ; ATOMIC-PIC-NEXT: rts
345 %1 = load atomic i32, ptr %a seq_cst, align 4
349 define i64 @atomic_load_i64_unordered(ptr %a) nounwind {
350 ; NO-ATOMIC-LABEL: atomic_load_i64_unordered:
351 ; NO-ATOMIC: ; %bb.0:
352 ; NO-ATOMIC-NEXT: suba.l #12, %sp
353 ; NO-ATOMIC-NEXT: move.l #0, (4,%sp)
354 ; NO-ATOMIC-NEXT: move.l (16,%sp), (%sp)
355 ; NO-ATOMIC-NEXT: jsr __atomic_load_8
356 ; NO-ATOMIC-NEXT: adda.l #12, %sp
357 ; NO-ATOMIC-NEXT: rts
359 ; NO-ATOMIC-PIC-LABEL: atomic_load_i64_unordered:
360 ; NO-ATOMIC-PIC: ; %bb.0:
361 ; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp
362 ; NO-ATOMIC-PIC-NEXT: move.l #0, (4,%sp)
363 ; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp)
364 ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc)
365 ; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp
366 ; NO-ATOMIC-PIC-NEXT: rts
368 ; ATOMIC-LABEL: atomic_load_i64_unordered:
370 ; ATOMIC-NEXT: suba.l #12, %sp
371 ; ATOMIC-NEXT: move.l #0, (4,%sp)
372 ; ATOMIC-NEXT: move.l (16,%sp), (%sp)
373 ; ATOMIC-NEXT: jsr __atomic_load_8
374 ; ATOMIC-NEXT: adda.l #12, %sp
377 ; ATOMIC-PIC-LABEL: atomic_load_i64_unordered:
378 ; ATOMIC-PIC: ; %bb.0:
379 ; ATOMIC-PIC-NEXT: suba.l #12, %sp
380 ; ATOMIC-PIC-NEXT: move.l #0, (4,%sp)
381 ; ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp)
382 ; ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc)
383 ; ATOMIC-PIC-NEXT: adda.l #12, %sp
384 ; ATOMIC-PIC-NEXT: rts
385 %1 = load atomic i64, ptr %a unordered, align 8
389 define i64 @atomic_load_i64_monotonic(ptr %a) nounwind {
390 ; NO-ATOMIC-LABEL: atomic_load_i64_monotonic:
391 ; NO-ATOMIC: ; %bb.0:
392 ; NO-ATOMIC-NEXT: suba.l #12, %sp
393 ; NO-ATOMIC-NEXT: move.l #0, (4,%sp)
394 ; NO-ATOMIC-NEXT: move.l (16,%sp), (%sp)
395 ; NO-ATOMIC-NEXT: jsr __atomic_load_8
396 ; NO-ATOMIC-NEXT: adda.l #12, %sp
397 ; NO-ATOMIC-NEXT: rts
399 ; NO-ATOMIC-PIC-LABEL: atomic_load_i64_monotonic:
400 ; NO-ATOMIC-PIC: ; %bb.0:
401 ; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp
402 ; NO-ATOMIC-PIC-NEXT: move.l #0, (4,%sp)
403 ; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp)
404 ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc)
405 ; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp
406 ; NO-ATOMIC-PIC-NEXT: rts
408 ; ATOMIC-LABEL: atomic_load_i64_monotonic:
410 ; ATOMIC-NEXT: suba.l #12, %sp
411 ; ATOMIC-NEXT: move.l #0, (4,%sp)
412 ; ATOMIC-NEXT: move.l (16,%sp), (%sp)
413 ; ATOMIC-NEXT: jsr __atomic_load_8
414 ; ATOMIC-NEXT: adda.l #12, %sp
417 ; ATOMIC-PIC-LABEL: atomic_load_i64_monotonic:
418 ; ATOMIC-PIC: ; %bb.0:
419 ; ATOMIC-PIC-NEXT: suba.l #12, %sp
420 ; ATOMIC-PIC-NEXT: move.l #0, (4,%sp)
421 ; ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp)
422 ; ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc)
423 ; ATOMIC-PIC-NEXT: adda.l #12, %sp
424 ; ATOMIC-PIC-NEXT: rts
425 %1 = load atomic i64, ptr %a monotonic, align 8
429 define i64 @atomic_load_i64_acquire(ptr %a) nounwind {
430 ; NO-ATOMIC-LABEL: atomic_load_i64_acquire:
431 ; NO-ATOMIC: ; %bb.0:
432 ; NO-ATOMIC-NEXT: suba.l #12, %sp
433 ; NO-ATOMIC-NEXT: move.l #2, (4,%sp)
434 ; NO-ATOMIC-NEXT: move.l (16,%sp), (%sp)
435 ; NO-ATOMIC-NEXT: jsr __atomic_load_8
436 ; NO-ATOMIC-NEXT: adda.l #12, %sp
437 ; NO-ATOMIC-NEXT: rts
439 ; NO-ATOMIC-PIC-LABEL: atomic_load_i64_acquire:
440 ; NO-ATOMIC-PIC: ; %bb.0:
441 ; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp
442 ; NO-ATOMIC-PIC-NEXT: move.l #2, (4,%sp)
443 ; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp)
444 ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc)
445 ; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp
446 ; NO-ATOMIC-PIC-NEXT: rts
448 ; ATOMIC-LABEL: atomic_load_i64_acquire:
450 ; ATOMIC-NEXT: suba.l #12, %sp
451 ; ATOMIC-NEXT: move.l #2, (4,%sp)
452 ; ATOMIC-NEXT: move.l (16,%sp), (%sp)
453 ; ATOMIC-NEXT: jsr __atomic_load_8
454 ; ATOMIC-NEXT: adda.l #12, %sp
457 ; ATOMIC-PIC-LABEL: atomic_load_i64_acquire:
458 ; ATOMIC-PIC: ; %bb.0:
459 ; ATOMIC-PIC-NEXT: suba.l #12, %sp
460 ; ATOMIC-PIC-NEXT: move.l #2, (4,%sp)
461 ; ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp)
462 ; ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc)
463 ; ATOMIC-PIC-NEXT: adda.l #12, %sp
464 ; ATOMIC-PIC-NEXT: rts
465 %1 = load atomic i64, ptr %a acquire, align 8
469 define i64 @atomic_load_i64_seq_cst(ptr %a) nounwind {
470 ; NO-ATOMIC-LABEL: atomic_load_i64_seq_cst:
471 ; NO-ATOMIC: ; %bb.0:
472 ; NO-ATOMIC-NEXT: suba.l #12, %sp
473 ; NO-ATOMIC-NEXT: move.l #5, (4,%sp)
474 ; NO-ATOMIC-NEXT: move.l (16,%sp), (%sp)
475 ; NO-ATOMIC-NEXT: jsr __atomic_load_8
476 ; NO-ATOMIC-NEXT: adda.l #12, %sp
477 ; NO-ATOMIC-NEXT: rts
479 ; NO-ATOMIC-PIC-LABEL: atomic_load_i64_seq_cst:
480 ; NO-ATOMIC-PIC: ; %bb.0:
481 ; NO-ATOMIC-PIC-NEXT: suba.l #12, %sp
482 ; NO-ATOMIC-PIC-NEXT: move.l #5, (4,%sp)
483 ; NO-ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp)
484 ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc)
485 ; NO-ATOMIC-PIC-NEXT: adda.l #12, %sp
486 ; NO-ATOMIC-PIC-NEXT: rts
488 ; ATOMIC-LABEL: atomic_load_i64_seq_cst:
490 ; ATOMIC-NEXT: suba.l #12, %sp
491 ; ATOMIC-NEXT: move.l #5, (4,%sp)
492 ; ATOMIC-NEXT: move.l (16,%sp), (%sp)
493 ; ATOMIC-NEXT: jsr __atomic_load_8
494 ; ATOMIC-NEXT: adda.l #12, %sp
497 ; ATOMIC-PIC-LABEL: atomic_load_i64_seq_cst:
498 ; ATOMIC-PIC: ; %bb.0:
499 ; ATOMIC-PIC-NEXT: suba.l #12, %sp
500 ; ATOMIC-PIC-NEXT: move.l #5, (4,%sp)
501 ; ATOMIC-PIC-NEXT: move.l (16,%sp), (%sp)
502 ; ATOMIC-PIC-NEXT: jsr (__atomic_load_8@PLT,%pc)
503 ; ATOMIC-PIC-NEXT: adda.l #12, %sp
504 ; ATOMIC-PIC-NEXT: rts
505 %1 = load atomic i64, ptr %a seq_cst, align 8
509 define void @atomic_store_i8_unordered(ptr %a, i8 %val) nounwind {
510 ; NO-ATOMIC-LABEL: atomic_store_i8_unordered:
511 ; NO-ATOMIC: ; %bb.0:
512 ; NO-ATOMIC-NEXT: move.b (11,%sp), %d0
513 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
514 ; NO-ATOMIC-NEXT: move.b %d0, (%a0)
515 ; NO-ATOMIC-NEXT: rts
517 ; NO-ATOMIC-PIC-LABEL: atomic_store_i8_unordered:
518 ; NO-ATOMIC-PIC: ; %bb.0:
519 ; NO-ATOMIC-PIC-NEXT: move.b (11,%sp), %d0
520 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
521 ; NO-ATOMIC-PIC-NEXT: move.b %d0, (%a0)
522 ; NO-ATOMIC-PIC-NEXT: rts
524 ; ATOMIC-LABEL: atomic_store_i8_unordered:
526 ; ATOMIC-NEXT: move.b (11,%sp), %d0
527 ; ATOMIC-NEXT: move.l (4,%sp), %a0
528 ; ATOMIC-NEXT: move.b %d0, (%a0)
531 ; ATOMIC-PIC-LABEL: atomic_store_i8_unordered:
532 ; ATOMIC-PIC: ; %bb.0:
533 ; ATOMIC-PIC-NEXT: move.b (11,%sp), %d0
534 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
535 ; ATOMIC-PIC-NEXT: move.b %d0, (%a0)
536 ; ATOMIC-PIC-NEXT: rts
537 store atomic i8 %val, ptr %a unordered, align 1
541 define void @atomic_store_i8_monotonic(ptr %a, i8 %val) nounwind {
542 ; NO-ATOMIC-LABEL: atomic_store_i8_monotonic:
543 ; NO-ATOMIC: ; %bb.0:
544 ; NO-ATOMIC-NEXT: move.b (11,%sp), %d0
545 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
546 ; NO-ATOMIC-NEXT: move.b %d0, (%a0)
547 ; NO-ATOMIC-NEXT: rts
549 ; NO-ATOMIC-PIC-LABEL: atomic_store_i8_monotonic:
550 ; NO-ATOMIC-PIC: ; %bb.0:
551 ; NO-ATOMIC-PIC-NEXT: move.b (11,%sp), %d0
552 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
553 ; NO-ATOMIC-PIC-NEXT: move.b %d0, (%a0)
554 ; NO-ATOMIC-PIC-NEXT: rts
556 ; ATOMIC-LABEL: atomic_store_i8_monotonic:
558 ; ATOMIC-NEXT: move.b (11,%sp), %d0
559 ; ATOMIC-NEXT: move.l (4,%sp), %a0
560 ; ATOMIC-NEXT: move.b %d0, (%a0)
563 ; ATOMIC-PIC-LABEL: atomic_store_i8_monotonic:
564 ; ATOMIC-PIC: ; %bb.0:
565 ; ATOMIC-PIC-NEXT: move.b (11,%sp), %d0
566 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
567 ; ATOMIC-PIC-NEXT: move.b %d0, (%a0)
568 ; ATOMIC-PIC-NEXT: rts
569 store atomic i8 %val, ptr %a monotonic, align 1
573 define void @atomic_store_i8_release(ptr %a, i8 %val) nounwind {
574 ; NO-ATOMIC-LABEL: atomic_store_i8_release:
575 ; NO-ATOMIC: ; %bb.0:
576 ; NO-ATOMIC-NEXT: move.b (11,%sp), %d0
577 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
578 ; NO-ATOMIC-NEXT: move.b %d0, (%a0)
579 ; NO-ATOMIC-NEXT: rts
581 ; NO-ATOMIC-PIC-LABEL: atomic_store_i8_release:
582 ; NO-ATOMIC-PIC: ; %bb.0:
583 ; NO-ATOMIC-PIC-NEXT: move.b (11,%sp), %d0
584 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
585 ; NO-ATOMIC-PIC-NEXT: move.b %d0, (%a0)
586 ; NO-ATOMIC-PIC-NEXT: rts
588 ; ATOMIC-LABEL: atomic_store_i8_release:
590 ; ATOMIC-NEXT: move.b (11,%sp), %d0
591 ; ATOMIC-NEXT: move.l (4,%sp), %a0
592 ; ATOMIC-NEXT: move.b %d0, (%a0)
595 ; ATOMIC-PIC-LABEL: atomic_store_i8_release:
596 ; ATOMIC-PIC: ; %bb.0:
597 ; ATOMIC-PIC-NEXT: move.b (11,%sp), %d0
598 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
599 ; ATOMIC-PIC-NEXT: move.b %d0, (%a0)
600 ; ATOMIC-PIC-NEXT: rts
601 store atomic i8 %val, ptr %a release, align 1
605 define void @atomic_store_i8_seq_cst(ptr %a, i8 %val) nounwind {
606 ; NO-ATOMIC-LABEL: atomic_store_i8_seq_cst:
607 ; NO-ATOMIC: ; %bb.0:
608 ; NO-ATOMIC-NEXT: move.b (11,%sp), %d0
609 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
610 ; NO-ATOMIC-NEXT: move.b %d0, (%a0)
611 ; NO-ATOMIC-NEXT: rts
613 ; NO-ATOMIC-PIC-LABEL: atomic_store_i8_seq_cst:
614 ; NO-ATOMIC-PIC: ; %bb.0:
615 ; NO-ATOMIC-PIC-NEXT: move.b (11,%sp), %d0
616 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
617 ; NO-ATOMIC-PIC-NEXT: move.b %d0, (%a0)
618 ; NO-ATOMIC-PIC-NEXT: rts
620 ; ATOMIC-LABEL: atomic_store_i8_seq_cst:
622 ; ATOMIC-NEXT: move.b (11,%sp), %d0
623 ; ATOMIC-NEXT: move.l (4,%sp), %a0
624 ; ATOMIC-NEXT: move.b %d0, (%a0)
627 ; ATOMIC-PIC-LABEL: atomic_store_i8_seq_cst:
628 ; ATOMIC-PIC: ; %bb.0:
629 ; ATOMIC-PIC-NEXT: move.b (11,%sp), %d0
630 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
631 ; ATOMIC-PIC-NEXT: move.b %d0, (%a0)
632 ; ATOMIC-PIC-NEXT: rts
633 store atomic i8 %val, ptr %a seq_cst, align 1
637 define void @atomic_store_i16_unordered(ptr %a, i16 %val) nounwind {
638 ; NO-ATOMIC-LABEL: atomic_store_i16_unordered:
639 ; NO-ATOMIC: ; %bb.0:
640 ; NO-ATOMIC-NEXT: move.w (10,%sp), %d0
641 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
642 ; NO-ATOMIC-NEXT: move.w %d0, (%a0)
643 ; NO-ATOMIC-NEXT: rts
645 ; NO-ATOMIC-PIC-LABEL: atomic_store_i16_unordered:
646 ; NO-ATOMIC-PIC: ; %bb.0:
647 ; NO-ATOMIC-PIC-NEXT: move.w (10,%sp), %d0
648 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
649 ; NO-ATOMIC-PIC-NEXT: move.w %d0, (%a0)
650 ; NO-ATOMIC-PIC-NEXT: rts
652 ; ATOMIC-LABEL: atomic_store_i16_unordered:
654 ; ATOMIC-NEXT: move.w (10,%sp), %d0
655 ; ATOMIC-NEXT: move.l (4,%sp), %a0
656 ; ATOMIC-NEXT: move.w %d0, (%a0)
659 ; ATOMIC-PIC-LABEL: atomic_store_i16_unordered:
660 ; ATOMIC-PIC: ; %bb.0:
661 ; ATOMIC-PIC-NEXT: move.w (10,%sp), %d0
662 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
663 ; ATOMIC-PIC-NEXT: move.w %d0, (%a0)
664 ; ATOMIC-PIC-NEXT: rts
665 store atomic i16 %val, ptr %a unordered, align 2
669 define void @atomic_store_i16_monotonic(ptr %a, i16 %val) nounwind {
670 ; NO-ATOMIC-LABEL: atomic_store_i16_monotonic:
671 ; NO-ATOMIC: ; %bb.0:
672 ; NO-ATOMIC-NEXT: move.w (10,%sp), %d0
673 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
674 ; NO-ATOMIC-NEXT: move.w %d0, (%a0)
675 ; NO-ATOMIC-NEXT: rts
677 ; NO-ATOMIC-PIC-LABEL: atomic_store_i16_monotonic:
678 ; NO-ATOMIC-PIC: ; %bb.0:
679 ; NO-ATOMIC-PIC-NEXT: move.w (10,%sp), %d0
680 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
681 ; NO-ATOMIC-PIC-NEXT: move.w %d0, (%a0)
682 ; NO-ATOMIC-PIC-NEXT: rts
684 ; ATOMIC-LABEL: atomic_store_i16_monotonic:
686 ; ATOMIC-NEXT: move.w (10,%sp), %d0
687 ; ATOMIC-NEXT: move.l (4,%sp), %a0
688 ; ATOMIC-NEXT: move.w %d0, (%a0)
691 ; ATOMIC-PIC-LABEL: atomic_store_i16_monotonic:
692 ; ATOMIC-PIC: ; %bb.0:
693 ; ATOMIC-PIC-NEXT: move.w (10,%sp), %d0
694 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
695 ; ATOMIC-PIC-NEXT: move.w %d0, (%a0)
696 ; ATOMIC-PIC-NEXT: rts
697 store atomic i16 %val, ptr %a monotonic, align 2
701 define void @atomic_store_i16_release(ptr %a, i16 %val) nounwind {
702 ; NO-ATOMIC-LABEL: atomic_store_i16_release:
703 ; NO-ATOMIC: ; %bb.0:
704 ; NO-ATOMIC-NEXT: move.w (10,%sp), %d0
705 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
706 ; NO-ATOMIC-NEXT: move.w %d0, (%a0)
707 ; NO-ATOMIC-NEXT: rts
709 ; NO-ATOMIC-PIC-LABEL: atomic_store_i16_release:
710 ; NO-ATOMIC-PIC: ; %bb.0:
711 ; NO-ATOMIC-PIC-NEXT: move.w (10,%sp), %d0
712 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
713 ; NO-ATOMIC-PIC-NEXT: move.w %d0, (%a0)
714 ; NO-ATOMIC-PIC-NEXT: rts
716 ; ATOMIC-LABEL: atomic_store_i16_release:
718 ; ATOMIC-NEXT: move.w (10,%sp), %d0
719 ; ATOMIC-NEXT: move.l (4,%sp), %a0
720 ; ATOMIC-NEXT: move.w %d0, (%a0)
723 ; ATOMIC-PIC-LABEL: atomic_store_i16_release:
724 ; ATOMIC-PIC: ; %bb.0:
725 ; ATOMIC-PIC-NEXT: move.w (10,%sp), %d0
726 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
727 ; ATOMIC-PIC-NEXT: move.w %d0, (%a0)
728 ; ATOMIC-PIC-NEXT: rts
729 store atomic i16 %val, ptr %a release, align 2
733 define void @atomic_store_i16_seq_cst(ptr %a, i16 %val) nounwind {
734 ; NO-ATOMIC-LABEL: atomic_store_i16_seq_cst:
735 ; NO-ATOMIC: ; %bb.0:
736 ; NO-ATOMIC-NEXT: move.w (10,%sp), %d0
737 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
738 ; NO-ATOMIC-NEXT: move.w %d0, (%a0)
739 ; NO-ATOMIC-NEXT: rts
741 ; NO-ATOMIC-PIC-LABEL: atomic_store_i16_seq_cst:
742 ; NO-ATOMIC-PIC: ; %bb.0:
743 ; NO-ATOMIC-PIC-NEXT: move.w (10,%sp), %d0
744 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
745 ; NO-ATOMIC-PIC-NEXT: move.w %d0, (%a0)
746 ; NO-ATOMIC-PIC-NEXT: rts
748 ; ATOMIC-LABEL: atomic_store_i16_seq_cst:
750 ; ATOMIC-NEXT: move.w (10,%sp), %d0
751 ; ATOMIC-NEXT: move.l (4,%sp), %a0
752 ; ATOMIC-NEXT: move.w %d0, (%a0)
755 ; ATOMIC-PIC-LABEL: atomic_store_i16_seq_cst:
756 ; ATOMIC-PIC: ; %bb.0:
757 ; ATOMIC-PIC-NEXT: move.w (10,%sp), %d0
758 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
759 ; ATOMIC-PIC-NEXT: move.w %d0, (%a0)
760 ; ATOMIC-PIC-NEXT: rts
761 store atomic i16 %val, ptr %a seq_cst, align 2
765 define void @atomic_store_i32_unordered(ptr %a, i32 %val) nounwind {
766 ; NO-ATOMIC-LABEL: atomic_store_i32_unordered:
767 ; NO-ATOMIC: ; %bb.0:
768 ; NO-ATOMIC-NEXT: move.l (8,%sp), %d0
769 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
770 ; NO-ATOMIC-NEXT: move.l %d0, (%a0)
771 ; NO-ATOMIC-NEXT: rts
773 ; NO-ATOMIC-PIC-LABEL: atomic_store_i32_unordered:
774 ; NO-ATOMIC-PIC: ; %bb.0:
775 ; NO-ATOMIC-PIC-NEXT: move.l (8,%sp), %d0
776 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
777 ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%a0)
778 ; NO-ATOMIC-PIC-NEXT: rts
780 ; ATOMIC-LABEL: atomic_store_i32_unordered:
782 ; ATOMIC-NEXT: move.l (8,%sp), %d0
783 ; ATOMIC-NEXT: move.l (4,%sp), %a0
784 ; ATOMIC-NEXT: move.l %d0, (%a0)
787 ; ATOMIC-PIC-LABEL: atomic_store_i32_unordered:
788 ; ATOMIC-PIC: ; %bb.0:
789 ; ATOMIC-PIC-NEXT: move.l (8,%sp), %d0
790 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
791 ; ATOMIC-PIC-NEXT: move.l %d0, (%a0)
792 ; ATOMIC-PIC-NEXT: rts
793 store atomic i32 %val, ptr %a unordered, align 4
797 define void @atomic_store_i32_monotonic(ptr %a, i32 %val) nounwind {
798 ; NO-ATOMIC-LABEL: atomic_store_i32_monotonic:
799 ; NO-ATOMIC: ; %bb.0:
800 ; NO-ATOMIC-NEXT: move.l (8,%sp), %d0
801 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
802 ; NO-ATOMIC-NEXT: move.l %d0, (%a0)
803 ; NO-ATOMIC-NEXT: rts
805 ; NO-ATOMIC-PIC-LABEL: atomic_store_i32_monotonic:
806 ; NO-ATOMIC-PIC: ; %bb.0:
807 ; NO-ATOMIC-PIC-NEXT: move.l (8,%sp), %d0
808 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
809 ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%a0)
810 ; NO-ATOMIC-PIC-NEXT: rts
812 ; ATOMIC-LABEL: atomic_store_i32_monotonic:
814 ; ATOMIC-NEXT: move.l (8,%sp), %d0
815 ; ATOMIC-NEXT: move.l (4,%sp), %a0
816 ; ATOMIC-NEXT: move.l %d0, (%a0)
819 ; ATOMIC-PIC-LABEL: atomic_store_i32_monotonic:
820 ; ATOMIC-PIC: ; %bb.0:
821 ; ATOMIC-PIC-NEXT: move.l (8,%sp), %d0
822 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
823 ; ATOMIC-PIC-NEXT: move.l %d0, (%a0)
824 ; ATOMIC-PIC-NEXT: rts
825 store atomic i32 %val, ptr %a monotonic, align 4
829 define void @atomic_store_i32_release(ptr %a, i32 %val) nounwind {
830 ; NO-ATOMIC-LABEL: atomic_store_i32_release:
831 ; NO-ATOMIC: ; %bb.0:
832 ; NO-ATOMIC-NEXT: move.l (8,%sp), %d0
833 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
834 ; NO-ATOMIC-NEXT: move.l %d0, (%a0)
835 ; NO-ATOMIC-NEXT: rts
837 ; NO-ATOMIC-PIC-LABEL: atomic_store_i32_release:
838 ; NO-ATOMIC-PIC: ; %bb.0:
839 ; NO-ATOMIC-PIC-NEXT: move.l (8,%sp), %d0
840 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
841 ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%a0)
842 ; NO-ATOMIC-PIC-NEXT: rts
844 ; ATOMIC-LABEL: atomic_store_i32_release:
846 ; ATOMIC-NEXT: move.l (8,%sp), %d0
847 ; ATOMIC-NEXT: move.l (4,%sp), %a0
848 ; ATOMIC-NEXT: move.l %d0, (%a0)
851 ; ATOMIC-PIC-LABEL: atomic_store_i32_release:
852 ; ATOMIC-PIC: ; %bb.0:
853 ; ATOMIC-PIC-NEXT: move.l (8,%sp), %d0
854 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
855 ; ATOMIC-PIC-NEXT: move.l %d0, (%a0)
856 ; ATOMIC-PIC-NEXT: rts
857 store atomic i32 %val, ptr %a release, align 4
861 define void @atomic_store_i32_seq_cst(ptr %a, i32 %val) nounwind {
862 ; NO-ATOMIC-LABEL: atomic_store_i32_seq_cst:
863 ; NO-ATOMIC: ; %bb.0:
864 ; NO-ATOMIC-NEXT: move.l (8,%sp), %d0
865 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
866 ; NO-ATOMIC-NEXT: move.l %d0, (%a0)
867 ; NO-ATOMIC-NEXT: rts
869 ; NO-ATOMIC-PIC-LABEL: atomic_store_i32_seq_cst:
870 ; NO-ATOMIC-PIC: ; %bb.0:
871 ; NO-ATOMIC-PIC-NEXT: move.l (8,%sp), %d0
872 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
873 ; NO-ATOMIC-PIC-NEXT: move.l %d0, (%a0)
874 ; NO-ATOMIC-PIC-NEXT: rts
876 ; ATOMIC-LABEL: atomic_store_i32_seq_cst:
878 ; ATOMIC-NEXT: move.l (8,%sp), %d0
879 ; ATOMIC-NEXT: move.l (4,%sp), %a0
880 ; ATOMIC-NEXT: move.l %d0, (%a0)
883 ; ATOMIC-PIC-LABEL: atomic_store_i32_seq_cst:
884 ; ATOMIC-PIC: ; %bb.0:
885 ; ATOMIC-PIC-NEXT: move.l (8,%sp), %d0
886 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
887 ; ATOMIC-PIC-NEXT: move.l %d0, (%a0)
888 ; ATOMIC-PIC-NEXT: rts
889 store atomic i32 %val, ptr %a seq_cst, align 4
893 define void @atomic_store_i64_unordered(ptr %a, i64 %val) nounwind {
894 ; NO-ATOMIC-LABEL: atomic_store_i64_unordered:
895 ; NO-ATOMIC: ; %bb.0:
896 ; NO-ATOMIC-NEXT: suba.l #20, %sp
897 ; NO-ATOMIC-NEXT: move.l #0, (12,%sp)
898 ; NO-ATOMIC-NEXT: move.l (32,%sp), (8,%sp)
899 ; NO-ATOMIC-NEXT: move.l (28,%sp), (4,%sp)
900 ; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp)
901 ; NO-ATOMIC-NEXT: jsr __atomic_store_8
902 ; NO-ATOMIC-NEXT: adda.l #20, %sp
903 ; NO-ATOMIC-NEXT: rts
905 ; NO-ATOMIC-PIC-LABEL: atomic_store_i64_unordered:
906 ; NO-ATOMIC-PIC: ; %bb.0:
907 ; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp
908 ; NO-ATOMIC-PIC-NEXT: move.l #0, (12,%sp)
909 ; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp)
910 ; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp)
911 ; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp)
912 ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc)
913 ; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp
914 ; NO-ATOMIC-PIC-NEXT: rts
916 ; ATOMIC-LABEL: atomic_store_i64_unordered:
918 ; ATOMIC-NEXT: suba.l #20, %sp
919 ; ATOMIC-NEXT: move.l #0, (12,%sp)
920 ; ATOMIC-NEXT: move.l (32,%sp), (8,%sp)
921 ; ATOMIC-NEXT: move.l (28,%sp), (4,%sp)
922 ; ATOMIC-NEXT: move.l (24,%sp), (%sp)
923 ; ATOMIC-NEXT: jsr __atomic_store_8
924 ; ATOMIC-NEXT: adda.l #20, %sp
927 ; ATOMIC-PIC-LABEL: atomic_store_i64_unordered:
928 ; ATOMIC-PIC: ; %bb.0:
929 ; ATOMIC-PIC-NEXT: suba.l #20, %sp
930 ; ATOMIC-PIC-NEXT: move.l #0, (12,%sp)
931 ; ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp)
932 ; ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp)
933 ; ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp)
934 ; ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc)
935 ; ATOMIC-PIC-NEXT: adda.l #20, %sp
936 ; ATOMIC-PIC-NEXT: rts
937 store atomic i64 %val, ptr %a unordered, align 8
941 define void @atomic_store_i64_monotonic(ptr %a, i64 %val) nounwind {
942 ; NO-ATOMIC-LABEL: atomic_store_i64_monotonic:
943 ; NO-ATOMIC: ; %bb.0:
944 ; NO-ATOMIC-NEXT: suba.l #20, %sp
945 ; NO-ATOMIC-NEXT: move.l #0, (12,%sp)
946 ; NO-ATOMIC-NEXT: move.l (32,%sp), (8,%sp)
947 ; NO-ATOMIC-NEXT: move.l (28,%sp), (4,%sp)
948 ; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp)
949 ; NO-ATOMIC-NEXT: jsr __atomic_store_8
950 ; NO-ATOMIC-NEXT: adda.l #20, %sp
951 ; NO-ATOMIC-NEXT: rts
953 ; NO-ATOMIC-PIC-LABEL: atomic_store_i64_monotonic:
954 ; NO-ATOMIC-PIC: ; %bb.0:
955 ; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp
956 ; NO-ATOMIC-PIC-NEXT: move.l #0, (12,%sp)
957 ; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp)
958 ; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp)
959 ; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp)
960 ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc)
961 ; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp
962 ; NO-ATOMIC-PIC-NEXT: rts
964 ; ATOMIC-LABEL: atomic_store_i64_monotonic:
966 ; ATOMIC-NEXT: suba.l #20, %sp
967 ; ATOMIC-NEXT: move.l #0, (12,%sp)
968 ; ATOMIC-NEXT: move.l (32,%sp), (8,%sp)
969 ; ATOMIC-NEXT: move.l (28,%sp), (4,%sp)
970 ; ATOMIC-NEXT: move.l (24,%sp), (%sp)
971 ; ATOMIC-NEXT: jsr __atomic_store_8
972 ; ATOMIC-NEXT: adda.l #20, %sp
975 ; ATOMIC-PIC-LABEL: atomic_store_i64_monotonic:
976 ; ATOMIC-PIC: ; %bb.0:
977 ; ATOMIC-PIC-NEXT: suba.l #20, %sp
978 ; ATOMIC-PIC-NEXT: move.l #0, (12,%sp)
979 ; ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp)
980 ; ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp)
981 ; ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp)
982 ; ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc)
983 ; ATOMIC-PIC-NEXT: adda.l #20, %sp
984 ; ATOMIC-PIC-NEXT: rts
985 store atomic i64 %val, ptr %a monotonic, align 8
989 define void @atomic_store_i64_release(ptr %a, i64 %val) nounwind {
990 ; NO-ATOMIC-LABEL: atomic_store_i64_release:
991 ; NO-ATOMIC: ; %bb.0:
992 ; NO-ATOMIC-NEXT: suba.l #20, %sp
993 ; NO-ATOMIC-NEXT: move.l #3, (12,%sp)
994 ; NO-ATOMIC-NEXT: move.l (32,%sp), (8,%sp)
995 ; NO-ATOMIC-NEXT: move.l (28,%sp), (4,%sp)
996 ; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp)
997 ; NO-ATOMIC-NEXT: jsr __atomic_store_8
998 ; NO-ATOMIC-NEXT: adda.l #20, %sp
999 ; NO-ATOMIC-NEXT: rts
1001 ; NO-ATOMIC-PIC-LABEL: atomic_store_i64_release:
1002 ; NO-ATOMIC-PIC: ; %bb.0:
1003 ; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp
1004 ; NO-ATOMIC-PIC-NEXT: move.l #3, (12,%sp)
1005 ; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp)
1006 ; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp)
1007 ; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp)
1008 ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc)
1009 ; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp
1010 ; NO-ATOMIC-PIC-NEXT: rts
1012 ; ATOMIC-LABEL: atomic_store_i64_release:
1014 ; ATOMIC-NEXT: suba.l #20, %sp
1015 ; ATOMIC-NEXT: move.l #3, (12,%sp)
1016 ; ATOMIC-NEXT: move.l (32,%sp), (8,%sp)
1017 ; ATOMIC-NEXT: move.l (28,%sp), (4,%sp)
1018 ; ATOMIC-NEXT: move.l (24,%sp), (%sp)
1019 ; ATOMIC-NEXT: jsr __atomic_store_8
1020 ; ATOMIC-NEXT: adda.l #20, %sp
1023 ; ATOMIC-PIC-LABEL: atomic_store_i64_release:
1024 ; ATOMIC-PIC: ; %bb.0:
1025 ; ATOMIC-PIC-NEXT: suba.l #20, %sp
1026 ; ATOMIC-PIC-NEXT: move.l #3, (12,%sp)
1027 ; ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp)
1028 ; ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp)
1029 ; ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp)
1030 ; ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc)
1031 ; ATOMIC-PIC-NEXT: adda.l #20, %sp
1032 ; ATOMIC-PIC-NEXT: rts
1033 store atomic i64 %val, ptr %a release, align 8
1037 define void @atomic_store_i64_seq_cst(ptr %a, i64 %val) nounwind {
1038 ; NO-ATOMIC-LABEL: atomic_store_i64_seq_cst:
1039 ; NO-ATOMIC: ; %bb.0:
1040 ; NO-ATOMIC-NEXT: suba.l #20, %sp
1041 ; NO-ATOMIC-NEXT: move.l #5, (12,%sp)
1042 ; NO-ATOMIC-NEXT: move.l (32,%sp), (8,%sp)
1043 ; NO-ATOMIC-NEXT: move.l (28,%sp), (4,%sp)
1044 ; NO-ATOMIC-NEXT: move.l (24,%sp), (%sp)
1045 ; NO-ATOMIC-NEXT: jsr __atomic_store_8
1046 ; NO-ATOMIC-NEXT: adda.l #20, %sp
1047 ; NO-ATOMIC-NEXT: rts
1049 ; NO-ATOMIC-PIC-LABEL: atomic_store_i64_seq_cst:
1050 ; NO-ATOMIC-PIC: ; %bb.0:
1051 ; NO-ATOMIC-PIC-NEXT: suba.l #20, %sp
1052 ; NO-ATOMIC-PIC-NEXT: move.l #5, (12,%sp)
1053 ; NO-ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp)
1054 ; NO-ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp)
1055 ; NO-ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp)
1056 ; NO-ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc)
1057 ; NO-ATOMIC-PIC-NEXT: adda.l #20, %sp
1058 ; NO-ATOMIC-PIC-NEXT: rts
1060 ; ATOMIC-LABEL: atomic_store_i64_seq_cst:
1062 ; ATOMIC-NEXT: suba.l #20, %sp
1063 ; ATOMIC-NEXT: move.l #5, (12,%sp)
1064 ; ATOMIC-NEXT: move.l (32,%sp), (8,%sp)
1065 ; ATOMIC-NEXT: move.l (28,%sp), (4,%sp)
1066 ; ATOMIC-NEXT: move.l (24,%sp), (%sp)
1067 ; ATOMIC-NEXT: jsr __atomic_store_8
1068 ; ATOMIC-NEXT: adda.l #20, %sp
1071 ; ATOMIC-PIC-LABEL: atomic_store_i64_seq_cst:
1072 ; ATOMIC-PIC: ; %bb.0:
1073 ; ATOMIC-PIC-NEXT: suba.l #20, %sp
1074 ; ATOMIC-PIC-NEXT: move.l #5, (12,%sp)
1075 ; ATOMIC-PIC-NEXT: move.l (32,%sp), (8,%sp)
1076 ; ATOMIC-PIC-NEXT: move.l (28,%sp), (4,%sp)
1077 ; ATOMIC-PIC-NEXT: move.l (24,%sp), (%sp)
1078 ; ATOMIC-PIC-NEXT: jsr (__atomic_store_8@PLT,%pc)
1079 ; ATOMIC-PIC-NEXT: adda.l #20, %sp
1080 ; ATOMIC-PIC-NEXT: rts
1081 store atomic i64 %val, ptr %a seq_cst, align 8
1085 define void @store_arid(ptr nonnull align 4 %a) {
1086 ; NO-ATOMIC-LABEL: store_arid:
1087 ; NO-ATOMIC: .cfi_startproc
1088 ; NO-ATOMIC-NEXT: ; %bb.0: ; %start
1089 ; NO-ATOMIC-NEXT: moveq #1, %d0
1090 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
1091 ; NO-ATOMIC-NEXT: move.l %d0, (32,%a0)
1092 ; NO-ATOMIC-NEXT: rts
1094 ; NO-ATOMIC-PIC-LABEL: store_arid:
1095 ; NO-ATOMIC-PIC: .cfi_startproc
1096 ; NO-ATOMIC-PIC-NEXT: ; %bb.0: ; %start
1097 ; NO-ATOMIC-PIC-NEXT: moveq #1, %d0
1098 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
1099 ; NO-ATOMIC-PIC-NEXT: move.l %d0, (32,%a0)
1100 ; NO-ATOMIC-PIC-NEXT: rts
1102 ; ATOMIC-LABEL: store_arid:
1103 ; ATOMIC: .cfi_startproc
1104 ; ATOMIC-NEXT: ; %bb.0: ; %start
1105 ; ATOMIC-NEXT: moveq #1, %d0
1106 ; ATOMIC-NEXT: move.l (4,%sp), %a0
1107 ; ATOMIC-NEXT: move.l %d0, (32,%a0)
1110 ; ATOMIC-PIC-LABEL: store_arid:
1111 ; ATOMIC-PIC: .cfi_startproc
1112 ; ATOMIC-PIC-NEXT: ; %bb.0: ; %start
1113 ; ATOMIC-PIC-NEXT: moveq #1, %d0
1114 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
1115 ; ATOMIC-PIC-NEXT: move.l %d0, (32,%a0)
1116 ; ATOMIC-PIC-NEXT: rts
1118 %1 = getelementptr inbounds i32, ptr %a, i32 8
1119 store atomic i32 1, ptr %1 seq_cst, align 4
1122 exit: ; preds = %start
1126 define i32 @load_arid(ptr nonnull align 4 %a) {
1127 ; NO-ATOMIC-LABEL: load_arid:
1128 ; NO-ATOMIC: .cfi_startproc
1129 ; NO-ATOMIC-NEXT: ; %bb.0: ; %start
1130 ; NO-ATOMIC-NEXT: move.l (4,%sp), %a0
1131 ; NO-ATOMIC-NEXT: move.l (32,%a0), %d0
1132 ; NO-ATOMIC-NEXT: rts
1134 ; NO-ATOMIC-PIC-LABEL: load_arid:
1135 ; NO-ATOMIC-PIC: .cfi_startproc
1136 ; NO-ATOMIC-PIC-NEXT: ; %bb.0: ; %start
1137 ; NO-ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
1138 ; NO-ATOMIC-PIC-NEXT: move.l (32,%a0), %d0
1139 ; NO-ATOMIC-PIC-NEXT: rts
1141 ; ATOMIC-LABEL: load_arid:
1142 ; ATOMIC: .cfi_startproc
1143 ; ATOMIC-NEXT: ; %bb.0: ; %start
1144 ; ATOMIC-NEXT: move.l (4,%sp), %a0
1145 ; ATOMIC-NEXT: move.l (32,%a0), %d0
1148 ; ATOMIC-PIC-LABEL: load_arid:
1149 ; ATOMIC-PIC: .cfi_startproc
1150 ; ATOMIC-PIC-NEXT: ; %bb.0: ; %start
1151 ; ATOMIC-PIC-NEXT: move.l (4,%sp), %a0
1152 ; ATOMIC-PIC-NEXT: move.l (32,%a0), %d0
1153 ; ATOMIC-PIC-NEXT: rts
1155 %1 = getelementptr inbounds i32, ptr %a, i32 8
1156 %2 = load atomic i32, ptr %1 seq_cst, align 4
1159 exit: ; preds = %start