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

Side by Side Diff: src/arm64/builtins-arm64.cc

Issue 212163004: Hide some runtime functions. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « src/arm/macro-assembler-arm.cc ('k') | src/arm64/code-stubs-arm64.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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) { 310 void Builtins::Generate_InOptimizationQueue(MacroAssembler* masm) {
311 // Checking whether the queued function is ready for install is optional, 311 // Checking whether the queued function is ready for install is optional,
312 // since we come across interrupts and stack checks elsewhere. However, not 312 // since we come across interrupts and stack checks elsewhere. However, not
313 // checking may delay installing ready functions, and always checking would be 313 // checking may delay installing ready functions, and always checking would be
314 // quite expensive. A good compromise is to first check against stack limit as 314 // quite expensive. A good compromise is to first check against stack limit as
315 // a cue for an interrupt signal. 315 // a cue for an interrupt signal.
316 Label ok; 316 Label ok;
317 __ CompareRoot(masm->StackPointer(), Heap::kStackLimitRootIndex); 317 __ CompareRoot(masm->StackPointer(), Heap::kStackLimitRootIndex);
318 __ B(hs, &ok); 318 __ B(hs, &ok);
319 319
320 CallRuntimePassFunction(masm, Runtime::kTryInstallOptimizedCode); 320 CallRuntimePassFunction(masm, Runtime::kHiddenTryInstallOptimizedCode);
321 GenerateTailCallToReturnedCode(masm); 321 GenerateTailCallToReturnedCode(masm);
322 322
323 __ Bind(&ok); 323 __ Bind(&ok);
324 GenerateTailCallToSharedCode(masm); 324 GenerateTailCallToSharedCode(masm);
325 } 325 }
326 326
327 327
328 static void Generate_JSConstructStubHelper(MacroAssembler* masm, 328 static void Generate_JSConstructStubHelper(MacroAssembler* masm,
329 bool is_api_function, 329 bool is_api_function,
330 bool count_constructions, 330 bool count_constructions,
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 FieldMemOperand(x3, SharedFunctionInfo::kConstructionCountOffset); 400 FieldMemOperand(x3, SharedFunctionInfo::kConstructionCountOffset);
401 __ Ldrb(x4, constructor_count); 401 __ Ldrb(x4, constructor_count);
402 __ Subs(x4, x4, 1); 402 __ Subs(x4, x4, 1);
403 __ Strb(x4, constructor_count); 403 __ Strb(x4, constructor_count);
404 __ B(ne, &allocate); 404 __ B(ne, &allocate);
405 405
406 // Push the constructor and map to the stack, and the constructor again 406 // Push the constructor and map to the stack, and the constructor again
407 // as argument to the runtime call. 407 // as argument to the runtime call.
408 __ Push(constructor, init_map, constructor); 408 __ Push(constructor, init_map, constructor);
409 // The call will replace the stub, so the countdown is only done once. 409 // The call will replace the stub, so the countdown is only done once.
410 __ CallRuntime(Runtime::kFinalizeInstanceSize, 1); 410 __ CallRuntime(Runtime::kHiddenFinalizeInstanceSize, 1);
411 __ Pop(init_map, constructor); 411 __ Pop(init_map, constructor);
412 __ Bind(&allocate); 412 __ Bind(&allocate);
413 } 413 }
414 414
415 // Now allocate the JSObject on the heap. 415 // Now allocate the JSObject on the heap.
416 Register obj_size = x3; 416 Register obj_size = x3;
417 Register new_obj = x4; 417 Register new_obj = x4;
418 __ Ldrb(obj_size, FieldMemOperand(init_map, Map::kInstanceSizeOffset)); 418 __ Ldrb(obj_size, FieldMemOperand(init_map, Map::kInstanceSizeOffset));
419 if (create_memento) { 419 if (create_memento) {
420 __ Add(x7, obj_size, 420 __ Add(x7, obj_size,
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 } 559 }
560 560
561 // Allocate the new receiver object using the runtime call. 561 // Allocate the new receiver object using the runtime call.
562 __ Bind(&rt_call); 562 __ Bind(&rt_call);
563 Label count_incremented; 563 Label count_incremented;
564 if (create_memento) { 564 if (create_memento) {
565 // Get the cell or allocation site. 565 // Get the cell or allocation site.
566 __ Peek(x4, 2 * kXRegSize); 566 __ Peek(x4, 2 * kXRegSize);
567 __ Push(x4); 567 __ Push(x4);
568 __ Push(constructor); // Argument for Runtime_NewObject. 568 __ Push(constructor); // Argument for Runtime_NewObject.
569 __ CallRuntime(Runtime::kNewObjectWithAllocationSite, 2); 569 __ CallRuntime(Runtime::kHiddenNewObjectWithAllocationSite, 2);
570 __ Mov(x4, x0); 570 __ Mov(x4, x0);
571 // If we ended up using the runtime, and we want a memento, then the 571 // If we ended up using the runtime, and we want a memento, then the
572 // runtime call made it for us, and we shouldn't do create count 572 // runtime call made it for us, and we shouldn't do create count
573 // increment. 573 // increment.
574 __ jmp(&count_incremented); 574 __ jmp(&count_incremented);
575 } else { 575 } else {
576 __ Push(constructor); // Argument for Runtime_NewObject. 576 __ Push(constructor); // Argument for Runtime_NewObject.
577 __ CallRuntime(Runtime::kNewObject, 1); 577 __ CallRuntime(Runtime::kHiddenNewObject, 1);
578 __ Mov(x4, x0); 578 __ Mov(x4, x0);
579 } 579 }
580 580
581 // Receiver for constructor call allocated. 581 // Receiver for constructor call allocated.
582 // x4: JSObject 582 // x4: JSObject
583 __ Bind(&allocated); 583 __ Bind(&allocated);
584 584
585 if (create_memento) { 585 if (create_memento) {
586 __ Peek(x10, 2 * kXRegSize); 586 __ Peek(x10, 2 * kXRegSize);
587 __ JumpIfRoot(x10, Heap::kUndefinedValueRootIndex, &count_incremented); 587 __ JumpIfRoot(x10, Heap::kUndefinedValueRootIndex, &count_incremented);
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 Generate_JSEntryTrampolineHelper(masm, false); 804 Generate_JSEntryTrampolineHelper(masm, false);
805 } 805 }
806 806
807 807
808 void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) { 808 void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) {
809 Generate_JSEntryTrampolineHelper(masm, true); 809 Generate_JSEntryTrampolineHelper(masm, true);
810 } 810 }
811 811
812 812
813 void Builtins::Generate_CompileUnoptimized(MacroAssembler* masm) { 813 void Builtins::Generate_CompileUnoptimized(MacroAssembler* masm) {
814 CallRuntimePassFunction(masm, Runtime::kCompileUnoptimized); 814 CallRuntimePassFunction(masm, Runtime::kHiddenCompileUnoptimized);
815 GenerateTailCallToReturnedCode(masm); 815 GenerateTailCallToReturnedCode(masm);
816 } 816 }
817 817
818 818
819 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) { 819 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) {
820 FrameScope scope(masm, StackFrame::INTERNAL); 820 FrameScope scope(masm, StackFrame::INTERNAL);
821 Register function = x1; 821 Register function = x1;
822 822
823 // Preserve function. At the same time, push arguments for 823 // Preserve function. At the same time, push arguments for
824 // kCompileOptimized. 824 // kHiddenCompileOptimized.
825 __ LoadObject(x10, masm->isolate()->factory()->ToBoolean(concurrent)); 825 __ LoadObject(x10, masm->isolate()->factory()->ToBoolean(concurrent));
826 __ Push(function, function, x10); 826 __ Push(function, function, x10);
827 827
828 __ CallRuntime(Runtime::kCompileOptimized, 2); 828 __ CallRuntime(Runtime::kHiddenCompileOptimized, 2);
829 829
830 // Restore receiver. 830 // Restore receiver.
831 __ Pop(function); 831 __ Pop(function);
832 } 832 }
833 833
834 834
835 void Builtins::Generate_CompileOptimized(MacroAssembler* masm) { 835 void Builtins::Generate_CompileOptimized(MacroAssembler* masm) {
836 CallCompileOptimized(masm, false); 836 CallCompileOptimized(masm, false);
837 GenerateTailCallToReturnedCode(masm); 837 GenerateTailCallToReturnedCode(masm);
838 } 838 }
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 FrameScope scope(masm, StackFrame::INTERNAL); 928 FrameScope scope(masm, StackFrame::INTERNAL);
929 929
930 // Preserve registers across notification, this is important for compiled 930 // Preserve registers across notification, this is important for compiled
931 // stubs that tail call the runtime on deopts passing their parameters in 931 // stubs that tail call the runtime on deopts passing their parameters in
932 // registers. 932 // registers.
933 // TODO(jbramley): Is it correct (and appropriate) to use safepoint 933 // TODO(jbramley): Is it correct (and appropriate) to use safepoint
934 // registers here? According to the comment above, we should only need to 934 // registers here? According to the comment above, we should only need to
935 // preserve the registers with parameters. 935 // preserve the registers with parameters.
936 __ PushXRegList(kSafepointSavedRegisters); 936 __ PushXRegList(kSafepointSavedRegisters);
937 // Pass the function and deoptimization type to the runtime system. 937 // Pass the function and deoptimization type to the runtime system.
938 __ CallRuntime(Runtime::kNotifyStubFailure, 0, save_doubles); 938 __ CallRuntime(Runtime::kHiddenNotifyStubFailure, 0, save_doubles);
939 __ PopXRegList(kSafepointSavedRegisters); 939 __ PopXRegList(kSafepointSavedRegisters);
940 } 940 }
941 941
942 // Ignore state (pushed by Deoptimizer::EntryGenerator::Generate). 942 // Ignore state (pushed by Deoptimizer::EntryGenerator::Generate).
943 __ Drop(1); 943 __ Drop(1);
944 944
945 // Jump to the miss handler. Deoptimizer::EntryGenerator::Generate loads this 945 // Jump to the miss handler. Deoptimizer::EntryGenerator::Generate loads this
946 // into lr before it jumps here. 946 // into lr before it jumps here.
947 __ Br(lr); 947 __ Br(lr);
948 } 948 }
949 949
950 950
951 void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) { 951 void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) {
952 Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs); 952 Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs);
953 } 953 }
954 954
955 955
956 void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) { 956 void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) {
957 Generate_NotifyStubFailureHelper(masm, kSaveFPRegs); 957 Generate_NotifyStubFailureHelper(masm, kSaveFPRegs);
958 } 958 }
959 959
960 960
961 static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm, 961 static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
962 Deoptimizer::BailoutType type) { 962 Deoptimizer::BailoutType type) {
963 { 963 {
964 FrameScope scope(masm, StackFrame::INTERNAL); 964 FrameScope scope(masm, StackFrame::INTERNAL);
965 // Pass the deoptimization type to the runtime system. 965 // Pass the deoptimization type to the runtime system.
966 __ Mov(x0, Smi::FromInt(static_cast<int>(type))); 966 __ Mov(x0, Smi::FromInt(static_cast<int>(type)));
967 __ Push(x0); 967 __ Push(x0);
968 __ CallRuntime(Runtime::kNotifyDeoptimized, 1); 968 __ CallRuntime(Runtime::kHiddenNotifyDeoptimized, 1);
969 } 969 }
970 970
971 // Get the full codegen state from the stack and untag it. 971 // Get the full codegen state from the stack and untag it.
972 Register state = x6; 972 Register state = x6;
973 __ Peek(state, 0); 973 __ Peek(state, 0);
974 __ SmiUntag(state); 974 __ SmiUntag(state);
975 975
976 // Switch on the state. 976 // Switch on the state.
977 Label with_tos_register, unknown_state; 977 Label with_tos_register, unknown_state;
978 __ CompareAndBranch( 978 __ CompareAndBranch(
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 } 1043 }
1044 1044
1045 1045
1046 void Builtins::Generate_OsrAfterStackCheck(MacroAssembler* masm) { 1046 void Builtins::Generate_OsrAfterStackCheck(MacroAssembler* masm) {
1047 // We check the stack limit as indicator that recompilation might be done. 1047 // We check the stack limit as indicator that recompilation might be done.
1048 Label ok; 1048 Label ok;
1049 __ CompareRoot(jssp, Heap::kStackLimitRootIndex); 1049 __ CompareRoot(jssp, Heap::kStackLimitRootIndex);
1050 __ B(hs, &ok); 1050 __ B(hs, &ok);
1051 { 1051 {
1052 FrameScope scope(masm, StackFrame::INTERNAL); 1052 FrameScope scope(masm, StackFrame::INTERNAL);
1053 __ CallRuntime(Runtime::kStackGuard, 0); 1053 __ CallRuntime(Runtime::kHiddenStackGuard, 0);
1054 } 1054 }
1055 __ Jump(masm->isolate()->builtins()->OnStackReplacement(), 1055 __ Jump(masm->isolate()->builtins()->OnStackReplacement(),
1056 RelocInfo::CODE_TARGET); 1056 RelocInfo::CODE_TARGET);
1057 1057
1058 __ Bind(&ok); 1058 __ Bind(&ok);
1059 __ Ret(); 1059 __ Ret();
1060 } 1060 }
1061 1061
1062 1062
1063 void Builtins::Generate_FunctionCall(MacroAssembler* masm) { 1063 void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
1553 __ Bind(&dont_adapt_arguments); 1553 __ Bind(&dont_adapt_arguments);
1554 __ Jump(code_entry); 1554 __ Jump(code_entry);
1555 } 1555 }
1556 1556
1557 1557
1558 #undef __ 1558 #undef __
1559 1559
1560 } } // namespace v8::internal 1560 } } // namespace v8::internal
1561 1561
1562 #endif // V8_TARGET_ARCH_ARM 1562 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/macro-assembler-arm.cc ('k') | src/arm64/code-stubs-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698