It is necessary for System.out.println

Signed-off-by: Arthur HUILLET <arthur.huil...@free.fr>
---
 arch/x86/emit-code.c                |    7 +++++++
 arch/x86/include/arch/instruction.h |    1 +
 arch/x86/insn-selector_32.brg       |   15 +++++++++++++++
 arch/x86/lir-printer.c              |    7 +++++++
 arch/x86/use-def.c                  |    1 +
 5 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/arch/x86/emit-code.c b/arch/x86/emit-code.c
index d66d9f0..3033adb 100644
--- a/arch/x86/emit-code.c
+++ b/arch/x86/emit-code.c
@@ -759,6 +759,12 @@ static void emit_add_membase_reg(struct buffer *buf,
        emit_membase_reg(buf, 0x03, src, dest);
 }
 
+static void emit_and_reg_reg(struct buffer *buf,
+                            struct operand *src, struct operand *dest)
+{
+       emit_reg_reg(buf, 0x23, dest, src);
+}
+
 static void emit_and_membase_reg(struct buffer *buf,
                                 struct operand *src, struct operand *dest)
 {
@@ -1003,6 +1009,7 @@ struct emitter emitters[] = {
        DECL_EMITTER(INSN_ADD_MEMBASE_REG, emit_add_membase_reg, TWO_OPERANDS),
        DECL_EMITTER(INSN_ADD_REG_REG, emit_add_reg_reg, TWO_OPERANDS),
        DECL_EMITTER(INSN_AND_MEMBASE_REG, emit_and_membase_reg, TWO_OPERANDS),
+       DECL_EMITTER(INSN_AND_REG_REG, emit_and_reg_reg, TWO_OPERANDS),
        DECL_EMITTER(INSN_CALL_REG, emit_indirect_call, SINGLE_OPERAND),
        DECL_EMITTER(INSN_CLTD_REG_REG, emit_cltd_reg_reg, TWO_OPERANDS),
        DECL_EMITTER(INSN_CMP_IMM_REG, emit_cmp_imm_reg, TWO_OPERANDS),
diff --git a/arch/x86/include/arch/instruction.h 
b/arch/x86/include/arch/instruction.h
index 5e38144..8355a63 100644
--- a/arch/x86/include/arch/instruction.h
+++ b/arch/x86/include/arch/instruction.h
@@ -61,6 +61,7 @@ enum insn_type {
        INSN_ADD_MEMBASE_REG,
        INSN_ADD_REG_REG,
        INSN_AND_MEMBASE_REG,
+       INSN_AND_REG_REG,
        INSN_CALL_REG,
        INSN_CALL_REL,
        INSN_CLTD_REG_REG,      /* CDQ in Intel manuals*/
diff --git a/arch/x86/insn-selector_32.brg b/arch/x86/insn-selector_32.brg
index fce1f50..bbe0f9e 100644
--- a/arch/x86/insn-selector_32.brg
+++ b/arch/x86/insn-selector_32.brg
@@ -432,6 +432,21 @@ reg:       OP_AND(reg, EXPR_LOCAL) 1
        }
 }
 
+reg:   OP_AND(reg, reg) 1
+{
+       struct expression *expr;
+
+       expr = to_expr(tree);
+
+       state->reg1 = state->left->reg1;
+       binop_reg_reg_low(state, s, tree, INSN_AND_REG_REG);
+
+       if (expr->vm_type == J_LONG) {
+               state->reg2 = state->left->reg2;
+               binop_reg_reg_high(state, s, tree, INSN_AND_REG_REG);
+       }
+}
+
 reg:   OP_XOR(reg, EXPR_LOCAL) 1
 {
        struct expression *expr;
diff --git a/arch/x86/lir-printer.c b/arch/x86/lir-printer.c
index 195f80e..31c89f6 100644
--- a/arch/x86/lir-printer.c
+++ b/arch/x86/lir-printer.c
@@ -196,6 +196,12 @@ static int print_and_membase_reg(struct string *str, 
struct insn *insn)
        return print_membase_reg(str, insn);
 }
 
+static int print_and_reg_reg(struct string *str, struct insn *insn)
+{
+       print_func_name(str);
+       return print_reg_reg(str, insn);
+}
+
 static int print_call_reg(struct string *str, struct insn *insn)
 {
        print_func_name(str);
@@ -501,6 +507,7 @@ static print_insn_fn insn_printers[] = {
        [INSN_ADD_MEMBASE_REG] = print_add_membase_reg,
        [INSN_ADD_REG_REG] = print_add_reg_reg,
        [INSN_AND_MEMBASE_REG] = print_and_membase_reg,
+       [INSN_AND_REG_REG] = print_and_reg_reg,
        [INSN_CALL_REG] = print_call_reg,
        [INSN_CALL_REL] = print_call_rel,
        [INSN_CLTD_REG_REG] = print_cltd_reg_reg,       /* CDQ in Intel 
manuals*/
diff --git a/arch/x86/use-def.c b/arch/x86/use-def.c
index 95342ad..38a4ef4 100644
--- a/arch/x86/use-def.c
+++ b/arch/x86/use-def.c
@@ -37,6 +37,7 @@ static struct insn_info insn_infos[] = {
        DECLARE_INFO(INSN_ADD_MEMBASE_REG, USE_SRC | DEF_DST),
        DECLARE_INFO(INSN_ADD_REG_REG, USE_SRC | DEF_DST),
        DECLARE_INFO(INSN_AND_MEMBASE_REG, USE_SRC | DEF_DST),
+       DECLARE_INFO(INSN_AND_REG_REG, USE_SRC | DEF_DST),
        DECLARE_INFO(INSN_CALL_REG, USE_SRC | DEF_EAX | DEF_ECX | DEF_EDX),
        DECLARE_INFO(INSN_CALL_REL, USE_NONE | DEF_EAX | DEF_ECX | DEF_EDX),
        DECLARE_INFO(INSN_CLTD_REG_REG, USE_SRC | DEF_SRC | DEF_DST),
-- 
1.6.2.2



------------------------------------------------------------------------------
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to