xref: /llvm-project/llvm/test/CodeGen/M68k/CodeModel/Large/Atomics/load-store.ll (revision 4cce10743d2275710d3d2e0de8013386a9799092)
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
12
13define i8 @atomic_load_i8_unordered(ptr %a) nounwind {
14; NO-ATOMIC-LABEL: atomic_load_i8_unordered:
15; NO-ATOMIC:       ; %bb.0:
16; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
17; NO-ATOMIC-NEXT:    move.b (%a0), %d0
18; NO-ATOMIC-NEXT:    rts
19;
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
25;
26; ATOMIC-LABEL: atomic_load_i8_unordered:
27; ATOMIC:       ; %bb.0:
28; ATOMIC-NEXT:    move.l (4,%sp), %a0
29; ATOMIC-NEXT:    move.b (%a0), %d0
30; ATOMIC-NEXT:    rts
31;
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
38  ret i8 %1
39}
40
41define i8 @atomic_load_i8_monotonic(ptr %a) nounwind {
42; NO-ATOMIC-LABEL: atomic_load_i8_monotonic:
43; NO-ATOMIC:       ; %bb.0:
44; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
45; NO-ATOMIC-NEXT:    move.b (%a0), %d0
46; NO-ATOMIC-NEXT:    rts
47;
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
53;
54; ATOMIC-LABEL: atomic_load_i8_monotonic:
55; ATOMIC:       ; %bb.0:
56; ATOMIC-NEXT:    move.l (4,%sp), %a0
57; ATOMIC-NEXT:    move.b (%a0), %d0
58; ATOMIC-NEXT:    rts
59;
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
66  ret i8 %1
67}
68
69define i8 @atomic_load_i8_acquire(ptr %a) nounwind {
70; NO-ATOMIC-LABEL: atomic_load_i8_acquire:
71; NO-ATOMIC:       ; %bb.0:
72; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
73; NO-ATOMIC-NEXT:    move.b (%a0), %d0
74; NO-ATOMIC-NEXT:    rts
75;
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
81;
82; ATOMIC-LABEL: atomic_load_i8_acquire:
83; ATOMIC:       ; %bb.0:
84; ATOMIC-NEXT:    move.l (4,%sp), %a0
85; ATOMIC-NEXT:    move.b (%a0), %d0
86; ATOMIC-NEXT:    rts
87;
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
94  ret i8 %1
95}
96
97define i8 @atomic_load_i8_seq_cst(ptr %a) nounwind {
98; NO-ATOMIC-LABEL: atomic_load_i8_seq_cst:
99; NO-ATOMIC:       ; %bb.0:
100; NO-ATOMIC-NEXT:    move.l (4,%sp), %a0
101; NO-ATOMIC-NEXT:    move.b (%a0), %d0
102; NO-ATOMIC-NEXT:    rts
103;
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
109;
110; ATOMIC-LABEL: atomic_load_i8_seq_cst:
111; ATOMIC:       ; %bb.0:
112; ATOMIC-NEXT:    move.l (4,%sp), %a0
113; ATOMIC-NEXT:    move.b (%a0), %d0
114; ATOMIC-NEXT:    rts
115;
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
122  ret i8 %1
123}
124
125define 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
131;
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
137;
138; ATOMIC-LABEL: atomic_load_i16_unordered:
139; ATOMIC:       ; %bb.0:
140; ATOMIC-NEXT:    move.l (4,%sp), %a0
141; ATOMIC-NEXT:    move.w (%a0), %d0
142; ATOMIC-NEXT:    rts
143;
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
150  ret i16 %1
151}
152
153define 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
159;
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
165;
166; ATOMIC-LABEL: atomic_load_i16_monotonic:
167; ATOMIC:       ; %bb.0:
168; ATOMIC-NEXT:    move.l (4,%sp), %a0
169; ATOMIC-NEXT:    move.w (%a0), %d0
170; ATOMIC-NEXT:    rts
171;
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
178  ret i16 %1
179}
180
181define 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
187;
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
193;
194; ATOMIC-LABEL: atomic_load_i16_acquire:
195; ATOMIC:       ; %bb.0:
196; ATOMIC-NEXT:    move.l (4,%sp), %a0
197; ATOMIC-NEXT:    move.w (%a0), %d0
198; ATOMIC-NEXT:    rts
199;
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
206  ret i16 %1
207}
208
209define 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
215;
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
221;
222; ATOMIC-LABEL: atomic_load_i16_seq_cst:
223; ATOMIC:       ; %bb.0:
224; ATOMIC-NEXT:    move.l (4,%sp), %a0
225; ATOMIC-NEXT:    move.w (%a0), %d0
226; ATOMIC-NEXT:    rts
227;
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
234  ret i16 %1
235}
236
237define 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
243;
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
249;
250; ATOMIC-LABEL: atomic_load_i32_unordered:
251; ATOMIC:       ; %bb.0:
252; ATOMIC-NEXT:    move.l (4,%sp), %a0
253; ATOMIC-NEXT:    move.l (%a0), %d0
254; ATOMIC-NEXT:    rts
255;
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
262  ret i32 %1
263}
264
265define 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
271;
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
277;
278; ATOMIC-LABEL: atomic_load_i32_monotonic:
279; ATOMIC:       ; %bb.0:
280; ATOMIC-NEXT:    move.l (4,%sp), %a0
281; ATOMIC-NEXT:    move.l (%a0), %d0
282; ATOMIC-NEXT:    rts
283;
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
290  ret i32 %1
291}
292
293define 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
299;
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
305;
306; ATOMIC-LABEL: atomic_load_i32_acquire:
307; ATOMIC:       ; %bb.0:
308; ATOMIC-NEXT:    move.l (4,%sp), %a0
309; ATOMIC-NEXT:    move.l (%a0), %d0
310; ATOMIC-NEXT:    rts
311;
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
318  ret i32 %1
319}
320
321define 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
327;
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
333;
334; ATOMIC-LABEL: atomic_load_i32_seq_cst:
335; ATOMIC:       ; %bb.0:
336; ATOMIC-NEXT:    move.l (4,%sp), %a0
337; ATOMIC-NEXT:    move.l (%a0), %d0
338; ATOMIC-NEXT:    rts
339;
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
346  ret i32 %1
347}
348
349define 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
358;
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
367;
368; ATOMIC-LABEL: atomic_load_i64_unordered:
369; ATOMIC:       ; %bb.0:
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
375; ATOMIC-NEXT:    rts
376;
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
386  ret i64 %1
387}
388
389define 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
398;
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
407;
408; ATOMIC-LABEL: atomic_load_i64_monotonic:
409; ATOMIC:       ; %bb.0:
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
415; ATOMIC-NEXT:    rts
416;
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
426  ret i64 %1
427}
428
429define 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
438;
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
447;
448; ATOMIC-LABEL: atomic_load_i64_acquire:
449; ATOMIC:       ; %bb.0:
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
455; ATOMIC-NEXT:    rts
456;
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
466  ret i64 %1
467}
468
469define 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
478;
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
487;
488; ATOMIC-LABEL: atomic_load_i64_seq_cst:
489; ATOMIC:       ; %bb.0:
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
495; ATOMIC-NEXT:    rts
496;
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
506  ret i64 %1
507}
508
509define 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
516;
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
523;
524; ATOMIC-LABEL: atomic_store_i8_unordered:
525; ATOMIC:       ; %bb.0:
526; ATOMIC-NEXT:    move.b (11,%sp), %d0
527; ATOMIC-NEXT:    move.l (4,%sp), %a0
528; ATOMIC-NEXT:    move.b %d0, (%a0)
529; ATOMIC-NEXT:    rts
530;
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
538  ret void
539}
540
541define 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
548;
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
555;
556; ATOMIC-LABEL: atomic_store_i8_monotonic:
557; ATOMIC:       ; %bb.0:
558; ATOMIC-NEXT:    move.b (11,%sp), %d0
559; ATOMIC-NEXT:    move.l (4,%sp), %a0
560; ATOMIC-NEXT:    move.b %d0, (%a0)
561; ATOMIC-NEXT:    rts
562;
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
570  ret void
571}
572
573define 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
580;
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
587;
588; ATOMIC-LABEL: atomic_store_i8_release:
589; ATOMIC:       ; %bb.0:
590; ATOMIC-NEXT:    move.b (11,%sp), %d0
591; ATOMIC-NEXT:    move.l (4,%sp), %a0
592; ATOMIC-NEXT:    move.b %d0, (%a0)
593; ATOMIC-NEXT:    rts
594;
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
602  ret void
603}
604
605define 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
612;
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
619;
620; ATOMIC-LABEL: atomic_store_i8_seq_cst:
621; ATOMIC:       ; %bb.0:
622; ATOMIC-NEXT:    move.b (11,%sp), %d0
623; ATOMIC-NEXT:    move.l (4,%sp), %a0
624; ATOMIC-NEXT:    move.b %d0, (%a0)
625; ATOMIC-NEXT:    rts
626;
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
634  ret void
635}
636
637define 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
644;
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
651;
652; ATOMIC-LABEL: atomic_store_i16_unordered:
653; ATOMIC:       ; %bb.0:
654; ATOMIC-NEXT:    move.w (10,%sp), %d0
655; ATOMIC-NEXT:    move.l (4,%sp), %a0
656; ATOMIC-NEXT:    move.w %d0, (%a0)
657; ATOMIC-NEXT:    rts
658;
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
666  ret void
667}
668
669define 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
676;
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
683;
684; ATOMIC-LABEL: atomic_store_i16_monotonic:
685; ATOMIC:       ; %bb.0:
686; ATOMIC-NEXT:    move.w (10,%sp), %d0
687; ATOMIC-NEXT:    move.l (4,%sp), %a0
688; ATOMIC-NEXT:    move.w %d0, (%a0)
689; ATOMIC-NEXT:    rts
690;
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
698  ret void
699}
700
701define 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
708;
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
715;
716; ATOMIC-LABEL: atomic_store_i16_release:
717; ATOMIC:       ; %bb.0:
718; ATOMIC-NEXT:    move.w (10,%sp), %d0
719; ATOMIC-NEXT:    move.l (4,%sp), %a0
720; ATOMIC-NEXT:    move.w %d0, (%a0)
721; ATOMIC-NEXT:    rts
722;
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
730  ret void
731}
732
733define 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
740;
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
747;
748; ATOMIC-LABEL: atomic_store_i16_seq_cst:
749; ATOMIC:       ; %bb.0:
750; ATOMIC-NEXT:    move.w (10,%sp), %d0
751; ATOMIC-NEXT:    move.l (4,%sp), %a0
752; ATOMIC-NEXT:    move.w %d0, (%a0)
753; ATOMIC-NEXT:    rts
754;
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
762  ret void
763}
764
765define 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
772;
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
779;
780; ATOMIC-LABEL: atomic_store_i32_unordered:
781; ATOMIC:       ; %bb.0:
782; ATOMIC-NEXT:    move.l (8,%sp), %d0
783; ATOMIC-NEXT:    move.l (4,%sp), %a0
784; ATOMIC-NEXT:    move.l %d0, (%a0)
785; ATOMIC-NEXT:    rts
786;
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
794  ret void
795}
796
797define 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
804;
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
811;
812; ATOMIC-LABEL: atomic_store_i32_monotonic:
813; ATOMIC:       ; %bb.0:
814; ATOMIC-NEXT:    move.l (8,%sp), %d0
815; ATOMIC-NEXT:    move.l (4,%sp), %a0
816; ATOMIC-NEXT:    move.l %d0, (%a0)
817; ATOMIC-NEXT:    rts
818;
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
826  ret void
827}
828
829define 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
836;
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
843;
844; ATOMIC-LABEL: atomic_store_i32_release:
845; ATOMIC:       ; %bb.0:
846; ATOMIC-NEXT:    move.l (8,%sp), %d0
847; ATOMIC-NEXT:    move.l (4,%sp), %a0
848; ATOMIC-NEXT:    move.l %d0, (%a0)
849; ATOMIC-NEXT:    rts
850;
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
858  ret void
859}
860
861define 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
868;
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
875;
876; ATOMIC-LABEL: atomic_store_i32_seq_cst:
877; ATOMIC:       ; %bb.0:
878; ATOMIC-NEXT:    move.l (8,%sp), %d0
879; ATOMIC-NEXT:    move.l (4,%sp), %a0
880; ATOMIC-NEXT:    move.l %d0, (%a0)
881; ATOMIC-NEXT:    rts
882;
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
890  ret void
891}
892
893define 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
904;
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
915;
916; ATOMIC-LABEL: atomic_store_i64_unordered:
917; ATOMIC:       ; %bb.0:
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
925; ATOMIC-NEXT:    rts
926;
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
938  ret void
939}
940
941define 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
952;
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
963;
964; ATOMIC-LABEL: atomic_store_i64_monotonic:
965; ATOMIC:       ; %bb.0:
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
973; ATOMIC-NEXT:    rts
974;
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
986  ret void
987}
988
989define 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
1000;
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
1011;
1012; ATOMIC-LABEL: atomic_store_i64_release:
1013; ATOMIC:       ; %bb.0:
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
1021; ATOMIC-NEXT:    rts
1022;
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
1034  ret void
1035}
1036
1037define 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
1048;
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
1059;
1060; ATOMIC-LABEL: atomic_store_i64_seq_cst:
1061; ATOMIC:       ; %bb.0:
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
1069; ATOMIC-NEXT:    rts
1070;
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
1082  ret void
1083}
1084
1085define 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
1093;
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
1101;
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)
1108; ATOMIC-NEXT:    rts
1109;
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
1117start:
1118  %1 = getelementptr inbounds i32, ptr %a, i32 8
1119  store atomic i32 1, ptr %1 seq_cst, align 4
1120  br label %exit
1121
1122exit:                                              ; preds = %start
1123  ret void
1124}
1125
1126define 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
1133;
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
1140;
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
1146; ATOMIC-NEXT:    rts
1147;
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
1154start:
1155  %1 = getelementptr inbounds i32, ptr %a, i32 8
1156  %2 = load atomic i32, ptr %1 seq_cst, align 4
1157  br label %exit
1158
1159exit:                                              ; preds = %start
1160  ret i32 %2
1161}
1162