rendered paste body# HG changeset patch# Parent 3700c42a8e822845725a670f9163b63eef9ff929[JAEGER] Add support for PUSHA/POPA/emulation for X86/X86_64 to masm.diff --git a/js/src/assembler/assembler/MacroAssemblerX86.h b/js/src/assembler/assembler/MacroAssemblerX86.h--- 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--- 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--- 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()