xref: /aosp_15_r20/external/clang/test/CodeGen/arm-microsoft-intrinsics.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple thumbv7-windows -fms-compatibility -emit-llvm -o - %s \
2*67e74705SXin Li // RUN:    | FileCheck %s -check-prefix CHECK-MSVC
3*67e74705SXin Li 
4*67e74705SXin Li // RUN: not %clang_cc1 -triple armv7-eabi -Werror -S -o /dev/null %s 2>&1 \
5*67e74705SXin Li // RUN:    | FileCheck %s -check-prefix CHECK-EABI
6*67e74705SXin Li 
check__dmb(void)7*67e74705SXin Li void check__dmb(void) {
8*67e74705SXin Li   __dmb(0);
9*67e74705SXin Li }
10*67e74705SXin Li 
11*67e74705SXin Li // CHECK-MSVC: @llvm.arm.dmb(i32 0)
12*67e74705SXin Li // CHECK-EABI: error: implicit declaration of function '__dmb'
13*67e74705SXin Li 
check__dsb(void)14*67e74705SXin Li void check__dsb(void) {
15*67e74705SXin Li   __dsb(0);
16*67e74705SXin Li }
17*67e74705SXin Li 
18*67e74705SXin Li // CHECK-MSVC: @llvm.arm.dsb(i32 0)
19*67e74705SXin Li // CHECK-EABI: error: implicit declaration of function '__dsb'
20*67e74705SXin Li 
check__isb(void)21*67e74705SXin Li void check__isb(void) {
22*67e74705SXin Li   __isb(0);
23*67e74705SXin Li }
24*67e74705SXin Li 
25*67e74705SXin Li // CHECK-MSVC: @llvm.arm.isb(i32 0)
26*67e74705SXin Li // CHECK-EABI: error: implicit declaration of function '__isb'
27*67e74705SXin Li 
check__ldrexd(void)28*67e74705SXin Li __INT64_TYPE__ check__ldrexd(void) {
29*67e74705SXin Li   __INT64_TYPE__ i64;
30*67e74705SXin Li   return __ldrexd(&i64);
31*67e74705SXin Li }
32*67e74705SXin Li 
33*67e74705SXin Li // CHECK-MSVC: @llvm.arm.ldrexd(i8* {{.*}})
34*67e74705SXin Li // CHECK-EABI: error: implicit declaration of function '__ldrexd'
35*67e74705SXin Li 
check_MoveFromCoprocessor(void)36*67e74705SXin Li unsigned int check_MoveFromCoprocessor(void) {
37*67e74705SXin Li   return _MoveFromCoprocessor(0, 0, 0, 0, 0);
38*67e74705SXin Li }
39*67e74705SXin Li 
40*67e74705SXin Li // CHECK-MSVC: @llvm.arm.mrc(i32 0, i32 0, i32 0, i32 0, i32 0)
41*67e74705SXin Li // CHECK-EABI: error: implicit declaration of function '_MoveFromCoprocessor'
42*67e74705SXin Li 
check_MoveFromCoprocessor2(void)43*67e74705SXin Li unsigned int check_MoveFromCoprocessor2(void) {
44*67e74705SXin Li   return _MoveFromCoprocessor2(0, 0, 0, 0, 0);
45*67e74705SXin Li }
46*67e74705SXin Li 
47*67e74705SXin Li // CHECK-MSVC: @llvm.arm.mrc2(i32 0, i32 0, i32 0, i32 0, i32 0)
48*67e74705SXin Li // CHECK-EABI: error: implicit declaration of function '_MoveFromCoprocessor2'
49*67e74705SXin Li 
check_MoveToCoprocessor(unsigned int value)50*67e74705SXin Li void check_MoveToCoprocessor(unsigned int value) {
51*67e74705SXin Li   _MoveToCoprocessor(value, 10, 7, 1, 0, 0);
52*67e74705SXin Li }
53*67e74705SXin Li 
54*67e74705SXin Li // CHECK-MSVC: @llvm.arm.mcr(i32 10, i32 7, i32 %{{[^,]*}}, i32 1, i32 0, i32 0)
55*67e74705SXin Li // CHECK-EABI: error: implicit declaration of function '_MoveToCoprocessor'
56*67e74705SXin Li 
check_MoveToCoprocessor2(unsigned int value)57*67e74705SXin Li void check_MoveToCoprocessor2(unsigned int value) {
58*67e74705SXin Li   _MoveToCoprocessor2(value, 10, 7, 1, 0, 0);
59*67e74705SXin Li }
60*67e74705SXin Li 
61*67e74705SXin Li // CHECK-MSVC: @llvm.arm.mcr2(i32 10, i32 7, i32 %{{[^,]*}}, i32 1, i32 0, i32 0)
62*67e74705SXin Li // CHECK-EABI: error: implicit declaration of function '_MoveToCoprocessor2'
63*67e74705SXin Li 
64