[wasm][liftoff][arm] Add saturated conversion float->int32
Bug: v8:10520 Change-Id: Ifc99782682c7b1597357211d72a11c44703965b2 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2202907 Reviewed-by: Andreas Haas <ahaas@chromium.org> Commit-Queue: Richard Stotz <rstz@chromium.org> Cr-Commit-Position: refs/heads/master@{#67893}
This commit is contained in:
parent
04cec28916
commit
3c6b5acc06
@ -1911,18 +1911,38 @@ bool LiftoffAssembler::emit_type_conversion(WasmOpcode opcode,
|
||||
b(trap, ge);
|
||||
return true;
|
||||
}
|
||||
case kExprI32SConvertSatF32:
|
||||
bailout(kNonTrappingFloatToInt, "kExprI32SConvertSatF32");
|
||||
case 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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
}
|
||||
case kExprI64SConvertSatF32:
|
||||
bailout(kNonTrappingFloatToInt, "kExprI64SConvertSatF32");
|
||||
return true;
|
||||
|
Loading…
Reference in New Issue
Block a user