mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Backed out changeset 4e12bd365f3b (bug 1245112)
This commit is contained in:
parent
64c334f25c
commit
ecc7ed55dc
@ -843,8 +843,6 @@ class MacroAssembler : public MacroAssemblerSpecific
|
||||
|
||||
inline void branchFloat(DoubleCondition cond, FloatRegister lhs, FloatRegister rhs,
|
||||
Label* label) PER_SHARED_ARCH;
|
||||
inline void branchTruncateFloat32(FloatRegister src, Register dest, Label* fail)
|
||||
DEFINED_ON(arm, arm64, mips_shared, x86, x64);
|
||||
|
||||
template <class L>
|
||||
inline void branchTest32(Condition cond, Register lhs, Register rhs, L label) PER_SHARED_ARCH;
|
||||
|
@ -599,17 +599,6 @@ MacroAssembler::branchFloat(DoubleCondition cond, FloatRegister lhs, FloatRegist
|
||||
ma_b(label, ConditionFromDoubleCondition(cond));
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchTruncateFloat32(FloatRegister src, Register dest, Label* fail)
|
||||
{
|
||||
ScratchFloat32Scope scratch(*this);
|
||||
ma_vcvt_F32_I32(src, scratch.sintOverlay());
|
||||
ma_vxfer(scratch, dest);
|
||||
ma_cmp(dest, Imm32(0x7fffffff));
|
||||
ma_cmp(dest, Imm32(0x80000000), Assembler::NotEqual);
|
||||
ma_b(fail, Assembler::Equal);
|
||||
}
|
||||
|
||||
template <class L>
|
||||
void
|
||||
MacroAssembler::branchTest32(Condition cond, Register lhs, Register rhs, L label)
|
||||
|
@ -220,6 +220,17 @@ MacroAssemblerARM::convertFloat32ToDouble(FloatRegister src, FloatRegister dest)
|
||||
as_vcvt(VFPRegister(dest), VFPRegister(src).singleOverlay());
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerARM::branchTruncateFloat32(FloatRegister src, Register dest, Label* fail)
|
||||
{
|
||||
ScratchFloat32Scope scratch(asMasm());
|
||||
ma_vcvt_F32_I32(src, scratch.sintOverlay());
|
||||
ma_vxfer(scratch, dest);
|
||||
ma_cmp(dest, Imm32(0x7fffffff));
|
||||
ma_cmp(dest, Imm32(0x80000000), Assembler::NotEqual);
|
||||
ma_b(fail, Assembler::Equal);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerARM::convertInt32ToFloat32(Register src, FloatRegister dest)
|
||||
{
|
||||
|
@ -93,6 +93,7 @@ class MacroAssemblerARM : public Assembler
|
||||
bool negativeZeroCheck = true);
|
||||
|
||||
void convertFloat32ToDouble(FloatRegister src, FloatRegister dest);
|
||||
void branchTruncateFloat32(FloatRegister src, Register dest, Label* fail);
|
||||
void convertInt32ToFloat32(Register src, FloatRegister dest);
|
||||
void convertInt32ToFloat32(const Address& src, FloatRegister dest);
|
||||
|
||||
|
@ -675,24 +675,6 @@ MacroAssembler::branchFloat(DoubleCondition cond, FloatRegister lhs, FloatRegist
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchTruncateFloat32(FloatRegister src, Register dest, Label* fail)
|
||||
{
|
||||
vixl::UseScratchRegisterScope temps(this);
|
||||
const ARMRegister scratch64 = temps.AcquireX();
|
||||
|
||||
ARMFPRegister src32(src, 32);
|
||||
ARMRegister dest64(dest, 64);
|
||||
|
||||
MOZ_ASSERT(!scratch64.Is(dest64));
|
||||
|
||||
Fcvtzs(dest64, src32);
|
||||
Add(scratch64, dest64, Operand(0x7fffffffffffffff));
|
||||
Cmn(scratch64, 3);
|
||||
B(fail, Assembler::Above);
|
||||
And(dest64, dest64, Operand(0xffffffff));
|
||||
}
|
||||
|
||||
template <class L>
|
||||
void
|
||||
MacroAssembler::branchTest32(Condition cond, Register lhs, Register rhs, L label)
|
||||
|
@ -633,6 +633,21 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||
And(dest64, dest64, Operand(0xffffffff));
|
||||
}
|
||||
|
||||
void branchTruncateFloat32(FloatRegister src, Register dest, Label* fail) {
|
||||
vixl::UseScratchRegisterScope temps(this);
|
||||
const ARMRegister scratch64 = temps.AcquireX();
|
||||
|
||||
ARMFPRegister src32(src, 32);
|
||||
ARMRegister dest64(dest, 64);
|
||||
|
||||
MOZ_ASSERT(!scratch64.Is(dest64));
|
||||
|
||||
Fcvtzs(dest64, src32);
|
||||
Add(scratch64, dest64, Operand(0x7fffffffffffffff));
|
||||
Cmn(scratch64, 3);
|
||||
B(fail, Assembler::Above);
|
||||
And(dest64, dest64, Operand(0xffffffff));
|
||||
}
|
||||
void floor(FloatRegister input, Register output, Label* bail) {
|
||||
Label handleZero;
|
||||
//Label handleNeg;
|
||||
|
@ -352,16 +352,6 @@ MacroAssembler::branchFloat(DoubleCondition cond, FloatRegister lhs, FloatRegist
|
||||
ma_bc1s(lhs, rhs, label, cond);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchTruncateFloat32(FloatRegister src, Register dest, Label* fail)
|
||||
{
|
||||
Label test, success;
|
||||
as_truncws(ScratchFloat32Reg, src);
|
||||
as_mfc1(dest, ScratchFloat32Reg);
|
||||
|
||||
ma_b(dest, Imm32(INT32_MAX), fail, Assembler::Equal);
|
||||
}
|
||||
|
||||
template <class L>
|
||||
void
|
||||
MacroAssembler::branchTest32(Condition cond, Register lhs, Register rhs, L label)
|
||||
|
@ -193,6 +193,17 @@ MacroAssemblerMIPSCompat::convertFloat32ToDouble(FloatRegister src, FloatRegiste
|
||||
as_cvtds(dest, src);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerMIPSCompat::branchTruncateFloat32(FloatRegister src, Register dest,
|
||||
Label* fail)
|
||||
{
|
||||
Label test, success;
|
||||
as_truncws(ScratchFloat32Reg, src);
|
||||
as_mfc1(dest, ScratchFloat32Reg);
|
||||
|
||||
ma_b(dest, Imm32(INT32_MAX), fail, Assembler::Equal);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerMIPSCompat::convertInt32ToFloat32(Register src, FloatRegister dest)
|
||||
{
|
||||
|
@ -171,6 +171,7 @@ class MacroAssemblerMIPSCompat : public MacroAssemblerMIPS
|
||||
bool negativeZeroCheck = true);
|
||||
|
||||
void convertFloat32ToDouble(FloatRegister src, FloatRegister dest);
|
||||
void branchTruncateFloat32(FloatRegister src, Register dest, Label* fail);
|
||||
void convertInt32ToFloat32(Register src, FloatRegister dest);
|
||||
void convertInt32ToFloat32(const Address& src, FloatRegister dest);
|
||||
|
||||
|
@ -202,6 +202,17 @@ MacroAssemblerMIPS64Compat::convertFloat32ToDouble(FloatRegister src, FloatRegis
|
||||
as_cvtds(dest, src);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerMIPS64Compat::branchTruncateFloat32(FloatRegister src, Register dest,
|
||||
Label* fail)
|
||||
{
|
||||
Label test, success;
|
||||
as_truncws(ScratchFloat32Reg, src);
|
||||
as_mfc1(dest, ScratchFloat32Reg);
|
||||
|
||||
ma_b(dest, Imm32(INT32_MAX), fail, Assembler::Equal);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerMIPS64Compat::convertInt32ToFloat32(Register src, FloatRegister dest)
|
||||
{
|
||||
|
@ -181,6 +181,7 @@ class MacroAssemblerMIPS64Compat : public MacroAssemblerMIPS64
|
||||
bool negativeZeroCheck = true);
|
||||
|
||||
void convertFloat32ToDouble(FloatRegister src, FloatRegister dest);
|
||||
void branchTruncateFloat32(FloatRegister src, Register dest, Label* fail);
|
||||
void convertInt32ToFloat32(Register src, FloatRegister dest);
|
||||
void convertInt32ToFloat32(const Address& src, FloatRegister dest);
|
||||
|
||||
|
@ -393,6 +393,7 @@ class MacroAssemblerNone : public Assembler
|
||||
void convertUInt64ToDouble(Register64, Register, FloatRegister) { MOZ_CRASH(); }
|
||||
|
||||
void branchTruncateDouble(FloatRegister, Register, Label*) { MOZ_CRASH(); }
|
||||
void branchTruncateFloat32(FloatRegister, Register, Label*) { MOZ_CRASH(); }
|
||||
|
||||
void boolValueToDouble(ValueOperand, FloatRegister) { MOZ_CRASH(); }
|
||||
void boolValueToFloat32(ValueOperand, FloatRegister) { MOZ_CRASH(); }
|
||||
|
@ -298,18 +298,6 @@ MacroAssembler::branchPrivatePtr(Condition cond, const Address& lhs, Register rh
|
||||
branchPtr(cond, lhs, scratch, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchTruncateFloat32(FloatRegister src, Register dest, Label* fail)
|
||||
{
|
||||
vcvttss2sq(src, dest);
|
||||
|
||||
// Same trick as for Doubles
|
||||
cmpPtr(dest, Imm32(1));
|
||||
j(Assembler::Overflow, fail);
|
||||
|
||||
movl(dest, dest); // Zero upper 32-bits.
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchTest32(Condition cond, const AbsoluteAddress& lhs, Imm32 rhs, Label* label)
|
||||
{
|
||||
|
@ -1094,6 +1094,15 @@ class MacroAssemblerX64 : public MacroAssemblerX86Shared
|
||||
|
||||
movl(dest, dest); // Zero upper 32-bits.
|
||||
}
|
||||
void branchTruncateFloat32(FloatRegister src, Register dest, Label* fail) {
|
||||
vcvttss2sq(src, dest);
|
||||
|
||||
// Same trick as for Doubles
|
||||
cmpPtr(dest, Imm32(1));
|
||||
j(Assembler::Overflow, fail);
|
||||
|
||||
movl(dest, dest); // Zero upper 32-bits.
|
||||
}
|
||||
|
||||
Condition testInt32Truthy(bool truthy, const ValueOperand& operand) {
|
||||
test32(operand.valueReg(), operand.valueReg());
|
||||
|
@ -304,18 +304,6 @@ MacroAssembler::branchPrivatePtr(Condition cond, const Address& lhs, Register rh
|
||||
branchPtr(cond, lhs, rhs, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchTruncateFloat32(FloatRegister src, Register dest, Label* fail)
|
||||
{
|
||||
vcvttss2si(src, dest);
|
||||
|
||||
// vcvttss2si returns 0x80000000 on failure. Test for it by
|
||||
// subtracting 1 and testing overflow (this permits the use of a
|
||||
// smaller immediate field).
|
||||
cmp32(dest, Imm32(1));
|
||||
j(Assembler::Overflow, fail);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchTest32(Condition cond, const AbsoluteAddress& lhs, Imm32 rhs, Label* label)
|
||||
{
|
||||
|
@ -874,6 +874,15 @@ class MacroAssemblerX86 : public MacroAssemblerX86Shared
|
||||
cmp32(dest, Imm32(1));
|
||||
j(Assembler::Overflow, fail);
|
||||
}
|
||||
void branchTruncateFloat32(FloatRegister src, Register dest, Label* fail) {
|
||||
vcvttss2si(src, dest);
|
||||
|
||||
// vcvttss2si returns 0x80000000 on failure. Test for it by
|
||||
// subtracting 1 and testing overflow (this permits the use of a
|
||||
// smaller immediate field).
|
||||
cmp32(dest, Imm32(1));
|
||||
j(Assembler::Overflow, fail);
|
||||
}
|
||||
|
||||
Condition testInt32Truthy(bool truthy, const ValueOperand& operand) {
|
||||
test32(operand.payloadReg(), operand.payloadReg());
|
||||
|
Loading…
Reference in New Issue
Block a user