OLD | NEW |
---|---|
1 ; This file checks that Subzero generates code in accordance with the | 1 ; This file checks that Subzero generates code in accordance with the |
2 ; calling convention for integers. | 2 ; calling convention for integers. |
3 | 3 |
4 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 4 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
5 ; RUN: --target x8632 -i %s --args -O2 \ | 5 ; RUN: --target x8632 -i %s --args -O2 \ |
6 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 6 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
7 | 7 |
8 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) | 8 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) |
9 ; once enough infrastructure is in. Also, switch to --filetype=obj | 9 ; once enough infrastructure is in. Also, switch to --filetype=obj |
10 ; when possible. | 10 ; when possible. |
11 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 11 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
12 ; RUN: --command %p2i --filetype=asm --assemble \ | 12 ; RUN: --command %p2i --filetype=asm --assemble \ |
13 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ | 13 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ |
14 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 14 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
15 ; RUN: --command FileCheck --check-prefix ARM32 %s | 15 ; RUN: --command FileCheck --check-prefix ARM32 %s |
16 | 16 |
17 ; TODO(RKotler): Stop skipping unimplemented parts (via --skip-unimplemented) | |
18 ; once enough infrastructure is in. Also, switch to --filetype=obj | |
19 ; when possible. | |
20 ; RUN: %if --need=target_MIPS32 --need=allow_dump \ | |
21 ; RUN: --command %p2i --filetype=asm --assemble \ | |
22 ; RUN: --disassemble --target mips32 -i %s --args -O2 --skip-unimplemented \ | |
23 ; RUN: | %if --need=target_MIPS32 --need=allow_dump \ | |
24 ; RUN: --command FileCheck --check-prefix MIPS32 %s | |
25 | |
17 ; For x86-32, integer arguments use the stack. | 26 ; For x86-32, integer arguments use the stack. |
18 ; For ARM32, integer arguments can be r0-r3. i64 arguments occupy two | 27 ; For ARM32, integer arguments can be r0-r3. i64 arguments occupy two |
19 ; adjacent 32-bit registers, and require the first to be an even register. | 28 ; adjacent 32-bit registers, and require the first to be an even register. |
20 | 29 |
21 | 30 |
22 ; i32 | 31 ; i32 |
23 | 32 |
24 define i32 @test_returning32_arg0(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i3 2 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { | 33 define i32 @test_returning32_arg0(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i3 2 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { |
25 entry: | 34 entry: |
26 ret i32 %arg0 | 35 ret i32 %arg0 |
27 } | 36 } |
28 ; CHECK-LABEL: test_returning32_arg0 | 37 ; CHECK-LABEL: test_returning32_arg0 |
29 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x4] | 38 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x4] |
30 ; CHECK-NEXT: ret | 39 ; CHECK-NEXT: ret |
31 ; ARM32-LABEL: test_returning32_arg0 | 40 ; ARM32-LABEL: test_returning32_arg0 |
32 ; ARM32-NEXT: bx lr | 41 ; ARM32-NEXT: bx lr |
42 ; MIPS32-LABEL: <test_returning32_arg0> | |
43 ; MIPS32: move v0,a0 | |
44 ; MIPS32-NEXT: jr ra | |
33 | 45 |
34 define i32 @test_returning32_arg1(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i3 2 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { | 46 define i32 @test_returning32_arg1(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i3 2 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { |
35 entry: | 47 entry: |
36 ret i32 %arg1 | 48 ret i32 %arg1 |
37 } | 49 } |
38 ; CHECK-LABEL: test_returning32_arg1 | 50 ; CHECK-LABEL: test_returning32_arg1 |
39 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x8] | 51 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x8] |
40 ; CHECK-NEXT: ret | 52 ; CHECK-NEXT: ret |
41 ; ARM32-LABEL: test_returning32_arg1 | 53 ; ARM32-LABEL: test_returning32_arg1 |
42 ; ARM32-NEXT: mov r0, r1 | 54 ; ARM32-NEXT: mov r0, r1 |
43 ; ARM32-NEXT: bx lr | 55 ; ARM32-NEXT: bx lr |
44 | 56 ; MIPS32-LABEL: <test_returning32_arg1> |
57 ; MIPS32: move» v0,a1 | |
Jim Stichnoth
2015/10/18 11:48:40
remove tab characters
rkotlerimgtec
2015/10/19 00:12:01
Done.
| |
58 ; MIPS32-NEXT: jr» ra | |
45 | 59 |
46 define i32 @test_returning32_arg2(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i3 2 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { | 60 define i32 @test_returning32_arg2(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i3 2 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { |
47 entry: | 61 entry: |
48 ret i32 %arg2 | 62 ret i32 %arg2 |
49 } | 63 } |
50 ; CHECK-LABEL: test_returning32_arg2 | 64 ; CHECK-LABEL: test_returning32_arg2 |
51 ; CHECK-NEXT: mov eax,{{.*}} [esp+0xc] | 65 ; CHECK-NEXT: mov eax,{{.*}} [esp+0xc] |
52 ; CHECK-NEXT: ret | 66 ; CHECK-NEXT: ret |
53 ; ARM32-LABEL: test_returning32_arg2 | 67 ; ARM32-LABEL: test_returning32_arg2 |
54 ; ARM32-NEXT: mov r0, r2 | 68 ; ARM32-NEXT: mov r0, r2 |
55 ; ARM32-NEXT: bx lr | 69 ; ARM32-NEXT: bx lr |
70 ; MIPS32-LABEL: <test_returning32_arg2> | |
71 ; MIPS32: move v0,a2 | |
72 ; MIPS32-NEXT: jr ra | |
56 | 73 |
57 | 74 |
58 define i32 @test_returning32_arg3(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i3 2 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { | 75 define i32 @test_returning32_arg3(i32 %arg0, i32 %arg1, i32 %arg2, i32 %arg3, i3 2 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { |
59 entry: | 76 entry: |
60 ret i32 %arg3 | 77 ret i32 %arg3 |
61 } | 78 } |
62 ; CHECK-LABEL: test_returning32_arg3 | 79 ; CHECK-LABEL: test_returning32_arg3 |
63 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x10] | 80 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x10] |
64 ; CHECK-NEXT: ret | 81 ; CHECK-NEXT: ret |
65 ; ARM32-LABEL: test_returning32_arg3 | 82 ; ARM32-LABEL: test_returning32_arg3 |
(...skipping 29 matching lines...) Expand all Loading... | |
95 define i64 @test_returning64_arg0(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3) { | 112 define i64 @test_returning64_arg0(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3) { |
96 entry: | 113 entry: |
97 ret i64 %arg0 | 114 ret i64 %arg0 |
98 } | 115 } |
99 ; CHECK-LABEL: test_returning64_arg0 | 116 ; CHECK-LABEL: test_returning64_arg0 |
100 ; CHECK-NEXT: mov {{.*}} [esp+0x4] | 117 ; CHECK-NEXT: mov {{.*}} [esp+0x4] |
101 ; CHECK-NEXT: mov {{.*}} [esp+0x8] | 118 ; CHECK-NEXT: mov {{.*}} [esp+0x8] |
102 ; CHECK: ret | 119 ; CHECK: ret |
103 ; ARM32-LABEL: test_returning64_arg0 | 120 ; ARM32-LABEL: test_returning64_arg0 |
104 ; ARM32-NEXT: bx lr | 121 ; ARM32-NEXT: bx lr |
122 ; MIPS32-LABEL: <test_returning64_arg0> | |
123 ; MIPS32-NEXT: move v0,a0 | |
124 ; MIPS32-NEXT: move v1,a1 | |
125 | |
105 | 126 |
106 define i64 @test_returning64_arg1(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3) { | 127 define i64 @test_returning64_arg1(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3) { |
107 entry: | 128 entry: |
108 ret i64 %arg1 | 129 ret i64 %arg1 |
109 } | 130 } |
110 ; CHECK-LABEL: test_returning64_arg1 | 131 ; CHECK-LABEL: test_returning64_arg1 |
111 ; CHECK-NEXT: mov {{.*}} [esp+0xc] | 132 ; CHECK-NEXT: mov {{.*}} [esp+0xc] |
112 ; CHECK-NEXT: mov {{.*}} [esp+0x10] | 133 ; CHECK-NEXT: mov {{.*}} [esp+0x10] |
113 ; CHECK: ret | 134 ; CHECK: ret |
114 ; ARM32-LABEL: test_returning64_arg1 | 135 ; ARM32-LABEL: test_returning64_arg1 |
115 ; ARM32-NEXT: mov r0, r2 | 136 ; ARM32-NEXT: mov r0, r2 |
116 ; ARM32-NEXT: mov r1, r3 | 137 ; ARM32-NEXT: mov r1, r3 |
117 ; ARM32-NEXT: bx lr | 138 ; ARM32-NEXT: bx lr |
139 ; MIPS32-LABEL: <test_returning64_arg1> | |
140 ; MIPS32-NEXT: move v0,a2 | |
141 ; MIPS32-NEXT: move v1,a3 | |
118 | 142 |
119 define i64 @test_returning64_arg2(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3) { | 143 define i64 @test_returning64_arg2(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3) { |
120 entry: | 144 entry: |
121 ret i64 %arg2 | 145 ret i64 %arg2 |
122 } | 146 } |
123 ; CHECK-LABEL: test_returning64_arg2 | 147 ; CHECK-LABEL: test_returning64_arg2 |
124 ; CHECK-NEXT: mov {{.*}} [esp+0x14] | 148 ; CHECK-NEXT: mov {{.*}} [esp+0x14] |
125 ; CHECK-NEXT: mov {{.*}} [esp+0x18] | 149 ; CHECK-NEXT: mov {{.*}} [esp+0x18] |
126 ; CHECK: ret | 150 ; CHECK: ret |
127 ; ARM32-LABEL: test_returning64_arg2 | 151 ; ARM32-LABEL: test_returning64_arg2 |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
267 ; ARM32-DAG: mov [[REG1:.*]], r1 | 291 ; ARM32-DAG: mov [[REG1:.*]], r1 |
268 ; ARM32-DAG: mov [[REG2:.*]], r2 | 292 ; ARM32-DAG: mov [[REG2:.*]], r2 |
269 ; ARM32-DAG: mov [[REG3:.*]], r3 | 293 ; ARM32-DAG: mov [[REG3:.*]], r3 |
270 ; ARM32: str [[REG2]], [sp] | 294 ; ARM32: str [[REG2]], [sp] |
271 ; ARM32: str [[REG1]], [sp, #4] | 295 ; ARM32: str [[REG1]], [sp, #4] |
272 ; ARM32-DAG: mov r0 | 296 ; ARM32-DAG: mov r0 |
273 ; ARM32-DAG: mov r1 | 297 ; ARM32-DAG: mov r1 |
274 ; ARM32-DAG: mov r2 | 298 ; ARM32-DAG: mov r2 |
275 ; ARM32-DAG: mov r3, [[REG3]] | 299 ; ARM32-DAG: mov r3, [[REG3]] |
276 ; ARM32: bl | 300 ; ARM32: bl |
OLD | NEW |