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

Side by Side Diff: src/arm/macro-assembler-arm.cc

Issue 246643014: CodeStubs contain their corresponding Isolate* now. (part 1) (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Feedback. Rebased. 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/lithium-codegen-arm.cc ('k') | src/arm/regexp-macro-assembler-arm.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 // 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 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 CheckPageFlag(object, 549 CheckPageFlag(object,
550 value, // Used as scratch. 550 value, // Used as scratch.
551 MemoryChunk::kPointersFromHereAreInterestingMask, 551 MemoryChunk::kPointersFromHereAreInterestingMask,
552 eq, 552 eq,
553 &done); 553 &done);
554 554
555 // Record the actual write. 555 // Record the actual write.
556 if (lr_status == kLRHasNotBeenSaved) { 556 if (lr_status == kLRHasNotBeenSaved) {
557 push(lr); 557 push(lr);
558 } 558 }
559 RecordWriteStub stub(object, value, address, remembered_set_action, fp_mode); 559 RecordWriteStub stub(isolate(), object, value, address, remembered_set_action,
560 fp_mode);
560 CallStub(&stub); 561 CallStub(&stub);
561 if (lr_status == kLRHasNotBeenSaved) { 562 if (lr_status == kLRHasNotBeenSaved) {
562 pop(lr); 563 pop(lr);
563 } 564 }
564 565
565 bind(&done); 566 bind(&done);
566 567
567 // Clobber clobbered registers when running with the debug-code flag 568 // Clobber clobbered registers when running with the debug-code flag
568 // turned on to provoke errors. 569 // turned on to provoke errors.
569 if (emit_debug_code()) { 570 if (emit_debug_code()) {
(...skipping 28 matching lines...) Expand all
598 // Check for end of buffer. 599 // Check for end of buffer.
599 tst(scratch, Operand(StoreBuffer::kStoreBufferOverflowBit)); 600 tst(scratch, Operand(StoreBuffer::kStoreBufferOverflowBit));
600 if (and_then == kFallThroughAtEnd) { 601 if (and_then == kFallThroughAtEnd) {
601 b(eq, &done); 602 b(eq, &done);
602 } else { 603 } else {
603 ASSERT(and_then == kReturnAtEnd); 604 ASSERT(and_then == kReturnAtEnd);
604 Ret(eq); 605 Ret(eq);
605 } 606 }
606 push(lr); 607 push(lr);
607 StoreBufferOverflowStub store_buffer_overflow = 608 StoreBufferOverflowStub store_buffer_overflow =
608 StoreBufferOverflowStub(fp_mode); 609 StoreBufferOverflowStub(isolate(), fp_mode);
609 CallStub(&store_buffer_overflow); 610 CallStub(&store_buffer_overflow);
610 pop(lr); 611 pop(lr);
611 bind(&done); 612 bind(&done);
612 if (and_then == kReturnAtEnd) { 613 if (and_then == kReturnAtEnd) {
613 Ret(); 614 Ret();
614 } 615 }
615 } 616 }
616 617
617 618
618 void MacroAssembler::PushFixedFrame(Register marker_reg) { 619 void MacroAssembler::PushFixedFrame(Register marker_reg) {
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
1332 ldrb(scratch, FieldMemOperand(scratch, Map::kInstanceTypeOffset)); 1333 ldrb(scratch, FieldMemOperand(scratch, Map::kInstanceTypeOffset));
1333 cmp(scratch, Operand(LAST_NAME_TYPE)); 1334 cmp(scratch, Operand(LAST_NAME_TYPE));
1334 b(hi, fail); 1335 b(hi, fail);
1335 } 1336 }
1336 1337
1337 1338
1338 #ifdef ENABLE_DEBUGGER_SUPPORT 1339 #ifdef ENABLE_DEBUGGER_SUPPORT
1339 void MacroAssembler::DebugBreak() { 1340 void MacroAssembler::DebugBreak() {
1340 mov(r0, Operand::Zero()); 1341 mov(r0, Operand::Zero());
1341 mov(r1, Operand(ExternalReference(Runtime::kDebugBreak, isolate()))); 1342 mov(r1, Operand(ExternalReference(Runtime::kDebugBreak, isolate())));
1342 CEntryStub ces(1); 1343 CEntryStub ces(isolate(), 1);
1343 ASSERT(AllowThisStubCall(&ces)); 1344 ASSERT(AllowThisStubCall(&ces));
1344 Call(ces.GetCode(isolate()), RelocInfo::DEBUG_BREAK); 1345 Call(ces.GetCode(isolate()), RelocInfo::DEBUG_BREAK);
1345 } 1346 }
1346 #endif 1347 #endif
1347 1348
1348 1349
1349 void MacroAssembler::PushTryHandler(StackHandler::Kind kind, 1350 void MacroAssembler::PushTryHandler(StackHandler::Kind kind,
1350 int handler_index) { 1351 int handler_index) {
1351 // Adjust this code if not the case. 1352 // Adjust this code if not the case.
1352 STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize); 1353 STATIC_ASSERT(StackHandlerConstants::kSize == 5 * kPointerSize);
(...skipping 1029 matching lines...) Expand 10 before | Expand all | Expand 10 after
2382 PushSafepointRegisters(); 2383 PushSafepointRegisters();
2383 PrepareCallCFunction(1, r0); 2384 PrepareCallCFunction(1, r0);
2384 mov(r0, Operand(ExternalReference::isolate_address(isolate()))); 2385 mov(r0, Operand(ExternalReference::isolate_address(isolate())));
2385 CallCFunction(ExternalReference::log_enter_external_function(isolate()), 1); 2386 CallCFunction(ExternalReference::log_enter_external_function(isolate()), 1);
2386 PopSafepointRegisters(); 2387 PopSafepointRegisters();
2387 } 2388 }
2388 2389
2389 // Native call returns to the DirectCEntry stub which redirects to the 2390 // Native call returns to the DirectCEntry stub which redirects to the
2390 // return address pushed on stack (could have moved after GC). 2391 // return address pushed on stack (could have moved after GC).
2391 // DirectCEntry stub itself is generated early and never moves. 2392 // DirectCEntry stub itself is generated early and never moves.
2392 DirectCEntryStub stub; 2393 DirectCEntryStub stub(isolate());
2393 stub.GenerateCall(this, r3); 2394 stub.GenerateCall(this, r3);
2394 2395
2395 if (FLAG_log_timer_events) { 2396 if (FLAG_log_timer_events) {
2396 FrameScope frame(this, StackFrame::MANUAL); 2397 FrameScope frame(this, StackFrame::MANUAL);
2397 PushSafepointRegisters(); 2398 PushSafepointRegisters();
2398 PrepareCallCFunction(1, r0); 2399 PrepareCallCFunction(1, r0);
2399 mov(r0, Operand(ExternalReference::isolate_address(isolate()))); 2400 mov(r0, Operand(ExternalReference::isolate_address(isolate())));
2400 CallCFunction(ExternalReference::log_leave_external_function(isolate()), 1); 2401 CallCFunction(ExternalReference::log_leave_external_function(isolate()), 1);
2401 PopSafepointRegisters(); 2402 PopSafepointRegisters();
2402 } 2403 }
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
2587 DwVfpRegister double_input) { 2588 DwVfpRegister double_input) {
2588 Label done; 2589 Label done;
2589 2590
2590 TryInlineTruncateDoubleToI(result, double_input, &done); 2591 TryInlineTruncateDoubleToI(result, double_input, &done);
2591 2592
2592 // If we fell through then inline version didn't succeed - call stub instead. 2593 // If we fell through then inline version didn't succeed - call stub instead.
2593 push(lr); 2594 push(lr);
2594 sub(sp, sp, Operand(kDoubleSize)); // Put input on stack. 2595 sub(sp, sp, Operand(kDoubleSize)); // Put input on stack.
2595 vstr(double_input, MemOperand(sp, 0)); 2596 vstr(double_input, MemOperand(sp, 0));
2596 2597
2597 DoubleToIStub stub(sp, result, 0, true, true); 2598 DoubleToIStub stub(isolate(), sp, result, 0, true, true);
2598 CallStub(&stub); 2599 CallStub(&stub);
2599 2600
2600 add(sp, sp, Operand(kDoubleSize)); 2601 add(sp, sp, Operand(kDoubleSize));
2601 pop(lr); 2602 pop(lr);
2602 2603
2603 bind(&done); 2604 bind(&done);
2604 } 2605 }
2605 2606
2606 2607
2607 void MacroAssembler::TruncateHeapNumberToI(Register result, 2608 void MacroAssembler::TruncateHeapNumberToI(Register result,
2608 Register object) { 2609 Register object) {
2609 Label done; 2610 Label done;
2610 LowDwVfpRegister double_scratch = kScratchDoubleReg; 2611 LowDwVfpRegister double_scratch = kScratchDoubleReg;
2611 ASSERT(!result.is(object)); 2612 ASSERT(!result.is(object));
2612 2613
2613 vldr(double_scratch, 2614 vldr(double_scratch,
2614 MemOperand(object, HeapNumber::kValueOffset - kHeapObjectTag)); 2615 MemOperand(object, HeapNumber::kValueOffset - kHeapObjectTag));
2615 TryInlineTruncateDoubleToI(result, double_scratch, &done); 2616 TryInlineTruncateDoubleToI(result, double_scratch, &done);
2616 2617
2617 // If we fell through then inline version didn't succeed - call stub instead. 2618 // If we fell through then inline version didn't succeed - call stub instead.
2618 push(lr); 2619 push(lr);
2619 DoubleToIStub stub(object, 2620 DoubleToIStub stub(isolate(),
2621 object,
2620 result, 2622 result,
2621 HeapNumber::kValueOffset - kHeapObjectTag, 2623 HeapNumber::kValueOffset - kHeapObjectTag,
2622 true, 2624 true,
2623 true); 2625 true);
2624 CallStub(&stub); 2626 CallStub(&stub);
2625 pop(lr); 2627 pop(lr);
2626 2628
2627 bind(&done); 2629 bind(&done);
2628 } 2630 }
2629 2631
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2675 IllegalOperation(num_arguments); 2677 IllegalOperation(num_arguments);
2676 return; 2678 return;
2677 } 2679 }
2678 2680
2679 // TODO(1236192): Most runtime routines don't need the number of 2681 // TODO(1236192): Most runtime routines don't need the number of
2680 // arguments passed in because it is constant. At some point we 2682 // arguments passed in because it is constant. At some point we
2681 // should remove this need and make the runtime routine entry code 2683 // should remove this need and make the runtime routine entry code
2682 // smarter. 2684 // smarter.
2683 mov(r0, Operand(num_arguments)); 2685 mov(r0, Operand(num_arguments));
2684 mov(r1, Operand(ExternalReference(f, isolate()))); 2686 mov(r1, Operand(ExternalReference(f, isolate())));
2685 CEntryStub stub(1, save_doubles); 2687 CEntryStub stub(isolate(), 1, save_doubles);
2686 CallStub(&stub); 2688 CallStub(&stub);
2687 } 2689 }
2688 2690
2689 2691
2690 void MacroAssembler::CallExternalReference(const ExternalReference& ext, 2692 void MacroAssembler::CallExternalReference(const ExternalReference& ext,
2691 int num_arguments) { 2693 int num_arguments) {
2692 mov(r0, Operand(num_arguments)); 2694 mov(r0, Operand(num_arguments));
2693 mov(r1, Operand(ext)); 2695 mov(r1, Operand(ext));
2694 2696
2695 CEntryStub stub(1); 2697 CEntryStub stub(isolate(), 1);
2696 CallStub(&stub); 2698 CallStub(&stub);
2697 } 2699 }
2698 2700
2699 2701
2700 void MacroAssembler::TailCallExternalReference(const ExternalReference& ext, 2702 void MacroAssembler::TailCallExternalReference(const ExternalReference& ext,
2701 int num_arguments, 2703 int num_arguments,
2702 int result_size) { 2704 int result_size) {
2703 // TODO(1236192): Most runtime routines don't need the number of 2705 // TODO(1236192): Most runtime routines don't need the number of
2704 // arguments passed in because it is constant. At some point we 2706 // arguments passed in because it is constant. At some point we
2705 // should remove this need and make the runtime routine entry code 2707 // should remove this need and make the runtime routine entry code
(...skipping 11 matching lines...) Expand all
2717 result_size); 2719 result_size);
2718 } 2720 }
2719 2721
2720 2722
2721 void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin) { 2723 void MacroAssembler::JumpToExternalReference(const ExternalReference& builtin) {
2722 #if defined(__thumb__) 2724 #if defined(__thumb__)
2723 // Thumb mode builtin. 2725 // Thumb mode builtin.
2724 ASSERT((reinterpret_cast<intptr_t>(builtin.address()) & 1) == 1); 2726 ASSERT((reinterpret_cast<intptr_t>(builtin.address()) & 1) == 1);
2725 #endif 2727 #endif
2726 mov(r1, Operand(builtin)); 2728 mov(r1, Operand(builtin));
2727 CEntryStub stub(1); 2729 CEntryStub stub(isolate(), 1);
2728 Jump(stub.GetCode(isolate()), RelocInfo::CODE_TARGET); 2730 Jump(stub.GetCode(isolate()), RelocInfo::CODE_TARGET);
2729 } 2731 }
2730 2732
2731 2733
2732 void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id, 2734 void MacroAssembler::InvokeBuiltin(Builtins::JavaScript id,
2733 InvokeFlag flag, 2735 InvokeFlag flag,
2734 const CallWrapper& call_wrapper) { 2736 const CallWrapper& call_wrapper) {
2735 // You can't call a builtin without a valid frame. 2737 // You can't call a builtin without a valid frame.
2736 ASSERT(flag == JUMP_FUNCTION || has_frame()); 2738 ASSERT(flag == JUMP_FUNCTION || has_frame());
2737 2739
(...skipping 1351 matching lines...) Expand 10 before | Expand all | Expand 10 after
4089 sub(result, result, Operand(dividend)); 4091 sub(result, result, Operand(dividend));
4090 } 4092 }
4091 if (ms.shift() > 0) mov(result, Operand(result, ASR, ms.shift())); 4093 if (ms.shift() > 0) mov(result, Operand(result, ASR, ms.shift()));
4092 add(result, result, Operand(dividend, LSR, 31)); 4094 add(result, result, Operand(dividend, LSR, 31));
4093 } 4095 }
4094 4096
4095 4097
4096 } } // namespace v8::internal 4098 } } // namespace v8::internal
4097 4099
4098 #endif // V8_TARGET_ARCH_ARM 4100 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/lithium-codegen-arm.cc ('k') | src/arm/regexp-macro-assembler-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698