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