| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #if V8_TARGET_ARCH_PPC | 7 #if V8_TARGET_ARCH_PPC |
| 8 | 8 |
| 9 #include "src/code-factory.h" | 9 #include "src/code-factory.h" |
| 10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
| (...skipping 5028 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5039 Register scratch1 = r4; | 5039 Register scratch1 = r4; |
| 5040 Register scratch2 = r5; | 5040 Register scratch2 = r5; |
| 5041 __ LoadSmiLiteral(scratch1, Smi::FromInt(count_value)); | 5041 __ LoadSmiLiteral(scratch1, Smi::FromInt(count_value)); |
| 5042 __ AddAndCheckForOverflow(r3, r3, scratch1, scratch2, r0); | 5042 __ AddAndCheckForOverflow(r3, r3, scratch1, scratch2, r0); |
| 5043 __ BranchOnNoOverflow(&done); | 5043 __ BranchOnNoOverflow(&done); |
| 5044 // Call stub. Undo operation first. | 5044 // Call stub. Undo operation first. |
| 5045 __ sub(r3, r3, scratch1); | 5045 __ sub(r3, r3, scratch1); |
| 5046 __ b(&stub_call); | 5046 __ b(&stub_call); |
| 5047 __ bind(&slow); | 5047 __ bind(&slow); |
| 5048 } | 5048 } |
| 5049 ToNumberStub convert_stub(isolate()); | 5049 if (!is_strong(language_mode())) { |
| 5050 __ CallStub(&convert_stub); | 5050 ToNumberStub convert_stub(isolate()); |
| 5051 PrepareForBailoutForId(expr->ToNumberId(), TOS_REG); | 5051 __ CallStub(&convert_stub); |
| 5052 PrepareForBailoutForId(expr->ToNumberId(), TOS_REG); |
| 5053 } |
| 5052 | 5054 |
| 5053 // Save result for postfix expressions. | 5055 // Save result for postfix expressions. |
| 5054 if (expr->is_postfix()) { | 5056 if (expr->is_postfix()) { |
| 5055 if (!context()->IsEffect()) { | 5057 if (!context()->IsEffect()) { |
| 5056 // Save the result on the stack. If we have a named or keyed property | 5058 // Save the result on the stack. If we have a named or keyed property |
| 5057 // we store the result under the receiver that is currently on top | 5059 // we store the result under the receiver that is currently on top |
| 5058 // of the stack. | 5060 // of the stack. |
| 5059 switch (assign_type) { | 5061 switch (assign_type) { |
| 5060 case VARIABLE: | 5062 case VARIABLE: |
| 5061 __ push(r3); | 5063 __ push(r3); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 5082 | 5084 |
| 5083 // Record position before stub call. | 5085 // Record position before stub call. |
| 5084 SetSourcePosition(expr->position()); | 5086 SetSourcePosition(expr->position()); |
| 5085 | 5087 |
| 5086 Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), Token::ADD, | 5088 Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), Token::ADD, |
| 5087 strength(language_mode())).code(); | 5089 strength(language_mode())).code(); |
| 5088 CallIC(code, expr->CountBinOpFeedbackId()); | 5090 CallIC(code, expr->CountBinOpFeedbackId()); |
| 5089 patch_site.EmitPatchInfo(); | 5091 patch_site.EmitPatchInfo(); |
| 5090 __ bind(&done); | 5092 __ bind(&done); |
| 5091 | 5093 |
| 5094 if (is_strong(language_mode())) { |
| 5095 PrepareForBailoutForId(expr->ToNumberId(), TOS_REG); |
| 5096 } |
| 5092 // Store the value returned in r3. | 5097 // Store the value returned in r3. |
| 5093 switch (assign_type) { | 5098 switch (assign_type) { |
| 5094 case VARIABLE: | 5099 case VARIABLE: |
| 5095 if (expr->is_postfix()) { | 5100 if (expr->is_postfix()) { |
| 5096 { | 5101 { |
| 5097 EffectContext context(this); | 5102 EffectContext context(this); |
| 5098 EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(), | 5103 EmitVariableAssignment(expr->expression()->AsVariableProxy()->var(), |
| 5099 Token::ASSIGN, expr->CountSlot()); | 5104 Token::ASSIGN, expr->CountSlot()); |
| 5100 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); | 5105 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); |
| 5101 context.Plug(r3); | 5106 context.Plug(r3); |
| (...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5576 return ON_STACK_REPLACEMENT; | 5581 return ON_STACK_REPLACEMENT; |
| 5577 } | 5582 } |
| 5578 | 5583 |
| 5579 DCHECK(interrupt_address == | 5584 DCHECK(interrupt_address == |
| 5580 isolate->builtins()->OsrAfterStackCheck()->entry()); | 5585 isolate->builtins()->OsrAfterStackCheck()->entry()); |
| 5581 return OSR_AFTER_STACK_CHECK; | 5586 return OSR_AFTER_STACK_CHECK; |
| 5582 } | 5587 } |
| 5583 } // namespace internal | 5588 } // namespace internal |
| 5584 } // namespace v8 | 5589 } // namespace v8 |
| 5585 #endif // V8_TARGET_ARCH_PPC | 5590 #endif // V8_TARGET_ARCH_PPC |
| OLD | NEW |