зеркало из https://github.com/mozilla/gecko-dev.git
Bug 799297 - Pass explicit type to loadUnboxedValue(). r=dvander
This commit is contained in:
Родитель
5b4ae5a72b
Коммит
0d84f06cf0
|
@ -3118,8 +3118,10 @@ CodeGenerator::visitLoadFixedSlotT(LLoadFixedSlotT *ins)
|
|||
const Register obj = ToRegister(ins->getOperand(0));
|
||||
size_t slot = ins->mir()->slot();
|
||||
AnyRegister result = ToAnyRegister(ins->getDef(0));
|
||||
MIRType type = ins->mir()->type();
|
||||
|
||||
masm.loadUnboxedValue(Address(obj, JSObject::getFixedSlotOffset(slot)), type, result);
|
||||
|
||||
masm.loadUnboxedValue(Address(obj, JSObject::getFixedSlotOffset(slot)), result);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -167,12 +167,8 @@ 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());
|
||||
loadUnboxedValue(src, dest.type(), dest.typedReg());
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
|
@ -185,7 +181,7 @@ class MacroAssembler : public MacroAssemblerSpecific
|
|||
} else {
|
||||
if (holeCheck)
|
||||
branchTestMagic(Assembler::Equal, src, hole);
|
||||
loadUnboxedValue(src, dest.typedReg());
|
||||
loadUnboxedValue(src, dest.type(), dest.typedReg());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ MDefinition::earlyAbortCheck()
|
|||
{
|
||||
if (isPhi())
|
||||
return false;
|
||||
for (int i = 0; i < numOperands(); i++) {
|
||||
for (size_t i = 0; i < numOperands(); i++) {
|
||||
if (getOperand(i)->block()->earlyAbort()) {
|
||||
block()->setEarlyAbort();
|
||||
IonSpew(IonSpew_Range, "Ignoring value from block %d because instruction %d is in a block that aborts", block()->id(), getOperand(i)->id());
|
||||
|
|
|
@ -726,14 +726,14 @@ class MacroAssemblerARMCompat : public MacroAssemblerARM
|
|||
ma_b(label, cond);
|
||||
}
|
||||
|
||||
void loadUnboxedValue(Address address, AnyRegister dest) {
|
||||
void loadUnboxedValue(Address address, MIRType type, AnyRegister dest) {
|
||||
if (dest.isFloat())
|
||||
loadInt32OrDouble(Operand(address), dest.fpu());
|
||||
else
|
||||
ma_ldr(address, dest.gpr());
|
||||
}
|
||||
|
||||
void loadUnboxedValue(BaseIndex address, AnyRegister dest) {
|
||||
void loadUnboxedValue(BaseIndex address, MIRType type, AnyRegister dest) {
|
||||
if (dest.isFloat())
|
||||
loadInt32OrDouble(address.base, address.index, dest.fpu(), address.scale);
|
||||
else
|
||||
|
|
|
@ -811,9 +811,11 @@ class MacroAssemblerX64 : public MacroAssemblerX86Shared
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
void loadUnboxedValue(const T &src, AnyRegister dest) {
|
||||
void loadUnboxedValue(const T &src, MIRType type, AnyRegister dest) {
|
||||
if (dest.isFloat())
|
||||
loadInt32OrDouble(Operand(src), dest.fpu());
|
||||
else if (type == MIRType_Int32 || type == MIRType_Boolean)
|
||||
movl(Operand(src), dest.gpr());
|
||||
else
|
||||
unboxNonDouble(Operand(src), dest.gpr());
|
||||
}
|
||||
|
|
|
@ -649,7 +649,7 @@ class MacroAssemblerX86 : public MacroAssemblerX86Shared
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
void loadUnboxedValue(const T &src, AnyRegister dest) {
|
||||
void loadUnboxedValue(const T &src, MIRType type, AnyRegister dest) {
|
||||
if (dest.isFloat())
|
||||
loadInt32OrDouble(Operand(src), dest.fpu());
|
||||
else
|
||||
|
|
Загрузка…
Ссылка в новой задаче