Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(729)

Unified Diff: tests_lit/assembler/x86/opcode_register_encodings.ll

Issue 656983002: emitIAS for Shld and Shrd and the ternary and three-address ops. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: stuff Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/IceInstX8632.cpp ('K') | « src/assembler_ia32.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests_lit/assembler/x86/opcode_register_encodings.ll
diff --git a/tests_lit/assembler/x86/opcode_register_encodings.ll b/tests_lit/assembler/x86/opcode_register_encodings.ll
index f9378681507bbf12cd7feefa8b7e01c458bf0a58..f159a6bcad76455e9a511bfb08db3a0f0035789b 100644
--- a/tests_lit/assembler/x86/opcode_register_encodings.ll
+++ b/tests_lit/assembler/x86/opcode_register_encodings.ll
@@ -161,4 +161,138 @@ entry:
; CHECK: 89 51 80 mov dword ptr [ecx - 128], edx
; CHECK: 89 91 00 01 00 00 mov dword ptr [ecx + 256], edx
+; The 16-bit pinsrw/pextrw (SSE2) are quite different from
+; the pinsr{b,d}/pextr{b,d} (SSE4.1).
+
+define <4 x i32> @test_pinsrd(<4 x i32> %vec, i32 %elt1, i32 %elt2, i32 %elt3, i32 %elt4) {
+entry:
+ %elt12 = add i32 %elt1, %elt2
+ %elt34 = add i32 %elt3, %elt4
+ %res1 = insertelement <4 x i32> %vec, i32 %elt12, i32 1
+ %res2 = insertelement <4 x i32> %res1, i32 %elt34, i32 2
+ %res3 = insertelement <4 x i32> %res2, i32 %elt1, i32 3
+ ret <4 x i32> %res3
+}
+; CHECK-LABEL: test_pinsrd:
+; CHECK-DAG: 66 0f 3a 22 c{{.*}} 01 pinsrd xmm0, e{{.*}}, 1
+; CHECK-DAG: 66 0f 3a 22 c{{.*}} 02 pinsrd xmm0, e{{.*}}, 2
+; CHECK-DAG: 66 0f 3a 22 c{{.*}} 03 pinsrd xmm0, e{{.*}}, 3
+
+define <16 x i8> @test_pinsrb(<16 x i8> %vec, i32 %elt1_w, i32 %elt2_w, i32 %elt3_w, i32 %elt4_w) {
+entry:
+ %elt1 = trunc i32 %elt1_w to i8
+ %elt2 = trunc i32 %elt2_w to i8
+ %elt3 = trunc i32 %elt3_w to i8
+ %elt4 = trunc i32 %elt4_w to i8
+ %elt12 = add i8 %elt1, %elt2
+ %elt34 = add i8 %elt3, %elt4
+ %res1 = insertelement <16 x i8> %vec, i8 %elt12, i32 1
+ %res2 = insertelement <16 x i8> %res1, i8 %elt34, i32 7
+ %res3 = insertelement <16 x i8> %res2, i8 %elt1, i32 15
+ ret <16 x i8> %res3
+}
+; CHECK-LABEL: test_pinsrb:
+; CHECK-DAG: 66 0f 3a 20 c{{.*}} 01 pinsrb xmm0, e{{.*}}, 1
+; CHECK-DAG: 66 0f 3a 20 c{{.*}} 07 pinsrb xmm0, e{{.*}}, 7
+; CHECK-DAG: 66 0f 3a 20 {{.*}} 0f pinsrb xmm0, byte ptr {{.*}}, 15
+
+define <8 x i16> @test_pinsrw(<8 x i16> %vec, i32 %elt1_w, i32 %elt2_w, i32 %elt3_w, i32 %elt4_w) {
+entry:
+ %elt1 = trunc i32 %elt1_w to i16
+ %elt2 = trunc i32 %elt2_w to i16
+ %elt3 = trunc i32 %elt3_w to i16
+ %elt4 = trunc i32 %elt4_w to i16
+ %elt12 = add i16 %elt1, %elt2
+ %elt34 = add i16 %elt3, %elt4
+ %res1 = insertelement <8 x i16> %vec, i16 %elt12, i32 1
+ %res2 = insertelement <8 x i16> %res1, i16 %elt34, i32 4
+ %res3 = insertelement <8 x i16> %res2, i16 %elt1, i32 7
+ ret <8 x i16> %res3
+}
+; CHECK-LABEL: test_pinsrw:
+; CHECK-DAG: 66 0f c4 c{{.*}} 01 pinsrw xmm0, e{{.*}}, 1
+; CHECK-DAG: 66 0f c4 c{{.*}} 04 pinsrw xmm0, e{{.*}}, 4
+; CHECK-DAG: 66 0f c4 c{{.*}} 07 pinsrw xmm0, e{{.*}}, 7
+
+define i32 @test_pextrd(i32 %c, <4 x i32> %vec1, <4 x i32> %vec2, <4 x i32> %vec3, <4 x i32> %vec4) {
+entry:
+ switch i32 %c, label %three [i32 0, label %zero
+ i32 1, label %one
+ i32 2, label %two]
+zero:
+ %res0 = extractelement <4 x i32> %vec1, i32 0
+ ret i32 %res0
+one:
+ %res1 = extractelement <4 x i32> %vec2, i32 1
+ ret i32 %res1
+two:
+ %res2 = extractelement <4 x i32> %vec3, i32 2
+ ret i32 %res2
+three:
+ %res3 = extractelement <4 x i32> %vec4, i32 3
+ ret i32 %res3
+}
+; CHECK-LABEL: test_pextrd
+; CHECK-DAG: 66 0f 3a 16 c0 00 pextrd eax, xmm0, 0
+; CHECK-DAG: 66 0f 3a 16 c8 01 pextrd eax, xmm1, 1
+; CHECK-DAG: 66 0f 3a 16 d0 02 pextrd eax, xmm2, 2
+; CHECK-DAG: 66 0f 3a 16 d8 03 pextrd eax, xmm3, 3
+
+define i32 @test_pextrb(i32 %c, <16 x i8> %vec1, <16 x i8> %vec2, <16 x i8> %vec3, <16 x i8> %vec4) {
+entry:
+ switch i32 %c, label %three [i32 0, label %zero
+ i32 1, label %one
+ i32 2, label %two]
+zero:
+ %res0 = extractelement <16 x i8> %vec1, i32 0
+ %res0_ext = zext i8 %res0 to i32
+ ret i32 %res0_ext
+one:
+ %res1 = extractelement <16 x i8> %vec2, i32 6
+ %res1_ext = zext i8 %res1 to i32
+ ret i32 %res1_ext
+two:
+ %res2 = extractelement <16 x i8> %vec3, i32 12
+ %res2_ext = zext i8 %res2 to i32
+ ret i32 %res2_ext
+three:
+ %res3 = extractelement <16 x i8> %vec4, i32 15
+ %res3_ext = zext i8 %res3 to i32
+ ret i32 %res3_ext
+}
+; CHECK-LABEL: test_pextrb
+; CHECK-DAG: 66 0f 3a 14 c0 00 pextrb eax, xmm0, 0
+; CHECK-DAG: 66 0f 3a 14 c8 06 pextrb eax, xmm1, 6
+; CHECK-DAG: 66 0f 3a 14 d0 0c pextrb eax, xmm2, 12
+; CHECK-DAG: 66 0f 3a 14 d8 0f pextrb eax, xmm3, 15
+
+define i32 @test_pextrw(i32 %c, <8 x i16> %vec1, <8 x i16> %vec2, <8 x i16> %vec3, <8 x i16> %vec4) {
+entry:
+ switch i32 %c, label %three [i32 0, label %zero
+ i32 1, label %one
+ i32 2, label %two]
+zero:
+ %res0 = extractelement <8 x i16> %vec1, i32 0
+ %res0_ext = zext i16 %res0 to i32
+ ret i32 %res0_ext
+one:
+ %res1 = extractelement <8 x i16> %vec2, i32 2
+ %res1_ext = zext i16 %res1 to i32
+ ret i32 %res1_ext
+two:
+ %res2 = extractelement <8 x i16> %vec3, i32 5
+ %res2_ext = zext i16 %res2 to i32
+ ret i32 %res2_ext
+three:
+ %res3 = extractelement <8 x i16> %vec4, i32 7
+ %res3_ext = zext i16 %res3 to i32
+ ret i32 %res3_ext
+}
+; CHECK-LABEL: test_pextrw
+; CHECK-DAG: 66 0f c5 c0 00 pextrw eax, xmm0, 0
+; CHECK-DAG: 66 0f c5 c1 02 pextrw eax, xmm1, 2
+; CHECK-DAG: 66 0f c5 c2 05 pextrw eax, xmm2, 5
+; CHECK-DAG: 66 0f c5 c3 07 pextrw eax, xmm3, 7
+
+
; ERRORS-NOT: ICE translation error
« src/IceInstX8632.cpp ('K') | « src/assembler_ia32.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698