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

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

Issue 346413004: Remove distinction between hidden and normal runtime functions (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix natives fuzzing Created 6 years, 6 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 | « no previous file | src/arm/code-stubs-arm.cc » ('j') | test/fuzz-natives/fuzz-natives.status » ('J')
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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_ARM 7 #if V8_TARGET_ARCH_ARM
8 8
9 #include "src/codegen.h" 9 #include "src/codegen.h"
10 #include "src/debug.h" 10 #include "src/debug.h"
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 // Checking whether the queued function is ready for install is optional, 296 // Checking whether the queued function is ready for install is optional,
297 // since we come across interrupts and stack checks elsewhere. However, 297 // since we come across interrupts and stack checks elsewhere. However,
298 // not checking may delay installing ready functions, and always checking 298 // not checking may delay installing ready functions, and always checking
299 // would be quite expensive. A good compromise is to first check against 299 // would be quite expensive. A good compromise is to first check against
300 // stack limit as a cue for an interrupt signal. 300 // stack limit as a cue for an interrupt signal.
301 Label ok; 301 Label ok;
302 __ LoadRoot(ip, Heap::kStackLimitRootIndex); 302 __ LoadRoot(ip, Heap::kStackLimitRootIndex);
303 __ cmp(sp, Operand(ip)); 303 __ cmp(sp, Operand(ip));
304 __ b(hs, &ok); 304 __ b(hs, &ok);
305 305
306 CallRuntimePassFunction(masm, Runtime::kHiddenTryInstallOptimizedCode); 306 CallRuntimePassFunction(masm, Runtime::kTryInstallOptimizedCode);
307 GenerateTailCallToReturnedCode(masm); 307 GenerateTailCallToReturnedCode(masm);
308 308
309 __ bind(&ok); 309 __ bind(&ok);
310 GenerateTailCallToSharedCode(masm); 310 GenerateTailCallToSharedCode(masm);
311 } 311 }
312 312
313 313
314 static void Generate_JSConstructStubHelper(MacroAssembler* masm, 314 static void Generate_JSConstructStubHelper(MacroAssembler* masm,
315 bool is_api_function, 315 bool is_api_function,
316 bool create_memento) { 316 bool create_memento) {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 __ b(eq, &allocate); 378 __ b(eq, &allocate);
379 // Decrease generous allocation count. 379 // Decrease generous allocation count.
380 __ sub(r4, r4, Operand(1 << Map::ConstructionCount::kShift)); 380 __ sub(r4, r4, Operand(1 << Map::ConstructionCount::kShift));
381 __ str(r4, bit_field3); 381 __ str(r4, bit_field3);
382 __ cmp(r3, Operand(JSFunction::kFinishSlackTracking)); 382 __ cmp(r3, Operand(JSFunction::kFinishSlackTracking));
383 __ b(ne, &allocate); 383 __ b(ne, &allocate);
384 384
385 __ push(r1); 385 __ push(r1);
386 386
387 __ Push(r2, r1); // r1 = constructor 387 __ Push(r2, r1); // r1 = constructor
388 __ CallRuntime(Runtime::kHiddenFinalizeInstanceSize, 1); 388 __ CallRuntime(Runtime::kFinalizeInstanceSize, 1);
389 389
390 __ pop(r2); 390 __ pop(r2);
391 __ pop(r1); 391 __ pop(r1);
392 392
393 __ bind(&allocate); 393 __ bind(&allocate);
394 } 394 }
395 395
396 // Now allocate the JSObject on the heap. 396 // Now allocate the JSObject on the heap.
397 // r1: constructor function 397 // r1: constructor function
398 // r2: initial map 398 // r2: initial map
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 // r1: constructor function 571 // r1: constructor function
572 __ bind(&rt_call); 572 __ bind(&rt_call);
573 if (create_memento) { 573 if (create_memento) {
574 // Get the cell or allocation site. 574 // Get the cell or allocation site.
575 __ ldr(r2, MemOperand(sp, 2 * kPointerSize)); 575 __ ldr(r2, MemOperand(sp, 2 * kPointerSize));
576 __ push(r2); 576 __ push(r2);
577 } 577 }
578 578
579 __ push(r1); // argument for Runtime_NewObject 579 __ push(r1); // argument for Runtime_NewObject
580 if (create_memento) { 580 if (create_memento) {
581 __ CallRuntime(Runtime::kHiddenNewObjectWithAllocationSite, 2); 581 __ CallRuntime(Runtime::kNewObjectWithAllocationSite, 2);
582 } else { 582 } else {
583 __ CallRuntime(Runtime::kHiddenNewObject, 1); 583 __ CallRuntime(Runtime::kNewObject, 1);
584 } 584 }
585 __ mov(r4, r0); 585 __ mov(r4, r0);
586 586
587 // If we ended up using the runtime, and we want a memento, then the 587 // If we ended up using the runtime, and we want a memento, then the
588 // runtime call made it for us, and we shouldn't do create count 588 // runtime call made it for us, and we shouldn't do create count
589 // increment. 589 // increment.
590 Label count_incremented; 590 Label count_incremented;
591 if (create_memento) { 591 if (create_memento) {
592 __ jmp(&count_incremented); 592 __ jmp(&count_incremented);
593 } 593 }
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 Generate_JSEntryTrampolineHelper(masm, false); 802 Generate_JSEntryTrampolineHelper(masm, false);
803 } 803 }
804 804
805 805
806 void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) { 806 void Builtins::Generate_JSConstructEntryTrampoline(MacroAssembler* masm) {
807 Generate_JSEntryTrampolineHelper(masm, true); 807 Generate_JSEntryTrampolineHelper(masm, true);
808 } 808 }
809 809
810 810
811 void Builtins::Generate_CompileUnoptimized(MacroAssembler* masm) { 811 void Builtins::Generate_CompileUnoptimized(MacroAssembler* masm) {
812 CallRuntimePassFunction(masm, Runtime::kHiddenCompileUnoptimized); 812 CallRuntimePassFunction(masm, Runtime::kCompileUnoptimized);
813 GenerateTailCallToReturnedCode(masm); 813 GenerateTailCallToReturnedCode(masm);
814 } 814 }
815 815
816 816
817 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) { 817 static void CallCompileOptimized(MacroAssembler* masm, bool concurrent) {
818 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 818 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
819 // Push a copy of the function onto the stack. 819 // Push a copy of the function onto the stack.
820 __ push(r1); 820 __ push(r1);
821 // Push function as parameter to the runtime call. 821 // Push function as parameter to the runtime call.
822 __ Push(r1); 822 __ Push(r1);
823 // Whether to compile in a background thread. 823 // Whether to compile in a background thread.
824 __ Push(masm->isolate()->factory()->ToBoolean(concurrent)); 824 __ Push(masm->isolate()->factory()->ToBoolean(concurrent));
825 825
826 __ CallRuntime(Runtime::kHiddenCompileOptimized, 2); 826 __ CallRuntime(Runtime::kCompileOptimized, 2);
827 // Restore receiver. 827 // Restore receiver.
828 __ pop(r1); 828 __ pop(r1);
829 } 829 }
830 830
831 831
832 void Builtins::Generate_CompileOptimized(MacroAssembler* masm) { 832 void Builtins::Generate_CompileOptimized(MacroAssembler* masm) {
833 CallCompileOptimized(masm, false); 833 CallCompileOptimized(masm, false);
834 GenerateTailCallToReturnedCode(masm); 834 GenerateTailCallToReturnedCode(masm);
835 } 835 }
836 836
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 static void Generate_NotifyStubFailureHelper(MacroAssembler* masm, 911 static void Generate_NotifyStubFailureHelper(MacroAssembler* masm,
912 SaveFPRegsMode save_doubles) { 912 SaveFPRegsMode save_doubles) {
913 { 913 {
914 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 914 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
915 915
916 // Preserve registers across notification, this is important for compiled 916 // Preserve registers across notification, this is important for compiled
917 // stubs that tail call the runtime on deopts passing their parameters in 917 // stubs that tail call the runtime on deopts passing their parameters in
918 // registers. 918 // registers.
919 __ stm(db_w, sp, kJSCallerSaved | kCalleeSaved); 919 __ stm(db_w, sp, kJSCallerSaved | kCalleeSaved);
920 // Pass the function and deoptimization type to the runtime system. 920 // Pass the function and deoptimization type to the runtime system.
921 __ CallRuntime(Runtime::kHiddenNotifyStubFailure, 0, save_doubles); 921 __ CallRuntime(Runtime::kNotifyStubFailure, 0, save_doubles);
922 __ ldm(ia_w, sp, kJSCallerSaved | kCalleeSaved); 922 __ ldm(ia_w, sp, kJSCallerSaved | kCalleeSaved);
923 } 923 }
924 924
925 __ add(sp, sp, Operand(kPointerSize)); // Ignore state 925 __ add(sp, sp, Operand(kPointerSize)); // Ignore state
926 __ mov(pc, lr); // Jump to miss handler 926 __ mov(pc, lr); // Jump to miss handler
927 } 927 }
928 928
929 929
930 void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) { 930 void Builtins::Generate_NotifyStubFailure(MacroAssembler* masm) {
931 Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs); 931 Generate_NotifyStubFailureHelper(masm, kDontSaveFPRegs);
932 } 932 }
933 933
934 934
935 void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) { 935 void Builtins::Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm) {
936 Generate_NotifyStubFailureHelper(masm, kSaveFPRegs); 936 Generate_NotifyStubFailureHelper(masm, kSaveFPRegs);
937 } 937 }
938 938
939 939
940 static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm, 940 static void Generate_NotifyDeoptimizedHelper(MacroAssembler* masm,
941 Deoptimizer::BailoutType type) { 941 Deoptimizer::BailoutType type) {
942 { 942 {
943 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 943 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
944 // Pass the function and deoptimization type to the runtime system. 944 // Pass the function and deoptimization type to the runtime system.
945 __ mov(r0, Operand(Smi::FromInt(static_cast<int>(type)))); 945 __ mov(r0, Operand(Smi::FromInt(static_cast<int>(type))));
946 __ push(r0); 946 __ push(r0);
947 __ CallRuntime(Runtime::kHiddenNotifyDeoptimized, 1); 947 __ CallRuntime(Runtime::kNotifyDeoptimized, 1);
948 } 948 }
949 949
950 // Get the full codegen state from the stack and untag it -> r6. 950 // Get the full codegen state from the stack and untag it -> r6.
951 __ ldr(r6, MemOperand(sp, 0 * kPointerSize)); 951 __ ldr(r6, MemOperand(sp, 0 * kPointerSize));
952 __ SmiUntag(r6); 952 __ SmiUntag(r6);
953 // Switch on the state. 953 // Switch on the state.
954 Label with_tos_register, unknown_state; 954 Label with_tos_register, unknown_state;
955 __ cmp(r6, Operand(FullCodeGenerator::NO_REGISTERS)); 955 __ cmp(r6, Operand(FullCodeGenerator::NO_REGISTERS));
956 __ b(ne, &with_tos_register); 956 __ b(ne, &with_tos_register);
957 __ add(sp, sp, Operand(1 * kPointerSize)); // Remove state. 957 __ add(sp, sp, Operand(1 * kPointerSize)); // Remove state.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1028 1028
1029 1029
1030 void Builtins::Generate_OsrAfterStackCheck(MacroAssembler* masm) { 1030 void Builtins::Generate_OsrAfterStackCheck(MacroAssembler* masm) {
1031 // We check the stack limit as indicator that recompilation might be done. 1031 // We check the stack limit as indicator that recompilation might be done.
1032 Label ok; 1032 Label ok;
1033 __ LoadRoot(ip, Heap::kStackLimitRootIndex); 1033 __ LoadRoot(ip, Heap::kStackLimitRootIndex);
1034 __ cmp(sp, Operand(ip)); 1034 __ cmp(sp, Operand(ip));
1035 __ b(hs, &ok); 1035 __ b(hs, &ok);
1036 { 1036 {
1037 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 1037 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
1038 __ CallRuntime(Runtime::kHiddenStackGuard, 0); 1038 __ CallRuntime(Runtime::kStackGuard, 0);
1039 } 1039 }
1040 __ Jump(masm->isolate()->builtins()->OnStackReplacement(), 1040 __ Jump(masm->isolate()->builtins()->OnStackReplacement(),
1041 RelocInfo::CODE_TARGET); 1041 RelocInfo::CODE_TARGET);
1042 1042
1043 __ bind(&ok); 1043 __ bind(&ok);
1044 __ Ret(); 1044 __ Ret();
1045 } 1045 }
1046 1046
1047 1047
1048 void Builtins::Generate_FunctionCall(MacroAssembler* masm) { 1048 void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
1551 __ bkpt(0); 1551 __ bkpt(0);
1552 } 1552 }
1553 } 1553 }
1554 1554
1555 1555
1556 #undef __ 1556 #undef __
1557 1557
1558 } } // namespace v8::internal 1558 } } // namespace v8::internal
1559 1559
1560 #endif // V8_TARGET_ARCH_ARM 1560 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/arm/code-stubs-arm.cc » ('j') | test/fuzz-natives/fuzz-natives.status » ('J')

Powered by Google App Engine
This is Rietveld 408576698