| 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 #if V8_TARGET_ARCH_PPC |     5 #if V8_TARGET_ARCH_PPC | 
|     6  |     6  | 
|     7 #include "src/ast/scopes.h" |     7 #include "src/ast/scopes.h" | 
|     8 #include "src/code-factory.h" |     8 #include "src/code-factory.h" | 
|     9 #include "src/code-stubs.h" |     9 #include "src/code-stubs.h" | 
|    10 #include "src/codegen.h" |    10 #include "src/codegen.h" | 
| (...skipping 911 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   922  |   922  | 
|   923       __ cmp(r4, r3); |   923       __ cmp(r4, r3); | 
|   924       __ bne(&next_test); |   924       __ bne(&next_test); | 
|   925       __ Drop(1);  // Switch value is no longer needed. |   925       __ Drop(1);  // Switch value is no longer needed. | 
|   926       __ b(clause->body_target()); |   926       __ b(clause->body_target()); | 
|   927       __ bind(&slow_case); |   927       __ bind(&slow_case); | 
|   928     } |   928     } | 
|   929  |   929  | 
|   930     // Record position before stub call for type feedback. |   930     // Record position before stub call for type feedback. | 
|   931     SetExpressionPosition(clause); |   931     SetExpressionPosition(clause); | 
|   932     Handle<Code> ic = CodeFactory::CompareIC(isolate(), Token::EQ_STRICT, |   932     Handle<Code> ic = | 
|   933                                              strength(language_mode())).code(); |   933         CodeFactory::CompareIC(isolate(), Token::EQ_STRICT).code(); | 
|   934     CallIC(ic, clause->CompareId()); |   934     CallIC(ic, clause->CompareId()); | 
|   935     patch_site.EmitPatchInfo(); |   935     patch_site.EmitPatchInfo(); | 
|   936  |   936  | 
|   937     Label skip; |   937     Label skip; | 
|   938     __ b(&skip); |   938     __ b(&skip); | 
|   939     PrepareForBailout(clause, TOS_REG); |   939     PrepareForBailout(clause, TOS_REG); | 
|   940     __ LoadRoot(ip, Heap::kTrueValueRootIndex); |   940     __ LoadRoot(ip, Heap::kTrueValueRootIndex); | 
|   941     __ cmp(r3, ip); |   941     __ cmp(r3, ip); | 
|   942     __ bne(&next_test); |   942     __ bne(&next_test); | 
|   943     __ Drop(1); |   943     __ Drop(1); | 
| (...skipping 1176 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2120   Register right = r3; |  2120   Register right = r3; | 
|  2121   __ pop(left); |  2121   __ pop(left); | 
|  2122  |  2122  | 
|  2123   // Perform combined smi check on both operands. |  2123   // Perform combined smi check on both operands. | 
|  2124   __ orx(scratch1, left, right); |  2124   __ orx(scratch1, left, right); | 
|  2125   STATIC_ASSERT(kSmiTag == 0); |  2125   STATIC_ASSERT(kSmiTag == 0); | 
|  2126   JumpPatchSite patch_site(masm_); |  2126   JumpPatchSite patch_site(masm_); | 
|  2127   patch_site.EmitJumpIfSmi(scratch1, &smi_case); |  2127   patch_site.EmitJumpIfSmi(scratch1, &smi_case); | 
|  2128  |  2128  | 
|  2129   __ bind(&stub_call); |  2129   __ bind(&stub_call); | 
|  2130   Handle<Code> code = |  2130   Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), op).code(); | 
|  2131       CodeFactory::BinaryOpIC(isolate(), op, strength(language_mode())).code(); |  | 
|  2132   CallIC(code, expr->BinaryOperationFeedbackId()); |  2131   CallIC(code, expr->BinaryOperationFeedbackId()); | 
|  2133   patch_site.EmitPatchInfo(); |  2132   patch_site.EmitPatchInfo(); | 
|  2134   __ b(&done); |  2133   __ b(&done); | 
|  2135  |  2134  | 
|  2136   __ bind(&smi_case); |  2135   __ bind(&smi_case); | 
|  2137   // Smi case. This code works the same way as the smi-smi case in the type |  2136   // Smi case. This code works the same way as the smi-smi case in the type | 
|  2138   // recording binary operation stub. |  2137   // recording binary operation stub. | 
|  2139   switch (op) { |  2138   switch (op) { | 
|  2140     case Token::SAR: |  2139     case Token::SAR: | 
|  2141       __ GetLeastBitsFromSmi(scratch1, right, 5); |  2140       __ GetLeastBitsFromSmi(scratch1, right, 5); | 
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2283  |  2282  | 
|  2284       default: |  2283       default: | 
|  2285         UNREACHABLE(); |  2284         UNREACHABLE(); | 
|  2286     } |  2285     } | 
|  2287   } |  2286   } | 
|  2288 } |  2287 } | 
|  2289  |  2288  | 
|  2290  |  2289  | 
|  2291 void FullCodeGenerator::EmitBinaryOp(BinaryOperation* expr, Token::Value op) { |  2290 void FullCodeGenerator::EmitBinaryOp(BinaryOperation* expr, Token::Value op) { | 
|  2292   __ pop(r4); |  2291   __ pop(r4); | 
|  2293   Handle<Code> code = |  2292   Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), op).code(); | 
|  2294       CodeFactory::BinaryOpIC(isolate(), op, strength(language_mode())).code(); |  | 
|  2295   JumpPatchSite patch_site(masm_);  // unbound, signals no inlined smi code. |  2293   JumpPatchSite patch_site(masm_);  // unbound, signals no inlined smi code. | 
|  2296   CallIC(code, expr->BinaryOperationFeedbackId()); |  2294   CallIC(code, expr->BinaryOperationFeedbackId()); | 
|  2297   patch_site.EmitPatchInfo(); |  2295   patch_site.EmitPatchInfo(); | 
|  2298   context()->Plug(r3); |  2296   context()->Plug(r3); | 
|  2299 } |  2297 } | 
|  2300  |  2298  | 
|  2301  |  2299  | 
|  2302 void FullCodeGenerator::EmitAssignment(Expression* expr, |  2300 void FullCodeGenerator::EmitAssignment(Expression* expr, | 
|  2303                                        FeedbackVectorSlot slot) { |  2301                                        FeedbackVectorSlot slot) { | 
|  2304   DCHECK(expr->IsValidReferenceExpressionOrThis()); |  2302   DCHECK(expr->IsValidReferenceExpressionOrThis()); | 
| (...skipping 1799 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4104       } |  4102       } | 
|  4105     } |  4103     } | 
|  4106   } |  4104   } | 
|  4107  |  4105  | 
|  4108   __ bind(&stub_call); |  4106   __ bind(&stub_call); | 
|  4109   __ mr(r4, r3); |  4107   __ mr(r4, r3); | 
|  4110   __ LoadSmiLiteral(r3, Smi::FromInt(count_value)); |  4108   __ LoadSmiLiteral(r3, Smi::FromInt(count_value)); | 
|  4111  |  4109  | 
|  4112   SetExpressionPosition(expr); |  4110   SetExpressionPosition(expr); | 
|  4113  |  4111  | 
|  4114   Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), Token::ADD, |  4112   Handle<Code> code = CodeFactory::BinaryOpIC(isolate(), Token::ADD).code(); | 
|  4115                                               strength(language_mode())).code(); |  | 
|  4116   CallIC(code, expr->CountBinOpFeedbackId()); |  4113   CallIC(code, expr->CountBinOpFeedbackId()); | 
|  4117   patch_site.EmitPatchInfo(); |  4114   patch_site.EmitPatchInfo(); | 
|  4118   __ bind(&done); |  4115   __ bind(&done); | 
|  4119  |  4116  | 
|  4120   if (is_strong(language_mode())) { |  4117   if (is_strong(language_mode())) { | 
|  4121     PrepareForBailoutForId(expr->ToNumberId(), TOS_REG); |  4118     PrepareForBailoutForId(expr->ToNumberId(), TOS_REG); | 
|  4122   } |  4119   } | 
|  4123   // Store the value returned in r3. |  4120   // Store the value returned in r3. | 
|  4124   switch (assign_type) { |  4121   switch (assign_type) { | 
|  4125     case VARIABLE: |  4122     case VARIABLE: | 
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4333       JumpPatchSite patch_site(masm_); |  4330       JumpPatchSite patch_site(masm_); | 
|  4334       if (inline_smi_code) { |  4331       if (inline_smi_code) { | 
|  4335         Label slow_case; |  4332         Label slow_case; | 
|  4336         __ orx(r5, r3, r4); |  4333         __ orx(r5, r3, r4); | 
|  4337         patch_site.EmitJumpIfNotSmi(r5, &slow_case); |  4334         patch_site.EmitJumpIfNotSmi(r5, &slow_case); | 
|  4338         __ cmp(r4, r3); |  4335         __ cmp(r4, r3); | 
|  4339         Split(cond, if_true, if_false, NULL); |  4336         Split(cond, if_true, if_false, NULL); | 
|  4340         __ bind(&slow_case); |  4337         __ bind(&slow_case); | 
|  4341       } |  4338       } | 
|  4342  |  4339  | 
|  4343       Handle<Code> ic = CodeFactory::CompareIC( |  4340       Handle<Code> ic = CodeFactory::CompareIC(isolate(), op).code(); | 
|  4344                             isolate(), op, strength(language_mode())).code(); |  | 
|  4345       CallIC(ic, expr->CompareOperationFeedbackId()); |  4341       CallIC(ic, expr->CompareOperationFeedbackId()); | 
|  4346       patch_site.EmitPatchInfo(); |  4342       patch_site.EmitPatchInfo(); | 
|  4347       PrepareForBailoutBeforeSplit(expr, true, if_true, if_false); |  4343       PrepareForBailoutBeforeSplit(expr, true, if_true, if_false); | 
|  4348       __ cmpi(r3, Operand::Zero()); |  4344       __ cmpi(r3, Operand::Zero()); | 
|  4349       Split(cond, if_true, if_false, fall_through); |  4345       Split(cond, if_true, if_false, fall_through); | 
|  4350     } |  4346     } | 
|  4351   } |  4347   } | 
|  4352  |  4348  | 
|  4353   // Convert the result of the comparison into one expected for this |  4349   // Convert the result of the comparison into one expected for this | 
|  4354   // expression's context. |  4350   // expression's context. | 
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4567     return ON_STACK_REPLACEMENT; |  4563     return ON_STACK_REPLACEMENT; | 
|  4568   } |  4564   } | 
|  4569  |  4565  | 
|  4570   DCHECK(interrupt_address == |  4566   DCHECK(interrupt_address == | 
|  4571          isolate->builtins()->OsrAfterStackCheck()->entry()); |  4567          isolate->builtins()->OsrAfterStackCheck()->entry()); | 
|  4572   return OSR_AFTER_STACK_CHECK; |  4568   return OSR_AFTER_STACK_CHECK; | 
|  4573 } |  4569 } | 
|  4574 }  // namespace internal |  4570 }  // namespace internal | 
|  4575 }  // namespace v8 |  4571 }  // namespace v8 | 
|  4576 #endif  // V8_TARGET_ARCH_PPC |  4572 #endif  // V8_TARGET_ARCH_PPC | 
| OLD | NEW |