xref: /llvm-project/llvm/test/MC/LoongArch/Basic/Integer/atomic.s (revision 84bdee2875da364be7eb2144b1ae530f6a05f0e2)
1## Test valid atomic memory access instructions.
2
3# RUN: llvm-mc %s --triple=loongarch32 --show-encoding \
4# RUN:     | FileCheck --check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ %s
5# RUN: llvm-mc %s --triple=loongarch64 --show-encoding --defsym=LA64=1 \
6# RUN:     | FileCheck --check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ,CHECK64-ASM,CHECK64-ASM-AND-OBJ %s
7# RUN: llvm-mc %s --triple=loongarch32 --filetype=obj | llvm-objdump -d - \
8# RUN:     | FileCheck --check-prefixes=CHECK-ASM-AND-OBJ %s
9# RUN: llvm-mc %s --triple=loongarch64 --filetype=obj --defsym=LA64=1 | llvm-objdump -d - \
10# RUN:     | FileCheck --check-prefixes=CHECK-ASM-AND-OBJ,CHECK64-ASM-AND-OBJ %s
11
12#############################################################
13## Instructions for both loongarch32 and loongarch64
14#############################################################
15
16# CHECK-ASM-AND-OBJ: ll.w $tp, $s4, 220
17# CHECK-ASM: encoding: [0x62,0xdf,0x00,0x20]
18ll.w $tp, $s4, 220
19
20# CHECK-ASM-AND-OBJ: sc.w $t7, $t2, 56
21# CHECK-ASM: encoding: [0xd3,0x39,0x00,0x21]
22sc.w $t7, $t2, 56
23
24# CHECK-ASM-AND-OBJ: llacq.w $t1, $t2
25# CHECK-ASM: encoding: [0xcd,0x81,0x57,0x38]
26llacq.w $t1, $t2
27
28# CHECK-ASM-AND-OBJ: screl.w $t1, $t2
29# CHECK-ASM: encoding: [0xcd,0x85,0x57,0x38]
30screl.w $t1, $t2
31
32
33
34#############################################################
35## Instructions only for loongarch64
36#############################################################
37
38.ifdef LA64
39
40# CHECK64-ASM-AND-OBJ: amswap.b $a2, $t0, $s1
41# CHECK64-ASM: encoding: [0x06,0x33,0x5c,0x38]
42amswap.b $a2, $t0, $s1, 0
43
44# CHECK64-ASM-AND-OBJ: amswap.h $a2, $t0, $s1
45# CHECK64-ASM: encoding: [0x06,0xb3,0x5c,0x38]
46amswap.h $a2, $t0, $s1, 0
47
48# CHECK64-ASM-AND-OBJ: amswap.w $a2, $t0, $s1
49# CHECK64-ASM: encoding: [0x06,0x33,0x60,0x38]
50amswap.w $a2, $t0, $s1, 0
51
52# CHECK64-ASM-AND-OBJ: amswap.w $zero, $t0, $zero
53# CHECK64-ASM: encoding: [0x00,0x30,0x60,0x38]
54amswap.w $zero, $t0, $zero
55
56# CHECK64-ASM-AND-OBJ: amadd_db.w $zero, $zero, $a1
57# CHECK64-ASM: encoding: [0xa0,0x00,0x6a,0x38]
58amadd_db.w $zero, $zero, $a1
59
60# CHECK64-ASM-AND-OBJ: amswap.b $a2, $t0, $s1
61# CHECK64-ASM: encoding: [0x06,0x33,0x5c,0x38]
62amswap.b $a2, $t0, $s1
63
64# CHECK64-ASM-AND-OBJ: amswap.h $a2, $t0, $s1
65# CHECK64-ASM: encoding: [0x06,0xb3,0x5c,0x38]
66amswap.h $a2, $t0, $s1
67
68# CHECK64-ASM-AND-OBJ: amswap.w $a2, $t0, $s1
69# CHECK64-ASM: encoding: [0x06,0x33,0x60,0x38]
70amswap.w $a2, $t0, $s1
71
72# CHECK64-ASM-AND-OBJ: amswap.d $tp, $t2, $fp
73# CHECK64-ASM: encoding: [0xc2,0xba,0x60,0x38]
74amswap.d $tp, $t2, $fp
75
76# CHECK64-ASM-AND-OBJ: amadd.b $a4, $t0, $r21
77# CHECK64-ASM: encoding: [0xa8,0x32,0x5d,0x38]
78amadd.b $a4, $t0, $r21
79
80# CHECK64-ASM-AND-OBJ: amadd.h $a1, $t5, $s6
81# CHECK64-ASM: encoding: [0xa5,0xc7,0x5d,0x38]
82amadd.h $a1, $t5, $s6
83
84# CHECK64-ASM-AND-OBJ: amadd.w $a4, $t0, $r21
85# CHECK64-ASM: encoding: [0xa8,0x32,0x61,0x38]
86amadd.w $a4, $t0, $r21
87
88# CHECK64-ASM-AND-OBJ: amadd.d $a1, $t5, $s6
89# CHECK64-ASM: encoding: [0xa5,0xc7,0x61,0x38]
90amadd.d $a1, $t5, $s6
91
92# CHECK64-ASM-AND-OBJ: amand.w $a0, $t7, $fp
93# CHECK64-ASM: encoding: [0xc4,0x4e,0x62,0x38]
94amand.w $a0, $t7, $fp
95
96# CHECK64-ASM-AND-OBJ: amand.d $a6, $t6, $s6
97# CHECK64-ASM: encoding: [0xaa,0xcb,0x62,0x38]
98amand.d $a6, $t6, $s6
99
100# CHECK64-ASM-AND-OBJ: amor.w $a2, $t4, $s0
101# CHECK64-ASM: encoding: [0xe6,0x42,0x63,0x38]
102amor.w $a2, $t4, $s0
103
104# CHECK64-ASM-AND-OBJ: amor.d $sp, $t4, $s1
105# CHECK64-ASM: encoding: [0x03,0xc3,0x63,0x38]
106amor.d $sp, $t4, $s1
107
108# CHECK64-ASM-AND-OBJ: amxor.w $tp, $t3, $s0
109# CHECK64-ASM: encoding: [0xe2,0x3e,0x64,0x38]
110amxor.w $tp, $t3, $s0
111
112# CHECK64-ASM-AND-OBJ: amxor.d $a4, $t8, $s5
113# CHECK64-ASM: encoding: [0x88,0xd3,0x64,0x38]
114amxor.d $a4, $t8, $s5
115
116# CHECK64-ASM-AND-OBJ: ammax.w $ra, $a7, $s0
117# CHECK64-ASM: encoding: [0xe1,0x2e,0x65,0x38]
118ammax.w $ra, $a7, $s0
119
120# CHECK64-ASM-AND-OBJ: ammax.d $a5, $t8, $s4
121# CHECK64-ASM: encoding: [0x69,0xd3,0x65,0x38]
122ammax.d $a5, $t8, $s4
123
124# CHECK64-ASM-AND-OBJ: ammin.w $a5, $t2, $s0
125# CHECK64-ASM: encoding: [0xe9,0x3a,0x66,0x38]
126ammin.w $a5, $t2, $s0
127
128# CHECK64-ASM-AND-OBJ: ammin.d $a5, $t1, $fp
129# CHECK64-ASM: encoding: [0xc9,0xb6,0x66,0x38]
130ammin.d $a5, $t1, $fp
131
132# CHECK64-ASM-AND-OBJ: ammax.wu $a5, $a7, $fp
133# CHECK64-ASM: encoding: [0xc9,0x2e,0x67,0x38]
134ammax.wu $a5, $a7, $fp
135
136# CHECK64-ASM-AND-OBJ: ammax.du $a2, $t4, $s2
137# CHECK64-ASM: encoding: [0x26,0xc3,0x67,0x38]
138ammax.du $a2, $t4, $s2
139
140# CHECK64-ASM-AND-OBJ: ammin.wu $a4, $t6, $s7
141# CHECK64-ASM: encoding: [0xc8,0x4b,0x68,0x38]
142ammin.wu $a4, $t6, $s7
143
144# CHECK64-ASM-AND-OBJ: ammin.du $a3, $t4, $s2
145# CHECK64-ASM: encoding: [0x27,0xc3,0x68,0x38]
146ammin.du $a3, $t4, $s2
147
148# CHECK64-ASM-AND-OBJ: amswap_db.b $a2, $t0, $s1
149# CHECK64-ASM: encoding: [0x06,0x33,0x5e,0x38]
150amswap_db.b $a2, $t0, $s1
151
152# CHECK64-ASM-AND-OBJ: amswap_db.h $tp, $t2, $fp
153# CHECK64-ASM: encoding: [0xc2,0xba,0x5e,0x38]
154amswap_db.h $tp, $t2, $fp
155
156# CHECK64-ASM-AND-OBJ: amswap_db.w $a2, $t0, $s1
157# CHECK64-ASM: encoding: [0x06,0x33,0x69,0x38]
158amswap_db.w $a2, $t0, $s1
159
160# CHECK64-ASM-AND-OBJ: amswap_db.d $tp, $t2, $fp
161# CHECK64-ASM: encoding: [0xc2,0xba,0x69,0x38]
162amswap_db.d $tp, $t2, $fp
163
164# CHECK64-ASM-AND-OBJ: amadd_db.b $zero, $zero, $a1
165# CHECK64-ASM: encoding: [0xa0,0x00,0x5f,0x38]
166amadd_db.b $zero, $zero, $a1
167
168# CHECK64-ASM-AND-OBJ: amadd_db.h $a4, $t0, $r21
169# CHECK64-ASM: encoding: [0xa8,0xb2,0x5f,0x38]
170amadd_db.h $a4, $t0, $r21
171
172# CHECK64-ASM-AND-OBJ: amadd_db.w $a4, $t0, $r21
173# CHECK64-ASM: encoding: [0xa8,0x32,0x6a,0x38]
174amadd_db.w $a4, $t0, $r21
175
176# CHECK64-ASM-AND-OBJ: amadd_db.d $a1, $t5, $s6
177# CHECK64-ASM: encoding: [0xa5,0xc7,0x6a,0x38]
178amadd_db.d $a1, $t5, $s6
179
180# CHECK64-ASM-AND-OBJ: amand_db.w $a0, $t7, $fp
181# CHECK64-ASM: encoding: [0xc4,0x4e,0x6b,0x38]
182amand_db.w $a0, $t7, $fp
183
184# CHECK64-ASM-AND-OBJ: amand_db.d $a6, $t6, $s6
185# CHECK64-ASM: encoding: [0xaa,0xcb,0x6b,0x38]
186amand_db.d $a6, $t6, $s6
187
188# CHECK64-ASM-AND-OBJ: amor_db.w $a2, $t4, $s0
189# CHECK64-ASM: encoding: [0xe6,0x42,0x6c,0x38]
190amor_db.w $a2, $t4, $s0
191
192# CHECK64-ASM-AND-OBJ: amor_db.d $sp, $t4, $s1
193# CHECK64-ASM: encoding: [0x03,0xc3,0x6c,0x38]
194amor_db.d $sp, $t4, $s1
195
196# CHECK64-ASM-AND-OBJ: amxor_db.w $tp, $t3, $s0
197# CHECK64-ASM: encoding: [0xe2,0x3e,0x6d,0x38]
198amxor_db.w $tp, $t3, $s0
199
200# CHECK64-ASM-AND-OBJ: amxor_db.d $a4, $t8, $s5
201# CHECK64-ASM: encoding: [0x88,0xd3,0x6d,0x38]
202amxor_db.d $a4, $t8, $s5
203
204# CHECK64-ASM-AND-OBJ: ammax_db.w $ra, $a7, $s0
205# CHECK64-ASM: encoding: [0xe1,0x2e,0x6e,0x38]
206ammax_db.w $ra, $a7, $s0
207
208# CHECK64-ASM-AND-OBJ: ammax_db.d $a5, $t8, $s4
209# CHECK64-ASM: encoding: [0x69,0xd3,0x6e,0x38]
210ammax_db.d $a5, $t8, $s4
211
212# CHECK64-ASM-AND-OBJ: ammin_db.w $a5, $t2, $s0
213# CHECK64-ASM: encoding: [0xe9,0x3a,0x6f,0x38]
214ammin_db.w $a5, $t2, $s0
215
216# CHECK64-ASM-AND-OBJ: ammin_db.d $a5, $t1, $fp
217# CHECK64-ASM: encoding: [0xc9,0xb6,0x6f,0x38]
218ammin_db.d $a5, $t1, $fp
219
220# CHECK64-ASM-AND-OBJ: ammax_db.wu $a5, $a7, $fp
221# CHECK64-ASM: encoding: [0xc9,0x2e,0x70,0x38]
222ammax_db.wu $a5, $a7, $fp
223
224# CHECK64-ASM-AND-OBJ: ammax_db.du $a2, $t4, $s2
225# CHECK64-ASM: encoding: [0x26,0xc3,0x70,0x38]
226ammax_db.du $a2, $t4, $s2
227
228# CHECK64-ASM-AND-OBJ: ammin_db.wu $a4, $t6, $s7
229# CHECK64-ASM: encoding: [0xc8,0x4b,0x71,0x38]
230ammin_db.wu $a4, $t6, $s7
231
232# CHECK64-ASM-AND-OBJ: ammin_db.du $a3, $t4, $s2
233# CHECK64-ASM: encoding: [0x27,0xc3,0x71,0x38]
234ammin_db.du $a3, $t4, $s2
235
236# CHECK64-ASM-AND-OBJ: amcas.b $t1, $t2, $t3
237# CHECK64-ASM: encoding: [0xed,0x39,0x58,0x38]
238amcas.b $t1, $t2, $t3
239
240# CHECK64-ASM-AND-OBJ: amcas.h $t1, $t2, $t3
241# CHECK64-ASM: encoding: [0xed,0xb9,0x58,0x38]
242amcas.h $t1, $t2, $t3
243
244# CHECK64-ASM-AND-OBJ: amcas.w $t1, $t2, $t3
245# CHECK64-ASM: encoding: [0xed,0x39,0x59,0x38]
246amcas.w $t1, $t2, $t3
247
248# CHECK64-ASM-AND-OBJ: amcas.d $t1, $t2, $t3
249# CHECK64-ASM: encoding: [0xed,0xb9,0x59,0x38]
250amcas.d $t1, $t2, $t3
251
252# CHECK64-ASM-AND-OBJ: amcas_db.b $t1, $t2, $t3
253# CHECK64-ASM: encoding: [0xed,0x39,0x5a,0x38]
254amcas_db.b $t1, $t2, $t3
255
256# CHECK64-ASM-AND-OBJ: amcas_db.h $t1, $t2, $t3
257# CHECK64-ASM: encoding: [0xed,0xb9,0x5a,0x38]
258amcas_db.h $t1, $t2, $t3
259
260# CHECK64-ASM-AND-OBJ: amcas_db.w $t1, $t2, $t3
261# CHECK64-ASM: encoding: [0xed,0x39,0x5b,0x38]
262amcas_db.w $t1, $t2, $t3
263
264# CHECK64-ASM-AND-OBJ: amcas_db.d $t1, $t2, $t3
265# CHECK64-ASM: encoding: [0xed,0xb9,0x5b,0x38]
266amcas_db.d $t1, $t2, $t3
267
268# CHECK64-ASM-AND-OBJ: ll.d $s2, $s4, 16
269# CHECK64-ASM: encoding: [0x79,0x13,0x00,0x22]
270ll.d $s2, $s4, 16
271
272# CHECK64-ASM-AND-OBJ: sc.d $t5, $t5, 244
273# CHECK64-ASM: encoding: [0x31,0xf6,0x00,0x23]
274sc.d $t5, $t5, 244
275
276# CHECK64-ASM-AND-OBJ: sc.q $t7, $t2, $t5
277# CHECK64-ASM: encoding: [0x33,0x3a,0x57,0x38]
278sc.q $t7, $t2, $t5
279
280# CHECK64-ASM-AND-OBJ: llacq.d $t1, $t2
281# CHECK64-ASM: encoding: [0xcd,0x89,0x57,0x38]
282llacq.d $t1, $t2
283
284# CHECK64-ASM-AND-OBJ: screl.d $t1, $t2
285# CHECK64-ASM: encoding: [0xcd,0x8d,0x57,0x38]
286screl.d $t1, $t2
287
288.endif
289
290