Commit 7c243e54 authored by LiuYu's avatar LiuYu Committed by Commit Bot

[mips][wasm-simd][liftoff] Implement extended multiply

Port: 1215f2a8

Bug: v8:11262

Change-Id: I307619aaea7adda16d52155255830e6d4cefcd1f
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2600836Reviewed-by: 's avatarZhao Jiazhong <zhaojiazhong-hf@loongson.cn>
Commit-Queue: Zhao Jiazhong <zhaojiazhong-hf@loongson.cn>
Auto-Submit: Liu yu <liuyu@loongson.cn>
Cr-Commit-Position: refs/heads/master@{#71870}
parent f656eab5
......@@ -1752,6 +1752,35 @@ void LiftoffAssembler::emit_f64x2_splat(LiftoffRegister dst,
bailout(kSimd, "emit_f64x2_splat");
}
#define SIMD_BINOP(name, ilv_instr, dotp_instr) \
void LiftoffAssembler::emit_##name( \
LiftoffRegister dst, LiftoffRegister src1, LiftoffRegister src2) { \
MSARegister dst_msa = MSARegister::from_code(dst.liftoff_code()); \
MSARegister src1_msa = MSARegister::from_code(src1.liftoff_code()); \
MSARegister src2_msa = MSARegister::from_code(src2.liftoff_code()); \
xor_v(kSimd128RegZero, kSimd128RegZero, kSimd128RegZero); \
ilv_instr(kSimd128ScratchReg, kSimd128RegZero, src1_msa); \
ilv_instr(kSimd128RegZero, kSimd128RegZero, src2_msa); \
dotp_instr(dst_msa, kSimd128ScratchReg, kSimd128RegZero); \
}
SIMD_BINOP(i16x8_extmul_low_i8x16_s, ilvr_b, dotp_s_h)
SIMD_BINOP(i16x8_extmul_high_i8x16_s, ilvl_b, dotp_s_h)
SIMD_BINOP(i16x8_extmul_low_i8x16_u, ilvr_b, dotp_u_h)
SIMD_BINOP(i16x8_extmul_high_i8x16_u, ilvl_b, dotp_u_h)
SIMD_BINOP(i32x4_extmul_low_i16x8_s, ilvr_h, dotp_s_w)
SIMD_BINOP(i32x4_extmul_high_i16x8_s, ilvl_h, dotp_s_w)
SIMD_BINOP(i32x4_extmul_low_i16x8_u, ilvr_h, dotp_u_w)
SIMD_BINOP(i32x4_extmul_high_i16x8_u, ilvl_h, dotp_u_w)
SIMD_BINOP(i64x2_extmul_low_i32x4_s, ilvr_w, dotp_s_d)
SIMD_BINOP(i64x2_extmul_high_i32x4_s, ilvl_w, dotp_s_d)
SIMD_BINOP(i64x2_extmul_low_i32x4_u, ilvr_w, dotp_u_d)
SIMD_BINOP(i64x2_extmul_high_i32x4_u, ilvl_w, dotp_u_d)
#undef SIMD_BINOP
void LiftoffAssembler::emit_i8x16_eq(LiftoffRegister dst, LiftoffRegister lhs,
LiftoffRegister rhs) {
bailout(kSimd, "emit_i8x16_eq");
......
......@@ -1680,6 +1680,32 @@ void LiftoffAssembler::emit_f64x2_splat(LiftoffRegister dst,
fill_d(dst.fp().toW(), kScratchReg);
}
#define SIMD_BINOP(name, ilv_instr, dotp_instr) \
void LiftoffAssembler::emit_##name( \
LiftoffRegister dst, LiftoffRegister src1, LiftoffRegister src2) { \
xor_v(kSimd128RegZero, kSimd128RegZero, kSimd128RegZero); \
ilv_instr(kSimd128ScratchReg, kSimd128RegZero, src1.fp().toW()); \
ilv_instr(kSimd128RegZero, kSimd128RegZero, src2.fp().toW()); \
dotp_instr(dst.fp().toW(), kSimd128ScratchReg, kSimd128RegZero); \
}
SIMD_BINOP(i16x8_extmul_low_i8x16_s, ilvr_b, dotp_s_h)
SIMD_BINOP(i16x8_extmul_high_i8x16_s, ilvl_b, dotp_s_h)
SIMD_BINOP(i16x8_extmul_low_i8x16_u, ilvr_b, dotp_u_h)
SIMD_BINOP(i16x8_extmul_high_i8x16_u, ilvl_b, dotp_u_h)
SIMD_BINOP(i32x4_extmul_low_i16x8_s, ilvr_h, dotp_s_w)
SIMD_BINOP(i32x4_extmul_high_i16x8_s, ilvl_h, dotp_s_w)
SIMD_BINOP(i32x4_extmul_low_i16x8_u, ilvr_h, dotp_u_w)
SIMD_BINOP(i32x4_extmul_high_i16x8_u, ilvl_h, dotp_u_w)
SIMD_BINOP(i64x2_extmul_low_i32x4_s, ilvr_w, dotp_s_d)
SIMD_BINOP(i64x2_extmul_high_i32x4_s, ilvl_w, dotp_s_d)
SIMD_BINOP(i64x2_extmul_low_i32x4_u, ilvr_w, dotp_u_d)
SIMD_BINOP(i64x2_extmul_high_i32x4_u, ilvl_w, dotp_u_d)
#undef SIMD_BINOP
void LiftoffAssembler::emit_i8x16_eq(LiftoffRegister dst, LiftoffRegister lhs,
LiftoffRegister rhs) {
ceq_b(dst.fp().toW(), lhs.fp().toW(), rhs.fp().toW());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment