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

Side by Side Diff: src/mips/builtins-mips.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/isolate.h ('k') | src/mips/code-stubs-mips.cc » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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_MIPS 5 #if V8_TARGET_ARCH_MIPS
6 6
7 #include "src/codegen.h" 7 #include "src/codegen.h"
8 #include "src/debug/debug.h" 8 #include "src/debug/debug.h"
9 #include "src/deoptimizer.h" 9 #include "src/deoptimizer.h"
10 #include "src/full-codegen/full-codegen.h" 10 #include "src/full-codegen/full-codegen.h"
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 __ IncrementCounter(counters->string_ctor_conversions(), 1, a3, t0); 235 __ IncrementCounter(counters->string_ctor_conversions(), 1, a3, t0);
236 __ Branch(&argument_is_string); 236 __ Branch(&argument_is_string);
237 237
238 // Invoke the conversion builtin and put the result into a2. 238 // Invoke the conversion builtin and put the result into a2.
239 __ bind(&convert_argument); 239 __ bind(&convert_argument);
240 __ push(function); // Preserve the function. 240 __ push(function); // Preserve the function.
241 __ IncrementCounter(counters->string_ctor_conversions(), 1, a3, t0); 241 __ IncrementCounter(counters->string_ctor_conversions(), 1, a3, t0);
242 { 242 {
243 FrameScope scope(masm, StackFrame::INTERNAL); 243 FrameScope scope(masm, StackFrame::INTERNAL);
244 __ push(a0); 244 __ push(a0);
245 __ InvokeBuiltin(Builtins::TO_STRING, CALL_FUNCTION); 245 __ InvokeBuiltin(Context::TO_STRING_BUILTIN_INDEX, CALL_FUNCTION);
246 } 246 }
247 __ pop(function); 247 __ pop(function);
248 __ mov(argument, v0); 248 __ mov(argument, v0);
249 __ Branch(&argument_is_string); 249 __ Branch(&argument_is_string);
250 250
251 // Load the empty string into a2, remove the receiver from the 251 // Load the empty string into a2, remove the receiver from the
252 // stack, and jump back to the case where the argument is a string. 252 // stack, and jump back to the case where the argument is a string.
253 __ bind(&no_arguments); 253 __ bind(&no_arguments);
254 __ LoadRoot(argument, Heap::kempty_stringRootIndex); 254 __ LoadRoot(argument, Heap::kempty_stringRootIndex);
255 __ Drop(1); 255 __ Drop(1);
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 } 756 }
757 // Signed comparison. 757 // Signed comparison.
758 __ Branch(&okay, gt, a2, Operand(t3)); 758 __ Branch(&okay, gt, a2, Operand(t3));
759 759
760 // Out of stack space. 760 // Out of stack space.
761 __ lw(a1, MemOperand(fp, calleeOffset)); 761 __ lw(a1, MemOperand(fp, calleeOffset));
762 if (argc_is_tagged == kArgcIsUntaggedInt) { 762 if (argc_is_tagged == kArgcIsUntaggedInt) {
763 __ SmiTag(argc); 763 __ SmiTag(argc);
764 } 764 }
765 __ Push(a1, argc); 765 __ Push(a1, argc);
766 __ InvokeBuiltin(Builtins::STACK_OVERFLOW, CALL_FUNCTION); 766 __ InvokeBuiltin(Context::STACK_OVERFLOW_BUILTIN_INDEX, CALL_FUNCTION);
767 767
768 __ bind(&okay); 768 __ bind(&okay);
769 } 769 }
770 770
771 771
772 static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, 772 static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
773 bool is_construct) { 773 bool is_construct) {
774 // Called from JSEntryStub::GenerateBody 774 // Called from JSEntryStub::GenerateBody
775 775
776 // ----------- S t a t e ------------- 776 // ----------- S t a t e -------------
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 { 905 {
906 // Load frame size from the BytecodeArray object. 906 // Load frame size from the BytecodeArray object.
907 __ lw(t0, FieldMemOperand(kInterpreterBytecodeArrayRegister, 907 __ lw(t0, FieldMemOperand(kInterpreterBytecodeArrayRegister,
908 BytecodeArray::kFrameSizeOffset)); 908 BytecodeArray::kFrameSizeOffset));
909 909
910 // Do a stack check to ensure we don't go over the limit. 910 // Do a stack check to ensure we don't go over the limit.
911 Label ok; 911 Label ok;
912 __ Subu(t1, sp, Operand(t0)); 912 __ Subu(t1, sp, Operand(t0));
913 __ LoadRoot(a2, Heap::kRealStackLimitRootIndex); 913 __ LoadRoot(a2, Heap::kRealStackLimitRootIndex);
914 __ Branch(&ok, hs, t1, Operand(a2)); 914 __ Branch(&ok, hs, t1, Operand(a2));
915 __ InvokeBuiltin(Builtins::STACK_OVERFLOW, CALL_FUNCTION); 915 __ InvokeBuiltin(Context::STACK_OVERFLOW_BUILTIN_INDEX, CALL_FUNCTION);
916 __ bind(&ok); 916 __ bind(&ok);
917 917
918 // If ok, push undefined as the initial value for all register file entries. 918 // If ok, push undefined as the initial value for all register file entries.
919 Label loop_header; 919 Label loop_header;
920 Label loop_check; 920 Label loop_check;
921 __ LoadRoot(t1, Heap::kUndefinedValueRootIndex); 921 __ LoadRoot(t1, Heap::kUndefinedValueRootIndex);
922 __ Branch(&loop_check); 922 __ Branch(&loop_check);
923 __ bind(&loop_header); 923 __ bind(&loop_header);
924 // TODO(rmcilroy): Consider doing more than one push per loop iteration. 924 // TODO(rmcilroy): Consider doing more than one push per loop iteration.
925 __ push(t1); 925 __ push(t1);
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
1394 // a1: function 1394 // a1: function
1395 // t0: call type (0: JS function, 1: function proxy, 2: non-function) 1395 // t0: call type (0: JS function, 1: function proxy, 2: non-function)
1396 { Label function, non_proxy; 1396 { Label function, non_proxy;
1397 __ Branch(&function, eq, t0, Operand(zero_reg)); 1397 __ Branch(&function, eq, t0, Operand(zero_reg));
1398 // Expected number of arguments is 0 for CALL_NON_FUNCTION. 1398 // Expected number of arguments is 0 for CALL_NON_FUNCTION.
1399 __ mov(a2, zero_reg); 1399 __ mov(a2, zero_reg);
1400 __ Branch(&non_proxy, ne, t0, Operand(1)); 1400 __ Branch(&non_proxy, ne, t0, Operand(1));
1401 1401
1402 __ push(a1); // Re-add proxy object as additional argument. 1402 __ push(a1); // Re-add proxy object as additional argument.
1403 __ Addu(a0, a0, Operand(1)); 1403 __ Addu(a0, a0, Operand(1));
1404 __ GetBuiltinFunction(a1, Builtins::CALL_FUNCTION_PROXY); 1404 __ GetBuiltinFunction(a1, Context::CALL_FUNCTION_PROXY_BUILTIN_INDEX);
1405 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(), 1405 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(),
1406 RelocInfo::CODE_TARGET); 1406 RelocInfo::CODE_TARGET);
1407 1407
1408 __ bind(&non_proxy); 1408 __ bind(&non_proxy);
1409 __ GetBuiltinFunction(a1, Builtins::CALL_NON_FUNCTION); 1409 __ GetBuiltinFunction(a1, Context::CALL_NON_FUNCTION_BUILTIN_INDEX);
1410 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(), 1410 __ Jump(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(),
1411 RelocInfo::CODE_TARGET); 1411 RelocInfo::CODE_TARGET);
1412 __ bind(&function); 1412 __ bind(&function);
1413 } 1413 }
1414 1414
1415 // 5b. Get the code to call from the function and check that the number of 1415 // 5b. Get the code to call from the function and check that the number of
1416 // expected arguments matches what we're providing. If so, jump 1416 // expected arguments matches what we're providing. If so, jump
1417 // (tail-call) to the code in register edx without checking arguments. 1417 // (tail-call) to the code in register edx without checking arguments.
1418 // a0: actual number of arguments 1418 // a0: actual number of arguments
1419 // a1: function 1419 // a1: function
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 const int kArgumentsOffset = kFPOnStackSize + kPCOnStackSize; 1489 const int kArgumentsOffset = kFPOnStackSize + kPCOnStackSize;
1490 const int kReceiverOffset = kArgumentsOffset + kPointerSize; 1490 const int kReceiverOffset = kArgumentsOffset + kPointerSize;
1491 const int kFunctionOffset = kReceiverOffset + kPointerSize; 1491 const int kFunctionOffset = kReceiverOffset + kPointerSize;
1492 1492
1493 __ lw(a0, MemOperand(fp, kFunctionOffset)); // Get the function. 1493 __ lw(a0, MemOperand(fp, kFunctionOffset)); // Get the function.
1494 __ push(a0); 1494 __ push(a0);
1495 __ lw(a0, MemOperand(fp, kArgumentsOffset)); // Get the args array. 1495 __ lw(a0, MemOperand(fp, kArgumentsOffset)); // Get the args array.
1496 __ push(a0); 1496 __ push(a0);
1497 // Returns (in v0) number of arguments to copy to stack as Smi. 1497 // Returns (in v0) number of arguments to copy to stack as Smi.
1498 if (targetIsArgument) { 1498 if (targetIsArgument) {
1499 __ InvokeBuiltin(Builtins::REFLECT_APPLY_PREPARE, CALL_FUNCTION); 1499 __ InvokeBuiltin(Context::REFLECT_APPLY_PREPARE_BUILTIN_INDEX,
1500 CALL_FUNCTION);
1500 } else { 1501 } else {
1501 __ InvokeBuiltin(Builtins::APPLY_PREPARE, CALL_FUNCTION); 1502 __ InvokeBuiltin(Context::APPLY_PREPARE_BUILTIN_INDEX, CALL_FUNCTION);
1502 } 1503 }
1503 1504
1504 // Returns the result in v0. 1505 // Returns the result in v0.
1505 Generate_CheckStackOverflow(masm, kFunctionOffset, v0, kArgcIsSmiTagged); 1506 Generate_CheckStackOverflow(masm, kFunctionOffset, v0, kArgcIsSmiTagged);
1506 1507
1507 // Push current limit and index. 1508 // Push current limit and index.
1508 const int kIndexOffset = 1509 const int kIndexOffset =
1509 StandardFrameConstants::kExpressionsOffset - (2 * kPointerSize); 1510 StandardFrameConstants::kExpressionsOffset - (2 * kPointerSize);
1510 const int kLimitOffset = 1511 const int kLimitOffset =
1511 StandardFrameConstants::kExpressionsOffset - (1 * kPointerSize); 1512 StandardFrameConstants::kExpressionsOffset - (1 * kPointerSize);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1583 1584
1584 frame_scope.GenerateLeaveFrame(); 1585 frame_scope.GenerateLeaveFrame();
1585 __ Ret(USE_DELAY_SLOT); 1586 __ Ret(USE_DELAY_SLOT);
1586 __ Addu(sp, sp, Operand(kStackSize * kPointerSize)); // In delay slot. 1587 __ Addu(sp, sp, Operand(kStackSize * kPointerSize)); // In delay slot.
1587 1588
1588 // Call the function proxy. 1589 // Call the function proxy.
1589 __ bind(&call_proxy); 1590 __ bind(&call_proxy);
1590 __ push(a1); // Add function proxy as last argument. 1591 __ push(a1); // Add function proxy as last argument.
1591 __ Addu(a0, a0, Operand(1)); 1592 __ Addu(a0, a0, Operand(1));
1592 __ li(a2, Operand(0, RelocInfo::NONE32)); 1593 __ li(a2, Operand(0, RelocInfo::NONE32));
1593 __ GetBuiltinFunction(a1, Builtins::CALL_FUNCTION_PROXY); 1594 __ GetBuiltinFunction(a1, Context::CALL_FUNCTION_PROXY_BUILTIN_INDEX);
1594 __ Call(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(), 1595 __ Call(masm->isolate()->builtins()->ArgumentsAdaptorTrampoline(),
1595 RelocInfo::CODE_TARGET); 1596 RelocInfo::CODE_TARGET);
1596 // Tear down the internal frame and remove function, receiver and args. 1597 // Tear down the internal frame and remove function, receiver and args.
1597 } 1598 }
1598 1599
1599 __ Ret(USE_DELAY_SLOT); 1600 __ Ret(USE_DELAY_SLOT);
1600 __ Addu(sp, sp, Operand(kStackSize * kPointerSize)); // In delay slot. 1601 __ Addu(sp, sp, Operand(kStackSize * kPointerSize)); // In delay slot.
1601 } 1602 }
1602 1603
1603 1604
(...skipping 17 matching lines...) Expand all
1621 1622
1622 // Validate arguments 1623 // Validate arguments
1623 __ bind(&validate_arguments); 1624 __ bind(&validate_arguments);
1624 __ lw(a0, MemOperand(fp, kFunctionOffset)); // get the function 1625 __ lw(a0, MemOperand(fp, kFunctionOffset)); // get the function
1625 __ push(a0); 1626 __ push(a0);
1626 __ lw(a0, MemOperand(fp, kArgumentsOffset)); // get the args array 1627 __ lw(a0, MemOperand(fp, kArgumentsOffset)); // get the args array
1627 __ push(a0); 1628 __ push(a0);
1628 __ lw(a0, MemOperand(fp, kNewTargetOffset)); // get the new.target 1629 __ lw(a0, MemOperand(fp, kNewTargetOffset)); // get the new.target
1629 __ push(a0); 1630 __ push(a0);
1630 // Returns argument count in v0. 1631 // Returns argument count in v0.
1631 __ InvokeBuiltin(Builtins::REFLECT_CONSTRUCT_PREPARE, CALL_FUNCTION); 1632 __ InvokeBuiltin(Context::REFLECT_CONSTRUCT_PREPARE_BUILTIN_INDEX,
1633 CALL_FUNCTION);
1632 1634
1633 // Returns result in v0. 1635 // Returns result in v0.
1634 Generate_CheckStackOverflow(masm, kFunctionOffset, v0, kArgcIsSmiTagged); 1636 Generate_CheckStackOverflow(masm, kFunctionOffset, v0, kArgcIsSmiTagged);
1635 1637
1636 // Push current limit and index. 1638 // Push current limit and index.
1637 const int kIndexOffset = 1639 const int kIndexOffset =
1638 StandardFrameConstants::kExpressionsOffset - (2 * kPointerSize); 1640 StandardFrameConstants::kExpressionsOffset - (2 * kPointerSize);
1639 const int kLimitOffset = 1641 const int kLimitOffset =
1640 StandardFrameConstants::kExpressionsOffset - (1 * kPointerSize); 1642 StandardFrameConstants::kExpressionsOffset - (1 * kPointerSize);
1641 __ push(v0); // limit 1643 __ push(v0); // limit
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
1864 // ------------------------------------------- 1866 // -------------------------------------------
1865 // Don't adapt arguments. 1867 // Don't adapt arguments.
1866 // ------------------------------------------- 1868 // -------------------------------------------
1867 __ bind(&dont_adapt_arguments); 1869 __ bind(&dont_adapt_arguments);
1868 __ Jump(a3); 1870 __ Jump(a3);
1869 1871
1870 __ bind(&stack_overflow); 1872 __ bind(&stack_overflow);
1871 { 1873 {
1872 FrameScope frame(masm, StackFrame::MANUAL); 1874 FrameScope frame(masm, StackFrame::MANUAL);
1873 EnterArgumentsAdaptorFrame(masm); 1875 EnterArgumentsAdaptorFrame(masm);
1874 __ InvokeBuiltin(Builtins::STACK_OVERFLOW, CALL_FUNCTION); 1876 __ InvokeBuiltin(Context::STACK_OVERFLOW_BUILTIN_INDEX, CALL_FUNCTION);
1875 __ break_(0xCC); 1877 __ break_(0xCC);
1876 } 1878 }
1877 } 1879 }
1878 1880
1879 1881
1880 #undef __ 1882 #undef __
1881 1883
1882 } // namespace internal 1884 } // namespace internal
1883 } // namespace v8 1885 } // namespace v8
1884 1886
1885 #endif // V8_TARGET_ARCH_MIPS 1887 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « src/isolate.h ('k') | src/mips/code-stubs-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698