Signed-off-by: Tomek Grabiec <tgrab...@gmail.com> --- arch/x86/include/arch/instruction.h | 21 +++++++++++++++++---- 1 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/arch/x86/include/arch/instruction.h b/arch/x86/include/arch/instruction.h index 9140484..6a56b35 100644 --- a/arch/x86/include/arch/instruction.h +++ b/arch/x86/include/arch/instruction.h @@ -3,6 +3,7 @@ #include "jit/use-position.h" +#include "arch/init.h" #include "arch/stack-frame.h" #include "arch/registers.h" @@ -240,10 +241,16 @@ spill_insn(struct var_info *var, struct stack_slot *slot) assert(slot != NULL); - if (var->vm_type == J_FLOAT || var->vm_type == J_DOUBLE) + if (var->vm_type == J_FLOAT) { insn_type = INSN_MOV_XMM_MEMLOCAL; - else + } else if (var->vm_type == J_DOUBLE) { + if (cpu_has(X86_FEATURE_SSE2)) + insn_type = INSN_MOV_64_XMM_MEMLOCAL; + else + error("not implemented"); + } else { insn_type = INSN_MOV_REG_MEMLOCAL; + } return reg_memlocal_insn(insn_type, var, slot); } @@ -255,10 +262,16 @@ reload_insn(struct stack_slot *slot, struct var_info *var) assert(slot != NULL); - if (var->vm_type == J_FLOAT || var->vm_type == J_DOUBLE) + if (var->vm_type == J_FLOAT) { insn_type = INSN_MOV_MEMLOCAL_XMM; - else + } else if (var->vm_type == J_DOUBLE) { + if (cpu_has(X86_FEATURE_SSE2)) + insn_type = INSN_MOV_64_MEMLOCAL_XMM; + else + error("not implemented"); + } else { insn_type = INSN_MOV_MEMLOCAL_REG; + } return memlocal_reg_insn(insn_type, slot, var); } -- 1.6.0.6 ------------------------------------------------------------------------------ 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