From: Rhys Weatherley Date: Fri, 10 Sep 2004 03:01:24 +0000 (+0000) Subject: Pointer-relative loads and stores for structures in the x86 back end. X-Git-Tag: r.0.0.6~39 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=60dabef87c5e442c5a136d244ed8d557b2e9becd;p=francis%2Flibjit.git Pointer-relative loads and stores for structures in the x86 back end. --- diff --git a/ChangeLog b/ChangeLog index e86a900..f83863e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,9 @@ +2004-09-10 Rhys Weatherley + + * jit/jit-rules-x86.sel: pointer-relative loads and stores + for structures in the x86 back end. + 2004-09-09 Rhys Weatherley * jit/jit-rules-x86.c, jit/jit-rules-x86.sel: add some support diff --git a/jit/jit-rules-x86.sel b/jit/jit-rules-x86.sel index 0a30084..30aa4cc 100644 --- a/jit/jit-rules-x86.sel +++ b/jit/jit-rules-x86.sel @@ -2620,8 +2620,24 @@ JIT_OP_STORE_RELATIVE_NFLOAT: manual JIT_OP_STORE_RELATIVE_STRUCT: manual [] -> { - /* TODO */ - TODO(); + unsigned char *inst; + int reg = _jit_regs_load_value + (gen, insn->dest, 0, + (insn->flags & (JIT_INSN_DEST_NEXT_USE | + JIT_INSN_DEST_LIVE))); + _jit_regs_spill_all(gen); + _jit_gen_fix_value(insn->value1); + inst = gen->posn.ptr; + if(!jit_cache_check_for_n(&(gen->posn), 128)) + { + jit_cache_mark_full(&(gen->posn)); + return; + } + reg = _jit_reg_info[reg].cpu_reg; + inst = memory_copy(gen, inst, reg, (int)(insn->value2->address), + X86_EBP, insn->value1->frame_offset, + jit_type_get_size(jit_value_get_type(insn->value1))); + gen->posn.ptr = inst; } JIT_OP_ADD_RELATIVE: unary