Unification: introduce ExternalReference::pending_exception_address().
authorantonm@chromium.org <antonm@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 27 Jan 2011 18:10:45 +0000 (18:10 +0000)
committerantonm@chromium.org <antonm@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 27 Jan 2011 18:10:45 +0000 (18:10 +0000)
Review URL: http://codereview.chromium.org/6335016

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@6518 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/arm/code-stubs-arm.cc
src/assembler.cc
src/assembler.h
src/ia32/code-stubs-ia32.cc
src/mips/codegen-mips.cc
src/top.h
src/x64/code-stubs-x64.cc

index 4fa927ff0d04c1ecfdc1a6c50d62f65693dd5279..40b9496003ca66a6edb208228a439b2ab27d0b2c 100644 (file)
@@ -3132,7 +3132,7 @@ void CEntryStub::GenerateThrowUncatchable(MacroAssembler* masm,
     // Set pending exception and r0 to out of memory exception.
     Failure* out_of_memory = Failure::OutOfMemoryException();
     __ mov(r0, Operand(reinterpret_cast<int32_t>(out_of_memory)));
-    __ mov(r2, Operand(ExternalReference(Top::k_pending_exception_address)));
+    __ mov(r2, Operand(ExternalReference::pending_exception_address()));
     __ str(r0, MemOperand(r2));
   }
 
@@ -3262,7 +3262,7 @@ void CEntryStub::GenerateCore(MacroAssembler* masm,
   // Retrieve the pending exception and clear the variable.
   __ mov(ip, Operand(ExternalReference::the_hole_value_location()));
   __ ldr(r3, MemOperand(ip));
-  __ mov(ip, Operand(ExternalReference(Top::k_pending_exception_address)));
+  __ mov(ip, Operand(ExternalReference::pending_exception_address()));
   __ ldr(r0, MemOperand(ip));
   __ str(r3, MemOperand(ip));
 
@@ -3395,7 +3395,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
   // exception field in the JSEnv and return a failure sentinel.
   // Coming in here the fp will be invalid because the PushTryHandler below
   // sets it to 0 to signal the existence of the JSEntry frame.
-  __ mov(ip, Operand(ExternalReference(Top::k_pending_exception_address)));
+  __ mov(ip, Operand(ExternalReference::pending_exception_address()));
   __ str(r0, MemOperand(ip));
   __ mov(r0, Operand(reinterpret_cast<int32_t>(Failure::Exception())));
   __ b(&exit);
@@ -3412,7 +3412,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
   // Clear any pending exceptions.
   __ mov(ip, Operand(ExternalReference::the_hole_value_location()));
   __ ldr(r5, MemOperand(ip));
-  __ mov(ip, Operand(ExternalReference(Top::k_pending_exception_address)));
+  __ mov(ip, Operand(ExternalReference::pending_exception_address()));
   __ str(r5, MemOperand(ip));
 
   // Invoke the function by calling through JS entry trampoline builtin.
@@ -4079,7 +4079,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
   // TODO(592): Rerunning the RegExp to get the stack overflow exception.
   __ mov(r0, Operand(ExternalReference::the_hole_value_location()));
   __ ldr(r0, MemOperand(r0, 0));
-  __ mov(r1, Operand(ExternalReference(Top::k_pending_exception_address)));
+  __ mov(r1, Operand(ExternalReference::pending_exception_address()));
   __ ldr(r1, MemOperand(r1, 0));
   __ cmp(r0, r1);
   __ b(eq, &runtime);
index fb9a4af14e851b15c3e71d9793f4906411d3f22e..5d4341fc015747fcb1830fb7b328d4f98302cffb 100644 (file)
@@ -713,6 +713,11 @@ ExternalReference ExternalReference::handle_scope_limit_address() {
 }
 
 
+ExternalReference ExternalReference::pending_exception_address() {
+  return ExternalReference(Top::pending_exception_address());
+}
+
+
 ExternalReference ExternalReference::scheduled_exception_address() {
   return ExternalReference(Top::scheduled_exception_address());
 }
index a29aa064b876b2504108cfe4e8a0576c21dfc387..e41be8c5a02f3acaeff6f87cd06e5beb78661827 100644 (file)
@@ -551,6 +551,7 @@ class ExternalReference BASE_EMBEDDED {
   static ExternalReference handle_scope_limit_address();
   static ExternalReference handle_scope_level_address();
 
+  static ExternalReference pending_exception_address();
   static ExternalReference scheduled_exception_address();
 
   // Static variables containing common double constants.
index 5f3400f83e8ea649f297fb872325fdfef243355d..f8acaa2214137f7ac5b7a16cbcada6a38cfb0a15 100644 (file)
@@ -3922,10 +3922,11 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
   // stack overflow (on the backtrack stack) was detected in RegExp code but
   // haven't created the exception yet. Handle that in the runtime system.
   // TODO(592): Rerunning the RegExp to get the stack overflow exception.
-  ExternalReference pending_exception(Top::k_pending_exception_address);
+  ExternalReference pending_exception_address =
+      ExternalReference::pending_exception_address();
   __ mov(eax,
          Operand::StaticVariable(ExternalReference::the_hole_value_location()));
-  __ cmp(eax, Operand::StaticVariable(pending_exception));
+  __ cmp(eax, Operand::StaticVariable(pending_exception_address));
   __ j(equal, &runtime);
   __ bind(&failure);
   // For failure and exception return null.
@@ -4715,7 +4716,8 @@ void CEntryStub::GenerateCore(MacroAssembler* masm,
   __ j(equal, throw_out_of_memory_exception);
 
   // Retrieve the pending exception and clear the variable.
-  ExternalReference pending_exception_address(Top::k_pending_exception_address);
+  ExternalReference pending_exception_address =
+      ExternalReference::pending_exception_address();
   __ mov(eax, Operand::StaticVariable(pending_exception_address));
   __ mov(edx,
          Operand::StaticVariable(ExternalReference::the_hole_value_location()));
@@ -4767,9 +4769,10 @@ void CEntryStub::GenerateThrowUncatchable(MacroAssembler* masm,
     __ mov(Operand::StaticVariable(external_caught), eax);
 
     // Set pending exception and eax to out of memory exception.
-    ExternalReference pending_exception(Top::k_pending_exception_address);
+    ExternalReference pending_exception_address =
+        ExternalReference::pending_exception_address();
     __ mov(eax, reinterpret_cast<int32_t>(Failure::OutOfMemoryException()));
-    __ mov(Operand::StaticVariable(pending_exception), eax);
+    __ mov(Operand::StaticVariable(pending_exception_address), eax);
   }
 
   // Clear the context pointer.
@@ -4885,8 +4888,9 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
 
   // Caught exception: Store result (exception) in the pending
   // exception field in the JSEnv and return a failure sentinel.
-  ExternalReference pending_exception(Top::k_pending_exception_address);
-  __ mov(Operand::StaticVariable(pending_exception), eax);
+  ExternalReference pending_exception_address =
+      ExternalReference::pending_exception_address();
+  __ mov(Operand::StaticVariable(pending_exception_address), eax);
   __ mov(eax, reinterpret_cast<int32_t>(Failure::Exception()));
   __ jmp(&exit);
 
@@ -4897,7 +4901,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
   // Clear any pending exceptions.
   __ mov(edx,
          Operand::StaticVariable(ExternalReference::the_hole_value_location()));
-  __ mov(Operand::StaticVariable(pending_exception), edx);
+  __ mov(Operand::StaticVariable(pending_exception_address), edx);
 
   // Fake a receiver (NULL).
   __ push(Immediate(0));  // receiver
index 79801f07becbd30506897511854a47f95285458d..3bda275ca1cd7d9accb266eb6094574ff2081af8 100644 (file)
@@ -1178,7 +1178,7 @@ void CEntryStub::GenerateCore(MacroAssembler* masm,
   __ LoadExternalReference(t0, ExternalReference::the_hole_value_location());
   __ lw(a3, MemOperand(t0));
   __ LoadExternalReference(t0,
-      ExternalReference(Top::k_pending_exception_address));
+      ExternalReference::pending_exception_address());
   __ lw(v0, MemOperand(t0));
   __ sw(a3, MemOperand(t0));
 
@@ -1311,7 +1311,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
   // Coming in here the fp will be invalid because the PushTryHandler below
   // sets it to 0 to signal the existence of the JSEntry frame.
   __ LoadExternalReference(t0,
-      ExternalReference(Top::k_pending_exception_address));
+      ExternalReference::pending_exception_address());
   __ sw(v0, MemOperand(t0));  // We come back from 'invoke'. result is in v0.
   __ li(v0, Operand(reinterpret_cast<int32_t>(Failure::Exception())));
   __ b(&exit);
@@ -1329,7 +1329,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
   __ LoadExternalReference(t0, ExternalReference::the_hole_value_location());
   __ lw(t1, MemOperand(t0));
   __ LoadExternalReference(t0,
-      ExternalReference(Top::k_pending_exception_address));
+      ExternalReference::pending_exception_address());
   __ sw(t1, MemOperand(t0));
 
   // Invoke the function by calling through JS entry trampoline builtin.
index 5b0fd6157cbd4da5c822e1442ea47824a4eecf85..e81762a92b657bd09af81945acb27884dabe6d72 100644 (file)
--- a/src/top.h
+++ b/src/top.h
@@ -142,7 +142,6 @@ class ThreadLocalTop BASE_EMBEDDED {
   C(handler_address)                   \
   C(c_entry_fp_address)                \
   C(context_address)                   \
-  C(pending_exception_address)         \
   C(external_caught_exception_address)
 
 #ifdef ENABLE_LOGGING_AND_PROFILING
index e38591580b10e765c845bc5689d93445b240e8b1..cdccdee3f536191a30ff4e6f1442f01b8b089f11 100644 (file)
@@ -2126,8 +2126,7 @@ void RegExpExecStub::Generate(MacroAssembler* masm) {
   // stack overflow (on the backtrack stack) was detected in RegExp code but
   // haven't created the exception yet. Handle that in the runtime system.
   // TODO(592): Rerunning the RegExp to get the stack overflow exception.
-  ExternalReference pending_exception_address(Top::k_pending_exception_address);
-  __ movq(kScratchRegister, pending_exception_address);
+  __ movq(kScratchRegister, ExternalReference::pending_exception_address());
   __ Cmp(kScratchRegister, Factory::the_hole_value());
   __ j(equal, &runtime);
   __ bind(&failure);
@@ -2885,8 +2884,7 @@ void CEntryStub::GenerateCore(MacroAssembler* masm,
   __ j(equal, throw_out_of_memory_exception);
 
   // Retrieve the pending exception and clear the variable.
-  ExternalReference pending_exception_address(Top::k_pending_exception_address);
-  __ movq(kScratchRegister, pending_exception_address);
+  __ movq(kScratchRegister, ExternalReference::pending_exception_address());
   __ movq(rax, Operand(kScratchRegister, 0));
   __ movq(rdx, ExternalReference::the_hole_value_location());
   __ movq(rdx, Operand(rdx, 0));
@@ -2936,9 +2934,8 @@ void CEntryStub::GenerateThrowUncatchable(MacroAssembler* masm,
     __ store_rax(external_caught);
 
     // Set pending exception and rax to out of memory exception.
-    ExternalReference pending_exception(Top::k_pending_exception_address);
     __ movq(rax, Failure::OutOfMemoryException(), RelocInfo::NONE);
-    __ store_rax(pending_exception);
+    __ store_rax(ExternalReference::pending_exception_address());
   }
 
   // Clear the context pointer.
@@ -3091,8 +3088,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
 
   // Caught exception: Store result (exception) in the pending
   // exception field in the JSEnv and return a failure sentinel.
-  ExternalReference pending_exception(Top::k_pending_exception_address);
-  __ store_rax(pending_exception);
+  __ store_rax(ExternalReference::pending_exception_address());
   __ movq(rax, Failure::Exception(), RelocInfo::NONE);
   __ jmp(&exit);
 
@@ -3102,7 +3098,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
 
   // Clear any pending exceptions.
   __ load_rax(ExternalReference::the_hole_value_location());
-  __ store_rax(pending_exception);
+  __ store_rax(ExternalReference::pending_exception_address());
 
   // Fake a receiver (NULL).
   __ push(Immediate(0));  // receiver