Index: src/x64/macro-assembler-x64.cc |
diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc |
index f7db250f9ec64b11dab52563cb93baf28c432e2c..db1b6af29ba2d1d5e5c5c9db742ea7f2edc10e3a 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<int64_t>(source.address()); |
+ if (is_int32(address) && !Serializer::enabled()) { |
+ if (emit_debug_code()) { |
+ movq(kScratchRegister, BitCast<int64_t>(kZapValue), RelocInfo::NONE); |
+ } |
+ push(Immediate(static_cast<int32_t>(address))); |
+ return; |
+ } |
+ LoadAddress(kScratchRegister, source); |
+ push(kScratchRegister); |
+} |
+ |
+ |
void MacroAssembler::LoadRoot(Register destination, Heap::RootListIndex index) { |
ASSERT(root_array_available_); |
movq(destination, Operand(kRootRegister, |