From 8add5df8a56540dda2f28ba6e530d4e9a6efd624 Mon Sep 17 00:00:00 2001 From: Haoyu Zhang Date: Mon, 17 Jul 2023 11:08:46 -0400 Subject: [PATCH] [simd/jit]: Implement simple i32x4 arithmetic operations --- src/engine/x86-64/X86_64SinglePassCompiler.v3 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/engine/x86-64/X86_64SinglePassCompiler.v3 b/src/engine/x86-64/X86_64SinglePassCompiler.v3 index 5c865d35..fe3b3097 100644 --- a/src/engine/x86-64/X86_64SinglePassCompiler.v3 +++ b/src/engine/x86-64/X86_64SinglePassCompiler.v3 @@ -464,6 +464,10 @@ class X86_64SinglePassCompiler extends SinglePassCompiler { def visit_I8X16_ADD() { do_op2_x_x(ValueKind.V128, asm.paddb_s_s); } def visit_I8X16_SUB() { do_op2_x_x(ValueKind.V128, asm.psubb_s_s); } + def visit_I32X4_ADD() { do_op2_x_x(ValueKind.V128, asm.paddd_s_s); } + def visit_I32X4_SUB() { do_op2_x_x(ValueKind.V128, asm.psubd_s_s); } + def visit_I32X4_MUL() { do_op2_x_x(ValueKind.V128, asm.pmulld_s_s); } + private def visit_V128_NEG(emit: (X86_64Xmmr, X86_64Xmmr) -> T) -> void { var sv = popReg(), r = X(sv.reg); var tmp = allocTmp(ValueKind.V128), t = X(tmp); @@ -471,6 +475,9 @@ class X86_64SinglePassCompiler extends SinglePassCompiler { state.push(sv.kindFlagsMatching(ValueKind.V128, IN_REG), sv.reg, 0); } def visit_I8X16_NEG() { visit_V128_NEG(mmasm.emit_i8x16_neg); } + + def visit_I32X4_NEG() { visit_V128_NEG(mmasm.emit_i32x4_neg); } + def visit_V128_BITSELECT() { var c = popReg(); var b = popReg();