| 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/full-codegen/full-codegen.h" | 7 #include "src/full-codegen/full-codegen.h" |
| 8 #include "src/ast/compile-time-value.h" | 8 #include "src/ast/compile-time-value.h" |
| 9 #include "src/ast/scopes.h" | 9 #include "src/ast/scopes.h" |
| 10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
| (...skipping 958 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 969 // it to a JS receiver. See ECMA-262 version 5, section 12.6.4. | 969 // it to a JS receiver. See ECMA-262 version 5, section 12.6.4. |
| 970 Label convert, done_convert; | 970 Label convert, done_convert; |
| 971 __ JumpIfSmi(r3, &convert); | 971 __ JumpIfSmi(r3, &convert); |
| 972 __ CompareObjectType(r3, r4, r4, FIRST_JS_RECEIVER_TYPE); | 972 __ CompareObjectType(r3, r4, r4, FIRST_JS_RECEIVER_TYPE); |
| 973 __ bge(&done_convert); | 973 __ bge(&done_convert); |
| 974 __ CompareRoot(r3, Heap::kNullValueRootIndex); | 974 __ CompareRoot(r3, Heap::kNullValueRootIndex); |
| 975 __ beq(&exit); | 975 __ beq(&exit); |
| 976 __ CompareRoot(r3, Heap::kUndefinedValueRootIndex); | 976 __ CompareRoot(r3, Heap::kUndefinedValueRootIndex); |
| 977 __ beq(&exit); | 977 __ beq(&exit); |
| 978 __ bind(&convert); | 978 __ bind(&convert); |
| 979 ToObjectStub stub(isolate()); | 979 __ Call(isolate()->builtins()->ToObject(), RelocInfo::CODE_TARGET); |
| 980 __ CallStub(&stub); | |
| 981 RestoreContext(); | 980 RestoreContext(); |
| 982 __ bind(&done_convert); | 981 __ bind(&done_convert); |
| 983 PrepareForBailoutForId(stmt->ToObjectId(), BailoutState::TOS_REGISTER); | 982 PrepareForBailoutForId(stmt->ToObjectId(), BailoutState::TOS_REGISTER); |
| 984 __ push(r3); | 983 __ push(r3); |
| 985 | 984 |
| 986 // Check cache validity in generated code. If we cannot guarantee cache | 985 // Check cache validity in generated code. If we cannot guarantee cache |
| 987 // validity, call the runtime system to check cache validity or get the | 986 // validity, call the runtime system to check cache validity or get the |
| 988 // property names in a fixed array. Note: Proxies never have an enum cache, | 987 // property names in a fixed array. Note: Proxies never have an enum cache, |
| 989 // so will always take the slow path. | 988 // so will always take the slow path. |
| 990 Label call_runtime; | 989 Label call_runtime; |
| (...skipping 2050 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3041 break; | 3040 break; |
| 3042 } | 3041 } |
| 3043 | 3042 |
| 3044 case Token::TYPEOF: { | 3043 case Token::TYPEOF: { |
| 3045 Comment cmnt(masm_, "[ UnaryOperation (TYPEOF)"); | 3044 Comment cmnt(masm_, "[ UnaryOperation (TYPEOF)"); |
| 3046 { | 3045 { |
| 3047 AccumulatorValueContext context(this); | 3046 AccumulatorValueContext context(this); |
| 3048 VisitForTypeofValue(expr->expression()); | 3047 VisitForTypeofValue(expr->expression()); |
| 3049 } | 3048 } |
| 3050 __ mr(r6, r3); | 3049 __ mr(r6, r3); |
| 3051 TypeofStub typeof_stub(isolate()); | 3050 __ Call(isolate()->builtins()->Typeof(), RelocInfo::CODE_TARGET); |
| 3052 __ CallStub(&typeof_stub); | |
| 3053 context()->Plug(r3); | 3051 context()->Plug(r3); |
| 3054 break; | 3052 break; |
| 3055 } | 3053 } |
| 3056 | 3054 |
| 3057 default: | 3055 default: |
| 3058 UNREACHABLE(); | 3056 UNREACHABLE(); |
| 3059 } | 3057 } |
| 3060 } | 3058 } |
| 3061 | 3059 |
| 3062 | 3060 |
| (...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3412 EmitHasProperty(); | 3410 EmitHasProperty(); |
| 3413 PrepareForBailoutBeforeSplit(expr, false, NULL, NULL); | 3411 PrepareForBailoutBeforeSplit(expr, false, NULL, NULL); |
| 3414 __ CompareRoot(r3, Heap::kTrueValueRootIndex); | 3412 __ CompareRoot(r3, Heap::kTrueValueRootIndex); |
| 3415 Split(eq, if_true, if_false, fall_through); | 3413 Split(eq, if_true, if_false, fall_through); |
| 3416 break; | 3414 break; |
| 3417 | 3415 |
| 3418 case Token::INSTANCEOF: { | 3416 case Token::INSTANCEOF: { |
| 3419 VisitForAccumulatorValue(expr->right()); | 3417 VisitForAccumulatorValue(expr->right()); |
| 3420 SetExpressionPosition(expr); | 3418 SetExpressionPosition(expr); |
| 3421 PopOperand(r4); | 3419 PopOperand(r4); |
| 3422 InstanceOfStub stub(isolate()); | 3420 __ Call(isolate()->builtins()->InstanceOf(), RelocInfo::CODE_TARGET); |
| 3423 __ CallStub(&stub); | |
| 3424 PrepareForBailoutBeforeSplit(expr, false, NULL, NULL); | 3421 PrepareForBailoutBeforeSplit(expr, false, NULL, NULL); |
| 3425 __ CompareRoot(r3, Heap::kTrueValueRootIndex); | 3422 __ CompareRoot(r3, Heap::kTrueValueRootIndex); |
| 3426 Split(eq, if_true, if_false, fall_through); | 3423 Split(eq, if_true, if_false, fall_through); |
| 3427 break; | 3424 break; |
| 3428 } | 3425 } |
| 3429 | 3426 |
| 3430 default: { | 3427 default: { |
| 3431 VisitForAccumulatorValue(expr->right()); | 3428 VisitForAccumulatorValue(expr->right()); |
| 3432 SetExpressionPosition(expr); | 3429 SetExpressionPosition(expr); |
| 3433 Condition cond = CompareIC::ComputeCondition(op); | 3430 Condition cond = CompareIC::ComputeCondition(op); |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3660 | 3657 |
| 3661 DCHECK(Assembler::IsCrSet(Assembler::instr_at(cmp_address))); | 3658 DCHECK(Assembler::IsCrSet(Assembler::instr_at(cmp_address))); |
| 3662 | 3659 |
| 3663 DCHECK(interrupt_address == | 3660 DCHECK(interrupt_address == |
| 3664 isolate->builtins()->OnStackReplacement()->entry()); | 3661 isolate->builtins()->OnStackReplacement()->entry()); |
| 3665 return ON_STACK_REPLACEMENT; | 3662 return ON_STACK_REPLACEMENT; |
| 3666 } | 3663 } |
| 3667 } // namespace internal | 3664 } // namespace internal |
| 3668 } // namespace v8 | 3665 } // namespace v8 |
| 3669 #endif // V8_TARGET_ARCH_PPC | 3666 #endif // V8_TARGET_ARCH_PPC |
| OLD | NEW |