1*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -ffreestanding -triple armv8-eabi -target-cpu cortex-a57 -O -S -emit-llvm -o - %s | FileCheck %s -check-prefix=ARM -check-prefix=AArch32
2*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -ffreestanding -triple aarch64-eabi -target-cpu cortex-a57 -target-feature +neon -target-feature +crc -target-feature +crypto -O -S -emit-llvm -o - %s | FileCheck %s -check-prefix=ARM -check-prefix=AArch64
3*0a6a1f1dSLionel Sambuc
4*0a6a1f1dSLionel Sambuc #include <arm_acle.h>
5*0a6a1f1dSLionel Sambuc
6*0a6a1f1dSLionel Sambuc /* 8 SYNCHRONIZATION, BARRIER AND HINT INTRINSICS */
7*0a6a1f1dSLionel Sambuc /* 8.3 Memory Barriers */
8*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_dmb
9*0a6a1f1dSLionel Sambuc // AArch32: call void @llvm.arm.dmb(i32 1)
10*0a6a1f1dSLionel Sambuc // AArch64: call void @llvm.aarch64.dmb(i32 1)
test_dmb(void)11*0a6a1f1dSLionel Sambuc void test_dmb(void) {
12*0a6a1f1dSLionel Sambuc __dmb(1);
13*0a6a1f1dSLionel Sambuc }
14*0a6a1f1dSLionel Sambuc
15*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_dsb
16*0a6a1f1dSLionel Sambuc // AArch32: call void @llvm.arm.dsb(i32 2)
17*0a6a1f1dSLionel Sambuc // AArch64: call void @llvm.aarch64.dsb(i32 2)
test_dsb(void)18*0a6a1f1dSLionel Sambuc void test_dsb(void) {
19*0a6a1f1dSLionel Sambuc __dsb(2);
20*0a6a1f1dSLionel Sambuc }
21*0a6a1f1dSLionel Sambuc
22*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_isb
23*0a6a1f1dSLionel Sambuc // AArch32: call void @llvm.arm.isb(i32 3)
24*0a6a1f1dSLionel Sambuc // AArch64: call void @llvm.aarch64.isb(i32 3)
test_isb(void)25*0a6a1f1dSLionel Sambuc void test_isb(void) {
26*0a6a1f1dSLionel Sambuc __isb(3);
27*0a6a1f1dSLionel Sambuc }
28*0a6a1f1dSLionel Sambuc
29*0a6a1f1dSLionel Sambuc /* 8.4 Hints */
30*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_yield
31*0a6a1f1dSLionel Sambuc // AArch32: call void @llvm.arm.hint(i32 1)
32*0a6a1f1dSLionel Sambuc // AArch64: call void @llvm.aarch64.hint(i32 1)
test_yield(void)33*0a6a1f1dSLionel Sambuc void test_yield(void) {
34*0a6a1f1dSLionel Sambuc __yield();
35*0a6a1f1dSLionel Sambuc }
36*0a6a1f1dSLionel Sambuc
37*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_wfe
38*0a6a1f1dSLionel Sambuc // AArch32: call void @llvm.arm.hint(i32 2)
39*0a6a1f1dSLionel Sambuc // AArch64: call void @llvm.aarch64.hint(i32 2)
test_wfe(void)40*0a6a1f1dSLionel Sambuc void test_wfe(void) {
41*0a6a1f1dSLionel Sambuc __wfe();
42*0a6a1f1dSLionel Sambuc }
43*0a6a1f1dSLionel Sambuc
44*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_wfi
45*0a6a1f1dSLionel Sambuc // AArch32: call void @llvm.arm.hint(i32 3)
46*0a6a1f1dSLionel Sambuc // AArch64: call void @llvm.aarch64.hint(i32 3)
test_wfi(void)47*0a6a1f1dSLionel Sambuc void test_wfi(void) {
48*0a6a1f1dSLionel Sambuc __wfi();
49*0a6a1f1dSLionel Sambuc }
50*0a6a1f1dSLionel Sambuc
51*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_sev
52*0a6a1f1dSLionel Sambuc // AArch32: call void @llvm.arm.hint(i32 4)
53*0a6a1f1dSLionel Sambuc // AArch64: call void @llvm.aarch64.hint(i32 4)
test_sev(void)54*0a6a1f1dSLionel Sambuc void test_sev(void) {
55*0a6a1f1dSLionel Sambuc __sev();
56*0a6a1f1dSLionel Sambuc }
57*0a6a1f1dSLionel Sambuc
58*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_sevl
59*0a6a1f1dSLionel Sambuc // AArch32: call void @llvm.arm.hint(i32 5)
60*0a6a1f1dSLionel Sambuc // AArch64: call void @llvm.aarch64.hint(i32 5)
test_sevl(void)61*0a6a1f1dSLionel Sambuc void test_sevl(void) {
62*0a6a1f1dSLionel Sambuc __sevl();
63*0a6a1f1dSLionel Sambuc }
64*0a6a1f1dSLionel Sambuc
65*0a6a1f1dSLionel Sambuc #if __ARM_32BIT_STATE
66*0a6a1f1dSLionel Sambuc // AArch32-LABEL: test_dbg
67*0a6a1f1dSLionel Sambuc // AArch32: call void @llvm.arm.dbg(i32 0)
test_dbg(void)68*0a6a1f1dSLionel Sambuc void test_dbg(void) {
69*0a6a1f1dSLionel Sambuc __dbg(0);
70*0a6a1f1dSLionel Sambuc }
71*0a6a1f1dSLionel Sambuc #endif
72*0a6a1f1dSLionel Sambuc
73*0a6a1f1dSLionel Sambuc /* 8.5 Swap */
74*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_swp
75*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.ldrex
76*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.strex
77*0a6a1f1dSLionel Sambuc // AArch64: call i64 @llvm.aarch64.ldxr
78*0a6a1f1dSLionel Sambuc // AArch64: call i32 @llvm.aarch64.stxr
test_swp(uint32_t x,volatile void * p)79*0a6a1f1dSLionel Sambuc uint32_t test_swp(uint32_t x, volatile void *p) {
80*0a6a1f1dSLionel Sambuc __swp(x, p);
81*0a6a1f1dSLionel Sambuc }
82*0a6a1f1dSLionel Sambuc
83*0a6a1f1dSLionel Sambuc /* 8.6 Memory prefetch intrinsics */
84*0a6a1f1dSLionel Sambuc /* 8.6.1 Data prefetch */
85*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_pld
86*0a6a1f1dSLionel Sambuc // ARM: call void @llvm.prefetch(i8* null, i32 0, i32 3, i32 1)
test_pld()87*0a6a1f1dSLionel Sambuc void test_pld() {
88*0a6a1f1dSLionel Sambuc __pld(0);
89*0a6a1f1dSLionel Sambuc }
90*0a6a1f1dSLionel Sambuc
91*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_pldx
92*0a6a1f1dSLionel Sambuc // AArch32: call void @llvm.prefetch(i8* null, i32 1, i32 3, i32 1)
93*0a6a1f1dSLionel Sambuc // AArch64: call void @llvm.prefetch(i8* null, i32 1, i32 1, i32 1)
test_pldx()94*0a6a1f1dSLionel Sambuc void test_pldx() {
95*0a6a1f1dSLionel Sambuc __pldx(1, 2, 0, 0);
96*0a6a1f1dSLionel Sambuc }
97*0a6a1f1dSLionel Sambuc
98*0a6a1f1dSLionel Sambuc /* 8.6.2 Instruction prefetch */
99*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_pli
100*0a6a1f1dSLionel Sambuc // ARM: call void @llvm.prefetch(i8* null, i32 0, i32 3, i32 0)
test_pli()101*0a6a1f1dSLionel Sambuc void test_pli() {
102*0a6a1f1dSLionel Sambuc __pli(0);
103*0a6a1f1dSLionel Sambuc }
104*0a6a1f1dSLionel Sambuc
105*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_plix
106*0a6a1f1dSLionel Sambuc // AArch32: call void @llvm.prefetch(i8* null, i32 0, i32 3, i32 0)
107*0a6a1f1dSLionel Sambuc // AArch64: call void @llvm.prefetch(i8* null, i32 0, i32 1, i32 0)
test_plix()108*0a6a1f1dSLionel Sambuc void test_plix() {
109*0a6a1f1dSLionel Sambuc __plix(2, 0, 0);
110*0a6a1f1dSLionel Sambuc }
111*0a6a1f1dSLionel Sambuc
112*0a6a1f1dSLionel Sambuc /* 8.7 NOP */
113*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_nop
114*0a6a1f1dSLionel Sambuc // AArch32: call void @llvm.arm.hint(i32 0)
115*0a6a1f1dSLionel Sambuc // AArch64: call void @llvm.aarch64.hint(i32 0)
test_nop(void)116*0a6a1f1dSLionel Sambuc void test_nop(void) {
117*0a6a1f1dSLionel Sambuc __nop();
118*0a6a1f1dSLionel Sambuc }
119*0a6a1f1dSLionel Sambuc
120*0a6a1f1dSLionel Sambuc /* 9 DATA-PROCESSING INTRINSICS */
121*0a6a1f1dSLionel Sambuc /* 9.2 Miscellaneous data-processing intrinsics */
122*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_ror
123*0a6a1f1dSLionel Sambuc // ARM: lshr
124*0a6a1f1dSLionel Sambuc // ARM: sub
125*0a6a1f1dSLionel Sambuc // ARM: shl
126*0a6a1f1dSLionel Sambuc // ARM: or
test_ror(uint32_t x,uint32_t y)127*0a6a1f1dSLionel Sambuc uint32_t test_ror(uint32_t x, uint32_t y) {
128*0a6a1f1dSLionel Sambuc return __ror(x, y);
129*0a6a1f1dSLionel Sambuc }
130*0a6a1f1dSLionel Sambuc
131*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_rorl
132*0a6a1f1dSLionel Sambuc // ARM: lshr
133*0a6a1f1dSLionel Sambuc // ARM: sub
134*0a6a1f1dSLionel Sambuc // ARM: shl
135*0a6a1f1dSLionel Sambuc // ARM: or
test_rorl(unsigned long x,uint32_t y)136*0a6a1f1dSLionel Sambuc unsigned long test_rorl(unsigned long x, uint32_t y) {
137*0a6a1f1dSLionel Sambuc return __rorl(x, y);
138*0a6a1f1dSLionel Sambuc }
139*0a6a1f1dSLionel Sambuc
140*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_rorll
141*0a6a1f1dSLionel Sambuc // ARM: lshr
142*0a6a1f1dSLionel Sambuc // ARM: sub
143*0a6a1f1dSLionel Sambuc // ARM: shl
144*0a6a1f1dSLionel Sambuc // ARM: or
test_rorll(uint64_t x,uint32_t y)145*0a6a1f1dSLionel Sambuc uint64_t test_rorll(uint64_t x, uint32_t y) {
146*0a6a1f1dSLionel Sambuc return __rorll(x, y);
147*0a6a1f1dSLionel Sambuc }
148*0a6a1f1dSLionel Sambuc
149*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_clz
150*0a6a1f1dSLionel Sambuc // ARM: call i32 @llvm.ctlz.i32(i32 %t, i1 false)
test_clz(uint32_t t)151*0a6a1f1dSLionel Sambuc uint32_t test_clz(uint32_t t) {
152*0a6a1f1dSLionel Sambuc return __clz(t);
153*0a6a1f1dSLionel Sambuc }
154*0a6a1f1dSLionel Sambuc
155*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_clzl
156*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.ctlz.i32(i32 %t, i1 false)
157*0a6a1f1dSLionel Sambuc // AArch64: call i64 @llvm.ctlz.i64(i64 %t, i1 false)
test_clzl(long t)158*0a6a1f1dSLionel Sambuc long test_clzl(long t) {
159*0a6a1f1dSLionel Sambuc return __clzl(t);
160*0a6a1f1dSLionel Sambuc }
161*0a6a1f1dSLionel Sambuc
162*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_clzll
163*0a6a1f1dSLionel Sambuc // ARM: call i64 @llvm.ctlz.i64(i64 %t, i1 false)
test_clzll(uint64_t t)164*0a6a1f1dSLionel Sambuc uint64_t test_clzll(uint64_t t) {
165*0a6a1f1dSLionel Sambuc return __clzll(t);
166*0a6a1f1dSLionel Sambuc }
167*0a6a1f1dSLionel Sambuc
168*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_rev
169*0a6a1f1dSLionel Sambuc // ARM: call i32 @llvm.bswap.i32(i32 %t)
test_rev(uint32_t t)170*0a6a1f1dSLionel Sambuc uint32_t test_rev(uint32_t t) {
171*0a6a1f1dSLionel Sambuc return __rev(t);
172*0a6a1f1dSLionel Sambuc }
173*0a6a1f1dSLionel Sambuc
174*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_revl
175*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.bswap.i32(i32 %t)
176*0a6a1f1dSLionel Sambuc // AArch64: call i64 @llvm.bswap.i64(i64 %t)
test_revl(long t)177*0a6a1f1dSLionel Sambuc long test_revl(long t) {
178*0a6a1f1dSLionel Sambuc return __revl(t);
179*0a6a1f1dSLionel Sambuc }
180*0a6a1f1dSLionel Sambuc
181*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_revll
182*0a6a1f1dSLionel Sambuc // ARM: call i64 @llvm.bswap.i64(i64 %t)
test_revll(uint64_t t)183*0a6a1f1dSLionel Sambuc uint64_t test_revll(uint64_t t) {
184*0a6a1f1dSLionel Sambuc return __revll(t);
185*0a6a1f1dSLionel Sambuc }
186*0a6a1f1dSLionel Sambuc
187*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_rev16
188*0a6a1f1dSLionel Sambuc // ARM: llvm.bswap
189*0a6a1f1dSLionel Sambuc // ARM: lshr
190*0a6a1f1dSLionel Sambuc // ARM: shl
191*0a6a1f1dSLionel Sambuc // ARM: or
test_rev16(uint32_t t)192*0a6a1f1dSLionel Sambuc uint32_t test_rev16(uint32_t t) {
193*0a6a1f1dSLionel Sambuc return __rev16(t);
194*0a6a1f1dSLionel Sambuc }
195*0a6a1f1dSLionel Sambuc
196*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_rev16l
197*0a6a1f1dSLionel Sambuc // ARM: llvm.bswap
198*0a6a1f1dSLionel Sambuc // ARM: lshr
199*0a6a1f1dSLionel Sambuc // ARM: shl
200*0a6a1f1dSLionel Sambuc // ARM: or
test_rev16l(long t)201*0a6a1f1dSLionel Sambuc long test_rev16l(long t) {
202*0a6a1f1dSLionel Sambuc return __rev16l(t);
203*0a6a1f1dSLionel Sambuc }
204*0a6a1f1dSLionel Sambuc
205*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_rev16ll
206*0a6a1f1dSLionel Sambuc // ARM: llvm.bswap
207*0a6a1f1dSLionel Sambuc // ARM: lshr
208*0a6a1f1dSLionel Sambuc // ARM: shl
209*0a6a1f1dSLionel Sambuc // ARM: or
test_rev16ll(uint64_t t)210*0a6a1f1dSLionel Sambuc uint64_t test_rev16ll(uint64_t t) {
211*0a6a1f1dSLionel Sambuc return __rev16ll(t);
212*0a6a1f1dSLionel Sambuc }
213*0a6a1f1dSLionel Sambuc
214*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_revsh
215*0a6a1f1dSLionel Sambuc // ARM: call i16 @llvm.bswap.i16(i16 %t)
test_revsh(int16_t t)216*0a6a1f1dSLionel Sambuc int16_t test_revsh(int16_t t) {
217*0a6a1f1dSLionel Sambuc return __revsh(t);
218*0a6a1f1dSLionel Sambuc }
219*0a6a1f1dSLionel Sambuc
220*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_rbit
221*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.rbit
222*0a6a1f1dSLionel Sambuc // AArch64: call i32 @llvm.aarch64.rbit.i32
test_rbit(uint32_t t)223*0a6a1f1dSLionel Sambuc uint32_t test_rbit(uint32_t t) {
224*0a6a1f1dSLionel Sambuc return __rbit(t);
225*0a6a1f1dSLionel Sambuc }
226*0a6a1f1dSLionel Sambuc
227*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_rbitl
228*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.rbit
229*0a6a1f1dSLionel Sambuc // AArch64: call i64 @llvm.aarch64.rbit.i64
test_rbitl(long t)230*0a6a1f1dSLionel Sambuc long test_rbitl(long t) {
231*0a6a1f1dSLionel Sambuc return __rbitl(t);
232*0a6a1f1dSLionel Sambuc }
233*0a6a1f1dSLionel Sambuc
234*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_rbitll
235*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.rbit
236*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.rbit
237*0a6a1f1dSLionel Sambuc // AArch64: call i64 @llvm.aarch64.rbit.i64
test_rbitll(uint64_t t)238*0a6a1f1dSLionel Sambuc uint64_t test_rbitll(uint64_t t) {
239*0a6a1f1dSLionel Sambuc return __rbitll(t);
240*0a6a1f1dSLionel Sambuc }
241*0a6a1f1dSLionel Sambuc
242*0a6a1f1dSLionel Sambuc /* 9.4 Saturating intrinsics */
243*0a6a1f1dSLionel Sambuc #ifdef __ARM_32BIT_STATE
244*0a6a1f1dSLionel Sambuc
245*0a6a1f1dSLionel Sambuc /* 9.4.1 Width-specified saturation intrinsics */
246*0a6a1f1dSLionel Sambuc // AArch32-LABEL: test_ssat
247*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.ssat(i32 %t, i32 1)
test_ssat(int32_t t)248*0a6a1f1dSLionel Sambuc int32_t test_ssat(int32_t t) {
249*0a6a1f1dSLionel Sambuc return __ssat(t, 1);
250*0a6a1f1dSLionel Sambuc }
251*0a6a1f1dSLionel Sambuc
252*0a6a1f1dSLionel Sambuc // AArch32-LABEL: test_usat
253*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.usat(i32 %t, i32 2)
test_usat(int32_t t)254*0a6a1f1dSLionel Sambuc int32_t test_usat(int32_t t) {
255*0a6a1f1dSLionel Sambuc return __usat(t, 2);
256*0a6a1f1dSLionel Sambuc }
257*0a6a1f1dSLionel Sambuc
258*0a6a1f1dSLionel Sambuc /* 9.4.2 Saturating addition and subtraction intrinsics */
259*0a6a1f1dSLionel Sambuc // AArch32-LABEL: test_qadd
260*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.qadd(i32 %a, i32 %b)
test_qadd(int32_t a,int32_t b)261*0a6a1f1dSLionel Sambuc int32_t test_qadd(int32_t a, int32_t b) {
262*0a6a1f1dSLionel Sambuc return __qadd(a, b);
263*0a6a1f1dSLionel Sambuc }
264*0a6a1f1dSLionel Sambuc
265*0a6a1f1dSLionel Sambuc // AArch32-LABEL: test_qsub
266*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.qsub(i32 %a, i32 %b)
test_qsub(int32_t a,int32_t b)267*0a6a1f1dSLionel Sambuc int32_t test_qsub(int32_t a, int32_t b) {
268*0a6a1f1dSLionel Sambuc return __qsub(a, b);
269*0a6a1f1dSLionel Sambuc }
270*0a6a1f1dSLionel Sambuc
271*0a6a1f1dSLionel Sambuc extern int32_t f();
272*0a6a1f1dSLionel Sambuc // AArch32-LABEL: test_qdbl
273*0a6a1f1dSLionel Sambuc // AArch32: [[VAR:%[a-z0-9]+]] = {{.*}} call {{.*}} @f
274*0a6a1f1dSLionel Sambuc // AArch32-NOT: call {{.*}} @f
275*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.qadd(i32 [[VAR]], i32 [[VAR]])
test_qdbl()276*0a6a1f1dSLionel Sambuc int32_t test_qdbl() {
277*0a6a1f1dSLionel Sambuc return __qdbl(f());
278*0a6a1f1dSLionel Sambuc }
279*0a6a1f1dSLionel Sambuc #endif
280*0a6a1f1dSLionel Sambuc
281*0a6a1f1dSLionel Sambuc /* 9.7 CRC32 intrinsics */
282*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_crc32b
283*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.crc32b
284*0a6a1f1dSLionel Sambuc // AArch64: call i32 @llvm.aarch64.crc32b
test_crc32b(uint32_t a,uint8_t b)285*0a6a1f1dSLionel Sambuc uint32_t test_crc32b(uint32_t a, uint8_t b) {
286*0a6a1f1dSLionel Sambuc return __crc32b(a, b);
287*0a6a1f1dSLionel Sambuc }
288*0a6a1f1dSLionel Sambuc
289*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_crc32h
290*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.crc32h
291*0a6a1f1dSLionel Sambuc // AArch64: call i32 @llvm.aarch64.crc32h
test_crc32h(uint32_t a,uint16_t b)292*0a6a1f1dSLionel Sambuc uint32_t test_crc32h(uint32_t a, uint16_t b) {
293*0a6a1f1dSLionel Sambuc return __crc32h(a, b);
294*0a6a1f1dSLionel Sambuc }
295*0a6a1f1dSLionel Sambuc
296*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_crc32w
297*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.crc32w
298*0a6a1f1dSLionel Sambuc // AArch64: call i32 @llvm.aarch64.crc32w
test_crc32w(uint32_t a,uint32_t b)299*0a6a1f1dSLionel Sambuc uint32_t test_crc32w(uint32_t a, uint32_t b) {
300*0a6a1f1dSLionel Sambuc return __crc32w(a, b);
301*0a6a1f1dSLionel Sambuc }
302*0a6a1f1dSLionel Sambuc
303*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_crc32d
304*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.crc32w
305*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.crc32w
306*0a6a1f1dSLionel Sambuc // AArch64: call i32 @llvm.aarch64.crc32x
test_crc32d(uint32_t a,uint64_t b)307*0a6a1f1dSLionel Sambuc uint32_t test_crc32d(uint32_t a, uint64_t b) {
308*0a6a1f1dSLionel Sambuc return __crc32d(a, b);
309*0a6a1f1dSLionel Sambuc }
310*0a6a1f1dSLionel Sambuc
311*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_crc32cb
312*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.crc32cb
313*0a6a1f1dSLionel Sambuc // AArch64: call i32 @llvm.aarch64.crc32cb
test_crc32cb(uint32_t a,uint8_t b)314*0a6a1f1dSLionel Sambuc uint32_t test_crc32cb(uint32_t a, uint8_t b) {
315*0a6a1f1dSLionel Sambuc return __crc32cb(a, b);
316*0a6a1f1dSLionel Sambuc }
317*0a6a1f1dSLionel Sambuc
318*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_crc32ch
319*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.crc32ch
320*0a6a1f1dSLionel Sambuc // AArch64: call i32 @llvm.aarch64.crc32ch
test_crc32ch(uint32_t a,uint16_t b)321*0a6a1f1dSLionel Sambuc uint32_t test_crc32ch(uint32_t a, uint16_t b) {
322*0a6a1f1dSLionel Sambuc return __crc32ch(a, b);
323*0a6a1f1dSLionel Sambuc }
324*0a6a1f1dSLionel Sambuc
325*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_crc32cw
326*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.crc32cw
327*0a6a1f1dSLionel Sambuc // AArch64: call i32 @llvm.aarch64.crc32cw
test_crc32cw(uint32_t a,uint32_t b)328*0a6a1f1dSLionel Sambuc uint32_t test_crc32cw(uint32_t a, uint32_t b) {
329*0a6a1f1dSLionel Sambuc return __crc32cw(a, b);
330*0a6a1f1dSLionel Sambuc }
331*0a6a1f1dSLionel Sambuc
332*0a6a1f1dSLionel Sambuc // ARM-LABEL: test_crc32cd
333*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.crc32cw
334*0a6a1f1dSLionel Sambuc // AArch32: call i32 @llvm.arm.crc32cw
335*0a6a1f1dSLionel Sambuc // AArch64: call i32 @llvm.aarch64.crc32cx
test_crc32cd(uint32_t a,uint64_t b)336*0a6a1f1dSLionel Sambuc uint32_t test_crc32cd(uint32_t a, uint64_t b) {
337*0a6a1f1dSLionel Sambuc return __crc32cd(a, b);
338*0a6a1f1dSLionel Sambuc }
339