mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 04:45:45 +00:00
Bug 780020 - Unbox int/bool more quickly in GetPropertyCacheT on x64. r=pierron
This commit is contained in:
parent
5cdf24d99f
commit
4f3bfa9099
@ -148,6 +148,10 @@ class MacroAssembler : public MacroAssemblerSpecific
|
||||
void loadTypedOrValue(const T &src, TypedOrValueRegister dest) {
|
||||
if (dest.hasValue())
|
||||
loadValue(src, dest.valueReg());
|
||||
else if (dest.type() == MIRType_Int32)
|
||||
unboxInt32(src, dest.typedReg().gpr());
|
||||
else if (dest.type() == MIRType_Boolean)
|
||||
unboxBoolean(src, dest.typedReg().gpr());
|
||||
else
|
||||
loadUnboxedValue(src, dest.typedReg());
|
||||
}
|
||||
|
@ -2157,6 +2157,12 @@ MacroAssemblerARMCompat::unboxBoolean(const ValueOperand &operand, const Registe
|
||||
ma_mov(operand.payloadReg(), dest);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerARMCompat::unboxBoolean(const Address &src, const Register &dest)
|
||||
{
|
||||
ma_ldr(payloadOf(src), dest);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssemblerARMCompat::unboxDouble(const ValueOperand &operand, const FloatRegister &dest)
|
||||
{
|
||||
|
@ -539,6 +539,7 @@ class MacroAssemblerARMCompat : public MacroAssemblerARM
|
||||
void unboxInt32(const ValueOperand &operand, const Register &dest);
|
||||
void unboxInt32(const Address &src, const Register &dest);
|
||||
void unboxBoolean(const ValueOperand &operand, const Register &dest);
|
||||
void unboxBoolean(const Address &src, const Register &dest);
|
||||
void unboxDouble(const ValueOperand &operand, const FloatRegister &dest);
|
||||
void unboxValue(const ValueOperand &src, AnyRegister dest);
|
||||
void unboxPrivate(const ValueOperand &src, Register dest);
|
||||
|
@ -596,6 +596,9 @@ class MacroAssemblerX64 : public MacroAssemblerX86Shared
|
||||
void unboxBoolean(const Operand &src, const Register &dest) {
|
||||
movl(src, dest);
|
||||
}
|
||||
void unboxBoolean(const Address &src, const Register &dest) {
|
||||
unboxBoolean(Operand(src), dest);
|
||||
}
|
||||
|
||||
void unboxDouble(const ValueOperand &src, const FloatRegister &dest) {
|
||||
movqsd(src.valueReg(), dest);
|
||||
|
@ -533,6 +533,9 @@ class MacroAssemblerX86 : public MacroAssemblerX86Shared
|
||||
void unboxBoolean(const ValueOperand &src, const Register &dest) {
|
||||
movl(src.payloadReg(), dest);
|
||||
}
|
||||
void unboxBoolean(const Address &src, const Register &dest) {
|
||||
movl(payloadOf(src), dest);
|
||||
}
|
||||
void unboxDouble(const ValueOperand &src, const FloatRegister &dest) {
|
||||
JS_ASSERT(dest != ScratchFloatReg);
|
||||
if (Assembler::HasSSE41()) {
|
||||
|
Loading…
Reference in New Issue
Block a user