Add new AVX instruction vinsertf128
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Tue, 20 Jul 2010 19:44:51 +0000 (19:44 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Tue, 20 Jul 2010 19:44:51 +0000 (19:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108892 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrFormats.td
lib/Target/X86/X86InstrSSE.td
test/MC/AsmParser/X86/x86_32-encoding.s
test/MC/AsmParser/X86/x86_64-encoding.s

index d8872bc5495b3db980a5fdc606547c9b48c127ee..1ff26b7e4a6bbcccf6d1b116bb2d89511b623ffa 100644 (file)
@@ -415,10 +415,15 @@ class SS42AI<bits<8> o, Format F, dag outs, dag ins, string asm,
 //   Instructions introduced in AVX (no SSE equivalent forms)
 //
 //   AVX8I - AVX instructions with T8 and OpSize prefix.
+//   AVXAIi8 - AVX instructions with TA, OpSize prefix and ImmT = Imm8.
 class AVX8I<bits<8> o, Format F, dag outs, dag ins, string asm,
             list<dag> pattern>
       : I<o, F, outs, ins, asm, pattern, SSEPackedInt>, T8, OpSize,
         Requires<[HasAVX]>;
+class AVXAIi8<bits<8> o, Format F, dag outs, dag ins, string asm,
+              list<dag> pattern>
+      : Ii8<o, F, outs, ins, asm, pattern, SSEPackedInt>, TA, OpSize,
+        Requires<[HasAVX]>;
 
 // AES Instruction Templates:
 //
index d0e3b42a3995882cac78d1f6278d64a02c7a69e1..ef3197b4bb90e80fef11a67993b4749c1a9a8435 100644 (file)
@@ -4998,4 +4998,14 @@ def VBROADCASTSSY  : avx_broadcast<0x18, "vbroadcastss", VR256, f32mem>;
 def VBROADCASTSD   : avx_broadcast<0x19, "vbroadcastsd", VR256, f64mem>;
 def VBROADCASTF128 : avx_broadcast<0x1A, "vbroadcastf128", VR256, f128mem>;
 
+// Insert packed floating-point values
+def VINSERTF128rr : AVXAIi8<0x18, MRMSrcReg, (outs VR256:$dst),
+          (ins VR256:$src1, VR128:$src2, i8imm:$src3),
+          "vinsertf128\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
+          []>, VEX_4V;
+def VINSERTF128rm : AVXAIi8<0x18, MRMSrcMem, (outs VR256:$dst),
+          (ins VR256:$src1, f128mem:$src2, i8imm:$src3),
+          "vinsertf128\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",
+          []>, VEX_4V;
+
 } // isAsmParserOnly
index dec60782848e074846103f9f559081375088e408..5b4e8f0e7e30690e3a5e0a0b5a3c3dcdc3e3bdda 100644 (file)
 // CHECK: encoding: [0xc4,0xe2,0x7d,0x18,0x10]
           vbroadcastss  (%eax), %ymm2
 
+// CHECK: vinsertf128  $7, %xmm2, %ymm2, %ymm5
+// CHECK: encoding: [0xc4,0xe3,0x6d,0x18,0xea,0x07]
+          vinsertf128  $7, %xmm2, %ymm2, %ymm5
+
+// CHECK: vinsertf128  $7, (%eax), %ymm2, %ymm5
+// CHECK: encoding: [0xc4,0xe3,0x6d,0x18,0x28,0x07]
+          vinsertf128  $7, (%eax), %ymm2, %ymm5
+
index b64bafedef7f24a51ce3adfe3c63cae8049bc455..e4eca51b0a5657162a38ce583e84c52a21d0b0bf 100644 (file)
@@ -3088,3 +3088,11 @@ pshufb   CPI1_0(%rip), %xmm1
 // CHECK: encoding: [0xc4,0x62,0x7d,0x18,0x20]
           vbroadcastss  (%rax), %ymm12
 
+// CHECK: vinsertf128  $7, %xmm12, %ymm12, %ymm10
+// CHECK: encoding: [0xc4,0x43,0x1d,0x18,0xd4,0x07]
+          vinsertf128  $7, %xmm12, %ymm12, %ymm10
+
+// CHECK: vinsertf128  $7, (%rax), %ymm12, %ymm10
+// CHECK: encoding: [0xc4,0x63,0x1d,0x18,0x10,0x07]
+          vinsertf128  $7, (%rax), %ymm12, %ymm10
+