Commit 68e0ca2e authored by palfia@homejinni.com's avatar palfia@homejinni.com

MIPS: Fix HInnerAllocatedObject to use an HValue for the offset.

Port r18181 (2b41b833)

BUG=
R=plind44@gmail.com

Review URL: https://codereview.chromium.org/99763003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18212 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent f8542470
...@@ -4102,7 +4102,13 @@ void LCodeGen::DoStoreCodeEntry(LStoreCodeEntry* instr) { ...@@ -4102,7 +4102,13 @@ void LCodeGen::DoStoreCodeEntry(LStoreCodeEntry* instr) {
void LCodeGen::DoInnerAllocatedObject(LInnerAllocatedObject* instr) { void LCodeGen::DoInnerAllocatedObject(LInnerAllocatedObject* instr) {
Register result = ToRegister(instr->result()); Register result = ToRegister(instr->result());
Register base = ToRegister(instr->base_object()); Register base = ToRegister(instr->base_object());
__ Addu(result, base, Operand(instr->offset())); if (instr->offset()->IsConstantOperand()) {
LConstantOperand* offset = LConstantOperand::cast(instr->offset());
__ Addu(result, base, Operand(ToInteger32(offset)));
} else {
Register offset = ToRegister(instr->offset());
__ Addu(result, base, offset);
}
} }
......
...@@ -277,7 +277,8 @@ void LStoreCodeEntry::PrintDataTo(StringStream* stream) { ...@@ -277,7 +277,8 @@ void LStoreCodeEntry::PrintDataTo(StringStream* stream) {
void LInnerAllocatedObject::PrintDataTo(StringStream* stream) { void LInnerAllocatedObject::PrintDataTo(StringStream* stream) {
stream->Add(" = "); stream->Add(" = ");
base_object()->PrintTo(stream); base_object()->PrintTo(stream);
stream->Add(" + %d", offset()); stream->Add(" + ");
offset()->PrintTo(stream);
} }
...@@ -1119,11 +1120,11 @@ LInstruction* LChunkBuilder::DoStoreCodeEntry( ...@@ -1119,11 +1120,11 @@ LInstruction* LChunkBuilder::DoStoreCodeEntry(
LInstruction* LChunkBuilder::DoInnerAllocatedObject( LInstruction* LChunkBuilder::DoInnerAllocatedObject(
HInnerAllocatedObject* inner_object) { HInnerAllocatedObject* instr) {
LOperand* base_object = UseRegisterAtStart(inner_object->base_object()); LOperand* base_object = UseRegisterAtStart(instr->base_object());
LInnerAllocatedObject* result = LOperand* offset = UseRegisterOrConstantAtStart(instr->offset());
new(zone()) LInnerAllocatedObject(base_object); return DefineAsRegister(
return DefineAsRegister(result); new(zone()) LInnerAllocatedObject(base_object, offset));
} }
......
...@@ -1778,19 +1778,19 @@ class LStoreCodeEntry V8_FINAL: public LTemplateInstruction<0, 1, 1> { ...@@ -1778,19 +1778,19 @@ class LStoreCodeEntry V8_FINAL: public LTemplateInstruction<0, 1, 1> {
}; };
class LInnerAllocatedObject V8_FINAL: public LTemplateInstruction<1, 1, 0> { class LInnerAllocatedObject V8_FINAL: public LTemplateInstruction<1, 2, 0> {
public: public:
explicit LInnerAllocatedObject(LOperand* base_object) { LInnerAllocatedObject(LOperand* base_object, LOperand* offset) {
inputs_[0] = base_object; inputs_[0] = base_object;
inputs_[1] = offset;
} }
LOperand* base_object() { return inputs_[0]; } LOperand* base_object() const { return inputs_[0]; }
int offset() { return hydrogen()->offset(); } LOperand* offset() const { return inputs_[1]; }
virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE; virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject, "sub-allocated-object") DECLARE_CONCRETE_INSTRUCTION(InnerAllocatedObject, "inner-allocated-object")
DECLARE_HYDROGEN_ACCESSOR(InnerAllocatedObject)
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment