| 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 -allow-externally-defined-symbols \ | 5 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ |
| 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. |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 define internal i32 @test_returning32_arg0(i32 %arg0, i32 %arg1, i32 %arg2, i32
%arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { | 35 define internal i32 @test_returning32_arg0(i32 %arg0, i32 %arg1, i32 %arg2, i32
%arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { |
| 36 entry: | 36 entry: |
| 37 ret i32 %arg0 | 37 ret i32 %arg0 |
| 38 } | 38 } |
| 39 ; CHECK-LABEL: test_returning32_arg0 | 39 ; CHECK-LABEL: test_returning32_arg0 |
| 40 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x4] | 40 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x4] |
| 41 ; CHECK-NEXT: ret | 41 ; CHECK-NEXT: ret |
| 42 ; ARM32-LABEL: test_returning32_arg0 | 42 ; ARM32-LABEL: test_returning32_arg0 |
| 43 ; ARM32-NEXT: bx lr | 43 ; ARM32-NEXT: bx lr |
| 44 ; MIPS32-LABEL: test_returning32_arg0 | 44 ; MIPS32-LABEL: test_returning32_arg0 |
| 45 ; MIPS32: move v0,a0 | 45 ; MIPS32: add v0,zero,a0 |
| 46 ; MIPS32-NEXT: jr ra | 46 ; MIPS32-NEXT: jr ra |
| 47 | 47 |
| 48 define internal i32 @test_returning32_arg1(i32 %arg0, i32 %arg1, i32 %arg2, i32
%arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { | 48 define internal i32 @test_returning32_arg1(i32 %arg0, i32 %arg1, i32 %arg2, i32
%arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { |
| 49 entry: | 49 entry: |
| 50 ret i32 %arg1 | 50 ret i32 %arg1 |
| 51 } | 51 } |
| 52 ; CHECK-LABEL: test_returning32_arg1 | 52 ; CHECK-LABEL: test_returning32_arg1 |
| 53 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x8] | 53 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x8] |
| 54 ; CHECK-NEXT: ret | 54 ; CHECK-NEXT: ret |
| 55 ; ARM32-LABEL: test_returning32_arg1 | 55 ; ARM32-LABEL: test_returning32_arg1 |
| 56 ; ARM32-NEXT: mov r0, r1 | 56 ; ARM32-NEXT: mov r0, r1 |
| 57 ; ARM32-NEXT: bx lr | 57 ; ARM32-NEXT: bx lr |
| 58 ; MIPS32-LABEL: test_returning32_arg1 | 58 ; MIPS32-LABEL: test_returning32_arg1 |
| 59 ; MIPS32: move v0,a1 | 59 ; MIPS32: add v0,zero,a1 |
| 60 ; MIPS32-NEXT: jr ra | 60 ; MIPS32-NEXT: jr ra |
| 61 | 61 |
| 62 define internal i32 @test_returning32_arg2(i32 %arg0, i32 %arg1, i32 %arg2, i32
%arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { | 62 define internal i32 @test_returning32_arg2(i32 %arg0, i32 %arg1, i32 %arg2, i32
%arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { |
| 63 entry: | 63 entry: |
| 64 ret i32 %arg2 | 64 ret i32 %arg2 |
| 65 } | 65 } |
| 66 ; CHECK-LABEL: test_returning32_arg2 | 66 ; CHECK-LABEL: test_returning32_arg2 |
| 67 ; CHECK-NEXT: mov eax,{{.*}} [esp+0xc] | 67 ; CHECK-NEXT: mov eax,{{.*}} [esp+0xc] |
| 68 ; CHECK-NEXT: ret | 68 ; CHECK-NEXT: ret |
| 69 ; ARM32-LABEL: test_returning32_arg2 | 69 ; ARM32-LABEL: test_returning32_arg2 |
| 70 ; ARM32-NEXT: mov r0, r2 | 70 ; ARM32-NEXT: mov r0, r2 |
| 71 ; ARM32-NEXT: bx lr | 71 ; ARM32-NEXT: bx lr |
| 72 ; MIPS32-LABEL: test_returning32_arg2 | 72 ; MIPS32-LABEL: test_returning32_arg2 |
| 73 ; MIPS32: move v0,a2 | 73 ; MIPS32: add v0,zero,a2 |
| 74 ; MIPS32-NEXT: jr ra | 74 ; MIPS32-NEXT: jr ra |
| 75 | 75 |
| 76 | 76 |
| 77 define internal i32 @test_returning32_arg3(i32 %arg0, i32 %arg1, i32 %arg2, i32
%arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { | 77 define internal i32 @test_returning32_arg3(i32 %arg0, i32 %arg1, i32 %arg2, i32
%arg3, i32 %arg4, i32 %arg5, i32 %arg6, i32 %arg7) { |
| 78 entry: | 78 entry: |
| 79 ret i32 %arg3 | 79 ret i32 %arg3 |
| 80 } | 80 } |
| 81 ; CHECK-LABEL: test_returning32_arg3 | 81 ; CHECK-LABEL: test_returning32_arg3 |
| 82 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x10] | 82 ; CHECK-NEXT: mov eax,{{.*}} [esp+0x10] |
| 83 ; CHECK-NEXT: ret | 83 ; CHECK-NEXT: ret |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 entry: | 115 entry: |
| 116 ret i64 %arg0 | 116 ret i64 %arg0 |
| 117 } | 117 } |
| 118 ; CHECK-LABEL: test_returning64_arg0 | 118 ; CHECK-LABEL: test_returning64_arg0 |
| 119 ; CHECK-NEXT: mov {{.*}} [esp+0x4] | 119 ; CHECK-NEXT: mov {{.*}} [esp+0x4] |
| 120 ; CHECK-NEXT: mov {{.*}} [esp+0x8] | 120 ; CHECK-NEXT: mov {{.*}} [esp+0x8] |
| 121 ; CHECK: ret | 121 ; CHECK: ret |
| 122 ; ARM32-LABEL: test_returning64_arg0 | 122 ; ARM32-LABEL: test_returning64_arg0 |
| 123 ; ARM32-NEXT: bx lr | 123 ; ARM32-NEXT: bx lr |
| 124 ; MIPS32-LABEL: test_returning64_arg0 | 124 ; MIPS32-LABEL: test_returning64_arg0 |
| 125 ; MIPS32-NEXT: move v0,a0 | 125 ; MIPS32-NEXT: add v0,zero,a0 |
| 126 ; MIPS32-NEXT: move v1,a1 | 126 ; MIPS32-NEXT: add v1,zero,a1 |
| 127 | 127 |
| 128 | 128 |
| 129 define internal i64 @test_returning64_arg1(i64 %arg0, i64 %arg1, i64 %arg2, i64
%arg3) { | 129 define internal i64 @test_returning64_arg1(i64 %arg0, i64 %arg1, i64 %arg2, i64
%arg3) { |
| 130 entry: | 130 entry: |
| 131 ret i64 %arg1 | 131 ret i64 %arg1 |
| 132 } | 132 } |
| 133 ; CHECK-LABEL: test_returning64_arg1 | 133 ; CHECK-LABEL: test_returning64_arg1 |
| 134 ; CHECK-NEXT: mov {{.*}} [esp+0xc] | 134 ; CHECK-NEXT: mov {{.*}} [esp+0xc] |
| 135 ; CHECK-NEXT: mov {{.*}} [esp+0x10] | 135 ; CHECK-NEXT: mov {{.*}} [esp+0x10] |
| 136 ; CHECK: ret | 136 ; CHECK: ret |
| 137 ; ARM32-LABEL: test_returning64_arg1 | 137 ; ARM32-LABEL: test_returning64_arg1 |
| 138 ; ARM32-NEXT: mov r0, r2 | 138 ; ARM32-NEXT: mov r0, r2 |
| 139 ; ARM32-NEXT: mov r1, r3 | 139 ; ARM32-NEXT: mov r1, r3 |
| 140 ; ARM32-NEXT: bx lr | 140 ; ARM32-NEXT: bx lr |
| 141 ; MIPS32-LABEL: test_returning64_arg1 | 141 ; MIPS32-LABEL: test_returning64_arg1 |
| 142 ; MIPS32-NEXT: move v0,a2 | 142 ; MIPS32-NEXT: add v0,zero,a2 |
| 143 ; MIPS32-NEXT: move v1,a3 | 143 ; MIPS32-NEXT: add v1,zero,a3 |
| 144 | 144 |
| 145 define internal i64 @test_returning64_arg2(i64 %arg0, i64 %arg1, i64 %arg2, i64
%arg3) { | 145 define internal i64 @test_returning64_arg2(i64 %arg0, i64 %arg1, i64 %arg2, i64
%arg3) { |
| 146 entry: | 146 entry: |
| 147 ret i64 %arg2 | 147 ret i64 %arg2 |
| 148 } | 148 } |
| 149 ; CHECK-LABEL: test_returning64_arg2 | 149 ; CHECK-LABEL: test_returning64_arg2 |
| 150 ; CHECK-NEXT: mov {{.*}} [esp+0x14] | 150 ; CHECK-NEXT: mov {{.*}} [esp+0x14] |
| 151 ; CHECK-NEXT: mov {{.*}} [esp+0x18] | 151 ; CHECK-NEXT: mov {{.*}} [esp+0x18] |
| 152 ; CHECK: ret | 152 ; CHECK: ret |
| 153 ; ARM32-LABEL: test_returning64_arg2 | 153 ; ARM32-LABEL: test_returning64_arg2 |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 ; ARM32-DAG: mov [[REG1:.*]], r1 | 293 ; ARM32-DAG: mov [[REG1:.*]], r1 |
| 294 ; ARM32-DAG: mov [[REG2:.*]], r2 | 294 ; ARM32-DAG: mov [[REG2:.*]], r2 |
| 295 ; ARM32-DAG: mov [[REG3:.*]], r3 | 295 ; ARM32-DAG: mov [[REG3:.*]], r3 |
| 296 ; ARM32: str [[REG2]], [sp] | 296 ; ARM32: str [[REG2]], [sp] |
| 297 ; ARM32: str [[REG1]], [sp, #4] | 297 ; ARM32: str [[REG1]], [sp, #4] |
| 298 ; ARM32-DAG: mov r0 | 298 ; ARM32-DAG: mov r0 |
| 299 ; ARM32-DAG: mov r1 | 299 ; ARM32-DAG: mov r1 |
| 300 ; ARM32-DAG: mov r2 | 300 ; ARM32-DAG: mov r2 |
| 301 ; ARM32-DAG: mov r3, [[REG3]] | 301 ; ARM32-DAG: mov r3, [[REG3]] |
| 302 ; ARM32: bl | 302 ; ARM32: bl |
| OLD | NEW |