OLD | NEW |
---|---|
1 ; Tests various aspects of x86 opcode encodings. E.g., some opcodes like | 1 ; Tests various aspects of x86 opcode encodings. E.g., some opcodes like |
2 ; those for pmull vary more wildly depending on operand size (rather than | 2 ; those for pmull vary more wildly depending on operand size (rather than |
3 ; follow a usual pattern). | 3 ; follow a usual pattern). |
4 | 4 |
5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 -mattr=sse4.1 \ | 5 ; RUN: %p2i --filetype=obj --disassemble --sandbox -i %s --args -O2 \ |
6 ; RUN: -sandbox | FileCheck %s | 6 ; RUN: -mattr=sse4.1 | FileCheck %s |
7 | 7 |
8 define internal <8 x i16> @test_mul_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { | 8 define internal <8 x i16> @test_mul_v8i16(<8 x i16> %arg0, <8 x i16> %arg1) { |
9 entry: | 9 entry: |
10 %res = mul <8 x i16> %arg0, %arg1 | 10 %res = mul <8 x i16> %arg0, %arg1 |
11 ret <8 x i16> %res | 11 ret <8 x i16> %res |
12 ; CHECK-LABEL: test_mul_v8i16 | 12 ; CHECK-LABEL: test_mul_v8i16 |
13 ; CHECK: 66 0f d5 c1 pmullw xmm0,xmm1 | 13 ; CHECK: 66 0f d5 c1 pmullw xmm0,xmm1 |
14 } | 14 } |
15 | 15 |
16 ; Test register and address mode encoding. | 16 ; Test register and address mode encoding. |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
154 store i32 %v_add2, i32* %__8, align 1 | 154 store i32 %v_add2, i32* %__8, align 1 |
155 | 155 |
156 %z = add i32 %__6, 256 | 156 %z = add i32 %__6, 256 |
157 %__9 = inttoptr i32 %z to i32* | 157 %__9 = inttoptr i32 %z to i32* |
158 %v_add3 = add i32 %v, 91 | 158 %v_add3 = add i32 %v, 91 |
159 store i32 %v_add2, i32* %__9, align 1 | 159 store i32 %v_add2, i32* %__9, align 1 |
160 | 160 |
161 ret i32 %v | 161 ret i32 %v |
162 } | 162 } |
163 ; CHECK-LABEL: test_nacl_read_tp_more_addressing | 163 ; CHECK-LABEL: test_nacl_read_tp_more_addressing |
164 ; CHECK: 65 8b 05 00 00 00 00 mov eax,DWORD PTR gs:0x0 | 164 ; CHECK: mov eax,{{(DWORD PTR )?}}gs:0x0 |
Jim Stichnoth
2016/01/10 03:08:56
Mostly just out of curiosity - was there a reason
sehr
2016/01/11 21:49:48
There are two totally different opcodes for moving
| |
165 ; CHECK: 8b 04 00 mov eax,DWORD PTR [eax+eax*1] | 165 ; CHECK: 8b 04 00 mov eax,DWORD PTR [eax+eax*1] |
166 ; CHECK: 65 8b 0d 00 00 00 00 mov ecx,DWORD PTR gs:0x0 | 166 ; CHECK: 65 8b 0d 00 00 00 00 mov ecx,DWORD PTR gs:0x0 |
167 ; CHECK: 89 51 80 mov DWORD PTR [ecx-0x80],edx | 167 ; CHECK: 89 51 80 mov DWORD PTR [ecx-0x80],edx |
168 ; CHECK: 89 91 00 01 00 00 mov DWORD PTR [ecx+0x100],edx | 168 ; CHECK: 89 91 00 01 00 00 mov DWORD PTR [ecx+0x100],edx |
169 | 169 |
170 ; The 16-bit pinsrw/pextrw (SSE2) are quite different from | 170 ; The 16-bit pinsrw/pextrw (SSE2) are quite different from |
171 ; the pinsr{b,d}/pextr{b,d} (SSE4.1). | 171 ; the pinsr{b,d}/pextr{b,d} (SSE4.1). |
172 | 172 |
173 define internal <4 x i32> @test_pinsrd(<4 x i32> %vec, i32 %elt1, i32 %elt2, | 173 define internal <4 x i32> @test_pinsrd(<4 x i32> %vec, i32 %elt1, i32 %elt2, |
174 i32 %elt3, i32 %elt4) { | 174 i32 %elt3, i32 %elt4) { |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
298 three: | 298 three: |
299 %res3 = extractelement <8 x i16> %vec4, i32 7 | 299 %res3 = extractelement <8 x i16> %vec4, i32 7 |
300 %res3_ext = zext i16 %res3 to i32 | 300 %res3_ext = zext i16 %res3 to i32 |
301 ret i32 %res3_ext | 301 ret i32 %res3_ext |
302 } | 302 } |
303 ; CHECK-LABEL: test_pextrw | 303 ; CHECK-LABEL: test_pextrw |
304 ; CHECK-DAG: 66 0f c5 c0 00 pextrw eax,xmm0 | 304 ; CHECK-DAG: 66 0f c5 c0 00 pextrw eax,xmm0 |
305 ; CHECK-DAG: 66 0f c5 c1 02 pextrw eax,xmm1 | 305 ; CHECK-DAG: 66 0f c5 c1 02 pextrw eax,xmm1 |
306 ; CHECK-DAG: 66 0f c5 c2 05 pextrw eax,xmm2 | 306 ; CHECK-DAG: 66 0f c5 c2 05 pextrw eax,xmm2 |
307 ; CHECK-DAG: 66 0f c5 c3 07 pextrw eax,xmm3 | 307 ; CHECK-DAG: 66 0f c5 c3 07 pextrw eax,xmm3 |
OLD | NEW |