Signed-off-by: Tomek Grabiec <tgrab...@gmail.com>
---
 arch/x86/insn-selector.brg |   30 ++++++++++++++++--------------
 1 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/arch/x86/insn-selector.brg b/arch/x86/insn-selector.brg
index 2e7367f..85f2fa6 100644
--- a/arch/x86/insn-selector.brg
+++ b/arch/x86/insn-selector.brg
@@ -494,10 +494,11 @@ freg:     OP_DREM(freg, freg) 1
        select_insn(s, tree, reg_membase_insn(INSN_MOV_64_XMM_MEMBASE, 
state->right->reg1, esp, 8));
 
        select_insn(s, tree, rel_insn(INSN_CALL_REL, (unsigned long)fmod));
-       method_args_cleanup(s, tree, 4);
 
-       select_insn(s, tree, membase_insn(INSN_FSTP_64_MEMBASE, esp, -8));
-       select_insn(s, tree, membase_reg_insn(INSN_MOV_64_MEMBASE_XMM, esp, -8, 
state->reg1));
+       select_insn(s, tree, membase_insn(INSN_FSTP_64_MEMBASE, esp, 0));
+       select_insn(s, tree, membase_reg_insn(INSN_MOV_64_MEMBASE_XMM, esp, 0, 
state->reg1));
+
+       method_args_cleanup(s, tree, 4);
 }
 
 freg:  OP_FREM(freg, freg) 1
@@ -514,10 +515,11 @@ freg:     OP_FREM(freg, freg) 1
        select_insn(s, tree, reg_membase_insn(INSN_MOV_XMM_MEMBASE, 
state->right->reg1, esp, 4));
 
        select_insn(s, tree, rel_insn(INSN_CALL_REL, (unsigned long)fmodf));
-       method_args_cleanup(s, tree, 2);
 
-       select_insn(s, tree, membase_insn(INSN_FSTP_MEMBASE, esp, -4));
-       select_insn(s, tree, membase_reg_insn(INSN_MOV_MEMBASE_XMM, esp, -4, 
state->reg1));
+       select_insn(s, tree, membase_insn(INSN_FSTP_MEMBASE, esp, 0));
+       select_insn(s, tree, membase_reg_insn(INSN_MOV_MEMBASE_XMM, esp, 0, 
state->reg1));
+
+       method_args_cleanup(s, tree, 2);
 }
 
 reg:   OP_REM_64(reg, reg) 1
@@ -1823,16 +1825,16 @@ arg:    EXPR_ARG(freg)
 
        size = get_vmtype_size(arg_expr->vm_type);
 
+       select_insn(s, tree, imm_reg_insn(INSN_SUB_IMM_REG, size, esp));
+
        if (arg_expr->vm_type == J_FLOAT) {
                select_insn(s, tree,
-                   reg_membase_insn(INSN_MOV_XMM_MEMBASE, src, esp, -size));
+                   reg_membase_insn(INSN_MOV_XMM_MEMBASE, src, esp, 0));
        } else {
                select_insn(s, tree,
-                   reg_membase_insn(INSN_MOV_64_XMM_MEMBASE, src, esp, -size));
+                   reg_membase_insn(INSN_MOV_64_XMM_MEMBASE, src, esp, 0));
        }
 
-       select_insn(s, tree, imm_reg_insn(INSN_SUB_IMM_REG, size, esp));
-
        state->reg1 = NULL;
 }
 %else
@@ -1877,12 +1879,12 @@ arg:    EXPR_ARG(freg)
        } else {
                int size = get_vmtype_size(arg_expr->vm_type);
 
+               select_insn(s, tree, imm_reg_insn(INSN_SUB_IMM_REG, size, esp));
+
                if (arg_expr->vm_type == J_FLOAT)
-                       select_insn(s, tree, 
reg_membase_insn(INSN_MOV_XMM_MEMBASE, src, esp, -size));
+                       select_insn(s, tree, 
reg_membase_insn(INSN_MOV_XMM_MEMBASE, src, esp, 0));
                else
-                       select_insn(s, tree, 
reg_membase_insn(INSN_MOV_64_XMM_MEMBASE, src, esp, -size));
-
-               select_insn(s, tree, imm_reg_insn(INSN_SUB_IMM_REG, size, esp));
+                       select_insn(s, tree, 
reg_membase_insn(INSN_MOV_64_XMM_MEMBASE, src, esp, 0));
        }
 
        state->reg1 = NULL;
-- 
1.6.3.3


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to