Index: src/x64/full-codegen-x64.cc |
=================================================================== |
--- src/x64/full-codegen-x64.cc (revision 6621) |
+++ src/x64/full-codegen-x64.cc (working copy) |
@@ -1529,14 +1529,9 @@ |
__ j(smi, &smi_case); |
__ bind(&stub_call); |
- GenericBinaryOpStub stub(op, mode, NO_SMI_CODE_IN_STUB, TypeInfo::Unknown()); |
- if (stub.ArgsInRegistersSupported()) { |
- stub.GenerateCall(masm_, rdx, rcx); |
- } else { |
- __ push(rdx); |
- __ push(rcx); |
- __ CallStub(&stub); |
- } |
+ TypeRecordingBinaryOpStub stub(op, mode); |
+ __ movq(rax, rcx); |
+ __ CallStub(&stub); |
__ jmp(&done); |
__ bind(&smi_case); |
@@ -1580,14 +1575,9 @@ |
void FullCodeGenerator::EmitBinaryOp(Token::Value op, |
OverwriteMode mode) { |
- GenericBinaryOpStub stub(op, mode, NO_GENERIC_BINARY_FLAGS); |
- if (stub.ArgsInRegistersSupported()) { |
- __ pop(rdx); |
- stub.GenerateCall(masm_, rdx, rax); |
- } else { |
- __ push(result_register()); |
- __ CallStub(&stub); |
- } |
+ TypeRecordingBinaryOpStub stub(op, mode); |
+ __ pop(rdx); |
+ __ CallStub(&stub); |
context()->Plug(rax); |
} |
@@ -3217,6 +3207,7 @@ |
// the first smi check before calling ToNumber. |
is_smi = masm_->CheckSmi(rax); |
__ j(is_smi, &done); |
+ |
__ bind(&stub_call); |
// Call stub. Undo operation first. |
if (expr->op() == Token::INC) { |
@@ -3230,12 +3221,16 @@ |
SetSourcePosition(expr->position()); |
// Call stub for +1/-1. |
- GenericBinaryOpStub stub(expr->binary_op(), |
- NO_OVERWRITE, |
- NO_GENERIC_BINARY_FLAGS); |
- stub.GenerateCall(masm_, rax, Smi::FromInt(1)); |
- __ bind(&done); |
+ TypeRecordingBinaryOpStub stub(expr->binary_op(), NO_OVERWRITE); |
+ if (expr->op() == Token::INC) { |
+ __ Move(rdx, Smi::FromInt(1)); |
+ } else { |
+ __ movq(rdx, rax); |
+ __ Move(rax, Smi::FromInt(1)); |
+ } |
+ __ CallStub(&stub); |
+ __ bind(&done); |
// Store the value returned in rax. |
switch (assign_type) { |
case VARIABLE: |