Backed out changeset 4e12bd365f3b (bug 1245112)

This commit is contained in:
Tooru Fujisawa 2016-02-16 00:23:28 +09:00
parent 64c334f25c
commit ecc7ed55dc
16 changed files with 70 additions and 65 deletions

View File

@ -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;

View File

@ -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)

View File

@ -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)
{

View File

@ -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);

View File

@ -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)

View File

@ -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;

View File

@ -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)

View File

@ -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)
{

View File

@ -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);

View File

@ -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)
{

View File

@ -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);

View File

@ -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(); }

View File

@ -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)
{

View File

@ -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());

View File

@ -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)
{

View File

@ -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());