All pastes #1910794 Raw Edit

pushapopa

public diff v1 · immutable
#1910794 ·published 2010-07-29 08:37 UTC
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()