Version 3.18.3

Exposed the GC under a name that is less collision prone than window.gc. (issue 2641)

Do not emit double values at their use sites. (Chromium issue 234101)

Added methods to allow resuming execution after calling TerminateExecution(). (issue 2361)

Performance and stability improvements on all platforms.

git-svn-id: http://v8.googlecode.com/svn/trunk@14404 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc
index 5865924..c193bb3 100644
--- a/src/x64/macro-assembler-x64.cc
+++ b/src/x64/macro-assembler-x64.cc
@@ -818,9 +818,9 @@
   movq(Operand(base_reg, kLimitOffset), prev_limit_reg);
   movq(prev_limit_reg, rax);
 #ifdef _WIN64
-  LoadAddress(rcx, ExternalReference::isolate_address());
+  LoadAddress(rcx, ExternalReference::isolate_address(isolate()));
 #else
-  LoadAddress(rdi, ExternalReference::isolate_address());
+  LoadAddress(rdi, ExternalReference::isolate_address(isolate()));
 #endif
   LoadAddress(rax,
               ExternalReference::delete_handle_scope_extensions(isolate()));
@@ -2286,7 +2286,7 @@
 
 
 void MacroAssembler::Move(Register dst, Handle<Object> source) {
-  ASSERT(!source->IsFailure());
+  ALLOW_HANDLE_DEREF(isolate(), "smi check");
   if (source->IsSmi()) {
     Move(dst, Smi::cast(*source));
   } else {
@@ -2296,7 +2296,7 @@
 
 
 void MacroAssembler::Move(const Operand& dst, Handle<Object> source) {
-  ASSERT(!source->IsFailure());
+  ALLOW_HANDLE_DEREF(isolate(), "smi check");
   if (source->IsSmi()) {
     Move(dst, Smi::cast(*source));
   } else {
@@ -2307,6 +2307,7 @@
 
 
 void MacroAssembler::Cmp(Register dst, Handle<Object> source) {
+  ALLOW_HANDLE_DEREF(isolate(), "smi check");
   if (source->IsSmi()) {
     Cmp(dst, Smi::cast(*source));
   } else {
@@ -2317,6 +2318,7 @@
 
 
 void MacroAssembler::Cmp(const Operand& dst, Handle<Object> source) {
+  ALLOW_HANDLE_DEREF(isolate(), "smi check");
   if (source->IsSmi()) {
     Cmp(dst, Smi::cast(*source));
   } else {
@@ -2328,6 +2330,7 @@
 
 
 void MacroAssembler::Push(Handle<Object> source) {
+  ALLOW_HANDLE_DEREF(isolate(), "smi check");
   if (source->IsSmi()) {
     Push(Smi::cast(*source));
   } else {
@@ -2340,6 +2343,7 @@
 
 void MacroAssembler::LoadHeapObject(Register result,
                                     Handle<HeapObject> object) {
+  ALLOW_HANDLE_DEREF(isolate(), "using raw address");
   if (isolate()->heap()->InNewSpace(*object)) {
     Handle<JSGlobalPropertyCell> cell =
         isolate()->factory()->NewJSGlobalPropertyCell(object);
@@ -2352,6 +2356,7 @@
 
 
 void MacroAssembler::PushHeapObject(Handle<HeapObject> object) {
+  ALLOW_HANDLE_DEREF(isolate(), "using raw address");
   if (isolate()->heap()->InNewSpace(*object)) {
     Handle<JSGlobalPropertyCell> cell =
         isolate()->factory()->NewJSGlobalPropertyCell(object);
@@ -2367,6 +2372,7 @@
 void MacroAssembler::LoadGlobalCell(Register dst,
                                     Handle<JSGlobalPropertyCell> cell) {
   if (dst.is(rax)) {
+    ALLOW_HANDLE_DEREF(isolate(), "embedding raw address");
     load_rax(cell.location(), RelocInfo::GLOBAL_PROPERTY_CELL);
   } else {
     movq(dst, cell, RelocInfo::GLOBAL_PROPERTY_CELL);
@@ -3280,6 +3286,7 @@
 
 
 void MacroAssembler::InvokeFunction(Handle<JSFunction> function,
+                                    const ParameterCount& expected,
                                     const ParameterCount& actual,
                                     InvokeFlag flag,
                                     const CallWrapper& call_wrapper,
@@ -3295,7 +3302,6 @@
   // allow recompilation to take effect without changing any of the
   // call sites.
   movq(rdx, FieldOperand(rdi, JSFunction::kCodeEntryOffset));
-  ParameterCount expected(function->shared()->formal_parameter_count());
   InvokeCode(rdx, expected, actual, flag, call_wrapper, call_kind);
 }