Signed-off-by: Tomek Grabiec <tgrab...@gmail.com>
---
 arch/x86/emit-code.c                |   24 ++++++++++++++++++++++++
 arch/x86/include/arch/instruction.h |    4 ++++
 arch/x86/lir-printer.c              |   28 ++++++++++++++++++++++++++++
 arch/x86/use-def.c                  |   12 ++++++++----
 4 files changed, 64 insertions(+), 4 deletions(-)

diff --git a/arch/x86/emit-code.c b/arch/x86/emit-code.c
index e1eb5ba..e84e725 100644
--- a/arch/x86/emit-code.c
+++ b/arch/x86/emit-code.c
@@ -1154,6 +1154,16 @@ static void emit_fld_64_membase(struct buffer *buf, 
struct operand *src)
        __emit_membase(buf, 0xdd, mach_reg(&src->base_reg), src->disp, 0);
 }
 
+static void emit_fld_memlocal(struct buffer *buf, struct operand *src)
+{
+       __emit_membase(buf, 0xd9, MACH_REG_EBP, slot_offset(src->slot), 0);
+}
+
+static void emit_fld_64_memlocal(struct buffer *buf, struct operand *src)
+{
+       __emit_membase(buf, 0xdd, MACH_REG_EBP, slot_offset_64(src->slot), 0);
+}
+
 static void emit_fild_64_membase(struct buffer *buf, struct operand *src)
 {
        __emit_membase(buf, 0xdf, mach_reg(&src->base_reg), src->disp, 5);
@@ -1179,11 +1189,21 @@ static void emit_fstp_membase(struct buffer *buf, 
struct operand *dest)
        __emit_membase(buf, 0xd9, mach_reg(&dest->base_reg), dest->disp, 3);
 }
 
+static void emit_fstp_memlocal(struct buffer *buf, struct operand *dest)
+{
+       __emit_membase(buf, 0xd9, MACH_REG_EBP, slot_offset(dest->slot), 3);
+}
+
 static void emit_fstp_64_membase(struct buffer *buf, struct operand *dest)
 {
        __emit_membase(buf, 0xdd, mach_reg(&dest->base_reg), dest->disp, 3);
 }
 
+static void emit_fstp_64_memlocal(struct buffer *buf, struct operand *dest)
+{
+       __emit_membase(buf, 0xdd, MACH_REG_EBP, slot_offset_64(dest->slot), 3);
+}
+
 static void emit_add_membase_reg(struct buffer *buf,
                                 struct operand *src, struct operand *dest)
 {
@@ -1680,13 +1700,17 @@ struct emitter emitters[] = {
        DECL_EMITTER(INSN_FDIV_REG_REG, emit_fdiv_reg_reg, TWO_OPERANDS),
        DECL_EMITTER(INSN_FDIV_64_REG_REG, emit_fdiv_64_reg_reg, TWO_OPERANDS),
        DECL_EMITTER(INSN_FLD_MEMBASE, emit_fld_membase, TWO_OPERANDS),
+       DECL_EMITTER(INSN_FLD_MEMLOCAL, emit_fld_memlocal, TWO_OPERANDS),
        DECL_EMITTER(INSN_FLD_64_MEMBASE, emit_fld_64_membase, TWO_OPERANDS),
+       DECL_EMITTER(INSN_FLD_64_MEMLOCAL, emit_fld_64_memlocal, TWO_OPERANDS),
        DECL_EMITTER(INSN_FLDCW_MEMBASE, emit_fldcw_membase, SINGLE_OPERAND),
        DECL_EMITTER(INSN_FILD_64_MEMBASE, emit_fild_64_membase, TWO_OPERANDS),
        DECL_EMITTER(INSN_FISTP_64_MEMBASE, emit_fistp_64_membase, 
SINGLE_OPERAND),
        DECL_EMITTER(INSN_FNSTCW_MEMBASE, emit_fnstcw_membase, SINGLE_OPERAND),
        DECL_EMITTER(INSN_FSTP_MEMBASE, emit_fstp_membase, TWO_OPERANDS),
+       DECL_EMITTER(INSN_FSTP_MEMLOCAL, emit_fstp_memlocal, TWO_OPERANDS),
        DECL_EMITTER(INSN_FSTP_64_MEMBASE, emit_fstp_64_membase, TWO_OPERANDS),
+       DECL_EMITTER(INSN_FSTP_64_MEMLOCAL, emit_fstp_64_memlocal, 
TWO_OPERANDS),
        DECL_EMITTER(INSN_CONV_GPR_TO_FPU, emit_conv_gpr_to_fpu, TWO_OPERANDS),
        DECL_EMITTER(INSN_CONV_GPR_TO_FPU64, emit_conv_gpr_to_fpu64, 
TWO_OPERANDS),
        DECL_EMITTER(INSN_CONV_FPU_TO_GPR, emit_conv_fpu_to_gpr, TWO_OPERANDS),
diff --git a/arch/x86/include/arch/instruction.h 
b/arch/x86/include/arch/instruction.h
index 0186745..50c6678 100644
--- a/arch/x86/include/arch/instruction.h
+++ b/arch/x86/include/arch/instruction.h
@@ -87,13 +87,17 @@ enum insn_type {
        INSN_FSUB_REG_REG,
        INSN_FSUB_64_REG_REG,
        INSN_FLD_MEMBASE,
+       INSN_FLD_MEMLOCAL,
        INSN_FLD_64_MEMBASE,
+       INSN_FLD_64_MEMLOCAL,
        INSN_FLDCW_MEMBASE,
        INSN_FILD_64_MEMBASE,
        INSN_FISTP_64_MEMBASE,
        INSN_FNSTCW_MEMBASE,
        INSN_FSTP_MEMBASE,
+       INSN_FSTP_MEMLOCAL,
        INSN_FSTP_64_MEMBASE,
+       INSN_FSTP_64_MEMLOCAL,
        INSN_CONV_FPU_TO_GPR,
        INSN_CONV_FPU64_TO_GPR,
        INSN_CONV_GPR_TO_FPU,
diff --git a/arch/x86/lir-printer.c b/arch/x86/lir-printer.c
index 2980771..ff2a11c 100644
--- a/arch/x86/lir-printer.c
+++ b/arch/x86/lir-printer.c
@@ -335,12 +335,24 @@ static int print_fld_membase(struct string *str, struct 
insn *insn)
        return print_membase(str, &insn->operand);
 }
 
+static int print_fld_memlocal(struct string *str, struct insn *insn)
+{
+       print_func_name(str);
+       return print_memlocal(str, &insn->operand);
+}
+
 static int print_fld_64_membase(struct string *str, struct insn *insn)
 {
        print_func_name(str);
        return print_membase(str, &insn->operand);
 }
 
+static int print_fld_64_memlocal(struct string *str, struct insn *insn)
+{
+       print_func_name(str);
+       return print_memlocal(str, &insn->operand);
+}
+
 static int print_fild_64_membase(struct string *str, struct insn *insn)
 {
        print_func_name(str);
@@ -359,6 +371,18 @@ static int print_fstp_64_membase(struct string *str, 
struct insn *insn)
        return print_membase(str, &insn->operand);
 }
 
+static int print_fstp_memlocal(struct string *str, struct insn *insn)
+{
+       print_func_name(str);
+       return print_memlocal(str, &insn->operand);
+}
+
+static int print_fstp_64_memlocal(struct string *str, struct insn *insn)
+{
+       print_func_name(str);
+       return print_memlocal(str, &insn->operand);
+}
+
 static int print_fnstcw_membase(struct string *str, struct insn *insn)
 {
        print_func_name(str);
@@ -975,13 +999,17 @@ static print_insn_fn insn_printers[] = {
        [INSN_FDIV_REG_REG] = print_fdiv_reg_reg,
        [INSN_FDIV_64_REG_REG] = print_fdiv_64_reg_reg,
        [INSN_FLD_MEMBASE] = print_fld_membase,
+       [INSN_FLD_MEMLOCAL] = print_fld_memlocal,
        [INSN_FLD_64_MEMBASE] = print_fld_64_membase,
+       [INSN_FLD_64_MEMLOCAL] = print_fld_64_memlocal,
        [INSN_FLDCW_MEMBASE] = print_fldcw_membase,
        [INSN_FILD_64_MEMBASE] = print_fild_64_membase,
        [INSN_FISTP_64_MEMBASE] = print_fistp_64_membase,
        [INSN_FNSTCW_MEMBASE] = print_fnstcw_membase,
        [INSN_FSTP_MEMBASE] = print_fstp_membase,
+       [INSN_FSTP_MEMLOCAL] = print_fstp_memlocal,
        [INSN_FSTP_64_MEMBASE] = print_fstp_64_membase,
+       [INSN_FSTP_64_MEMLOCAL] = print_fstp_64_memlocal,
        [INSN_MOV_MEMBASE_XMM] = print_mov_membase_xmm,
        [INSN_MOV_64_MEMBASE_XMM] = print_mov_64_membase_xmm,
        [INSN_MOV_XMM_MEMBASE] = print_mov_xmm_membase,
diff --git a/arch/x86/use-def.c b/arch/x86/use-def.c
index feffb5a..056e715 100644
--- a/arch/x86/use-def.c
+++ b/arch/x86/use-def.c
@@ -68,13 +68,17 @@ static struct insn_info insn_infos[] = {
        DECLARE_INFO(INSN_FDIV_REG_REG, USE_SRC | USE_DST | DEF_DST),
        DECLARE_INFO(INSN_FDIV_64_REG_REG, USE_SRC | USE_DST | DEF_DST),
        DECLARE_INFO(INSN_FLDCW_MEMBASE, USE_SRC | DEF_NONE),
-       DECLARE_INFO(INSN_FLD_MEMBASE, USE_SRC),
-       DECLARE_INFO(INSN_FLD_64_MEMBASE, USE_SRC),
+       DECLARE_INFO(INSN_FLD_MEMBASE, USE_SRC | DEF_NONE),
+       DECLARE_INFO(INSN_FLD_MEMLOCAL, USE_FP | DEF_NONE),
+       DECLARE_INFO(INSN_FLD_64_MEMBASE, USE_SRC | DEF_NONE),
+       DECLARE_INFO(INSN_FLD_64_MEMLOCAL, USE_FP | DEF_NONE),
        DECLARE_INFO(INSN_FILD_64_MEMBASE, USE_SRC),
        DECLARE_INFO(INSN_FISTP_64_MEMBASE, USE_SRC | DEF_NONE),
        DECLARE_INFO(INSN_FNSTCW_MEMBASE, USE_SRC | DEF_NONE),
-       DECLARE_INFO(INSN_FSTP_MEMBASE, USE_SRC),
-       DECLARE_INFO(INSN_FSTP_64_MEMBASE, USE_SRC),
+       DECLARE_INFO(INSN_FSTP_MEMBASE, USE_SRC | DEF_NONE),
+       DECLARE_INFO(INSN_FSTP_MEMLOCAL, USE_FP | DEF_NONE),
+       DECLARE_INFO(INSN_FSTP_64_MEMBASE, USE_SRC | DEF_NONE),
+       DECLARE_INFO(INSN_FSTP_64_MEMLOCAL, USE_FP | DEF_NONE),
        DECLARE_INFO(INSN_CONV_GPR_TO_FPU, USE_SRC | DEF_DST),
        DECLARE_INFO(INSN_CONV_GPR_TO_FPU64, USE_SRC | DEF_DST),
        DECLARE_INFO(INSN_CONV_FPU_TO_GPR, USE_SRC | DEF_DST),
-- 
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

Reply via email to