mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-18 15:55:36 +00:00
Bug 1229057
- Part 7: Move MacroAssembler::addConstantDouble into generic macro assembler. r=jandem
--HG-- extra : rebase_source : c15b6f9a6256e08367faf6809cf2d8e01299828e
This commit is contained in:
parent
d3eeca5f43
commit
eb5bd433fb
@ -752,6 +752,7 @@ class MacroAssembler : public MacroAssemblerSpecific
|
||||
inline void addFloat32(FloatRegister src, FloatRegister dest) DEFINED_ON(x86_shared);
|
||||
|
||||
inline void addDouble(FloatRegister src, FloatRegister dest) PER_SHARED_ARCH;
|
||||
inline void addConstantDouble(double d, FloatRegister dest) DEFINED_ON(x86);
|
||||
|
||||
inline void sub32(const Address& src, Register dest) PER_SHARED_ARCH;
|
||||
inline void sub32(Register src, Register dest) PER_SHARED_ARCH;
|
||||
|
@ -409,7 +409,6 @@ class MacroAssemblerNone : public Assembler
|
||||
void int32ValueToFloat32(ValueOperand, FloatRegister) { MOZ_CRASH(); }
|
||||
|
||||
void loadConstantDouble(double, FloatRegister) { MOZ_CRASH(); }
|
||||
void addConstantDouble(double, FloatRegister) { MOZ_CRASH(); }
|
||||
void loadConstantFloat32(float, FloatRegister) { MOZ_CRASH(); }
|
||||
Condition testInt32Truthy(bool, ValueOperand) { MOZ_CRASH(); }
|
||||
Condition testStringTruthy(bool, ValueOperand) { MOZ_CRASH(); }
|
||||
|
@ -128,6 +128,16 @@ MacroAssembler::add64(Imm32 imm, Register64 dest)
|
||||
adcl(Imm32(0), dest.high);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::addConstantDouble(double d, FloatRegister dest)
|
||||
{
|
||||
Double* dbl = getDouble(d);
|
||||
if (!dbl)
|
||||
return;
|
||||
masm.vaddsd_mr(nullptr, dest.encoding(), dest.encoding());
|
||||
propagateOOM(dbl->uses.append(CodeOffset(masm.size())));
|
||||
}
|
||||
|
||||
// ===============================================================
|
||||
// Shift functions
|
||||
|
||||
@ -166,6 +176,29 @@ MacroAssembler::rshift64(Imm32 imm, Register64 dest)
|
||||
//}}} check_macroassembler_style
|
||||
// ===============================================================
|
||||
|
||||
// Note: this function clobbers the source register.
|
||||
void
|
||||
MacroAssemblerX86::convertUInt32ToDouble(Register src, FloatRegister dest)
|
||||
{
|
||||
// src is [0, 2^32-1]
|
||||
subl(Imm32(0x80000000), src);
|
||||
|
||||
// Now src is [-2^31, 2^31-1] - int range, but not the same value.
|
||||
convertInt32ToDouble(src, dest);
|
||||
|
||||
// dest is now a double with the int range.
|
||||
// correct the double value by adding 0x80000000.
|
||||
asMasm().addConstantDouble(2147483648.0, dest);
|
||||
}
|
||||
|
||||
// Note: this function clobbers the source register.
|
||||
void
|
||||
MacroAssemblerX86::convertUInt32ToFloat32(Register src, FloatRegister dest)
|
||||
{
|
||||
convertUInt32ToDouble(src, dest);
|
||||
convertDoubleToFloat32(dest, dest);
|
||||
}
|
||||
|
||||
} // namespace jit
|
||||
} // namespace js
|
||||
|
||||
|
@ -102,16 +102,6 @@ MacroAssemblerX86::loadConstantDouble(double d, FloatRegister dest)
|
||||
propagateOOM(dbl->uses.append(CodeOffset(masm.size())));
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerX86::addConstantDouble(double d, FloatRegister dest)
|
||||
{
|
||||
Double* dbl = getDouble(d);
|
||||
if (!dbl)
|
||||
return;
|
||||
masm.vaddsd_mr(nullptr, dest.encoding(), dest.encoding());
|
||||
propagateOOM(dbl->uses.append(CodeOffset(masm.size())));
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerX86::loadConstantFloat32(float f, FloatRegister dest)
|
||||
{
|
||||
|
@ -986,7 +986,6 @@ class MacroAssemblerX86 : public MacroAssemblerX86Shared
|
||||
}
|
||||
|
||||
void loadConstantDouble(double d, FloatRegister dest);
|
||||
void addConstantDouble(double d, FloatRegister dest);
|
||||
void loadConstantFloat32(float f, FloatRegister dest);
|
||||
void loadConstantInt32x4(const SimdConstant& v, FloatRegister dest);
|
||||
void loadConstantFloat32x4(const SimdConstant& v, FloatRegister dest);
|
||||
@ -1072,23 +1071,10 @@ class MacroAssemblerX86 : public MacroAssemblerX86Shared
|
||||
}
|
||||
|
||||
// Note: this function clobbers the source register.
|
||||
void convertUInt32ToDouble(Register src, FloatRegister dest) {
|
||||
// src is [0, 2^32-1]
|
||||
subl(Imm32(0x80000000), src);
|
||||
|
||||
// Now src is [-2^31, 2^31-1] - int range, but not the same value.
|
||||
convertInt32ToDouble(src, dest);
|
||||
|
||||
// dest is now a double with the int range.
|
||||
// correct the double value by adding 0x80000000.
|
||||
addConstantDouble(2147483648.0, dest);
|
||||
}
|
||||
inline void convertUInt32ToDouble(Register src, FloatRegister dest);
|
||||
|
||||
// Note: this function clobbers the source register.
|
||||
void convertUInt32ToFloat32(Register src, FloatRegister dest) {
|
||||
convertUInt32ToDouble(src, dest);
|
||||
convertDoubleToFloat32(dest, dest);
|
||||
}
|
||||
inline void convertUInt32ToFloat32(Register src, FloatRegister dest);
|
||||
|
||||
void convertUInt64ToDouble(Register64 src, Register temp, FloatRegister dest);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user