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 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
533 if (true_label_ != fall_through_) __ b(true_label_); | 533 if (true_label_ != fall_through_) __ b(true_label_); |
534 } | 534 } |
535 } else { | 535 } else { |
536 // For simplicity we always test the accumulator register. | 536 // For simplicity we always test the accumulator register. |
537 __ mov(result_register(), Operand(lit)); | 537 __ mov(result_register(), Operand(lit)); |
538 codegen()->DoTest(this); | 538 codegen()->DoTest(this); |
539 } | 539 } |
540 } | 540 } |
541 | 541 |
542 | 542 |
543 void FullCodeGenerator::EffectContext::DropAndPlug(int count, | |
544 Register reg) const { | |
545 DCHECK(count > 0); | |
546 __ Drop(count); | |
547 } | |
548 | |
549 | |
550 void FullCodeGenerator::AccumulatorValueContext::DropAndPlug( | |
551 int count, Register reg) const { | |
552 DCHECK(count > 0); | |
553 __ Drop(count); | |
554 __ Move(result_register(), reg); | |
555 } | |
556 | |
557 | |
558 void FullCodeGenerator::StackValueContext::DropAndPlug(int count, | 543 void FullCodeGenerator::StackValueContext::DropAndPlug(int count, |
559 Register reg) const { | 544 Register reg) const { |
560 DCHECK(count > 0); | 545 DCHECK(count > 0); |
561 if (count > 1) __ Drop(count - 1); | 546 if (count > 1) __ Drop(count - 1); |
562 __ StoreP(reg, MemOperand(sp, 0)); | 547 __ StoreP(reg, MemOperand(sp, 0)); |
563 } | 548 } |
564 | 549 |
565 | 550 |
566 void FullCodeGenerator::TestContext::DropAndPlug(int count, | |
567 Register reg) const { | |
568 DCHECK(count > 0); | |
569 // For simplicity we always test the accumulator register. | |
570 __ Drop(count); | |
571 __ Move(result_register(), reg); | |
572 codegen()->PrepareForBailoutBeforeSplit(condition(), false, NULL, NULL); | |
573 codegen()->DoTest(this); | |
574 } | |
575 | |
576 | |
577 void FullCodeGenerator::EffectContext::Plug(Label* materialize_true, | 551 void FullCodeGenerator::EffectContext::Plug(Label* materialize_true, |
578 Label* materialize_false) const { | 552 Label* materialize_false) const { |
579 DCHECK(materialize_true == materialize_false); | 553 DCHECK(materialize_true == materialize_false); |
580 __ bind(materialize_true); | 554 __ bind(materialize_true); |
581 } | 555 } |
582 | 556 |
583 | 557 |
584 void FullCodeGenerator::AccumulatorValueContext::Plug( | 558 void FullCodeGenerator::AccumulatorValueContext::Plug( |
585 Label* materialize_true, Label* materialize_false) const { | 559 Label* materialize_true, Label* materialize_false) const { |
586 Label done; | 560 Label done; |
(...skipping 1482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2069 Literal* key = prop->key()->AsLiteral(); | 2043 Literal* key = prop->key()->AsLiteral(); |
2070 DCHECK(!prop->IsSuperAccess()); | 2044 DCHECK(!prop->IsSuperAccess()); |
2071 | 2045 |
2072 __ mov(LoadDescriptor::NameRegister(), Operand(key->value())); | 2046 __ mov(LoadDescriptor::NameRegister(), Operand(key->value())); |
2073 __ mov(LoadDescriptor::SlotRegister(), | 2047 __ mov(LoadDescriptor::SlotRegister(), |
2074 Operand(SmiFromSlot(prop->PropertyFeedbackSlot()))); | 2048 Operand(SmiFromSlot(prop->PropertyFeedbackSlot()))); |
2075 CallLoadIC(NOT_INSIDE_TYPEOF); | 2049 CallLoadIC(NOT_INSIDE_TYPEOF); |
2076 } | 2050 } |
2077 | 2051 |
2078 | 2052 |
2079 void FullCodeGenerator::EmitNamedSuperPropertyLoad(Property* prop) { | |
2080 // Stack: receiver, home_object. | |
2081 SetExpressionPosition(prop); | |
2082 Literal* key = prop->key()->AsLiteral(); | |
2083 DCHECK(!key->value()->IsSmi()); | |
2084 DCHECK(prop->IsSuperAccess()); | |
2085 | |
2086 __ Push(key->value()); | |
2087 __ CallRuntime(Runtime::kLoadFromSuper); | |
2088 } | |
2089 | |
2090 | |
2091 void FullCodeGenerator::EmitKeyedPropertyLoad(Property* prop) { | |
2092 SetExpressionPosition(prop); | |
2093 Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate()).code(); | |
2094 __ mov(LoadDescriptor::SlotRegister(), | |
2095 Operand(SmiFromSlot(prop->PropertyFeedbackSlot()))); | |
2096 CallIC(ic); | |
2097 } | |
2098 | |
2099 | |
2100 void FullCodeGenerator::EmitKeyedSuperPropertyLoad(Property* prop) { | |
2101 // Stack: receiver, home_object, key. | |
2102 SetExpressionPosition(prop); | |
2103 __ CallRuntime(Runtime::kLoadKeyedFromSuper); | |
2104 } | |
2105 | |
2106 | |
2107 void FullCodeGenerator::EmitInlineSmiBinaryOp(BinaryOperation* expr, | 2053 void FullCodeGenerator::EmitInlineSmiBinaryOp(BinaryOperation* expr, |
2108 Token::Value op, | 2054 Token::Value op, |
2109 Expression* left_expr, | 2055 Expression* left_expr, |
2110 Expression* right_expr) { | 2056 Expression* right_expr) { |
2111 Label done, smi_case, stub_call; | 2057 Label done, smi_case, stub_call; |
2112 | 2058 |
2113 Register scratch1 = r5; | 2059 Register scratch1 = r5; |
2114 Register scratch2 = r6; | 2060 Register scratch2 = r6; |
2115 | 2061 |
2116 // Get the arguments. | 2062 // Get the arguments. |
(...skipping 2115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4232 return ON_STACK_REPLACEMENT; | 4178 return ON_STACK_REPLACEMENT; |
4233 } | 4179 } |
4234 | 4180 |
4235 DCHECK(interrupt_address == | 4181 DCHECK(interrupt_address == |
4236 isolate->builtins()->OsrAfterStackCheck()->entry()); | 4182 isolate->builtins()->OsrAfterStackCheck()->entry()); |
4237 return OSR_AFTER_STACK_CHECK; | 4183 return OSR_AFTER_STACK_CHECK; |
4238 } | 4184 } |
4239 } // namespace internal | 4185 } // namespace internal |
4240 } // namespace v8 | 4186 } // namespace v8 |
4241 #endif // V8_TARGET_ARCH_PPC | 4187 #endif // V8_TARGET_ARCH_PPC |
OLD | NEW |