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

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

Issue 2866008: [Isolates] Move contents of Top into Isolate.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/isolates/
Patch Set: ensure we're synced Created 10 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 | « src/arm/full-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 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 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 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 } 466 }
467 467
468 // Push in reverse order: caller_fp, sp_on_exit, and caller_pc. 468 // Push in reverse order: caller_fp, sp_on_exit, and caller_pc.
469 stm(db_w, sp, fp.bit() | ip.bit() | lr.bit()); 469 stm(db_w, sp, fp.bit() | ip.bit() | lr.bit());
470 mov(fp, Operand(sp)); // Setup new frame pointer. 470 mov(fp, Operand(sp)); // Setup new frame pointer.
471 471
472 mov(ip, Operand(CodeObject())); 472 mov(ip, Operand(CodeObject()));
473 push(ip); // Accessed from ExitFrame::code_slot. 473 push(ip); // Accessed from ExitFrame::code_slot.
474 474
475 // Save the frame pointer and the context in top. 475 // Save the frame pointer and the context in top.
476 mov(ip, Operand(ExternalReference(Top::k_c_entry_fp_address))); 476 mov(ip, Operand(ExternalReference(Isolate::k_c_entry_fp_address)));
477 str(fp, MemOperand(ip)); 477 str(fp, MemOperand(ip));
478 mov(ip, Operand(ExternalReference(Top::k_context_address))); 478 mov(ip, Operand(ExternalReference(Isolate::k_context_address)));
479 str(cp, MemOperand(ip)); 479 str(cp, MemOperand(ip));
480 480
481 // Setup argc and the builtin function in callee-saved registers. 481 // Setup argc and the builtin function in callee-saved registers.
482 mov(r4, Operand(r0)); 482 mov(r4, Operand(r0));
483 mov(r5, Operand(r1)); 483 mov(r5, Operand(r1));
484 484
485 485
486 #ifdef ENABLE_DEBUGGER_SUPPORT 486 #ifdef ENABLE_DEBUGGER_SUPPORT
487 // Save the state of all registers to the stack from the memory 487 // Save the state of all registers to the stack from the memory
488 // location. This is needed to allow nested break points. 488 // location. This is needed to allow nested break points.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 // This code intentionally clobbers r2 and r3. 533 // This code intentionally clobbers r2 and r3.
534 const int kCallerSavedSize = kNumJSCallerSaved * kPointerSize; 534 const int kCallerSavedSize = kNumJSCallerSaved * kPointerSize;
535 const int kOffset = ExitFrameConstants::kCodeOffset - kCallerSavedSize; 535 const int kOffset = ExitFrameConstants::kCodeOffset - kCallerSavedSize;
536 add(r3, fp, Operand(kOffset)); 536 add(r3, fp, Operand(kOffset));
537 CopyRegistersFromStackToMemory(r3, r2, kJSCallerSaved); 537 CopyRegistersFromStackToMemory(r3, r2, kJSCallerSaved);
538 } 538 }
539 #endif 539 #endif
540 540
541 // Clear top frame. 541 // Clear top frame.
542 mov(r3, Operand(0)); 542 mov(r3, Operand(0));
543 mov(ip, Operand(ExternalReference(Top::k_c_entry_fp_address))); 543 mov(ip, Operand(ExternalReference(Isolate::k_c_entry_fp_address)));
544 str(r3, MemOperand(ip)); 544 str(r3, MemOperand(ip));
545 545
546 // Restore current context from top and clear it in debug mode. 546 // Restore current context from top and clear it in debug mode.
547 mov(ip, Operand(ExternalReference(Top::k_context_address))); 547 mov(ip, Operand(ExternalReference(Isolate::k_context_address)));
548 ldr(cp, MemOperand(ip)); 548 ldr(cp, MemOperand(ip));
549 #ifdef DEBUG 549 #ifdef DEBUG
550 str(r3, MemOperand(ip)); 550 str(r3, MemOperand(ip));
551 #endif 551 #endif
552 552
553 // Pop the arguments, restore registers, and return. 553 // Pop the arguments, restore registers, and return.
554 mov(sp, Operand(fp)); // respect ABI stack constraint 554 mov(sp, Operand(fp)); // respect ABI stack constraint
555 ldm(ia, sp, fp.bit() | sp.bit() | pc.bit()); 555 ldm(ia, sp, fp.bit() | sp.bit() | pc.bit());
556 } 556 }
557 557
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
784 if (type == TRY_CATCH_HANDLER) { 784 if (type == TRY_CATCH_HANDLER) {
785 mov(r3, Operand(StackHandler::TRY_CATCH)); 785 mov(r3, Operand(StackHandler::TRY_CATCH));
786 } else { 786 } else {
787 mov(r3, Operand(StackHandler::TRY_FINALLY)); 787 mov(r3, Operand(StackHandler::TRY_FINALLY));
788 } 788 }
789 ASSERT(StackHandlerConstants::kStateOffset == 1 * kPointerSize 789 ASSERT(StackHandlerConstants::kStateOffset == 1 * kPointerSize
790 && StackHandlerConstants::kFPOffset == 2 * kPointerSize 790 && StackHandlerConstants::kFPOffset == 2 * kPointerSize
791 && StackHandlerConstants::kPCOffset == 3 * kPointerSize); 791 && StackHandlerConstants::kPCOffset == 3 * kPointerSize);
792 stm(db_w, sp, r3.bit() | fp.bit() | lr.bit()); 792 stm(db_w, sp, r3.bit() | fp.bit() | lr.bit());
793 // Save the current handler as the next handler. 793 // Save the current handler as the next handler.
794 mov(r3, Operand(ExternalReference(Top::k_handler_address))); 794 mov(r3, Operand(ExternalReference(Isolate::k_handler_address)));
795 ldr(r1, MemOperand(r3)); 795 ldr(r1, MemOperand(r3));
796 ASSERT(StackHandlerConstants::kNextOffset == 0); 796 ASSERT(StackHandlerConstants::kNextOffset == 0);
797 push(r1); 797 push(r1);
798 // Link this handler as the new current one. 798 // Link this handler as the new current one.
799 str(sp, MemOperand(r3)); 799 str(sp, MemOperand(r3));
800 } else { 800 } else {
801 // Must preserve r0-r4, r5-r7 are available. 801 // Must preserve r0-r4, r5-r7 are available.
802 ASSERT(try_location == IN_JS_ENTRY); 802 ASSERT(try_location == IN_JS_ENTRY);
803 // The frame pointer does not point to a JS frame so we save NULL 803 // The frame pointer does not point to a JS frame so we save NULL
804 // for fp. We expect the code throwing an exception to check fp 804 // for fp. We expect the code throwing an exception to check fp
805 // before dereferencing it to restore the context. 805 // before dereferencing it to restore the context.
806 mov(ip, Operand(0)); // To save a NULL frame pointer. 806 mov(ip, Operand(0)); // To save a NULL frame pointer.
807 mov(r6, Operand(StackHandler::ENTRY)); 807 mov(r6, Operand(StackHandler::ENTRY));
808 ASSERT(StackHandlerConstants::kStateOffset == 1 * kPointerSize 808 ASSERT(StackHandlerConstants::kStateOffset == 1 * kPointerSize
809 && StackHandlerConstants::kFPOffset == 2 * kPointerSize 809 && StackHandlerConstants::kFPOffset == 2 * kPointerSize
810 && StackHandlerConstants::kPCOffset == 3 * kPointerSize); 810 && StackHandlerConstants::kPCOffset == 3 * kPointerSize);
811 stm(db_w, sp, r6.bit() | ip.bit() | lr.bit()); 811 stm(db_w, sp, r6.bit() | ip.bit() | lr.bit());
812 // Save the current handler as the next handler. 812 // Save the current handler as the next handler.
813 mov(r7, Operand(ExternalReference(Top::k_handler_address))); 813 mov(r7, Operand(ExternalReference(Isolate::k_handler_address)));
814 ldr(r6, MemOperand(r7)); 814 ldr(r6, MemOperand(r7));
815 ASSERT(StackHandlerConstants::kNextOffset == 0); 815 ASSERT(StackHandlerConstants::kNextOffset == 0);
816 push(r6); 816 push(r6);
817 // Link this handler as the new current one. 817 // Link this handler as the new current one.
818 str(sp, MemOperand(r7)); 818 str(sp, MemOperand(r7));
819 } 819 }
820 } 820 }
821 821
822 822
823 void MacroAssembler::PopTryHandler() { 823 void MacroAssembler::PopTryHandler() {
824 ASSERT_EQ(0, StackHandlerConstants::kNextOffset); 824 ASSERT_EQ(0, StackHandlerConstants::kNextOffset);
825 pop(r1); 825 pop(r1);
826 mov(ip, Operand(ExternalReference(Top::k_handler_address))); 826 mov(ip, Operand(ExternalReference(Isolate::k_handler_address)));
827 add(sp, sp, Operand(StackHandlerConstants::kSize - kPointerSize)); 827 add(sp, sp, Operand(StackHandlerConstants::kSize - kPointerSize));
828 str(r1, MemOperand(ip)); 828 str(r1, MemOperand(ip));
829 } 829 }
830 830
831 831
832 Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg, 832 Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg,
833 JSObject* holder, Register holder_reg, 833 JSObject* holder, Register holder_reg,
834 Register scratch, 834 Register scratch,
835 int save_at_depth, 835 int save_at_depth,
836 Label* miss) { 836 Label* miss) {
(...skipping 962 matching lines...) Expand 10 before | Expand all | Expand 10 after
1799 1799
1800 void CodePatcher::Emit(Address addr) { 1800 void CodePatcher::Emit(Address addr) {
1801 masm()->emit(reinterpret_cast<Instr>(addr)); 1801 masm()->emit(reinterpret_cast<Instr>(addr));
1802 } 1802 }
1803 #endif // ENABLE_DEBUGGER_SUPPORT 1803 #endif // ENABLE_DEBUGGER_SUPPORT
1804 1804
1805 1805
1806 } } // namespace v8::internal 1806 } } // namespace v8::internal
1807 1807
1808 #endif // V8_TARGET_ARCH_ARM 1808 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/full-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