1 // REQUIRES: dsp
2 // RUN: %cc% %ccflags% %ccout% %T/%basename_t.o %s; llvm-objdump --mcpu=%mcpu% -d %T/%basename_t.o | FileCheck --allow-unused-prefixes --check-prefixes %prefixes% %s
3
4 #include "cmsis_compiler.h"
5
6 volatile static int32_t s32_1 = 0x47;
7 volatile static int32_t s32_2 = 0x11;
8 volatile static int32_t s32_3 = 0x15;
9 volatile static uint8_t u8 = 5u;
10
11 /* ADD8 */
12
sadd8()13 void sadd8() {
14 // CHECK-LABEL: <sadd8>:
15 // CHECK: sadd8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
16 volatile uint32_t result = __SADD8(s32_1, s32_2);
17 // CHECK: {{(bx lr)|(pop {.*pc})}}
18 }
19
qadd8()20 void qadd8() {
21 // CHECK-LABEL: <qadd8>:
22 // CHECK: qadd8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
23 volatile uint32_t result = __QADD8(s32_1, s32_2);
24 // CHECK: {{(bx lr)|(pop {.*pc})}}
25 }
26
shadd8()27 void shadd8() {
28 // CHECK-LABEL: <shadd8>:
29 // CHECK: shadd8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
30 volatile uint32_t result = __SHADD8(s32_1, s32_2);
31 // CHECK: {{(bx lr)|(pop {.*pc})}}
32 }
33
uadd8()34 void uadd8() {
35 // CHECK-LABEL: <uadd8>:
36 // CHECK: uadd8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
37 volatile uint32_t result = __UADD8(s32_1, s32_2);
38 // CHECK: {{(bx lr)|(pop {.*pc})}}
39 }
40
uqadd8()41 void uqadd8() {
42 // CHECK-LABEL: <uqadd8>:
43 // CHECK: uqadd8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
44 volatile uint32_t result = __UQADD8(s32_1, s32_2);
45 // CHECK: {{(bx lr)|(pop {.*pc})}}
46 }
47
uhadd8()48 void uhadd8() {
49 // CHECK-LABEL: <uhadd8>:
50 // CHECK: uhadd8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
51 volatile uint32_t result = __UHADD8(s32_1, s32_2);
52 // CHECK: {{(bx lr)|(pop {.*pc})}}
53 }
54
55 /* SUB8 */
56
ssub8()57 void ssub8() {
58 // CHECK-LABEL: <ssub8>:
59 // CHECK: ssub8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
60 volatile uint32_t result = __SSUB8(s32_1, s32_2);
61 // CHECK: {{(bx lr)|(pop {.*pc})}}
62 }
63
qsub8()64 void qsub8() {
65 // CHECK-LABEL: <qsub8>:
66 // CHECK: qsub8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
67 volatile uint32_t result = __QSUB8(s32_1, s32_2);
68 // CHECK: {{(bx lr)|(pop {.*pc})}}
69 }
70
shsub8()71 void shsub8() {
72 // CHECK-LABEL: <shsub8>:
73 // CHECK: shsub8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
74 volatile uint32_t result = __SHSUB8(s32_1, s32_2);
75 // CHECK: {{(bx lr)|(pop {.*pc})}}
76 }
77
usub8()78 void usub8() {
79 // CHECK-LABEL: <usub8>:
80 // CHECK: usub8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
81 volatile uint32_t result = __USUB8(s32_1, s32_2);
82 // CHECK: {{(bx lr)|(pop {.*pc})}}
83 }
84
uqsub8()85 void uqsub8() {
86 // CHECK-LABEL: <uqsub8>:
87 // CHECK: uqsub8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
88 volatile uint32_t result = __UQSUB8(s32_1, s32_2);
89 // CHECK: {{(bx lr)|(pop {.*pc})}}
90 }
91
uhsub8()92 void uhsub8() {
93 // CHECK-LABEL: <uhsub8>:
94 // CHECK: uhsub8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
95 volatile uint32_t result = __UHSUB8(s32_1, s32_2);
96 // CHECK: {{(bx lr)|(pop {.*pc})}}
97 }
98
99 /* ADD16 */
100
sadd16()101 void sadd16() {
102 // CHECK-LABEL: <sadd16>:
103 // CHECK: sadd16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
104 volatile uint32_t result = __SADD16(s32_1, s32_2);
105 // CHECK: {{(bx lr)|(pop {.*pc})}}
106 }
107
qadd16()108 void qadd16() {
109 // CHECK-LABEL: <qadd16>:
110 // CHECK: qadd16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
111 volatile uint32_t result = __QADD16(s32_1, s32_2);
112 // CHECK: {{(bx lr)|(pop {.*pc})}}
113 }
114
shadd16()115 void shadd16() {
116 // CHECK-LABEL: <shadd16>:
117 // CHECK: shadd16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
118 volatile uint32_t result = __SHADD16(s32_1, s32_2);
119 // CHECK: {{(bx lr)|(pop {.*pc})}}
120 }
121
uadd16()122 void uadd16() {
123 // CHECK-LABEL: <uadd16>:
124 // CHECK: uadd16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
125 volatile uint32_t result = __UADD16(s32_1, s32_2);
126 // CHECK: {{(bx lr)|(pop {.*pc})}}
127 }
128
uqadd16()129 void uqadd16() {
130 // CHECK-LABEL: <uqadd16>:
131 // CHECK: uqadd16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
132 volatile uint32_t result = __UQADD16(s32_1, s32_2);
133 // CHECK: {{(bx lr)|(pop {.*pc})}}
134 }
135
uhadd16()136 void uhadd16() {
137 // CHECK-LABEL: <uhadd16>:
138 // CHECK: uhadd16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
139 volatile uint32_t result = __UHADD16(s32_1, s32_2);
140 // CHECK: {{(bx lr)|(pop {.*pc})}}
141 }
142
143 /* SUB16 */
144
ssub16()145 void ssub16() {
146 // CHECK-LABEL: <ssub16>:
147 // CHECK: ssub16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
148 volatile uint32_t result = __SSUB16(s32_1, s32_2);
149 // CHECK: {{(bx lr)|(pop {.*pc})}}
150 }
151
qsub16()152 void qsub16() {
153 // CHECK-LABEL: <qsub16>:
154 // CHECK: qsub16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
155 volatile uint32_t result = __QSUB16(s32_1, s32_2);
156 // CHECK: {{(bx lr)|(pop {.*pc})}}
157 }
158
shsub16()159 void shsub16() {
160 // CHECK-LABEL: <shsub16>:
161 // CHECK: shsub16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
162 volatile uint32_t result = __SHSUB16(s32_1, s32_2);
163 // CHECK: {{(bx lr)|(pop {.*pc})}}
164 }
165
usub16()166 void usub16() {
167 // CHECK-LABEL: <usub16>:
168 // CHECK: usub16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
169 volatile uint32_t result = __USUB16(s32_1, s32_2);
170 // CHECK: {{(bx lr)|(pop {.*pc})}}
171 }
172
uqsub16()173 void uqsub16() {
174 // CHECK-LABEL: <uqsub16>:
175 // CHECK: uqsub16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
176 volatile uint32_t result = __UQSUB16(s32_1, s32_2);
177 // CHECK: {{(bx lr)|(pop {.*pc})}}
178 }
179
uhsub16()180 void uhsub16() {
181 // CHECK-LABEL: <uhsub16>:
182 // CHECK: uhsub16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
183 volatile uint32_t result = __UHSUB16(s32_1, s32_2);
184 // CHECK: {{(bx lr)|(pop {.*pc})}}
185 }
186
187 /* ASX */
188
sasx()189 void sasx() {
190 // CHECK-LABEL: <sasx>:
191 // CHECK: sasx {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
192 volatile uint32_t result = __SASX(s32_1, s32_2);
193 // CHECK: {{(bx lr)|(pop {.*pc})}}
194 }
195
qasx()196 void qasx() {
197 // CHECK-LABEL: <qasx>:
198 // CHECK: qasx {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
199 volatile uint32_t result = __QASX(s32_1, s32_2);
200 // CHECK: {{(bx lr)|(pop {.*pc})}}
201 }
202
shasx()203 void shasx() {
204 // CHECK-LABEL: <shasx>:
205 // CHECK: shasx {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
206 volatile uint32_t result = __SHASX(s32_1, s32_2);
207 // CHECK: {{(bx lr)|(pop {.*pc})}}
208 }
209
uasx()210 void uasx() {
211 // CHECK-LABEL: <uasx>:
212 // CHECK: uasx {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
213 volatile uint32_t result = __UASX(s32_1, s32_2);
214 // CHECK: {{(bx lr)|(pop {.*pc})}}
215 }
216
uqasx()217 void uqasx() {
218 // CHECK-LABEL: <uqasx>:
219 // CHECK: uqasx {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
220 volatile uint32_t result = __UQASX(s32_1, s32_2);
221 // CHECK: {{(bx lr)|(pop {.*pc})}}
222 }
223
uhasx()224 void uhasx() {
225 // CHECK-LABEL: <uhasx>:
226 // CHECK: uhasx {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
227 volatile uint32_t result = __UHASX(s32_1, s32_2);
228 // CHECK: {{(bx lr)|(pop {.*pc})}}
229 }
230
231 /* SAX */
232
ssax()233 void ssax() {
234 // CHECK-LABEL: <ssax>:
235 // CHECK: ssax {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
236 volatile uint32_t result = __SSAX(s32_1, s32_2);
237 // CHECK: {{(bx lr)|(pop {.*pc})}}
238 }
239
qsax()240 void qsax() {
241 // CHECK-LABEL: <qsax>:
242 // CHECK: qsax {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
243 volatile uint32_t result = __QSAX(s32_1, s32_2);
244 // CHECK: {{(bx lr)|(pop {.*pc})}}
245 }
246
shsax()247 void shsax() {
248 // CHECK-LABEL: <shsax>:
249 // CHECK: shsax {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
250 volatile uint32_t result = __SHSAX(s32_1, s32_2);
251 // CHECK: {{(bx lr)|(pop {.*pc})}}
252 }
253
usax()254 void usax() {
255 // CHECK-LABEL: <usax>:
256 // CHECK: usax {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
257 volatile uint32_t result = __USAX(s32_1, s32_2);
258 // CHECK: {{(bx lr)|(pop {.*pc})}}
259 }
260
uqsax()261 void uqsax() {
262 // CHECK-LABEL: <uqsax>:
263 // CHECK: uqsax {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
264 volatile uint32_t result = __UQSAX(s32_1, s32_2);
265 // CHECK: {{(bx lr)|(pop {.*pc})}}
266 }
267
uhsax()268 void uhsax() {
269 // CHECK-LABEL: <uhsax>:
270 // CHECK: uhsax {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
271 volatile uint32_t result = __UHSAX(s32_1, s32_2);
272 // CHECK: {{(bx lr)|(pop {.*pc})}}
273 }
274
275 /* SAT */
276
usad8()277 void usad8() {
278 // CHECK-LABEL: <usad8>:
279 // CHECK: usad8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
280 volatile uint32_t result = __USAD8(s32_1, s32_2);
281 // CHECK: {{(bx lr)|(pop {.*pc})}}
282 }
283
usada8()284 void usada8() {
285 // CHECK-LABEL: <usada8>:
286 // CHECK: usada8 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
287 volatile uint32_t result = __USADA8(s32_1, s32_2, s32_3);
288 // CHECK: {{(bx lr)|(pop {.*pc})}}
289 }
290
ssat16()291 void ssat16() {
292 // CHECK-LABEL: <ssat16>:
293 // CHECK: ssat16 {{r[0-9]+}}, #0x5, {{r[0-9]+}}
294 volatile uint32_t result = __SSAT16(s32_1, 0x05);
295 // CHECK: {{(bx lr)|(pop {.*pc})}}
296 }
297
usat16()298 void usat16() {
299 // CHECK-LABEL: <usat16>:
300 // CHECK: usat16 {{r[0-9]+}}, #0x5, {{r[0-9]+}}
301 volatile uint32_t result = __USAT16(s32_1, 0x05);
302 // CHECK: {{(bx lr)|(pop {.*pc})}}
303 }
304
uxtb16()305 void uxtb16() {
306 // CHECK-LABEL: <uxtb16>:
307 // CHECK: uxtb16 {{r[0-9]+}}, {{r[0-9]+}}
308 volatile uint32_t result = __UXTB16(s32_1);
309 // CHECK: {{(bx lr)|(pop {.*pc})}}
310 }
311
uxtab16()312 void uxtab16() {
313 // CHECK-LABEL: <uxtab16>:
314 // CHECK: uxtab16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
315 volatile uint32_t result = __UXTAB16(s32_1, s32_2);
316 // CHECK: {{(bx lr)|(pop {.*pc})}}
317 }
318
sxtb16()319 void sxtb16() {
320 // CHECK-LABEL: <sxtb16>:
321 // CHECK: sxtb16 {{r[0-9]+}}, {{r[0-9]+}}
322 volatile uint32_t result = __SXTB16(s32_1);
323 // CHECK: {{(bx lr)|(pop {.*pc})}}
324 }
325
sxtab16()326 void sxtab16() {
327 // CHECK-LABEL: <sxtab16>:
328 // CHECK: sxtab16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
329 volatile uint32_t result = __SXTAB16(s32_1, s32_2);
330 // CHECK: {{(bx lr)|(pop {.*pc})}}
331 }
332
333 /* MUL */
334
smuad()335 void smuad() {
336 // CHECK-LABEL: <smuad>:
337 // CHECK: smuad {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
338 volatile uint32_t result = __SMUAD(s32_1, s32_2);
339 // CHECK: {{(bx lr)|(pop {.*pc})}}
340 }
341
smuadx()342 void smuadx() {
343 // CHECK-LABEL: <smuadx>:
344 // CHECK: smuadx {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
345 volatile uint32_t result = __SMUADX(s32_1, s32_2);
346 // CHECK: {{(bx lr)|(pop {.*pc})}}
347 }
348
smlad()349 void smlad() {
350 // CHECK-LABEL: <smlad>:
351 // CHECK: smlad {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
352 volatile uint32_t result = __SMLAD(s32_1, s32_2, s32_3);
353 // CHECK: {{(bx lr)|(pop {.*pc})}}
354 }
355
smladx()356 void smladx() {
357 // CHECK-LABEL: <smladx>:
358 // CHECK: smladx {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
359 volatile uint32_t result = __SMLADX(s32_1, s32_2, s32_3);
360 // CHECK: {{(bx lr)|(pop {.*pc})}}
361 }
362
smlald()363 void smlald() {
364 // CHECK-LABEL: <smlald>:
365 // CHECK: smlald {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
366 volatile uint32_t result = __SMLALD(s32_1, s32_2, s32_3);
367 // CHECK: {{(bx lr)|(pop {.*pc})}}
368 }
369
smlaldx()370 void smlaldx() {
371 // CHECK-LABEL: <smlaldx>:
372 // CHECK: smlaldx {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
373 volatile uint32_t result = __SMLALDX(s32_1, s32_2, s32_3);
374 // CHECK: {{(bx lr)|(pop {.*pc})}}
375 }
376
smusd()377 void smusd() {
378 // CHECK-LABEL: <smusd>:
379 // CHECK: smusd {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
380 volatile uint32_t result = __SMUSD(s32_1, s32_2);
381 // CHECK: {{(bx lr)|(pop {.*pc})}}
382 }
383
smusdx()384 void smusdx() {
385 // CHECK-LABEL: <smusdx>:
386 // CHECK: smusdx {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
387 volatile uint32_t result = __SMUSDX(s32_1, s32_2);
388 // CHECK: {{(bx lr)|(pop {.*pc})}}
389 }
390
smlsd()391 void smlsd() {
392 // CHECK-LABEL: <smlsd>:
393 // CHECK: smlsd {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
394 volatile uint32_t result = __SMLSD(s32_1, s32_2, s32_3);
395 // CHECK: {{(bx lr)|(pop {.*pc})}}
396 }
397
smlsdx()398 void smlsdx() {
399 // CHECK-LABEL: <smlsdx>:
400 // CHECK: smlsdx {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
401 volatile uint32_t result = __SMLSDX(s32_1, s32_2, s32_3);
402 // CHECK: {{(bx lr)|(pop {.*pc})}}
403 }
404
smlsld()405 void smlsld() {
406 // CHECK-LABEL: <smlsld>:
407 // CHECK: smlsld {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
408 volatile uint32_t result = __SMLSLD(s32_1, s32_2, s32_3);
409 // CHECK: {{(bx lr)|(pop {.*pc})}}
410 }
411
smlsldx()412 void smlsldx() {
413 // CHECK-LABEL: <smlsldx>:
414 // CHECK: smlsldx {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
415 volatile uint32_t result = __SMLSLDX(s32_1, s32_2, s32_3);
416 // CHECK: {{(bx lr)|(pop {.*pc})}}
417 }
418
sel()419 void sel() {
420 // CHECK-LABEL: <sel>:
421 // CHECK: sel {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
422 volatile uint32_t result = __SEL(s32_1, s32_2);
423 // CHECK: {{(bx lr)|(pop {.*pc})}}
424 }
425
qadd()426 void qadd() {
427 // CHECK-LABEL: <qadd>:
428 // CHECK: qadd {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
429 volatile uint32_t result = __QADD(s32_1, s32_2);
430 // CHECK: {{(bx lr)|(pop {.*pc})}}
431 }
432
qsub()433 void qsub() {
434 // CHECK-LABEL: <qsub>:
435 // CHECK: qsub {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
436 volatile uint32_t result = __QSUB(s32_1, s32_2);
437 // CHECK: {{(bx lr)|(pop {.*pc})}}
438 }
439
pkhbt0()440 void pkhbt0() {
441 // CHECK-LABEL: <pkhbt0>:
442 // CHECK: {{pkhtb|pkhbt}} {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
443 // CHECK-NOT: , lsl
444 // CHECK-NOT: , asr
445 volatile uint32_t result = __PKHBT(s32_1, s32_2, 0);
446 // CHECK: {{(bx lr)|(pop {.*pc})}}
447 }
448
pkhbt()449 void pkhbt() {
450 // CHECK-LABEL: <pkhbt>:
451 // CHECK: pkhbt {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}, lsl #11
452 volatile uint32_t result = __PKHBT(s32_1, s32_2, 11);
453 // CHECK: {{(bx lr)|(pop {.*pc})}}
454 }
455
pkhtb0()456 void pkhtb0() {
457 // CHECK-LABEL: <pkhtb0>:
458 // CHECK: {{pkhtb|pkhbt}} {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
459 // CHECK-NOT: , lsl
460 // CHECK-NOT: , asr
461 volatile uint32_t result = __PKHTB(s32_1, s32_2, 0);
462 // CHECK: {{(bx lr)|(pop {.*pc})}}
463 }
464
pkhtb()465 void pkhtb() {
466 // CHECK-LABEL: <pkhtb>:
467 // CHECK: pkhtb {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}, asr #11
468 volatile uint32_t result = __PKHTB(s32_1, s32_2, 11);
469 // CHECK: {{(bx lr)|(pop {.*pc})}}
470 }
471
sxtb16_ror()472 void sxtb16_ror() {
473 // CHECK-LABEL: <sxtb16_ror>:
474 // CHECK: sxtb16 {{r[0-9]+}}, {{r[0-9]+}}, ror #8
475 volatile uint32_t result = __SXTB16_RORn(s32_1, 8);
476
477 // CHECK: sxtb16 {{r[0-9]+}}, {{r[0-9]+}}, ror #16
478 result = __SXTB16_RORn(s32_1, 16);
479
480 // CHECK: sxtb16 {{r[0-9]+}}, {{r[0-9]+}}, ror #24
481 result = __SXTB16_RORn(s32_1, 24);
482
483 // CHECK-THUMB: ror.w [[REG:r[0-9]+]], {{r[0-9]+}}, {{#5|#0x5}}
484 // CHECK-ARM: ror [[REG:r[0-9]+]], {{r[0-9]+}}, {{#5|#0x5}}
485 // CHECK: sxtb16 {{r[0-9]+}}, [[REG]]
486 // CHECK-NOT: , ror
487 result = __SXTB16_RORn(s32_1, 5);
488
489 // CHECK-THUMB: ror{{.w|ne|s}} {{r[0-9]+}}, {{r[0-9]+}}
490 // CHECK-ARM: ror{{(ne)?}} {{r[0-9]+}}, {{r[0-9]+}}
491 // CHECK: sxtb16 {{r[0-9]+}}, {{r[0-9]+}}
492 // CHECK-NOT: , ror
493 result = __SXTB16_RORn(s32_1, u8);
494
495 // CHECK: {{(bx lr)|(pop {.*pc})}}
496 }
497
sxtab16_ror()498 void sxtab16_ror() {
499 // CHECK-LABEL: <sxtab16_ror>:
500
501 // CHECK: sxtab16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}, ror #8
502 volatile uint32_t result = __SXTAB16_RORn(s32_1, s32_2, 8);
503
504 // CHECK: sxtab16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}, ror #16
505 result = __SXTAB16_RORn(s32_1, s32_2, 16);
506
507 // CHECK: sxtab16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}, ror #24
508 result = __SXTAB16_RORn(s32_1, s32_2, 24);
509
510 // CHECK-THUMB: ror.w [[REG:r[0-9]+]], {{r[0-9]+}}, {{#5|#0x5}}
511 // CHECK-ARM: ror [[REG:r[0-9]+]], {{r[0-9]+}}, {{#5|#0x5}}
512 // CHECK: sxtab16 {{r[0-9]+}}, {{r[0-9]+}}, [[REG]]
513 // CHECK-NOT: , ror
514 result = __SXTAB16_RORn(s32_1, s32_2, 5);
515
516 // CHECK-THUMB: ror{{.w|ne|s}} {{r[0-9]+}}, {{r[0-9]+}}
517 // CHECK-ARM: ror{{(ne)?}} {{r[0-9]+}}, {{r[0-9]+}}
518 // CHECK: sxtab16 {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
519 // CHECK-NOT: , ror
520 result = __SXTAB16_RORn(s32_1, s32_2, u8);
521
522 // CHECK: {{(bx lr)|(pop {.*pc})}}
523 }
524
smmla()525 void smmla() {
526 // CHECK-LABEL: <smmla>:
527 // CHECK: smmla {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}}
528 volatile int32_t result = __SMMLA(s32_1, s32_2, s32_3);
529 // CHECK: {{(bx lr)|(pop {.*pc})}}
530 }
531