| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #if V8_TARGET_ARCH_MIPS64 | 5 #if V8_TARGET_ARCH_MIPS64 |
| 6 | 6 |
| 7 // Note on Mips implementation: | 7 // Note on Mips implementation: |
| 8 // | 8 // |
| 9 // The result_register() for mips is the 'v0' register, which is defined | 9 // The result_register() for mips is the 'v0' register, which is defined |
| 10 // by the ABI to contain function return values. However, the first | 10 // by the ABI to contain function return values. However, the first |
| (...skipping 3704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3715 Register scratch1 = a1; | 3715 Register scratch1 = a1; |
| 3716 Register scratch2 = a4; | 3716 Register scratch2 = a4; |
| 3717 __ li(scratch1, Operand(Smi::FromInt(count_value))); | 3717 __ li(scratch1, Operand(Smi::FromInt(count_value))); |
| 3718 __ DadduAndCheckForOverflow(v0, v0, scratch1, scratch2); | 3718 __ DadduAndCheckForOverflow(v0, v0, scratch1, scratch2); |
| 3719 __ BranchOnNoOverflow(&done, scratch2); | 3719 __ BranchOnNoOverflow(&done, scratch2); |
| 3720 // Call stub. Undo operation first. | 3720 // Call stub. Undo operation first. |
| 3721 __ Move(v0, a0); | 3721 __ Move(v0, a0); |
| 3722 __ jmp(&stub_call); | 3722 __ jmp(&stub_call); |
| 3723 __ bind(&slow); | 3723 __ bind(&slow); |
| 3724 } | 3724 } |
| 3725 if (!is_strong(language_mode())) { | 3725 |
| 3726 ToNumberStub convert_stub(isolate()); | 3726 // Convert old value into a number. |
| 3727 __ CallStub(&convert_stub); | 3727 ToNumberStub convert_stub(isolate()); |
| 3728 PrepareForBailoutForId(expr->ToNumberId(), TOS_REG); | 3728 __ CallStub(&convert_stub); |
| 3729 } | 3729 PrepareForBailoutForId(expr->ToNumberId(), TOS_REG); |
| 3730 | 3730 |
| 3731 // Save result for postfix expressions. | 3731 // Save result for postfix expressions. |
| 3732 if (expr->is_postfix()) { | 3732 if (expr->is_postfix()) { |
| 3733 if (!context()->IsEffect()) { | 3733 if (!context()->IsEffect()) { |
| 3734 // Save the result on the stack. If we have a named or keyed property | 3734 // Save the result on the stack. If we have a named or keyed property |
| 3735 // we store the result under the receiver that is currently on top | 3735 // we store the result under the receiver that is currently on top |
| 3736 // of the stack. | 3736 // of the stack. |
| 3737 switch (assign_type) { | 3737 switch (assign_type) { |
| 3738 case VARIABLE: | 3738 case VARIABLE: |
| 3739 PushOperand(v0); | 3739 PushOperand(v0); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3758 __ mov(a1, v0); | 3758 __ mov(a1, v0); |
| 3759 __ li(a0, Operand(Smi::FromInt(count_value))); | 3759 __ li(a0, Operand(Smi::FromInt(count_value))); |
| 3760 | 3760 |
| 3761 SetExpressionPosition(expr); | 3761 SetExpressionPosition(expr); |
| 3762 | 3762 |
| 3763 Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), Token::ADD).code(); | 3763 Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), Token::ADD).code(); |
| 3764 CallIC(code, expr->CountBinOpFeedbackId()); | 3764 CallIC(code, expr->CountBinOpFeedbackId()); |
| 3765 patch_site.EmitPatchInfo(); | 3765 patch_site.EmitPatchInfo(); |
| 3766 __ bind(&done); | 3766 __ bind(&done); |
| 3767 | 3767 |
| 3768 if (is_strong(language_mode())) { | |
| 3769 PrepareForBailoutForId(expr->ToNumberId(), TOS_REG); | |
| 3770 } | |
| 3771 // Store the value returned in v0. | 3768 // Store the value returned in v0. |
| 3772 switch (assign_type) { | 3769 switch (assign_type) { |
| 3773 case VARIABLE: | 3770 case VARIABLE: |
| 3774 if (expr->is_postfix()) { | 3771 if (expr->is_postfix()) { |
| 3775 { EffectContext context(this); | 3772 { EffectContext context(this); |
| 3776 EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(), | 3773 EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(), |
| 3777 Token::ASSIGN, expr->CountSlot()); | 3774 Token::ASSIGN, expr->CountSlot()); |
| 3778 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); | 3775 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); |
| 3779 context.Plug(v0); | 3776 context.Plug(v0); |
| 3780 } | 3777 } |
| (...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4231 reinterpret_cast<uint64_t>( | 4228 reinterpret_cast<uint64_t>( |
| 4232 isolate->builtins()->OsrAfterStackCheck()->entry())); | 4229 isolate->builtins()->OsrAfterStackCheck()->entry())); |
| 4233 return OSR_AFTER_STACK_CHECK; | 4230 return OSR_AFTER_STACK_CHECK; |
| 4234 } | 4231 } |
| 4235 | 4232 |
| 4236 | 4233 |
| 4237 } // namespace internal | 4234 } // namespace internal |
| 4238 } // namespace v8 | 4235 } // namespace v8 |
| 4239 | 4236 |
| 4240 #endif // V8_TARGET_ARCH_MIPS64 | 4237 #endif // V8_TARGET_ARCH_MIPS64 |
| OLD | NEW |