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