Bug 799297 - Pass explicit type to loadUnboxedValue(). r=dvander

This commit is contained in:
Sean Stangl 2012-10-08 17:27:10 -07:00
parent e5a84e3250
commit e0796dd756
6 changed files with 12 additions and 12 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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