They will be needed when EXPR_LOCAL will be replaced with EXPR_TEMPORARY Signed-off-by: Tomek Grabiec <tgrab...@gmail.com> --- arch/x86/insn-selector_32.brg | 57 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 57 insertions(+), 0 deletions(-)
diff --git a/arch/x86/insn-selector_32.brg b/arch/x86/insn-selector_32.brg index d385ca8..ffcd954 100644 --- a/arch/x86/insn-selector_32.brg +++ b/arch/x86/insn-selector_32.brg @@ -414,6 +414,18 @@ reg: OP_SHR(reg, EXPR_LOCAL) 1 shift_reg_local(state, s, tree, INSN_SAR_REG_REG); } +reg: OP_SHR(reg, reg) 1 +{ + struct var_info *ecx; + + ecx = get_fixed_var(s->b_parent, REG_ECX); + + state->reg1 = state->left->reg1; + + select_insn(s, tree, reg_reg_insn(INSN_MOV_REG_REG, state->right->reg1, ecx)); + select_insn(s, tree, reg_reg_insn(INSN_SAR_REG_REG, ecx, state->left->reg1)); +} + reg: OP_SHR_64(reg, reg) 1 { assert(!"SHR_64 todo"); @@ -424,6 +436,18 @@ reg: OP_USHR(reg, EXPR_LOCAL) 1 shift_reg_local(state, s, tree, INSN_SHR_REG_REG); } +reg: OP_USHR(reg, reg) 1 +{ + struct var_info *ecx; + + ecx = get_fixed_var(s->b_parent, REG_ECX); + + state->reg1 = state->left->reg1; + + select_insn(s, tree, reg_reg_insn(INSN_MOV_REG_REG, state->right->reg1, ecx)); + select_insn(s, tree, reg_reg_insn(INSN_SHR_REG_REG, ecx, state->left->reg1)); +} + reg: OP_USHR_64(reg, reg) 1 { assert(!"USHR_64 todo"); @@ -435,13 +459,31 @@ reg: OP_OR(reg, EXPR_LOCAL) 1 expr = to_expr(tree); + state->reg1 = state->left->reg1; + binop_reg_local_low(state, s, tree, INSN_OR_MEMBASE_REG); if (expr->vm_type == J_LONG) { + state->reg2 = state->left->reg2; binop_reg_local_high(state, s, tree, INSN_OR_MEMBASE_REG); } } +reg: OP_OR(reg, reg) 1 +{ + struct expression *expr; + + expr = to_expr(tree); + + state->reg1 = state->left->reg1; + binop_reg_reg_low(state, s, tree, INSN_OR_REG_REG); + + if (expr->vm_type == J_LONG) { + state->reg2 = state->left->reg2; + binop_reg_reg_high(state, s, tree, INSN_OR_REG_REG); + } +} + reg: OP_AND(reg, EXPR_LOCAL) 1 { struct expression *expr; @@ -483,6 +525,21 @@ reg: OP_XOR(reg, EXPR_LOCAL) 1 } } +reg: OP_XOR(reg, reg) 1 +{ + struct expression *expr; + + expr = to_expr(tree); + + state->reg1 = state->left->reg1; + binop_reg_reg_low(state, s, tree, INSN_XOR_REG_REG); + + if (expr->vm_type == J_LONG) { + state->reg2 = state->left->reg2; + binop_reg_reg_high(state, s, tree, INSN_XOR_REG_REG); + } +} + reg: EXPR_INVOKE(arg) 1 { struct var_info *eax, *edx = NULL; -- 1.6.0.6 ------------------------------------------------------------------------------ _______________________________________________ Jatovm-devel mailing list Jatovm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jatovm-devel