Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Side by Side Diff: src/ppc/code-stubs-ppc.cc

Issue 1316943002: Move (uppercase) JS builtins from js builtins object to native context. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: remove Isolate::js_builtins_object Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/ppc/builtins-ppc.cc ('k') | src/ppc/macro-assembler-ppc.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/base/bits.h" 7 #include "src/base/bits.h"
8 #include "src/bootstrapper.h" 8 #include "src/bootstrapper.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 } 702 }
703 // Never falls through to here. 703 // Never falls through to here.
704 704
705 __ bind(&slow); 705 __ bind(&slow);
706 706
707 __ Push(lhs, rhs); 707 __ Push(lhs, rhs);
708 // Figure out which native to call and setup the arguments. 708 // Figure out which native to call and setup the arguments.
709 if (cc == eq && strict()) { 709 if (cc == eq && strict()) {
710 __ TailCallRuntime(Runtime::kStrictEquals, 2, 1); 710 __ TailCallRuntime(Runtime::kStrictEquals, 2, 1);
711 } else { 711 } else {
712 Builtins::JavaScript native; 712 int context_index;
713 if (cc == eq) { 713 if (cc == eq) {
714 native = Builtins::EQUALS; 714 context_index = Context::EQUALS_BUILTIN_INDEX;
715 } else { 715 } else {
716 native = 716 context_index = is_strong(strength())
717 is_strong(strength()) ? Builtins::COMPARE_STRONG : Builtins::COMPARE; 717 ? Context::COMPARE_STRONG_BUILTIN_INDEX
718 : Context::COMPARE_BUILTIN_INDEX;
718 int ncr; // NaN compare result 719 int ncr; // NaN compare result
719 if (cc == lt || cc == le) { 720 if (cc == lt || cc == le) {
720 ncr = GREATER; 721 ncr = GREATER;
721 } else { 722 } else {
722 DCHECK(cc == gt || cc == ge); // remaining cases 723 DCHECK(cc == gt || cc == ge); // remaining cases
723 ncr = LESS; 724 ncr = LESS;
724 } 725 }
725 __ LoadSmiLiteral(r3, Smi::FromInt(ncr)); 726 __ LoadSmiLiteral(r3, Smi::FromInt(ncr));
726 __ push(r3); 727 __ push(r3);
727 } 728 }
728 729
729 // Call the native; it returns -1 (less), 0 (equal), or 1 (greater) 730 // Call the native; it returns -1 (less), 0 (equal), or 1 (greater)
730 // tagged as a small integer. 731 // tagged as a small integer.
731 __ InvokeBuiltin(native, JUMP_FUNCTION); 732 __ InvokeBuiltin(context_index, JUMP_FUNCTION);
732 } 733 }
733 734
734 __ bind(&miss); 735 __ bind(&miss);
735 GenerateMiss(masm); 736 GenerateMiss(masm);
736 } 737 }
737 738
738 739
739 void StoreBufferOverflowStub::Generate(MacroAssembler* masm) { 740 void StoreBufferOverflowStub::Generate(MacroAssembler* masm) {
740 // We don't allow a GC during a store buffer overflow so there is no need to 741 // We don't allow a GC during a store buffer overflow so there is no need to
741 // store the registers in any particular way, but we do have to store and 742 // store the registers in any particular way, but we do have to store and
(...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after
1542 __ LoadSmiLiteral(r3, Smi::FromInt(1)); 1543 __ LoadSmiLiteral(r3, Smi::FromInt(1));
1543 } 1544 }
1544 __ Ret(HasArgsInRegisters() ? 0 : 2); 1545 __ Ret(HasArgsInRegisters() ? 0 : 2);
1545 1546
1546 // Slow-case. Tail call builtin. 1547 // Slow-case. Tail call builtin.
1547 __ bind(&slow); 1548 __ bind(&slow);
1548 if (!ReturnTrueFalseObject()) { 1549 if (!ReturnTrueFalseObject()) {
1549 if (HasArgsInRegisters()) { 1550 if (HasArgsInRegisters()) {
1550 __ Push(r3, r4); 1551 __ Push(r3, r4);
1551 } 1552 }
1552 __ InvokeBuiltin(Builtins::INSTANCE_OF, JUMP_FUNCTION); 1553 __ InvokeBuiltin(Context::INSTANCE_OF_BUILTIN_INDEX, JUMP_FUNCTION);
1553 } else { 1554 } else {
1554 { 1555 {
1555 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 1556 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
1556 __ Push(r3, r4); 1557 __ Push(r3, r4);
1557 __ InvokeBuiltin(Builtins::INSTANCE_OF, CALL_FUNCTION); 1558 __ InvokeBuiltin(Context::INSTANCE_OF_BUILTIN_INDEX, CALL_FUNCTION);
1558 } 1559 }
1559 if (CpuFeatures::IsSupported(ISELECT)) { 1560 if (CpuFeatures::IsSupported(ISELECT)) {
1560 __ cmpi(r3, Operand::Zero()); 1561 __ cmpi(r3, Operand::Zero());
1561 __ LoadRoot(r3, Heap::kTrueValueRootIndex); 1562 __ LoadRoot(r3, Heap::kTrueValueRootIndex);
1562 __ LoadRoot(r4, Heap::kFalseValueRootIndex); 1563 __ LoadRoot(r4, Heap::kFalseValueRootIndex);
1563 __ isel(eq, r3, r3, r4); 1564 __ isel(eq, r3, r3, r4);
1564 } else { 1565 } else {
1565 Label true_value, done; 1566 Label true_value, done;
1566 __ cmpi(r3, Operand::Zero()); 1567 __ cmpi(r3, Operand::Zero());
1567 __ beq(&true_value); 1568 __ beq(&true_value);
(...skipping 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after
2693 2694
2694 2695
2695 static void EmitSlowCase(MacroAssembler* masm, int argc, Label* non_function) { 2696 static void EmitSlowCase(MacroAssembler* masm, int argc, Label* non_function) {
2696 // Check for function proxy. 2697 // Check for function proxy.
2697 STATIC_ASSERT(JS_FUNCTION_PROXY_TYPE < 0xffffu); 2698 STATIC_ASSERT(JS_FUNCTION_PROXY_TYPE < 0xffffu);
2698 __ cmpi(r7, Operand(JS_FUNCTION_PROXY_TYPE)); 2699 __ cmpi(r7, Operand(JS_FUNCTION_PROXY_TYPE));
2699 __ bne(non_function); 2700 __ bne(non_function);
2700 __ push(r4); // put proxy as additional argument 2701 __ push(r4); // put proxy as additional argument
2701 __ li(r3, Operand(argc + 1)); 2702 __ li(r3, Operand(argc + 1));
2702 __ li(r5, Operand::Zero()); 2703 __ li(r5, Operand::Zero());
2703 __ GetBuiltinFunction(r4, Builtins::CALL_FUNCTION_PROXY); 2704 __ GetBuiltinFunction(r4, Context::CALL_FUNCTION_PROXY_BUILTIN_INDEX);
2704 { 2705 {
2705 Handle<Code> adaptor = 2706 Handle<Code> adaptor =
2706 masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(); 2707 masm->isolate()->builtins()->ArgumentsAdaptorTrampoline();
2707 __ Jump(adaptor, RelocInfo::CODE_TARGET); 2708 __ Jump(adaptor, RelocInfo::CODE_TARGET);
2708 } 2709 }
2709 2710
2710 // CALL_NON_FUNCTION expects the non-function callee as receiver (instead 2711 // CALL_NON_FUNCTION expects the non-function callee as receiver (instead
2711 // of the original receiver from the call site). 2712 // of the original receiver from the call site).
2712 __ bind(non_function); 2713 __ bind(non_function);
2713 __ StoreP(r4, MemOperand(sp, argc * kPointerSize), r0); 2714 __ StoreP(r4, MemOperand(sp, argc * kPointerSize), r0);
2714 __ li(r3, Operand(argc)); // Set up the number of arguments. 2715 __ li(r3, Operand(argc)); // Set up the number of arguments.
2715 __ li(r5, Operand::Zero()); 2716 __ li(r5, Operand::Zero());
2716 __ GetBuiltinFunction(r4, Builtins::CALL_NON_FUNCTION); 2717 __ GetBuiltinFunction(r4, Context::CALL_NON_FUNCTION_BUILTIN_INDEX);
2717 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(), 2718 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(),
2718 RelocInfo::CODE_TARGET); 2719 RelocInfo::CODE_TARGET);
2719 } 2720 }
2720 2721
2721 2722
2722 static void EmitWrapCase(MacroAssembler* masm, int argc, Label* cont) { 2723 static void EmitWrapCase(MacroAssembler* masm, int argc, Label* cont) {
2723 // Wrap the receiver and patch it back onto the stack. 2724 // Wrap the receiver and patch it back onto the stack.
2724 { 2725 {
2725 FrameAndConstantPoolScope frame_scope(masm, StackFrame::INTERNAL); 2726 FrameAndConstantPoolScope frame_scope(masm, StackFrame::INTERNAL);
2726 __ push(r4); 2727 __ push(r4);
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
2851 __ JumpToJSEntry(ip); 2852 __ JumpToJSEntry(ip);
2852 2853
2853 // r3: number of arguments 2854 // r3: number of arguments
2854 // r4: called object 2855 // r4: called object
2855 // r8: object type 2856 // r8: object type
2856 Label do_call; 2857 Label do_call;
2857 __ bind(&slow); 2858 __ bind(&slow);
2858 STATIC_ASSERT(JS_FUNCTION_PROXY_TYPE < 0xffffu); 2859 STATIC_ASSERT(JS_FUNCTION_PROXY_TYPE < 0xffffu);
2859 __ cmpi(r8, Operand(JS_FUNCTION_PROXY_TYPE)); 2860 __ cmpi(r8, Operand(JS_FUNCTION_PROXY_TYPE));
2860 __ bne(&non_function_call); 2861 __ bne(&non_function_call);
2861 __ GetBuiltinFunction(r4, Builtins::CALL_FUNCTION_PROXY_AS_CONSTRUCTOR); 2862 __ GetBuiltinFunction(
2863 r4, Context::CALL_FUNCTION_PROXY_AS_CONSTRUCTOR_BUILTIN_INDEX);
2862 __ b(&do_call); 2864 __ b(&do_call);
2863 2865
2864 __ bind(&non_function_call); 2866 __ bind(&non_function_call);
2865 __ GetBuiltinFunction(r4, Builtins::CALL_NON_FUNCTION_AS_CONSTRUCTOR); 2867 __ GetBuiltinFunction(
2868 r4, Context::CALL_NON_FUNCTION_AS_CONSTRUCTOR_BUILTIN_INDEX);
2866 __ bind(&do_call); 2869 __ bind(&do_call);
2867 // Set expected number of arguments to zero (not changing r3). 2870 // Set expected number of arguments to zero (not changing r3).
2868 __ li(r5, Operand::Zero()); 2871 __ li(r5, Operand::Zero());
2869 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(), 2872 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(),
2870 RelocInfo::CODE_TARGET); 2873 RelocInfo::CODE_TARGET);
2871 } 2874 }
2872 2875
2873 2876
2874 static void EmitLoadTypeFeedbackVector(MacroAssembler* masm, Register vector) { 2877 static void EmitLoadTypeFeedbackVector(MacroAssembler* masm, Register vector) {
2875 __ LoadP(vector, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); 2878 __ LoadP(vector, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after
3524 __ bind(&not_string); 3527 __ bind(&not_string);
3525 3528
3526 Label not_oddball; 3529 Label not_oddball;
3527 __ cmpi(r4, Operand(ODDBALL_TYPE)); 3530 __ cmpi(r4, Operand(ODDBALL_TYPE));
3528 __ bne(&not_oddball); 3531 __ bne(&not_oddball);
3529 __ LoadP(r3, FieldMemOperand(r3, Oddball::kToNumberOffset)); 3532 __ LoadP(r3, FieldMemOperand(r3, Oddball::kToNumberOffset));
3530 __ blr(); 3533 __ blr();
3531 __ bind(&not_oddball); 3534 __ bind(&not_oddball);
3532 3535
3533 __ push(r3); // Push argument. 3536 __ push(r3); // Push argument.
3534 __ InvokeBuiltin(Builtins::TO_NUMBER, JUMP_FUNCTION); 3537 __ InvokeBuiltin(Context::TO_NUMBER_BUILTIN_INDEX, JUMP_FUNCTION);
3535 } 3538 }
3536 3539
3537 3540
3538 void StringHelper::GenerateFlatOneByteStringEquals(MacroAssembler* masm, 3541 void StringHelper::GenerateFlatOneByteStringEquals(MacroAssembler* masm,
3539 Register left, 3542 Register left,
3540 Register right, 3543 Register right,
3541 Register scratch1, 3544 Register scratch1,
3542 Register scratch2) { 3545 Register scratch2) {
3543 Register length = scratch1; 3546 Register length = scratch1;
3544 3547
(...skipping 2280 matching lines...) Expand 10 before | Expand all | Expand 10 after
5825 kStackUnwindSpace, NULL, 5828 kStackUnwindSpace, NULL,
5826 MemOperand(fp, 6 * kPointerSize), NULL); 5829 MemOperand(fp, 6 * kPointerSize), NULL);
5827 } 5830 }
5828 5831
5829 5832
5830 #undef __ 5833 #undef __
5831 } // namespace internal 5834 } // namespace internal
5832 } // namespace v8 5835 } // namespace v8
5833 5836
5834 #endif // V8_TARGET_ARCH_PPC 5837 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/ppc/builtins-ppc.cc ('k') | src/ppc/macro-assembler-ppc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698