xref: /minix3/external/bsd/llvm/dist/clang/test/CodeGen/builtins-arm.c (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1f4a2713aSLionel Sambuc // REQUIRES: arm-registered-target
2f4a2713aSLionel Sambuc // RUN: %clang_cc1 -Wall -Werror -triple thumbv7-eabi -target-cpu cortex-a8 -O3 -emit-llvm -o - %s | FileCheck %s
3f4a2713aSLionel Sambuc 
f0()4f4a2713aSLionel Sambuc void *f0()
5f4a2713aSLionel Sambuc {
6f4a2713aSLionel Sambuc   return __builtin_thread_pointer();
7f4a2713aSLionel Sambuc }
8f4a2713aSLionel Sambuc 
f1(char * a,char * b)9f4a2713aSLionel Sambuc void f1(char *a, char *b) {
10f4a2713aSLionel Sambuc 	__clear_cache(a,b);
11f4a2713aSLionel Sambuc }
12f4a2713aSLionel Sambuc 
13f4a2713aSLionel Sambuc // CHECK: call {{.*}} @__clear_cache
14f4a2713aSLionel Sambuc 
test_eh_return_data_regno()15f4a2713aSLionel Sambuc void test_eh_return_data_regno()
16f4a2713aSLionel Sambuc {
17f4a2713aSLionel Sambuc   volatile int res;
18f4a2713aSLionel Sambuc   res = __builtin_eh_return_data_regno(0);  // CHECK: store volatile i32 0
19f4a2713aSLionel Sambuc   res = __builtin_eh_return_data_regno(1);  // CHECK: store volatile i32 1
20f4a2713aSLionel Sambuc }
21f4a2713aSLionel Sambuc 
nop()22*0a6a1f1dSLionel Sambuc void nop() {
23*0a6a1f1dSLionel Sambuc   __builtin_arm_nop();
24*0a6a1f1dSLionel Sambuc }
25*0a6a1f1dSLionel Sambuc 
26*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.hint(i32 0)
27*0a6a1f1dSLionel Sambuc 
yield()28*0a6a1f1dSLionel Sambuc void yield() {
29*0a6a1f1dSLionel Sambuc   __builtin_arm_yield();
30*0a6a1f1dSLionel Sambuc }
31*0a6a1f1dSLionel Sambuc 
32*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.hint(i32 1)
33*0a6a1f1dSLionel Sambuc 
wfe()34*0a6a1f1dSLionel Sambuc void wfe() {
35*0a6a1f1dSLionel Sambuc   __builtin_arm_wfe();
36*0a6a1f1dSLionel Sambuc }
37*0a6a1f1dSLionel Sambuc 
38*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.hint(i32 2)
39*0a6a1f1dSLionel Sambuc 
wfi()40*0a6a1f1dSLionel Sambuc void wfi() {
41*0a6a1f1dSLionel Sambuc   __builtin_arm_wfi();
42*0a6a1f1dSLionel Sambuc }
43*0a6a1f1dSLionel Sambuc 
44*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.hint(i32 3)
45*0a6a1f1dSLionel Sambuc 
sev()46*0a6a1f1dSLionel Sambuc void sev() {
47*0a6a1f1dSLionel Sambuc   __builtin_arm_sev();
48*0a6a1f1dSLionel Sambuc }
49*0a6a1f1dSLionel Sambuc 
50*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.hint(i32 4)
51*0a6a1f1dSLionel Sambuc 
sevl()52f4a2713aSLionel Sambuc void sevl() {
53f4a2713aSLionel Sambuc   __builtin_arm_sevl();
54f4a2713aSLionel Sambuc }
55*0a6a1f1dSLionel Sambuc 
56*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.hint(i32 5)
57*0a6a1f1dSLionel Sambuc 
dbg()58*0a6a1f1dSLionel Sambuc void dbg() {
59*0a6a1f1dSLionel Sambuc   __builtin_arm_dbg(0);
60*0a6a1f1dSLionel Sambuc }
61*0a6a1f1dSLionel Sambuc 
62*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.dbg(i32 0)
63f4a2713aSLionel Sambuc 
test_barrier()64f4a2713aSLionel Sambuc void test_barrier() {
65f4a2713aSLionel Sambuc   __builtin_arm_dmb(1); //CHECK: call {{.*}} @llvm.arm.dmb(i32 1)
66f4a2713aSLionel Sambuc   __builtin_arm_dsb(2); //CHECK: call {{.*}} @llvm.arm.dsb(i32 2)
67*0a6a1f1dSLionel Sambuc   __builtin_arm_isb(3); //CHECK: call {{.*}} @llvm.arm.isb(i32 3)
68*0a6a1f1dSLionel Sambuc }
69*0a6a1f1dSLionel Sambuc 
70*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.arm.rbit(i32 %a)
71*0a6a1f1dSLionel Sambuc 
rbit(unsigned a)72*0a6a1f1dSLionel Sambuc unsigned rbit(unsigned a) {
73*0a6a1f1dSLionel Sambuc   return __builtin_arm_rbit(a);
74*0a6a1f1dSLionel Sambuc }
75*0a6a1f1dSLionel Sambuc 
prefetch(int i)76*0a6a1f1dSLionel Sambuc void prefetch(int i) {
77*0a6a1f1dSLionel Sambuc   __builtin_arm_prefetch(&i, 0, 1);
78*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.prefetch(i8* %{{.*}}, i32 0, i32 3, i32 1)
79*0a6a1f1dSLionel Sambuc 
80*0a6a1f1dSLionel Sambuc   __builtin_arm_prefetch(&i, 1, 1);
81*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.prefetch(i8* %{{.*}}, i32 1, i32 3, i32 1)
82*0a6a1f1dSLionel Sambuc 
83*0a6a1f1dSLionel Sambuc 
84*0a6a1f1dSLionel Sambuc   __builtin_arm_prefetch(&i, 1, 0);
85*0a6a1f1dSLionel Sambuc // CHECK: call {{.*}} @llvm.prefetch(i8* %{{.*}}, i32 1, i32 3, i32 0)
86f4a2713aSLionel Sambuc }
87