Index: src/ia32/lithium-codegen-ia32.cc |
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
index b5c0289174e7c94abf332dbc8a43726f9e8c47ce..6229be3173cb99ab0ced1ca62adecb8a2d6ef7b7 100644 |
--- a/src/ia32/lithium-codegen-ia32.cc |
+++ b/src/ia32/lithium-codegen-ia32.cc |
@@ -1745,6 +1745,17 @@ void LCodeGen::DoStoreGlobal(LStoreGlobal* instr) { |
} |
+void LCodeGen::DoLoadContextSlot(LLoadContextSlot* instr) { |
+ // TODO(antonm): load a context with a separate instruction. |
+ Register result = ToRegister(instr->result()); |
+ HLoadContextSlot* hinstr = instr->hydrogen(); |
+ Handle<Context> context = hinstr->context(); |
+ Comment(";;; Load context slot %d out of %p", hinstr->index(), *context); |
+ LoadHeapObject(result, context); |
+ __ mov(result, Operand(result, Context::SlotOffset(hinstr->index()))); |
+} |
+ |
+ |
void LCodeGen::DoLoadNamedField(LLoadNamedField* instr) { |
Register object = ToRegister(instr->input()); |
Register result = ToRegister(instr->result()); |
@@ -2819,13 +2830,13 @@ void LCodeGen::DoCheckMap(LCheckMap* instr) { |
} |
-void LCodeGen::LoadPrototype(Register result, Handle<JSObject> prototype) { |
- if (Heap::InNewSpace(*prototype)) { |
+void LCodeGen::LoadHeapObject(Register result, Handle<HeapObject> object) { |
+ if (Heap::InNewSpace(*object)) { |
Handle<JSGlobalPropertyCell> cell = |
- Factory::NewJSGlobalPropertyCell(prototype); |
+ Factory::NewJSGlobalPropertyCell(object); |
__ mov(result, Operand::Cell(cell)); |
} else { |
- __ mov(result, prototype); |
+ __ mov(result, object); |
} |
} |
@@ -2838,7 +2849,7 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) { |
Handle<JSObject> current_prototype(JSObject::cast(receiver_map->prototype())); |
// Load prototype object. |
- LoadPrototype(reg, current_prototype); |
+ LoadHeapObject(reg, current_prototype); |
// Check prototype maps up to the holder. |
while (!current_prototype.is_identical_to(holder)) { |
@@ -2848,7 +2859,7 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) { |
current_prototype = |
Handle<JSObject>(JSObject::cast(current_prototype->GetPrototype())); |
// Load next prototype object. |
- LoadPrototype(reg, current_prototype); |
+ LoadHeapObject(reg, current_prototype); |
} |
// Check the holder map. |