Index: src/x64/macro-assembler-x64.cc |
diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc |
index f95755db2a7a0fda191551dbd8457d09cc09e289..a690bd525613dde095e6d0c90cf2579b3d2f5963 100644 |
--- a/src/x64/macro-assembler-x64.cc |
+++ b/src/x64/macro-assembler-x64.cc |
@@ -885,6 +885,13 @@ Condition MacroAssembler::CheckSmi(Register src) { |
} |
+Condition MacroAssembler::CheckSmi(const Operand& src) { |
+ ASSERT_EQ(0, kSmiTag); |
+ testb(src, Immediate(kSmiTagMask)); |
+ return zero; |
+} |
+ |
+ |
Condition MacroAssembler::CheckNonNegativeSmi(Register src) { |
ASSERT_EQ(0, kSmiTag); |
// Make mask 0x8000000000000001 and test that both bits are zero. |
@@ -1386,6 +1393,40 @@ void MacroAssembler::Call(Handle<Code> code_object, RelocInfo::Mode rmode) { |
} |
+void MacroAssembler::Pushad() { |
+ push(rax); |
+ push(rcx); |
+ push(rdx); |
+ push(rbx); |
+ // Not pushing rsp or rbp. |
+ push(rsi); |
+ push(rdi); |
+ push(r8); |
+ push(r9); |
+ // r10 is kScratchRegister. |
+ push(r11); |
+ push(r12); |
+ // r13 is kRootRegister. |
+ push(r14); |
+ // r15 is kSmiConstantRegister |
+} |
+ |
+ |
+void MacroAssembler::Popad() { |
+ pop(r14); |
+ pop(r12); |
+ pop(r11); |
+ pop(r9); |
+ pop(r8); |
+ pop(rdi); |
+ pop(rsi); |
+ pop(rbx); |
+ pop(rdx); |
+ pop(rcx); |
+ pop(rax); |
+} |
+ |
+ |
void MacroAssembler::PushTryHandler(CodeLocation try_location, |
HandlerType type) { |
// Adjust this code if not the case. |