Signed-off-by: Tomek Grabiec <[email protected]>
---
 arch/x86/emit-code_32.c |   23 +++++++++++++++--------
 1 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/arch/x86/emit-code_32.c b/arch/x86/emit-code_32.c
index 162322a..2a9d29d 100644
--- a/arch/x86/emit-code_32.c
+++ b/arch/x86/emit-code_32.c
@@ -178,15 +178,14 @@ emit_reg_reg(struct buffer *buf, unsigned char opc,
        __emit_reg_reg(buf, opc, direct_reg, rm_reg);
 }
 
-static void 
-__emit_membase_reg(struct buffer *buf, unsigned char opc,
-                  enum machine_reg base_reg, unsigned long disp,
-                  enum machine_reg dest_reg)
+static void
+__emit_membase(struct buffer *buf, unsigned char opc,
+              enum machine_reg base_reg, unsigned long disp,
+              unsigned char reg_opcode)
 {
        unsigned char mod, rm, mod_rm;
        int needs_sib;
 
-
        needs_sib = (base_reg == REG_ESP);
 
        emit(buf, opc);
@@ -201,7 +200,7 @@ __emit_membase_reg(struct buffer *buf, unsigned char opc,
        else
                mod = 0x02;
 
-       mod_rm = encode_modrm(mod, __encode_reg(dest_reg), rm);
+       mod_rm = encode_modrm(mod, reg_opcode, rm);
        emit(buf, mod_rm);
 
        if (needs_sib)
@@ -210,6 +209,14 @@ __emit_membase_reg(struct buffer *buf, unsigned char opc,
        emit_imm(buf, disp);
 }
 
+static void
+__emit_membase_reg(struct buffer *buf, unsigned char opc,
+                  enum machine_reg base_reg, unsigned long disp,
+                  enum machine_reg dest_reg)
+{
+       __emit_membase(buf, opc, base_reg, disp, __encode_reg(dest_reg));
+}
+
 static void 
 emit_membase_reg(struct buffer *buf, unsigned char opc, struct operand *src,
                 struct operand *dest)
@@ -232,7 +239,7 @@ static void __emit_push_reg(struct buffer *buf, enum 
machine_reg reg)
 static void __emit_push_membase(struct buffer *buf, enum machine_reg src_reg,
                                unsigned long disp)
 {
-       __emit_membase_reg(buf, 0xff, src_reg, disp, REG_ESI);
+       __emit_membase(buf, 0xff, src_reg, disp, 6);
 }
 
 static void __emit_pop_reg(struct buffer *buf, enum machine_reg reg)
@@ -421,7 +428,7 @@ static void emit_pop_memlocal(struct buffer *buf, struct 
operand *operand)
 {
        unsigned long disp = slot_offset(operand->slot);
 
-       __emit_membase_reg(buf, 0x8f, REG_EBP, disp, 0);
+       __emit_membase(buf, 0x8f, REG_EBP, disp, 0);
 }
 
 static void emit_pop_reg(struct buffer *buf, struct operand *operand)
-- 
1.6.0.6


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables 
unlimited royalty-free distribution of the report engine 
for externally facing server and web deployment. 
http://p.sf.net/sfu/businessobjects
_______________________________________________
Jatovm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to