+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.
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)
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);
*/
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 },
{ 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 },