xref: /llvm-project/clang/test/CodeGen/M68k/inline-asm-gcc-regs.c (revision 4f0b5d5e8067cadafc4473476eb68aa0addad488)
1 // RUN: %clang_cc1 -triple m68k -emit-llvm -O2 %s -o - | FileCheck %s
2 
3 /// Check GCC register names and alias can be used in register variable definition.
4 
5 // CHECK-LABEL: @test_d0
6 // CHECK: call void asm sideeffect "", "{d0}"(i32 undef)
test_d0()7 void test_d0() {
8     register int a asm ("d0");
9     asm ("" :: "r" (a));
10 }
11 
12 // CHECK-LABEL: @test_d1
13 // CHECK: call void asm sideeffect "", "{d1}"(i32 undef)
test_d1()14 void test_d1() {
15     register int a asm ("d1");
16     asm ("" :: "r" (a));
17 }
18 
19 // CHECK-LABEL: @test_d2
20 // CHECK: call void asm sideeffect "", "{d2}"(i32 undef)
test_d2()21 void test_d2() {
22     register int a asm ("d2");
23     asm ("" :: "r" (a));
24 }
25 
26 // CHECK-LABEL: @test_d3
27 // CHECK: call void asm sideeffect "", "{d3}"(i32 undef)
test_d3()28 void test_d3() {
29     register int a asm ("d3");
30     asm ("" :: "r" (a));
31 }
32 
33 // CHECK-LABEL: @test_d4
34 // CHECK: call void asm sideeffect "", "{d4}"(i32 undef)
test_d4()35 void test_d4() {
36     register int a asm ("d4");
37     asm ("" :: "r" (a));
38 }
39 
40 // CHECK-LABEL: @test_d5
41 // CHECK: call void asm sideeffect "", "{d5}"(i32 undef)
test_d5()42 void test_d5() {
43     register int a asm ("d5");
44     asm ("" :: "r" (a));
45 }
46 
47 // CHECK-LABEL: @test_d6
48 // CHECK: call void asm sideeffect "", "{d6}"(i32 undef)
test_d6()49 void test_d6() {
50     register int a asm ("d6");
51     asm ("" :: "r" (a));
52 }
53 
54 // CHECK-LABEL: @test_d7
55 // CHECK: call void asm sideeffect "", "{d7}"(i32 undef)
test_d7()56 void test_d7() {
57     register int a asm ("d7");
58     asm ("" :: "r" (a));
59 }
60 
61 // CHECK-LABEL: @test_a0
62 // CHECK: call void asm sideeffect "", "{a0}"(i32 undef)
test_a0()63 void test_a0() {
64     register int a asm ("a0");
65     asm ("" :: "r" (a));
66 }
67 
68 // CHECK-LABEL: @test_a1
69 // CHECK: call void asm sideeffect "", "{a1}"(i32 undef)
test_a1()70 void test_a1() {
71     register int a asm ("a1");
72     asm ("" :: "r" (a));
73 }
74 
75 // CHECK-LABEL: @test_a2
76 // CHECK: call void asm sideeffect "", "{a2}"(i32 undef)
test_a2()77 void test_a2() {
78     register int a asm ("a2");
79     asm ("" :: "r" (a));
80 }
81 
82 // CHECK-LABEL: @test_a3
83 // CHECK: call void asm sideeffect "", "{a3}"(i32 undef)
test_a3()84 void test_a3() {
85     register int a asm ("a3");
86     asm ("" :: "r" (a));
87 }
88 
89 // CHECK-LABEL: @test_a4
90 // CHECK: call void asm sideeffect "", "{a4}"(i32 undef)
test_a4()91 void test_a4() {
92     register int a asm ("a4");
93     asm ("" :: "r" (a));
94 }
95 
96 // CHECK-LABEL: @test_a5
97 // CHECK: call void asm sideeffect "", "{a5}"(i32 undef)
test_a5()98 void test_a5() {
99     register int a asm ("a5");
100     register int b asm ("bp");
101     asm ("" :: "r" (a));
102     asm ("" :: "r" (b));
103 }
104 
105 // CHECK-LABEL: @test_a6
106 // CHECK: call void asm sideeffect "", "{a6}"(i32 undef)
test_a6()107 void test_a6() {
108     register int a asm ("a6");
109     register int b asm ("fp");
110     asm ("" :: "r" (a));
111     asm ("" :: "r" (b));
112 }
113 
114 // CHECK-LABEL: @test_sp
115 // CHECK: call void asm sideeffect "", "{sp}"(i32 undef)
test_sp()116 void test_sp() {
117     register int a asm ("sp");
118     register int b asm ("usp");
119     register int c asm ("ssp");
120     register int d asm ("isp");
121     register int e asm ("a7");
122     asm ("" :: "r" (a));
123     asm ("" :: "r" (b));
124     asm ("" :: "r" (c));
125     asm ("" :: "r" (d));
126     asm ("" :: "r" (e));
127 }
128 
129 // CHECK-LABEL: @test_pc
130 // CHECK: call void asm sideeffect "", "{pc}"(i32 undef)
test_pc()131 void test_pc() {
132     register int a asm ("pc");
133     asm ("" :: "r" (a));
134 }
135