* mini-ops.h: Add dup low and dup high ops.
* cpu-x86.md: Same.
* mini-x86.c (mono_arch_output_basic_block): Same.
* simd-intrinsics.c (vector4f_intrinsics): Same.
svn path=/trunk/mono/; revision=115786
+2008-10-14 Rodrigo Kumpera <rkumpera@novell.com>
+
+ * mini-ops.h: Add dup low and dup high ops.
+
+ * cpu-x86.md: Same.
+
+ * mini-x86.c (mono_arch_output_basic_block): Same.
+
+ * simd-intrinsics.c (vector4f_intrinsics): Same.
+
2008-10-13 Rodrigo Kumpera <rkumpera@novell.com>
* basic-simd.cs: Tests for recently added functionality.
haddps: dest:x src1:x src2:x len:4 clob:1
hsubps: dest:x src1:x src2:x len:4 clob:1
addsubps: dest:x src1:x src2:x len:4 clob:1
+dupps_low: dest:x src1:x len:4
+dupps_high: dest:x src1:x len:4
pand: dest:x src1:x src2:x len:4 clob:1
por: dest:x src1:x src2:x len:4 clob:1
MINI_OP(OP_HADDPS, "haddps", XREG, XREG, XREG)
MINI_OP(OP_HSUBPS, "hsubps", XREG, XREG, XREG)
MINI_OP(OP_ADDSUBPS, "addsubps", XREG, XREG, XREG)
+MINI_OP(OP_DUPPS_LOW, "dupps_low", XREG, XREG, NONE)
+MINI_OP(OP_DUPPS_HIGH, "dupps_high", XREG, XREG, NONE)
MINI_OP(OP_RSQRTPS, "rsqrtps", XREG, XREG, NONE)
MINI_OP(OP_SQRTPS, "sqrtps", XREG, XREG, NONE)
case OP_HSUBPS:
x86_sse_alu_sd_reg_reg (code, X86_SSE_HSUB, ins->sreg1, ins->sreg2);
break;
+ case OP_DUPPS_HIGH:
+ x86_sse_alu_ss_reg_reg (code, X86_SSE_MOVSHDUP, ins->dreg, ins->sreg1);
+ break;
+ case OP_DUPPS_LOW:
+ x86_sse_alu_ss_reg_reg (code, X86_SSE_MOVSLDUP, ins->dreg, ins->sreg1);
+ break;
case OP_SHUFLEPS:
g_assert (ins->inst_c0 >= 0 && ins->inst_c0 <= 0xFF);
x86_pshufd_reg_reg (code, ins->dreg, ins->sreg1, ins->inst_c0);
{ "CompareNotLessThan", OP_COMPPS, SIMD_EMIT_BINARY, SIMD_VERSION_SSE1, SIMD_COMP_NLT },
{ "CompareOrdered", OP_COMPPS, SIMD_EMIT_BINARY, SIMD_VERSION_SSE1, SIMD_COMP_ORD },
{ "CompareUnordered", OP_COMPPS, SIMD_EMIT_BINARY, SIMD_VERSION_SSE1, SIMD_COMP_UNORD },
+ { "DuplicateHigh", OP_DUPPS_HIGH, SIMD_EMIT_UNARY, SIMD_VERSION_SSE3 },
+ { "DuplicateLow", OP_DUPPS_LOW, SIMD_EMIT_UNARY, SIMD_VERSION_SSE3 },
{ "HorizontalAdd", OP_HADDPS, SIMD_EMIT_BINARY, SIMD_VERSION_SSE3 },
{ "HorizontalSub", OP_HSUBPS, SIMD_EMIT_BINARY, SIMD_VERSION_SSE3 },
{ "InterleaveHigh", OP_UNPACK_HIGHPS, SIMD_EMIT_BINARY },