From 9a79fa072dec00d41083ed4241522177668b1fc8 Mon Sep 17 00:00:00 2001 From: Andrew Drake Date: Thu, 29 Jul 2010 01:36:31 -0700 Subject: [PATCH] [JAEGER] Add support for PUSHA/POPA/emulation for X86/X86_64 to masm. --- js/src/assembler/assembler/MacroAssemblerX86.h | 10 ++++++++++ js/src/assembler/assembler/MacroAssemblerX86_64.h | 12 ++++++++++++ js/src/assembler/assembler/X86Assembler.h | 18 ++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/js/src/assembler/assembler/MacroAssemblerX86.h b/js/src/assembler/assembler/MacroAssemblerX86.h index 7a952e8531..5213213c11 100644 --- a/js/src/assembler/assembler/MacroAssemblerX86.h +++ b/js/src/assembler/assembler/MacroAssemblerX86.h @@ -183,6 +183,16 @@ public: return label; } + void pushAllRegs() + { + m_assembler.pusha(); + } + + void popAllRegs() + { + m_assembler.popa(); + } + bool supportsFloatingPoint() const { return m_isSSE2Present; } // See comment on MacroAssemblerARMv7::supportsFloatingPointTruncate() bool supportsFloatingPointTruncate() const { return m_isSSE2Present; } diff --git a/js/src/assembler/assembler/MacroAssemblerX86_64.h b/js/src/assembler/assembler/MacroAssemblerX86_64.h index 3be6cf2db9..c48c515cb7 100644 --- a/js/src/assembler/assembler/MacroAssemblerX86_64.h +++ b/js/src/assembler/assembler/MacroAssemblerX86_64.h @@ -509,6 +509,18 @@ public: return label; } + void pushAllRegs() + { + for (int i = X86Registers::eax; i <= X86Registers::r15; i++) + m_assembler.push_r((RegisterID)i); + } + + void popAllRegs() + { + for (int i = X86Registers::r15; i >= X86Registers::eax; i--) + m_assembler.pop_r((RegisterID)i); + } + bool supportsFloatingPoint() const { return true; } // See comment on MacroAssemblerARMv7::supportsFloatingPointTruncate() bool supportsFloatingPointTruncate() const { return true; } diff --git a/js/src/assembler/assembler/X86Assembler.h b/js/src/assembler/assembler/X86Assembler.h index faa172a63b..b641326196 100644 --- a/js/src/assembler/assembler/X86Assembler.h +++ b/js/src/assembler/assembler/X86Assembler.h @@ -195,6 +195,10 @@ private: #endif OP_PUSH_EAX = 0x50, OP_POP_EAX = 0x58, +#if WTF_CPU_X86 + OP_PUSHA = 0x60, + OP_POPA = 0x61, +#endif #if WTF_CPU_X86_64 OP_MOVSXD_GvEv = 0x63, #endif @@ -2022,6 +2026,20 @@ public: m_formatter.prefix(PRE_PREDICT_BRANCH_NOT_TAKEN); } +#if WTF_CPU_X86 + void pusha() + { + js::JaegerSpew(js::JSpew_Insns, IPFX "pusha\n", MAYBE_PAD); + m_formatter.oneByteOp(OP_PUSHA); + } + + void popa() + { + js::JaegerSpew(js::JSpew_Insns, IPFX "popa\n", MAYBE_PAD); + m_formatter.oneByteOp(OP_POPA); + } +#endif + // Assembler admin methods: JmpDst label() -- 2.11.4.GIT