Chromium Code Reviews| Index: src/ia32/macro-assembler-ia32.cc |
| diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc |
| index 3d3dabca4fb76948761d7652c9b51d2ebf302888..bef964522cdc760b2079ee127fded42440270843 100644 |
| --- a/src/ia32/macro-assembler-ia32.cc |
| +++ b/src/ia32/macro-assembler-ia32.cc |
| @@ -1024,69 +1024,67 @@ void MacroAssembler::ThrowUncatchable(Register value) { |
| void MacroAssembler::CheckAccessGlobalProxy(Register holder_reg, |
| - Register scratch, |
| + Register scratch1, |
| + Register scratch2, |
| Label* miss) { |
| Label same_contexts; |
| - ASSERT(!holder_reg.is(scratch)); |
| + ASSERT(!holder_reg.is(scratch1)); |
| + ASSERT(!holder_reg.is(scratch2)); |
| + ASSERT(!scratch1.is(scratch2)); |
| // Load current lexical context from the stack frame. |
| - mov(scratch, Operand(ebp, StandardFrameConstants::kContextOffset)); |
| + mov(scratch1, Operand(ebp, StandardFrameConstants::kContextOffset)); |
| // When generating debug code, make sure the lexical context is set. |
| if (emit_debug_code()) { |
| - cmp(scratch, Immediate(0)); |
| + cmp(scratch1, Immediate(0)); |
| Check(not_equal, "we should not have an empty lexical context"); |
| } |
| // Load the native context of the current context. |
| int offset = |
| Context::kHeaderSize + Context::GLOBAL_OBJECT_INDEX * kPointerSize; |
| - mov(scratch, FieldOperand(scratch, offset)); |
| - mov(scratch, FieldOperand(scratch, GlobalObject::kNativeContextOffset)); |
| + mov(scratch1, FieldOperand(scratch1, offset)); |
| + mov(scratch1, FieldOperand(scratch1, GlobalObject::kNativeContextOffset)); |
| // Check the context is a native context. |
| if (emit_debug_code()) { |
| - push(scratch); |
| // Read the first word and compare to native_context_map. |
| - mov(scratch, FieldOperand(scratch, HeapObject::kMapOffset)); |
| - cmp(scratch, isolate()->factory()->native_context_map()); |
| + mov(scratch2, FieldOperand(scratch1, HeapObject::kMapOffset)); |
|
Jakob Kummerow
2013/04/01 12:06:06
I think we don't even need a register here, as we
|
| + cmp(scratch2, isolate()->factory()->native_context_map()); |
| Check(equal, "JSGlobalObject::native_context should be a native context."); |
| - pop(scratch); |
| } |
| // Check if both contexts are the same. |
| - cmp(scratch, FieldOperand(holder_reg, JSGlobalProxy::kNativeContextOffset)); |
| + cmp(scratch1, FieldOperand(holder_reg, JSGlobalProxy::kNativeContextOffset)); |
| j(equal, &same_contexts); |
| // Compare security tokens, save holder_reg on the stack so we can use it |
| // as a temporary register. |
| // |
| - // TODO(119): avoid push(holder_reg)/pop(holder_reg) |
| - push(holder_reg); |
| // Check that the security token in the calling global object is |
| // compatible with the security token in the receiving global |
| // object. |
| - mov(holder_reg, |
| + mov(scratch2, |
| FieldOperand(holder_reg, JSGlobalProxy::kNativeContextOffset)); |
| // Check the context is a native context. |
| if (emit_debug_code()) { |
| - cmp(holder_reg, isolate()->factory()->null_value()); |
| + cmp(scratch2, isolate()->factory()->null_value()); |
| Check(not_equal, "JSGlobalProxy::context() should not be null."); |
| - push(holder_reg); |
| + push(scratch2); |
| // Read the first word and compare to native_context_map(), |
| - mov(holder_reg, FieldOperand(holder_reg, HeapObject::kMapOffset)); |
| - cmp(holder_reg, isolate()->factory()->native_context_map()); |
| + mov(scratch2, FieldOperand(scratch2, HeapObject::kMapOffset)); |
|
Jakob Kummerow
2013/04/01 12:06:06
Same here -- in this case it would avoid the push/
|
| + cmp(scratch2, isolate()->factory()->native_context_map()); |
| Check(equal, "JSGlobalObject::native_context should be a native context."); |
| - pop(holder_reg); |
| + pop(scratch2); |
| } |
| int token_offset = Context::kHeaderSize + |
| Context::SECURITY_TOKEN_INDEX * kPointerSize; |
| - mov(scratch, FieldOperand(scratch, token_offset)); |
| - cmp(scratch, FieldOperand(holder_reg, token_offset)); |
| - pop(holder_reg); |
| + mov(scratch1, FieldOperand(scratch1, token_offset)); |
| + cmp(scratch1, FieldOperand(scratch2, token_offset)); |
| j(not_equal, miss); |
| bind(&same_contexts); |