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

Side by Side Diff: src/ia32/macro-assembler-ia32.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/ia32/full-codegen-ia32.cc ('k') | src/ia32/regexp-macro-assembler-ia32.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 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 ASSERT(ExitFrameConstants::kCallerFPOffset == 0 * kPointerSize); 376 ASSERT(ExitFrameConstants::kCallerFPOffset == 0 * kPointerSize);
377 push(ebp); 377 push(ebp);
378 mov(ebp, Operand(esp)); 378 mov(ebp, Operand(esp));
379 379
380 // Reserve room for entry stack pointer and push the debug marker. 380 // Reserve room for entry stack pointer and push the debug marker.
381 ASSERT(ExitFrameConstants::kSPOffset == -1 * kPointerSize); 381 ASSERT(ExitFrameConstants::kSPOffset == -1 * kPointerSize);
382 push(Immediate(0)); // Saved entry sp, patched before call. 382 push(Immediate(0)); // Saved entry sp, patched before call.
383 push(Immediate(CodeObject())); // Accessed from ExitFrame::code_slot. 383 push(Immediate(CodeObject())); // Accessed from ExitFrame::code_slot.
384 384
385 // Save the frame pointer and the context in top. 385 // Save the frame pointer and the context in top.
386 ExternalReference c_entry_fp_address(Top::k_c_entry_fp_address); 386 ExternalReference c_entry_fp_address(Isolate::k_c_entry_fp_address);
387 ExternalReference context_address(Top::k_context_address); 387 ExternalReference context_address(Isolate::k_context_address);
388 mov(Operand::StaticVariable(c_entry_fp_address), ebp); 388 mov(Operand::StaticVariable(c_entry_fp_address), ebp);
389 mov(Operand::StaticVariable(context_address), esi); 389 mov(Operand::StaticVariable(context_address), esi);
390 } 390 }
391 391
392 void MacroAssembler::EnterExitFrameEpilogue(ExitFrame::Mode mode, int argc) { 392 void MacroAssembler::EnterExitFrameEpilogue(ExitFrame::Mode mode, int argc) {
393 #ifdef ENABLE_DEBUGGER_SUPPORT 393 #ifdef ENABLE_DEBUGGER_SUPPORT
394 // Save the state of all registers to the stack from the memory 394 // Save the state of all registers to the stack from the memory
395 // location. This is needed to allow nested break points. 395 // location. This is needed to allow nested break points.
396 if (mode == ExitFrame::MODE_DEBUG) { 396 if (mode == ExitFrame::MODE_DEBUG) {
397 // TODO(1243899): This should be symmetric to 397 // TODO(1243899): This should be symmetric to
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 #endif 458 #endif
459 459
460 // Get the return address from the stack and restore the frame pointer. 460 // Get the return address from the stack and restore the frame pointer.
461 mov(ecx, Operand(ebp, 1 * kPointerSize)); 461 mov(ecx, Operand(ebp, 1 * kPointerSize));
462 mov(ebp, Operand(ebp, 0 * kPointerSize)); 462 mov(ebp, Operand(ebp, 0 * kPointerSize));
463 463
464 // Pop the arguments and the receiver from the caller stack. 464 // Pop the arguments and the receiver from the caller stack.
465 lea(esp, Operand(esi, 1 * kPointerSize)); 465 lea(esp, Operand(esi, 1 * kPointerSize));
466 466
467 // Restore current context from top and clear it in debug mode. 467 // Restore current context from top and clear it in debug mode.
468 ExternalReference context_address(Top::k_context_address); 468 ExternalReference context_address(Isolate::k_context_address);
469 mov(esi, Operand::StaticVariable(context_address)); 469 mov(esi, Operand::StaticVariable(context_address));
470 #ifdef DEBUG 470 #ifdef DEBUG
471 mov(Operand::StaticVariable(context_address), Immediate(0)); 471 mov(Operand::StaticVariable(context_address), Immediate(0));
472 #endif 472 #endif
473 473
474 // Push the return address to get ready to return. 474 // Push the return address to get ready to return.
475 push(ecx); 475 push(ecx);
476 476
477 // Clear the top frame. 477 // Clear the top frame.
478 ExternalReference c_entry_fp_address(Top::k_c_entry_fp_address); 478 ExternalReference c_entry_fp_address(Isolate::k_c_entry_fp_address);
479 mov(Operand::StaticVariable(c_entry_fp_address), Immediate(0)); 479 mov(Operand::StaticVariable(c_entry_fp_address), Immediate(0));
480 } 480 }
481 481
482 482
483 void MacroAssembler::PushTryHandler(CodeLocation try_location, 483 void MacroAssembler::PushTryHandler(CodeLocation try_location,
484 HandlerType type) { 484 HandlerType type) {
485 // Adjust this code if not the case. 485 // Adjust this code if not the case.
486 ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize); 486 ASSERT(StackHandlerConstants::kSize == 4 * kPointerSize);
487 // The pc (return address) is already on TOS. 487 // The pc (return address) is already on TOS.
488 if (try_location == IN_JAVASCRIPT) { 488 if (try_location == IN_JAVASCRIPT) {
489 if (type == TRY_CATCH_HANDLER) { 489 if (type == TRY_CATCH_HANDLER) {
490 push(Immediate(StackHandler::TRY_CATCH)); 490 push(Immediate(StackHandler::TRY_CATCH));
491 } else { 491 } else {
492 push(Immediate(StackHandler::TRY_FINALLY)); 492 push(Immediate(StackHandler::TRY_FINALLY));
493 } 493 }
494 push(ebp); 494 push(ebp);
495 } else { 495 } else {
496 ASSERT(try_location == IN_JS_ENTRY); 496 ASSERT(try_location == IN_JS_ENTRY);
497 // The frame pointer does not point to a JS frame so we save NULL 497 // The frame pointer does not point to a JS frame so we save NULL
498 // for ebp. We expect the code throwing an exception to check ebp 498 // for ebp. We expect the code throwing an exception to check ebp
499 // before dereferencing it to restore the context. 499 // before dereferencing it to restore the context.
500 push(Immediate(StackHandler::ENTRY)); 500 push(Immediate(StackHandler::ENTRY));
501 push(Immediate(0)); // NULL frame pointer. 501 push(Immediate(0)); // NULL frame pointer.
502 } 502 }
503 // Save the current handler as the next handler. 503 // Save the current handler as the next handler.
504 push(Operand::StaticVariable(ExternalReference(Top::k_handler_address))); 504 push(Operand::StaticVariable(ExternalReference(Isolate::k_handler_address)));
505 // Link this handler as the new current one. 505 // Link this handler as the new current one.
506 mov(Operand::StaticVariable(ExternalReference(Top::k_handler_address)), esp); 506 mov(Operand::StaticVariable(ExternalReference(Isolate::k_handler_address)),
507 esp);
507 } 508 }
508 509
509 510
510 void MacroAssembler::PopTryHandler() { 511 void MacroAssembler::PopTryHandler() {
511 ASSERT_EQ(0, StackHandlerConstants::kNextOffset); 512 ASSERT_EQ(0, StackHandlerConstants::kNextOffset);
512 pop(Operand::StaticVariable(ExternalReference(Top::k_handler_address))); 513 pop(Operand::StaticVariable(ExternalReference(Isolate::k_handler_address)));
513 add(Operand(esp), Immediate(StackHandlerConstants::kSize - kPointerSize)); 514 add(Operand(esp), Immediate(StackHandlerConstants::kSize - kPointerSize));
514 } 515 }
515 516
516 517
517 Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg, 518 Register MacroAssembler::CheckMaps(JSObject* object, Register object_reg,
518 JSObject* holder, Register holder_reg, 519 JSObject* holder, Register holder_reg,
519 Register scratch, 520 Register scratch,
520 int save_at_depth, 521 int save_at_depth,
521 Label* miss) { 522 Label* miss) {
522 // Make sure there's no overlap between scratch and the other 523 // Make sure there's no overlap between scratch and the other
(...skipping 1139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1662 1663
1663 // Check that the code was patched as expected. 1664 // Check that the code was patched as expected.
1664 ASSERT(masm_.pc_ == address_ + size_); 1665 ASSERT(masm_.pc_ == address_ + size_);
1665 ASSERT(masm_.reloc_info_writer.pos() == address_ + size_ + Assembler::kGap); 1666 ASSERT(masm_.reloc_info_writer.pos() == address_ + size_ + Assembler::kGap);
1666 } 1667 }
1667 1668
1668 1669
1669 } } // namespace v8::internal 1670 } } // namespace v8::internal
1670 1671
1671 #endif // V8_TARGET_ARCH_IA32 1672 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/ia32/full-codegen-ia32.cc ('k') | src/ia32/regexp-macro-assembler-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698