2008-10-17 Rodrigo Kumpera <rkumpera@novell.com>
authorRodrigo Kumpera <kumpera@gmail.com>
Fri, 17 Oct 2008 17:41:18 +0000 (17:41 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Fri, 17 Oct 2008 17:41:18 +0000 (17:41 -0000)
* mini-ops.h: Add packed int shuffle.

* cpu-x86.md: Same.

* mini-x86.c (mono_arch_output_basic_block): Same.

* simd-intrinsics.c (vector4ui_intrinsics): Add compare equal,
extract mask, max, min, shuffle.

* simd-intrinsics.c (vector8us_intrinsics): Add max and min.

svn path=/trunk/mono/; revision=116266

mono/mini/ChangeLog
mono/mini/cpu-x86.md
mono/mini/mini-ops.h
mono/mini/mini-x86.c
mono/mini/simd-intrinsics.c

index aa2b490282909c6cb39c4f335ed268a4cc7f509a..121a56428a9dc41d73883c7a618a8c3ece7d7609 100644 (file)
@@ -1,3 +1,16 @@
+2008-10-17  Rodrigo Kumpera  <rkumpera@novell.com>
+
+       * mini-ops.h: Add packed int shuffle.
+       
+       * cpu-x86.md: Same.
+
+       * mini-x86.c (mono_arch_output_basic_block): Same.
+
+       * simd-intrinsics.c (vector4ui_intrinsics): Add compare equal,
+       extract mask, max, min, shuffle.
+
+       * simd-intrinsics.c (vector8us_intrinsics): Add max and min.
+
 2008-10-17  Rodrigo Kumpera  <rkumpera@novell.com>
 
        * basic-simd.cs: Tests for new methods in Vector8us.
index 045fcce98b2214c7a1ac7e5be2cfcddfdc2fdaf9..22726833b60e70bf66d76c58b68b42b4184b2f4b 100644 (file)
@@ -438,6 +438,8 @@ shuffleps: dest:x src1:x len:5
 
 pshufflew_high: dest:x src1:x len:5
 pshufflew_low: dest:x src1:x len:5
+pshuffled: dest:x src1:x len:5
+
 extract_mask: dest:i src1:x len:4
 
 paddb: dest:x src1:x src2:x len:4 clob:1
index 265e4caedd3de50a389e99303603d32aac319d5b..5c38d8169946d32283d8b52cff3c32442e66fadd 100644 (file)
@@ -657,6 +657,7 @@ MINI_OP(OP_SHUFLEPS, "shuffleps", XREG, XREG, NONE)
 
 MINI_OP(OP_PSHUFLEW_HIGH, "pshufflew_high", XREG, XREG, NONE)
 MINI_OP(OP_PSHUFLEW_LOW, "pshufflew_low", XREG, XREG, NONE)
+MINI_OP(OP_PSHUFLED, "pshuffled", XREG, XREG, NONE)
 
 MINI_OP(OP_EXTRACT_MASK, "extract_mask", IREG, XREG, NONE)
 
index 6d3568760de21af388fafef73f867136dcf554d1..a66edc517ac8e5b979f499095b5d7abbcf00f9ef 100644 (file)
@@ -3885,6 +3885,10 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                        g_assert (ins->inst_c0 >= 0 && ins->inst_c0 <= 0xFF);
                        x86_pshufw_reg_reg (code, ins->dreg, ins->sreg1, ins->inst_c0, 0);
                        break;
+               case OP_PSHUFLED:
+                       g_assert (ins->inst_c0 >= 0 && ins->inst_c0 <= 0xFF);
+                       x86_sse_shift_reg_imm (code, X86_SSE_PSHUFD, ins->dreg, ins->sreg1, ins->inst_c0);
+                       break;
 
                case OP_EXTRACT_MASK:
                        x86_sse_alu_pd_reg_reg (code, X86_SSE_PMOVMSKB, ins->dreg, ins->sreg1);
index 60340655e9113ca15ca67f5ef0e4a6c7f6c32660..f3b0ade309f4588ea1dd9a23c0ad0dc36d4b3c0d 100644 (file)
@@ -171,8 +171,13 @@ setters
  */
 static const SimdIntrinsc vector4ui_intrinsics[] = {
        { SN_AddWithSaturation, OP_PADDD_SAT_UN, SIMD_EMIT_BINARY },
+       { SN_CompareEqual, OP_PCMPEQD, SIMD_EMIT_BINARY },
+       { SN_ExtractByteMask, 0, SIMD_EMIT_EXTRACT_MASK },
        { SN_LoadAligned, 0, SIMD_EMIT_LOAD_ALIGNED },
+       { SN_Max, OP_PMAXD_UN, SIMD_EMIT_BINARY, SIMD_VERSION_SSE41},
+       { SN_Min, OP_PMIND_UN, SIMD_EMIT_BINARY, SIMD_VERSION_SSE41 },
        { SN_ShiftRightArithmetic, OP_PSARD, SIMD_EMIT_SHIFT },
+       { SN_Shuffle, OP_PSHUFLED, SIMD_EMIT_SHUFFLE },
        { SN_StoreAligned, 0, SIMD_EMIT_STORE_ALIGNED },
        { SN_SubWithSaturation, OP_PSUBD_SAT_UN, SIMD_EMIT_BINARY },
        { SN_UnpackHigh, OP_UNPACK_HIGHD, SIMD_EMIT_BINARY },
@@ -199,6 +204,8 @@ static const SimdIntrinsc vector8us_intrinsics[] = {
        { SN_Average, OP_PAVGW_UN, SIMD_EMIT_BINARY },
        { SN_ExtractByteMask, 0, SIMD_EMIT_EXTRACT_MASK },
        { SN_LoadAligned, 0, SIMD_EMIT_LOAD_ALIGNED },
+       { SN_Max, OP_PMAXW_UN, SIMD_EMIT_BINARY, SIMD_VERSION_SSE41},
+       { SN_Min, OP_PMINW_UN, SIMD_EMIT_BINARY, SIMD_VERSION_SSE41 },
        { SN_ShiftRightArithmetic, OP_PSARW, SIMD_EMIT_SHIFT },
        { SN_ShuffleHigh, OP_PSHUFLEW_HIGH, SIMD_EMIT_SHUFFLE },
        { SN_ShuffleLow, OP_PSHUFLEW_LOW, SIMD_EMIT_SHUFFLE },