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

Reply via email to