From 875a57e6585611978127e61188b6ba71652779c3 Mon Sep 17 00:00:00 2001 From: "mstarzinger@chromium.org" Date: Mon, 16 Apr 2012 10:53:26 +0000 Subject: [PATCH] Add PushAddress(ExternalReference) for X64. R=erik.corry@gmail.com Review URL: https://chromiumcodereview.appspot.com/10081009 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@11329 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/x64/macro-assembler-x64.cc | 14 ++++++++++++++ src/x64/macro-assembler-x64.h | 2 ++ src/x64/stub-cache-x64.cc | 9 +++------ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc index 12e653c..53becf6 100644 --- a/src/x64/macro-assembler-x64.cc +++ b/src/x64/macro-assembler-x64.cc @@ -150,6 +150,20 @@ int MacroAssembler::LoadAddressSize(ExternalReference source) { } +void MacroAssembler::PushAddress(ExternalReference source) { + int64_t address = reinterpret_cast(source.address()); + if (is_int32(address) && !Serializer::enabled()) { + if (emit_debug_code()) { + movq(kScratchRegister, BitCast(kZapValue), RelocInfo::NONE); + } + push(Immediate(static_cast(address))); + return; + } + LoadAddress(kScratchRegister, source); + push(kScratchRegister); +} + + void MacroAssembler::LoadRoot(Register destination, Heap::RootListIndex index) { ASSERT(root_array_available_); movq(destination, Operand(kRootRegister, diff --git a/src/x64/macro-assembler-x64.h b/src/x64/macro-assembler-x64.h index 6bb5cfe..66587d5 100644 --- a/src/x64/macro-assembler-x64.h +++ b/src/x64/macro-assembler-x64.h @@ -127,6 +127,8 @@ class MacroAssembler: public Assembler { // Returns the size of the code generated by LoadAddress. // Used by CallSize(ExternalReference) to find the size of a call. int LoadAddressSize(ExternalReference source); + // Pushes the address of the external reference onto the stack. + void PushAddress(ExternalReference source); // Operations on roots in the root-array. void LoadRoot(Register destination, Heap::RootListIndex index); diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc index 8edda73..9312c65 100644 --- a/src/x64/stub-cache-x64.cc +++ b/src/x64/stub-cache-x64.cc @@ -379,8 +379,7 @@ static void PushInterceptorArguments(MacroAssembler* masm, __ push(receiver); __ push(holder); __ push(FieldOperand(kScratchRegister, InterceptorInfo::kDataOffset)); - __ movq(kScratchRegister, ExternalReference::isolate_address()); - __ push(kScratchRegister); + __ PushAddress(ExternalReference::isolate_address()); } @@ -1012,8 +1011,7 @@ void StubCompiler::GenerateLoadCallback(Handle object, } else { __ Push(Handle(callback->data())); } - __ movq(kScratchRegister, ExternalReference::isolate_address()); - __ push(kScratchRegister); // isolate + __ PushAddress(ExternalReference::isolate_address()); // isolate __ push(name_reg); // name // Save a pointer to where we pushed the arguments pointer. // This will be passed as the const AccessorInfo& to the C++ callback. @@ -1191,8 +1189,7 @@ void StubCompiler::GenerateLoadInterceptor(Handle object, __ push(holder_reg); __ Move(holder_reg, callback); __ push(FieldOperand(holder_reg, AccessorInfo::kDataOffset)); - __ movq(kScratchRegister, ExternalReference::isolate_address()); - __ push(kScratchRegister); + __ PushAddress(ExternalReference::isolate_address()); __ push(holder_reg); __ push(name_reg); __ push(scratch2); // restore return address -- 2.7.4