Index: src/ia32/codegen-ia32.cc |
=================================================================== |
--- src/ia32/codegen-ia32.cc (revision 5846) |
+++ src/ia32/codegen-ia32.cc (working copy) |
@@ -154,7 +154,7 @@ |
safe_int32_mode_enabled_(true), |
function_return_is_shadowed_(false), |
in_spilled_code_(false), |
- jit_cookie_((FLAG_mask_constants_with_cookie) ? V8::Random() : 0) { |
+ jit_cookie_((FLAG_mask_constants_with_cookie) ? V8::RandomPrivate() : 0) { |
} |
@@ -686,10 +686,10 @@ |
void CodeGenerator::LoadGlobal() { |
if (in_spilled_code()) { |
- frame_->EmitPush(GlobalObject()); |
+ frame_->EmitPush(GlobalObjectOperand()); |
} else { |
Result temp = allocator_->Allocate(); |
- __ mov(temp.reg(), GlobalObject()); |
+ __ mov(temp.reg(), GlobalObjectOperand()); |
frame_->Push(&temp); |
} |
} |
@@ -698,7 +698,7 @@ |
void CodeGenerator::LoadGlobalReceiver() { |
Result temp = allocator_->Allocate(); |
Register reg = temp.reg(); |
- __ mov(reg, GlobalObject()); |
+ __ mov(reg, GlobalObjectOperand()); |
__ mov(reg, FieldOperand(reg, GlobalObject::kGlobalReceiverOffset)); |
frame_->Push(&temp); |
} |
@@ -6294,6 +6294,18 @@ |
// Push the receiver onto the frame. |
Load(property->obj()); |
+ // Load the name of the function. |
+ Load(property->key()); |
+ |
+ // Swap the name of the function and the receiver on the stack to follow |
+ // the calling convention for call ICs. |
+ Result key = frame_->Pop(); |
+ Result receiver = frame_->Pop(); |
+ frame_->Push(&key); |
+ frame_->Push(&receiver); |
+ key.Unuse(); |
+ receiver.Unuse(); |
+ |
// Load the arguments. |
int arg_count = args->length(); |
for (int i = 0; i < arg_count; i++) { |
@@ -6301,15 +6313,14 @@ |
frame_->SpillTop(); |
} |
- // Load the name of the function. |
- Load(property->key()); |
- |
- // Call the IC initialization code. |
+ // Place the key on top of stack and call the IC initialization code. |
+ frame_->PushElementAt(arg_count + 1); |
CodeForSourcePosition(node->position()); |
Result result = |
frame_->CallKeyedCallIC(RelocInfo::CODE_TARGET, |
arg_count, |
loop_nesting()); |
+ frame_->Drop(); // Drop the key still on the stack. |
frame_->RestoreContextRegister(); |
frame_->Push(&result); |
} |
@@ -6778,8 +6789,8 @@ |
__ mov(scratch2_, |
FieldOperand(scratch2_, GlobalObject::kGlobalContextOffset)); |
__ cmp(scratch1_, |
- CodeGenerator::ContextOperand( |
- scratch2_, Context::STRING_FUNCTION_PROTOTYPE_MAP_INDEX)); |
+ ContextOperand(scratch2_, |
+ Context::STRING_FUNCTION_PROTOTYPE_MAP_INDEX)); |
__ j(not_equal, &false_result); |
// Set the bit in the map to indicate that it has been checked safe for |
// default valueOf and set true result. |
@@ -7934,7 +7945,7 @@ |
// Push the builtins object found in the current global object. |
Result temp = allocator()->Allocate(); |
ASSERT(temp.is_valid()); |
- __ mov(temp.reg(), GlobalObject()); |
+ __ mov(temp.reg(), GlobalObjectOperand()); |
__ mov(temp.reg(), FieldOperand(temp.reg(), GlobalObject::kBuiltinsOffset)); |
frame_->Push(&temp); |
} |