Commit 3c6b5acc authored by Richard Stotz's avatar Richard Stotz Committed by Commit Bot

[wasm][liftoff][arm] Add saturated conversion float->int32

Bug: v8:10520
Change-Id: Ifc99782682c7b1597357211d72a11c44703965b2
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2202907Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
Commit-Queue: Richard Stotz <rstz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#67893}
parent 04cec289
...@@ -1911,18 +1911,38 @@ bool LiftoffAssembler::emit_type_conversion(WasmOpcode opcode, ...@@ -1911,18 +1911,38 @@ bool LiftoffAssembler::emit_type_conversion(WasmOpcode opcode,
b(trap, ge); b(trap, ge);
return true; return true;
} }
case kExprI32SConvertSatF32: case kExprI32SConvertSatF32: {
bailout(kNonTrappingFloatToInt, "kExprI32SConvertSatF32"); UseScratchRegisterScope temps(this);
SwVfpRegister scratch_f = temps.AcquireS();
vcvt_s32_f32(
scratch_f,
liftoff::GetFloatRegister(src.fp())); // f32 -> i32 round to zero.
vmov(dst.gp(), scratch_f);
return true; return true;
case kExprI32UConvertSatF32: }
bailout(kNonTrappingFloatToInt, "kExprI32UConvertSatF32"); case kExprI32UConvertSatF32: {
UseScratchRegisterScope temps(this);
SwVfpRegister scratch_f = temps.AcquireS();
vcvt_u32_f32(
scratch_f,
liftoff::GetFloatRegister(src.fp())); // f32 -> u32 round to zero.
vmov(dst.gp(), scratch_f);
return true; return true;
case kExprI32SConvertSatF64: }
bailout(kNonTrappingFloatToInt, "kExprI32SConvertSatF64"); case kExprI32SConvertSatF64: {
UseScratchRegisterScope temps(this);
SwVfpRegister scratch_f = temps.AcquireS();
vcvt_s32_f64(scratch_f, src.fp()); // f64 -> i32 round to zero.
vmov(dst.gp(), scratch_f);
return true; return true;
case kExprI32UConvertSatF64: }
bailout(kNonTrappingFloatToInt, "kExprI32UConvertSatF64"); case kExprI32UConvertSatF64: {
UseScratchRegisterScope temps(this);
SwVfpRegister scratch_f = temps.AcquireS();
vcvt_u32_f64(scratch_f, src.fp()); // f64 -> u32 round to zero.
vmov(dst.gp(), scratch_f);
return true; return true;
}
case kExprI64SConvertSatF32: case kExprI64SConvertSatF32:
bailout(kNonTrappingFloatToInt, "kExprI64SConvertSatF32"); bailout(kNonTrappingFloatToInt, "kExprI64SConvertSatF32");
return true; return true;
......
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