J_LONG values should be returned in a 64-bit register on x86-64. Signed-off-by: Eduard - Gabriel Munteanu <eduard.munte...@linux360.ro> --- arch/x86/insn-selector.brg | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/arch/x86/insn-selector.brg b/arch/x86/insn-selector.brg index 1848748..70b0592 100644 --- a/arch/x86/insn-selector.brg +++ b/arch/x86/insn-selector.brg @@ -1309,6 +1309,7 @@ reg: EXPR_EXCEPTION_REF select_insn(s, tree, memlocal_reg_insn(INSN_MOV_MEMLOCAL_REG, slot, result)); } +%ifdef CONFIG_X86_32 stmt: STMT_RETURN(reg) 1 { struct expression *expr; @@ -1331,6 +1332,23 @@ stmt: STMT_RETURN(reg) 1 select_insn(s, tree, branch_insn(INSN_JMP_BRANCH, s->b_parent->exit_bb)); } +%else +stmt: STMT_RETURN(reg) 1 +{ + struct expression *expr; + struct var_info *src, *eax; + + expr = to_expr(tree); + expr = to_expr(expr->unary_expression); + + eax = get_fixed_var(s->b_parent, REG_xAX); + src = state->left->reg1; + + select_insn(s, tree, reg_reg_insn(INSN_MOV_REG_REG, src, eax)); + + select_insn(s, tree, branch_insn(INSN_JMP_BRANCH, s->b_parent->exit_bb)); +} +%endif stmt: STMT_RETURN(freg) 1 { -- 1.6.0.6 ------------------------------------------------------------------------------ _______________________________________________ Jatovm-devel mailing list Jatovm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jatovm-devel