* src/vm/jit/powerpc/codegen.c (codegen): Changed signature to use
authortwisti <none@none>
Thu, 30 Mar 2006 11:59:46 +0000 (11:59 +0000)
committertwisti <none@none>
Thu, 30 Mar 2006 11:59:46 +0000 (11:59 +0000)
jitdata. Renamed reg_of_var by codegen_reg_of_var.
* src/vm/jit/powerpc/codegen.h (M_COPY): Likewise.

* src/vm/jit/powerpc/asmpart.S (vm/jit/abi.h): Changed to
vm/jit/abi-asm.h.
(asm_vm_call_method_exception_handler): Export it.
(asm_vm_call_method): Don't put label addresses into the
"data-segment", as it's located in the .text area and that may be
read-only. Changed to use PIC code. Linux stuff is still missing.

* src/vm/jit/powerpc/Makefile.am (DISASS_SOURCES): Added.
* src/vm/jit/powerpc/disass.c (regs): Removed.

src/vm/jit/powerpc/Makefile.am
src/vm/jit/powerpc/asmpart.S
src/vm/jit/powerpc/codegen.c
src/vm/jit/powerpc/codegen.h
src/vm/jit/powerpc/disass.c

index 9f50ce2af19773910c597413353c175de98c3b2d..af1c7ba9d06ff2c9946c2ad9c2e2e75defd7a8ab 100644 (file)
@@ -28,7 +28,7 @@
 ##
 ## Changes:
 ##
-## $Id: Makefile.am 4563 2006-03-06 13:03:05Z twisti $
+## $Id: Makefile.am 4712 2006-03-30 11:59:46Z twisti $
 
 ## Process this file with automake to produce Makefile.in
 
@@ -53,11 +53,16 @@ noinst_HEADERS = \
 
 noinst_LTLIBRARIES = libarch.la
 
+if ENABLE_DISASSEMBLER
+DISASS_SOURCES = \
+       disass.c
+endif
+
 libarch_la_SOURCES = \
        asmpart.S \
        codegen.c \
        codegen.h \
-       disass.c \
+       $(DISASS_SOURCES) \
        md.c \
        patcher.c
 
index ca493baaa21e82a676ddb8f38ec232bb3ce97c35..70fc7338c5cdfbcb330d6df36d971f3ff2fbb3bf 100644 (file)
@@ -29,9 +29,9 @@
             Stefan Ring
 
    Changes: Christian Thalinger
-                       Edwin Steiner
+            Edwin Steiner
 
-   $Id: asmpart.S 4654 2006-03-19 19:46:11Z edwin $
+   $Id: asmpart.S 4712 2006-03-30 11:59:46Z twisti $
 
 */
 
@@ -41,7 +41,7 @@
 #include "md-abi.h"
 #include "md-asm.h"
 
-#include "vm/jit/abi.h"
+#include "vm/jit/abi-asm.h"
 #include "vm/jit/methodheader.h"
 #include "vm/jit/powerpc/offsets.h"
 
@@ -59,6 +59,8 @@
        .globl asm_vm_call_method_float
        .globl asm_vm_call_method_double
 
+       .globl asm_vm_call_method_exception_handler
+
        .globl asm_call_jit_compiler
 
        .globl asm_handle_nat_exception
 *         void *arg1, void *arg2, void *arg3, void *arg4);                     *
 *                                                                              *
 *******************************************************************************/
-               
+
        .align 2
 
        .long   0                         /* catch type all                       */
-       .long   calljava_xhandler2        /* handler pc                           */
-       .long   calljava_xhandler2        /* end pc                               */
-       .long   L_asm_vm_call_method      /* start pc                             */
+       .long   0                         /* exception handler pc                 */
+       .long   0                         /* end pc                               */
+       .long   0                         /* start pc                             */
        .long   1                         /* extable size                         */
        .long   0                         /* line number table start              */
        .long   0                         /* line number table size               */
@@ -112,7 +114,6 @@ asm_vm_call_method_int:
 asm_vm_call_method_long:
 asm_vm_call_method_float:
 asm_vm_call_method_double:
-L_asm_vm_call_method:                 /* required for PIC code                */
        mflr    r0
        stw     r0,LA_LR_OFFSET(r1)
        stwu    r1,-40*4(r1)
@@ -152,8 +153,14 @@ L_asm_vm_call_method:                 /* required for PIC code                */
 
        addi    itmp1,itmp1,-sizevmarg    /* initialize pointer (smaller code)    */
        addi    itmp2,itmp2,1             /* initialize argument count            */
-       li      r17,0                     /* initialize integer argument counter  */
-       li      r18,0                     /* initialize float argument counter    */
+       li      t0,0                      /* initialize integer argument counter  */
+       li      t1,0                      /* initialize float argument counter    */
+
+       mflr    r0                        /* save link register (PIC code)        */
+       bl      L_asm_vm_call_method_get_pc
+L_asm_vm_call_method_get_pc:
+       mflr    t3                        /* t3 contains the current pc           */
+       mtlr    r0
 
 L_register_copy:
        addi    itmp1,itmp1,sizevmarg     /* goto next argument block             */
@@ -169,7 +176,7 @@ L_register_copy:
        andi.   r0,itmp3,0x0002           /* is this a float/double type?         */
        bne     L_register_handle_float
 
-       cmpwi   r17,INT_ARG_CNT           /* are we out of integer argument       */
+       cmpwi   t0,INT_ARG_CNT            /* are we out of integer argument       */
        beq     L_register_copy           /* registers? yes, next loop            */
 
        andi.   r0,itmp3,0x0001           /* is this a long type?                 */
@@ -177,34 +184,34 @@ L_register_copy:
 
 L_register_handle_int:
 #if defined(__DARWIN__)
-       lis     itmp3,ha16(jumptable_int)
-       addi    itmp3,itmp3,lo16(jumptable_int)
+       addis   itmp3,t3,ha16(L_jumptable_int - L_asm_vm_call_method_get_pc)
+       la      itmp3,lo16(L_jumptable_int - L_asm_vm_call_method_get_pc)(itmp3)
 #else
-       lis     itmp3,jumptable_int@ha
-       addi    itmp3,itmp3,jumptable_int@l
+       lis     itmp3,L_jumptable_int@ha
+       addi    itmp3,itmp3,L_jumptable_int@l
 #endif
-       slwi    r19,r17,2                 /* multiple of 4-bytes                  */
-       add     itmp3,itmp3,r19           /* calculate address of jumptable       */
+       slwi    t2,t0,2                   /* multiple of 4-bytes                  */
+       add     itmp3,itmp3,t2            /* calculate address of jumptable       */
        lwz     itmp3,0(itmp3)            /* load function address                */
-       addi    r17,r17,1                 /* integer argument counter + 1         */
+       addi    t0,t0,1                   /* integer argument counter + 1         */
        mtctr   itmp3
        bctr
 
 L_register_handle_long:
 #if defined(__DARWIN__)
-       lis     itmp3,ha16(jumptable_long)
-       addi    itmp3,itmp3,lo16(jumptable_long)
+       addis   itmp3,t3,ha16(L_jumptable_long - L_asm_vm_call_method_get_pc)
+       la      itmp3,lo16(L_jumptable_long - L_asm_vm_call_method_get_pc)(itmp3)
 #else
-       lis     itmp3,jumptable_long@ha
-       addi    itmp3,itmp3,jumptable_long@l
+       lis     itmp3,L_jumptable_long@ha
+       addi    itmp3,itmp3,L_jumptable_long@l
 #endif
-       addi    r19,r17,1                 /* align to even numbers                */
-       srwi    r19,r19,1
-       slwi    r19,r19,1
-       slwi    r19,r19,2                 /* multiple of 4-bytes                  */
-       add     itmp3,itmp3,r19           /* calculate address of jumptable       */
+       addi    t2,t0,1                   /* align to even numbers                */
+       srwi    t2,t2,1
+       slwi    t2,t2,1
+       slwi    t2,t2,2                   /* multiple of 4-bytes                  */
+       add     itmp3,itmp3,t2            /* calculate address of jumptable       */
        lwz     itmp3,0(itmp3)            /* load function address                */
-       addi    r17,r17,1                 /* integer argument counter + 1         */
+       addi    t0,t0,1                   /* integer argument counter + 1         */
        mtctr   itmp3
        bctr
 
@@ -215,8 +222,8 @@ L_stack_copy_done:
        lwz     itmp1,9*4(sp)             /* pass method pointer via tmp1         */
 
 #if defined(__DARWIN__)
-       lis     mptr,ha16(L_asm_call_jit_compiler)
-       addi    mptr,mptr,lo16(L_asm_call_jit_compiler)
+       addis   mptr,t3,ha16(L_asm_call_jit_compiler - L_asm_vm_call_method_get_pc)
+       la      mptr,lo16(L_asm_call_jit_compiler - L_asm_vm_call_method_get_pc)(mptr)
 #else
        lis     mptr,L_asm_call_jit_compiler@ha
        addi    mptr,mptr,L_asm_call_jit_compiler@l
@@ -230,9 +237,9 @@ L_stack_copy_done:
 1:
        mflr    itmp1
 #if defined(__DARWIN__)
-       addi    pv,itmp1,lo16(L_asm_vm_call_method-1b)
+       addi    pv,itmp1,lo16(asm_vm_call_method-1b)
 #else
-       addi    pv,itmp1,(L_asm_vm_call_method-1b)@l
+       addi    pv,itmp1,(asm_vm_call_method-1b)@l
 #endif
 
 L_asm_vm_call_method_return:
@@ -269,14 +276,19 @@ L_asm_vm_call_method_return:
        addi    r1,r1,40*4
        blr
 
-calljava_xhandler2:
+asm_vm_call_method_exception_handler:
+#if !defined(NDEBUG)
        mr      r3,itmp1
-       bl      builtin_throw_exception
+       bl      L_builtin_throw_exception$stub
+#endif
        li      v0,0                      /* return NULL                          */
        b       L_asm_vm_call_method_return
 
 
-jumptable_int:
+       .data
+       .align  2
+
+L_jumptable_int:
        .long   L_handle_a0
        .long   L_handle_a1
        .long   L_handle_a2
@@ -286,6 +298,9 @@ jumptable_int:
        .long   L_handle_a6
        .long   L_handle_a7
 
+       .text
+       .align  2
+
 L_handle_a0:
        lwz     a0,offvmargdata+4(itmp1)
        b       L_register_copy
@@ -312,7 +327,10 @@ L_handle_a7:
        b       L_register_copy
 
 
-jumptable_long:
+       .data
+       .align  2
+
+L_jumptable_long:
 #if defined(__DARWIN__)
 #else
        /* we have two entries here, so we get the even argument register
@@ -328,6 +346,9 @@ jumptable_long:
        .long   0
 #endif
 
+       .text
+       .align  2
+
 L_handle_a0_a1:
        lwz     a0,offvmargdata+0(itmp1)
        lwz     a1,offvmargdata+4(itmp1)
@@ -411,14 +432,14 @@ noregchange:
        addi    a2,sp,(LA_SIZE + 5*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8 + 3*4)+sizestackframeinfo
        lwz     a3,(LA_SIZE + 5*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8 + 3*4)+sizestackframeinfo+LA_LR_OFFSET(sp)
        mr      a4,a3                       /* xpc is equal to ra                 */
-       bl      stacktrace_create_extern_stackframeinfo
+       bl      L_stacktrace_create_extern_stackframeinfo$stub
 
        lwz     a0,(LA_SIZE + 5*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8 + 1*4)(r1)
-       bl      jit_compile                 /* compile the Java method            */
+       bl      L_jit_compile$stub          /* compile the Java method            */
        mr      pv,r3                       /* move address to pv register        */
 
        addi    a0,sp,(LA_SIZE + 5*4 + INT_ARG_CNT*4 + FLT_ARG_CNT*8 + 3*4)
-       bl      stacktrace_remove_stackframeinfo
+       bl      L_stacktrace_remove_stackframeinfo$stub
 
 #if defined(__DARWIN__)
        lwz     a0,(LA_WORD_SIZE+5+0)*4(r1)
@@ -469,13 +490,14 @@ L_asm_call_jit_compiler_exception:
        mflr    r0
        stw     r0,LA_LR_OFFSET(sp)
        stwu    sp,-LA_SIZE_ALIGNED(sp)     /* preserve linkage area              */
-       bl      builtin_asm_get_exceptionptrptr
+       bl      L_builtin_asm_get_exceptionptrptr$stub
        lwz     r0,LA_SIZE_ALIGNED+LA_LR_OFFSET(sp)
        mtlr    r0      
        addi    sp,sp,LA_SIZE_ALIGNED
 #else
 # if defined(__DARWIN__)
-       lwz     v0,lo16(_no_threads_exceptionptr-0b)(pv)
+       lis     v0,ha16(_no_threads_exceptionptr)
+       addi    v0,v0,lo16(_no_threads_exceptionptr)
 # else
        lis     v0,_no_threads_exceptionptr@ha
        addi    v0,v0,_no_threads_exceptionptr@l
@@ -544,7 +566,7 @@ L_asm_handle_exception_stack_loop:
        mr      a1,xpc                      /* pass exception pc                  */
        mr      a2,pv                       /* pass data segment pointer          */
                                            /* a3 is still set                    */
-       bl      exceptions_handle_exception
+       bl      L_exceptions_handle_exception$stub
 
        mr.     v0,v0
        beq     L_asm_handle_exception_not_catched
@@ -745,7 +767,7 @@ asm_wrapper_patcher:
        addi    a2,sp,(8+LA_WORD_SIZE+5+58)*4+sizestackframeinfo
        mr      a3,r0                       /* this is correct for leafs          */
        lwz     a4,((5+LA_WORD_SIZE+5+58)*4+sizestackframeinfo)(sp) /* pass xpc   */
-       bl      stacktrace_create_extern_stackframeinfo
+       bl      L_stacktrace_create_extern_stackframeinfo$stub
 
        addi    a0,sp,(0+LA_WORD_SIZE+5+58)*4+sizestackframeinfo  /* pass sp      */
        lwz     pv,(0+LA_WORD_SIZE+5+58)*4+sizestackframeinfo(sp) /* get function */
@@ -756,7 +778,7 @@ asm_wrapper_patcher:
        stw     v0,LA_SIZE+(5+57)*4(sp)     /* save return value                  */
 
        addi    a0,sp,LA_SIZE+(5+58)*4
-       bl      stacktrace_remove_stackframeinfo /* remove stackframe info        */
+       bl      L_stacktrace_remove_stackframeinfo$stub /* remove stackframe info */
 
 #if defined(__DARWIN__)
        lwz     a0,LA_SIZE+(5+0)*4(r1)
@@ -831,14 +853,15 @@ L_asm_wrapper_patcher_exception:
        stw     r0,LA_LR_OFFSET(sp)
        stwu    sp,-(LA_SIZE+1*4)(sp) /* preserve linkage area                    */
        stw     xpc,LA_SIZE+0*4(sp)
-       bl      builtin_asm_get_exceptionptrptr
+       bl      L_builtin_asm_get_exceptionptrptr$stub
        lwz     xpc,LA_SIZE+0*4(sp)
        lwz     r0,LA_SIZE+1*4+LA_LR_OFFSET(sp)
        mtlr    r0
        addi    sp,sp,LA_SIZE+1*4
 #else
 # if defined(__DARWIN__)
-       lwz     v0,lo16(_no_threads_exceptionptr-0b)(pv)
+       lis     v0,ha16(_no_threads_exceptionptr)
+       addi    v0,v0,lo16(_no_threads_exceptionptr)
 # else
        lis     v0,_no_threads_exceptionptr@ha
        addi    v0,v0,_no_threads_exceptionptr@l
@@ -955,9 +978,9 @@ asm_replacement_out:
 
        /* call replace_me */
        lwz     a0,-(4*4)(itmp1)            /* arg0: rplpoint *                   */
-    mr      a1,sp                       /* arg1: execution state              */
+       mr      a1,sp                       /* arg1: execution state              */
        addi    sp,sp,-(LA_SIZE_ALIGNED)
-    b       replace_me                  /* call C function replace_me         */
+       b       L_replace_me$stub           /* call C function replace_me         */
 
 /* asm_replacement_in **********************************************************
 
@@ -1289,6 +1312,150 @@ asm_criticalsections:
        .long 0
 
 
+#if defined(__DARWIN__)
+
+.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
+       .align 2
+L_builtin_throw_exception$stub:
+       .indirect_symbol _builtin_throw_exception
+       mflr r0
+       bcl 20,31,L00$_builtin_throw_exception
+L00$_builtin_throw_exception:
+       mflr r11
+       addis r11,r11,ha16(L_builtin_throw_exception$lazy_ptr - L00$_builtin_throw_exception)
+       mtlr r0
+       lwzu r12,lo16(L_builtin_throw_exception$lazy_ptr - L00$_builtin_throw_exception)(r11)
+       mtctr r12
+       bctr
+.data
+.lazy_symbol_pointer
+L_builtin_throw_exception$lazy_ptr:
+       .indirect_symbol _builtin_throw_exception
+       .long dyld_stub_binding_helper
+
+
+.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
+       .align 2
+L_exceptions_handle_exception$stub:
+       .indirect_symbol _exceptions_handle_exception
+       mflr r0
+       bcl 20,31,L00$_exceptions_handle_exception
+L00$_exceptions_handle_exception:
+       mflr r11
+       addis r11,r11,ha16(L_exceptions_handle_exception$lazy_ptr - L00$_exceptions_handle_exception)
+       mtlr r0
+       lwzu r12,lo16(L_exceptions_handle_exception$lazy_ptr - L00$_exceptions_handle_exception)(r11)
+       mtctr r12
+       bctr
+.data
+.lazy_symbol_pointer
+L_exceptions_handle_exception$lazy_ptr:
+       .indirect_symbol _exceptions_handle_exception
+       .long dyld_stub_binding_helper
+
+
+.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
+       .align 2
+L_stacktrace_create_extern_stackframeinfo$stub:
+       .indirect_symbol _stacktrace_create_extern_stackframeinfo
+       mflr r0
+       bcl 20,31,L00$_stacktrace_create_extern_stackframeinfo
+L00$_stacktrace_create_extern_stackframeinfo:
+       mflr r11
+       addis r11,r11,ha16(L_stacktrace_create_extern_stackframeinfo$lazy_ptr - L00$_stacktrace_create_extern_stackframeinfo)
+       mtlr r0
+       lwzu r12,lo16(L_stacktrace_create_extern_stackframeinfo$lazy_ptr - L00$_stacktrace_create_extern_stackframeinfo)(r11)
+       mtctr r12
+       bctr
+.data
+.lazy_symbol_pointer
+L_stacktrace_create_extern_stackframeinfo$lazy_ptr:
+       .indirect_symbol _stacktrace_create_extern_stackframeinfo
+       .long dyld_stub_binding_helper
+
+
+.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
+       .align 2
+L_jit_compile$stub:
+       .indirect_symbol _jit_compile
+       mflr r0
+       bcl 20,31,L00$_jit_compile
+L00$_jit_compile:
+       mflr r11
+       addis r11,r11,ha16(L_jit_compile$lazy_ptr - L00$_jit_compile)
+       mtlr r0
+       lwzu r12,lo16(L_jit_compile$lazy_ptr - L00$_jit_compile)(r11)
+       mtctr r12
+       bctr
+.data
+.lazy_symbol_pointer
+L_jit_compile$lazy_ptr:
+       .indirect_symbol _jit_compile
+       .long dyld_stub_binding_helper
+
+
+.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
+       .align 2
+L_stacktrace_remove_stackframeinfo$stub:
+       .indirect_symbol _stacktrace_remove_stackframeinfo
+       mflr r0
+       bcl 20,31,L00$_stacktrace_remove_stackframeinfo
+L00$_stacktrace_remove_stackframeinfo:
+       mflr r11
+       addis r11,r11,ha16(L_stacktrace_remove_stackframeinfo$lazy_ptr - L00$_stacktrace_remove_stackframeinfo)
+       mtlr r0
+       lwzu r12,lo16(L_stacktrace_remove_stackframeinfo$lazy_ptr - L00$_stacktrace_remove_stackframeinfo)(r11)
+       mtctr r12
+       bctr
+.data
+.lazy_symbol_pointer
+L_stacktrace_remove_stackframeinfo$lazy_ptr:
+       .indirect_symbol _stacktrace_remove_stackframeinfo
+       .long dyld_stub_binding_helper
+
+
+.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
+       .align 2
+L_builtin_asm_get_exceptionptrptr$stub:
+       .indirect_symbol _builtin_asm_get_exceptionptrptr
+       mflr r0
+       bcl 20,31,L00$_builtin_asm_get_exceptionptrptr
+L00$_builtin_asm_get_exceptionptrptr:
+       mflr r11
+       addis r11,r11,ha16(L_builtin_asm_get_exceptionptrptr$lazy_ptr - L00$_builtin_asm_get_exceptionptrptr)
+       mtlr r0
+       lwzu r12,lo16(L_builtin_asm_get_exceptionptrptr$lazy_ptr - L00$_builtin_asm_get_exceptionptrptr)(r11)
+       mtctr r12
+       bctr
+.data
+.lazy_symbol_pointer
+L_builtin_asm_get_exceptionptrptr$lazy_ptr:
+       .indirect_symbol _builtin_asm_get_exceptionptrptr
+       .long dyld_stub_binding_helper
+
+
+.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
+       .align 2
+L_replace_me$stub:
+       .indirect_symbol _replace_me
+       mflr r0
+       bcl 20,31,L00$_replace_me
+L00$_replace_me:
+       mflr r11
+       addis r11,r11,ha16(L_replace_me$lazy_ptr - L00$_replace_me)
+       mtlr r0
+       lwzu r12,lo16(L_replace_me$lazy_ptr - L00$_replace_me)(r11)
+       mtctr r12
+       bctr
+.data
+.lazy_symbol_pointer
+L_replace_me$lazy_ptr:
+       .indirect_symbol _replace_me
+       .long dyld_stub_binding_helper
+
+#endif /* defined(__DARWIN__) */
+
+
 /* Disable exec-stacks, required for Gentoo ***********************************/
 
 #if defined(__GCC__) && defined(__ELF__)
index 27cdc9ef8deaaa81b96d55f8021245735c2aa275..ddd9a4266d7faf7704d2e480a099f2fe5dce470c 100644 (file)
@@ -29,9 +29,9 @@
 
    Changes: Christian Thalinger
             Christian Ullrich
-                       Edwin Steiner
+            Edwin Steiner
 
-   $Id: codegen.c 4653 2006-03-18 04:14:17Z edwin $
+   $Id: codegen.c 4712 2006-03-30 11:59:46Z twisti $
 
 */
 
@@ -49,6 +49,7 @@
 #include "vm/jit/powerpc/arch.h"
 #include "vm/jit/powerpc/codegen.h"
 
+#include "mm/memory.h"
 #include "native/native.h"
 #include "vm/builtin.h"
 #include "vm/exceptions.h"
@@ -71,8 +72,6 @@
 #endif
 
 
-
-
 s4 *codegen_trace_args( methodinfo *m, codegendata *cd, registerdata *rd,
                                                s4 *mcodeptr, s4 parentargs_base, bool nativestub);
 
@@ -82,8 +81,11 @@ s4 *codegen_trace_args( methodinfo *m, codegendata *cd, registerdata *rd,
 
 *******************************************************************************/
 
-bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
+bool codegen(jitdata *jd)
 {
+       methodinfo         *m;
+       codegendata        *cd;
+       registerdata       *rd;
        s4                  len, s1, s2, s3, d, disp;
        ptrint              a;
        s4                  parentargs_base;
@@ -99,6 +101,12 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
        methoddesc         *md;
        rplpoint           *replacementpoint;
 
+       /* get required compiler data */
+
+       m  = jd->m;
+       cd = jd->cd;
+       rd = jd->rd;
+
        /* prevent compiler warnings */
 
        d = 0;
@@ -363,7 +371,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
        /* end of header generation */
 
-       replacementpoint = cd->code->rplpoints;
+       replacementpoint = jd->code->rplpoints;
 
        /* walk through all basic blocks */
        for (bptr = m->basicblocks; bptr != NULL; bptr = bptr->next) {
@@ -417,14 +425,14 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                while (src != NULL) {
                        len--;
                        if ((len == 0) && (bptr->type != BBTYPE_STD)) {
-                               d = reg_of_var(rd, src, REG_ITMP1);
+                               d = codegen_reg_of_var(rd, 0, src, REG_ITMP1);
                                M_INTMOVE(REG_ITMP1, d);
                                store_reg_to_var_int(src, d);
                        } else {
                                if (src->type == TYPE_LNG)
-                                       d = reg_of_var(rd, src, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                                       d = codegen_reg_of_var(rd, 0, src, PACK_REGS(REG_ITMP2, REG_ITMP1));
                                else
-                                       d = reg_of_var(rd, src, REG_IFTMP);
+                                       d = codegen_reg_of_var(rd, 0, src, REG_IFTMP);
                                if ((src->varkind != STACKVAR)) {
                                        s2 = src->type;
                                        if (IS_FLT_DBL_TYPE(s2)) {
@@ -509,7 +517,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_ICONST:     /* ...  ==> ..., constant                       */
                                      /* op1 = 0, val.i = constant                    */
 
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP1);
                        ICONST(d, iptr->val.i);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -517,7 +525,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_LCONST:     /* ...  ==> ..., constant                       */
                                      /* op1 = 0, val.l = constant                    */
 
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        LCONST(d, iptr->val.l);
                        store_reg_to_var_lng(iptr->dst, d);
                        break;
@@ -525,7 +533,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_FCONST:     /* ...  ==> ..., constant                       */
                                      /* op1 = 0, val.f = constant                    */
 
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP1);
                        a = dseg_addfloat(cd, iptr->val.f);
                        M_FLD(d, REG_PV, a);
                        store_reg_to_var_flt(iptr->dst, d);
@@ -534,7 +542,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_DCONST:     /* ...  ==> ..., constant                       */
                                      /* op1 = 0, val.d = constant                    */
 
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP1);
                        a = dseg_adddouble(cd, iptr->val.d);
                        M_DLD(d, REG_PV, a);
                        store_reg_to_var_dbl(iptr->dst, d);
@@ -543,7 +551,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_ACONST:     /* ...  ==> ..., constant                       */
                                      /* op1 = 0, val.a = constant                    */
 
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP1);
                        disp = dseg_addaddress(cd, iptr->val.a);
 
                        if ((iptr->target != NULL) && (iptr->val.a == NULL)) {
@@ -566,7 +574,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_ALOAD:      /* op1 = local variable                         */
 
                        var = &(rd->locals[iptr->op1][iptr->opc - ICMD_ILOAD]);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP1);
                        if ((iptr->dst->varkind == LOCALVAR) &&
                            (iptr->dst->varnum == iptr->op1))
                                break;
@@ -582,7 +590,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                                      /* op1 = local variable                         */
 
                        var = &(rd->locals[iptr->op1][iptr->opc - ICMD_ILOAD]);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        if ((iptr->dst->varkind == LOCALVAR) &&
                                (iptr->dst->varnum == iptr->op1))
                                break;
@@ -598,7 +606,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_FLOAD:      /* ...  ==> ..., content of local variable      */
                                      /* op1 = local variable                         */
 
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP1);
                        if ((iptr->dst->varkind == LOCALVAR) &&
                                (iptr->dst->varnum == iptr->op1))
                                break;
@@ -614,7 +622,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_DLOAD:      /* ...  ==> ..., content of local variable      */
                                      /* op1 = local variable                         */
 
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP1);
                        if ((iptr->dst->varkind == LOCALVAR) &&
                                (iptr->dst->varnum == iptr->op1))
                                break;
@@ -742,7 +750,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_INEG:       /* ..., value  ==> ..., - value                 */
 
                        var_to_reg_int(s1, src, REG_ITMP1); 
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_NEG(s1, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -750,7 +758,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_LNEG:       /* ..., value  ==> ..., - value                 */
 
                        var_to_reg_int(s1, src, PACK_REGS(REG_ITMP2, REG_ITMP1));
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        M_SUBFIC(GET_LOW_REG(s1), 0, GET_LOW_REG(d));
                        M_SUBFZE(GET_HIGH_REG(s1), GET_HIGH_REG(d));
                        store_reg_to_var_lng(iptr->dst, d);
@@ -759,7 +767,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_I2L:        /* ..., value  ==> ..., value                   */
 
                        var_to_reg_int(s1, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        M_INTMOVE(s1, GET_LOW_REG(d));
                        M_SRA_IMM(GET_LOW_REG(d), 31, GET_HIGH_REG(d));
                        store_reg_to_var_lng(iptr->dst, d);
@@ -768,7 +776,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_L2I:        /* ..., value  ==> ..., value                   */
 
                        var_to_reg_lng_low(s1, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_INTMOVE(s1, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -776,7 +784,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_INT2BYTE:   /* ..., value  ==> ..., value                   */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_BSEXT(s1, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -784,7 +792,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_INT2CHAR:   /* ..., value  ==> ..., value                   */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_CZEXT(s1, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -792,7 +800,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_INT2SHORT:  /* ..., value  ==> ..., value                   */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_SSEXT(s1, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -802,7 +810,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_IADD(s1, s2, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -811,7 +819,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                                      /* val.i = constant                             */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if ((iptr->val.i >= -32768) && (iptr->val.i <= 32767)) {
                                M_IADD_IMM(s1, iptr->val.i, d);
                        } else {
@@ -825,7 +833,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_lng_low(s1, src->prev, REG_ITMP1);
                        var_to_reg_lng_low(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        M_ADDC(s1, s2, GET_LOW_REG(d));
                        var_to_reg_lng_high(s1, src->prev, REG_ITMP1);
                        var_to_reg_lng_high(s2, src, REG_ITMP3);   /* don't use REG_ITMP2 */
@@ -838,7 +846,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        s3 = iptr->val.l & 0xffffffff;
                        var_to_reg_lng_low(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        if ((s3 >= -32768) && (s3 <= 32767)) {
                                M_ADDIC(s1, s3, GET_LOW_REG(d));
                        } else {
@@ -862,7 +870,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_ISUB(s1, s2, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -871,7 +879,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                                      /* val.i = constant                             */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if ((iptr->val.i >= -32767) && (iptr->val.i <= 32768)) {
                                M_IADD_IMM(s1, -iptr->val.i, d);
                        } else {
@@ -885,7 +893,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_lng_low(s1, src->prev, REG_ITMP1);
                        var_to_reg_lng_low(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        M_SUBC(s1, s2, GET_LOW_REG(d));
                        var_to_reg_lng_high(s1, src->prev, REG_ITMP1);
                        var_to_reg_lng_high(s2, src, REG_ITMP3);   /* don't use REG_ITMP2 */
@@ -898,7 +906,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        s3 = (-iptr->val.l) & 0xffffffff;
                        var_to_reg_lng_low(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        if ((s3 >= -32768) && (s3 <= 32767)) {
                                M_ADDIC(s1, s3, GET_LOW_REG(d));
                        } else {
@@ -922,7 +930,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP1);
                        M_TST(s2);
                        M_BEQ(0);
                        codegen_add_arithmeticexception_ref(cd, mcodeptr);
@@ -941,7 +949,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_TST(s2);
                        M_BEQ(0);
                        codegen_add_arithmeticexception_ref(cd, mcodeptr);
@@ -983,7 +991,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                        M_MTCTR(REG_ITMP1);
                        M_JSR;
 
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_RESULT2, REG_RESULT));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_RESULT2, REG_RESULT));
                        M_TINTMOVE(TYPE_LNG, PACK_REGS(REG_RESULT2, REG_RESULT), d);
                        store_reg_to_var_lng(iptr->dst, d);
                        break;
@@ -992,7 +1000,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_IMUL(s1, s2, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -1001,7 +1009,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                                      /* val.i = constant                             */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if ((iptr->val.i >= -32768) && (iptr->val.i <= 32767)) {
                                M_IMUL_IMM(s1, iptr->val.i, d);
                        } else {
@@ -1014,7 +1022,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_IDIVPOW2:   /* ..., value  ==> ..., value << constant       */
                                      
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP3);
                        M_SRA_IMM(s1, iptr->val.i, d);
                        M_ADDZE(d, d);
                        store_reg_to_var_int(iptr->dst, d);
@@ -1024,7 +1032,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_AND_IMM(s2, 0x1f, REG_ITMP3);
                        M_SLL(s1, REG_ITMP3, d);
                        store_reg_to_var_int(iptr->dst, d);
@@ -1034,7 +1042,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                                      /* val.i = constant                             */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_SLL_IMM(s1, iptr->val.i & 0x1f, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -1043,7 +1051,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_AND_IMM(s2, 0x1f, REG_ITMP3);
                        M_SRA(s1, REG_ITMP3, d);
                        store_reg_to_var_int(iptr->dst, d);
@@ -1053,7 +1061,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                                      /* val.i = constant                             */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_SRA_IMM(s1, iptr->val.i & 0x1f, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -1062,7 +1070,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_AND_IMM(s2, 0x1f, REG_ITMP2);
                        M_SRL(s1, REG_ITMP2, d);
                        store_reg_to_var_int(iptr->dst, d);
@@ -1072,7 +1080,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                                      /* val.i = constant                             */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if (iptr->val.i & 0x1f) {
                                M_SRL_IMM(s1, iptr->val.i & 0x1f, d);
                        } else {
@@ -1085,7 +1093,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_AND(s1, s2, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -1094,7 +1102,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                                      /* val.i = constant                             */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if ((iptr->val.i >= 0) && (iptr->val.i <= 65535)) {
                                M_AND_IMM(s1, iptr->val.i, d);
                                }
@@ -1114,7 +1122,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_lng_low(s1, src->prev, REG_ITMP1);
                        var_to_reg_lng_low(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        M_AND(s1, s2, GET_LOW_REG(d));
                        var_to_reg_lng_high(s1, src->prev, REG_ITMP1);
                        var_to_reg_lng_high(s2, src, REG_ITMP3);   /* don't use REG_ITMP2 */
@@ -1127,7 +1135,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        s3 = iptr->val.l & 0xffffffff;
                        var_to_reg_lng_low(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        if ((s3 >= 0) && (s3 <= 65535)) {
                                M_AND_IMM(s1, s3, GET_LOW_REG(d));
                        } else {
@@ -1149,7 +1157,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                                      /* val.i = constant                             */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_MOV(s1, REG_ITMP2);
                        M_CMPI(s1, 0);
                        M_BGE(1 + 2*(iptr->val.i >= 32768));
@@ -1174,7 +1182,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_OR(s1, s2, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -1183,7 +1191,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                                      /* val.i = constant                             */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if ((iptr->val.i >= 0) && (iptr->val.i <= 65535)) {
                                M_OR_IMM(s1, iptr->val.i, d);
                        } else {
@@ -1197,7 +1205,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_lng_low(s1, src->prev, REG_ITMP1);
                        var_to_reg_lng_low(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        M_OR(s1, s2, GET_LOW_REG(d));
                        var_to_reg_lng_high(s1, src->prev, REG_ITMP1);
                        var_to_reg_lng_high(s2, src, REG_ITMP3);   /* don't use REG_ITMP2 */
@@ -1210,7 +1218,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        s3 = iptr->val.l & 0xffffffff;
                        var_to_reg_lng_low(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        if ((s3 >= 0) && (s3 <= 65535)) {
                                M_OR_IMM(s1, s3, GET_LOW_REG(d));
                        } else {
@@ -1232,7 +1240,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_XOR(s1, s2, d);
                        store_reg_to_var_int(iptr->dst, d);
                        break;
@@ -1241,7 +1249,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                                      /* val.i = constant                             */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if ((iptr->val.i >= 0) && (iptr->val.i <= 65535)) {
                                M_XOR_IMM(s1, iptr->val.i, d);
                        } else {
@@ -1255,7 +1263,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_lng_low(s1, src->prev, REG_ITMP1);
                        var_to_reg_lng_low(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        M_XOR(s1, s2, GET_LOW_REG(d));
                        var_to_reg_lng_high(s1, src->prev, REG_ITMP1);
                        var_to_reg_lng_high(s2, src, REG_ITMP3);   /* don't use REG_ITMP2 */
@@ -1268,7 +1276,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        s3 = iptr->val.l & 0xffffffff;
                        var_to_reg_lng_low(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        if ((s3 >= 0) && (s3 <= 65535)) {
                                M_XOR_IMM(s1, s3, GET_LOW_REG(d));
                        } else {
@@ -1292,7 +1300,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                        *******************************************************************/
                        var_to_reg_lng_high(s1, src->prev, REG_ITMP3);
                        var_to_reg_lng_high(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP1);
                        {
                                int tempreg = false;
                                int dreg;
@@ -1361,7 +1369,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_FNEG:       /* ..., value  ==> ..., - value                 */
 
                        var_to_reg_flt(s1, src, REG_FTMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP3);
                        M_FMOVN(s1, d);
                        store_reg_to_var_flt(iptr->dst, d);
                        break;
@@ -1369,7 +1377,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_DNEG:       /* ..., value  ==> ..., - value                 */
 
                        var_to_reg_flt(s1, src, REG_FTMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP3);
                        M_FMOVN(s1, d);
                        store_reg_to_var_dbl(iptr->dst, d);
                        break;
@@ -1378,7 +1386,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_flt(s1, src->prev, REG_FTMP1);
                        var_to_reg_flt(s2, src, REG_FTMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP3);
                        M_FADD(s1, s2, d);
                        store_reg_to_var_flt(iptr->dst, d);
                        break;
@@ -1387,7 +1395,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_flt(s1, src->prev, REG_FTMP1);
                        var_to_reg_flt(s2, src, REG_FTMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP3);
                        M_DADD(s1, s2, d);
                        store_reg_to_var_dbl(iptr->dst, d);
                        break;
@@ -1396,7 +1404,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_flt(s1, src->prev, REG_FTMP1);
                        var_to_reg_flt(s2, src, REG_FTMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP3);
                        M_FSUB(s1, s2, d);
                        store_reg_to_var_flt(iptr->dst, d);
                        break;
@@ -1405,7 +1413,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_flt(s1, src->prev, REG_FTMP1);
                        var_to_reg_flt(s2, src, REG_FTMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP3);
                        M_DSUB(s1, s2, d);
                        store_reg_to_var_dbl(iptr->dst, d);
                        break;
@@ -1414,7 +1422,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_flt(s1, src->prev, REG_FTMP1);
                        var_to_reg_flt(s2, src, REG_FTMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP3);
                        M_FMUL(s1, s2, d);
                        store_reg_to_var_flt(iptr->dst, d);
                        break;
@@ -1423,7 +1431,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_flt(s1, src->prev, REG_FTMP1);
                        var_to_reg_flt(s2, src, REG_FTMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP3);
                        M_DMUL(s1, s2, d);
                        store_reg_to_var_dbl(iptr->dst, d);
                        break;
@@ -1432,7 +1440,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_flt(s1, src->prev, REG_FTMP1);
                        var_to_reg_flt(s2, src, REG_FTMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP3);
                        M_FDIV(s1, s2, d);
                        store_reg_to_var_flt(iptr->dst, d);
                        break;
@@ -1441,7 +1449,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_flt(s1, src->prev, REG_FTMP1);
                        var_to_reg_flt(s2, src, REG_FTMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP3);
                        M_DDIV(s1, s2, d);
                        store_reg_to_var_dbl(iptr->dst, d);
                        break;
@@ -1450,7 +1458,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_D2I:
 
                        var_to_reg_flt(s1, src, REG_FTMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        M_CLR(d);
                        disp = dseg_addfloat(cd, 0.0);
                        M_FLD(REG_FTMP2, REG_PV, disp);
@@ -1467,7 +1475,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_F2D:       /* ..., value  ==> ..., (double) value           */
 
                        var_to_reg_flt(s1, src, REG_FTMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP3);
                        M_FLTMOVE(s1, d);
                        store_reg_to_var_dbl(iptr->dst, d);
                        break;
@@ -1475,7 +1483,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_D2F:       /* ..., value  ==> ..., (double) value           */
 
                        var_to_reg_flt(s1, src, REG_FTMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP3);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP3);
                        M_CVTDF(s1, d);
                        store_reg_to_var_flt(iptr->dst, d);
                        break;
@@ -1485,7 +1493,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_flt(s1, src->prev, REG_FTMP1);
                        var_to_reg_flt(s2, src, REG_FTMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP1);
                        M_FCMPU(s2, s1);
                        M_IADD_IMM(REG_ZERO, -1, d);
                        M_BNAN(4);
@@ -1501,7 +1509,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_flt(s1, src->prev, REG_FTMP1);
                        var_to_reg_flt(s2, src, REG_FTMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP1);
                        M_FCMPU(s1, s2);
                        M_IADD_IMM(REG_ZERO, 1, d);
                        M_BNAN(4);
@@ -1518,7 +1526,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                case ICMD_ARRAYLENGTH: /* ..., arrayref  ==> ..., length              */
 
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        gen_nullptr_check(s1);
                        M_ILD(d, s1, OFFSET(java_arrayheader, size));
                        store_reg_to_var_int(iptr->dst, d);
@@ -1528,7 +1536,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if (iptr->op1 == 0) {
                                gen_nullptr_check(s1);
                                gen_bound_check;
@@ -1543,7 +1551,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if (iptr->op1 == 0) {
                                gen_nullptr_check(s1);
                                gen_bound_check;
@@ -1558,7 +1566,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if (iptr->op1 == 0) {
                                gen_nullptr_check(s1);
                                gen_bound_check;
@@ -1573,7 +1581,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if (iptr->op1 == 0) {
                                gen_nullptr_check(s1);
                                gen_bound_check;
@@ -1588,7 +1596,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                        if (iptr->op1 == 0) {
                                gen_nullptr_check(s1);
                                gen_bound_check;
@@ -1605,7 +1613,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP1);
                        if (iptr->op1 == 0) {
                                gen_nullptr_check(s1);
                                gen_bound_check;
@@ -1620,7 +1628,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_FTMP1);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP1);
                        if (iptr->op1 == 0) {
                                gen_nullptr_check(s1);
                                gen_bound_check;
@@ -1635,7 +1643,7 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        var_to_reg_int(s1, src->prev, REG_ITMP1);
                        var_to_reg_int(s2, src, REG_ITMP2);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if (iptr->op1 == 0) {
                                gen_nullptr_check(s1);
                                gen_bound_check;
@@ -1806,28 +1814,28 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                        M_ALD(REG_ITMP1, REG_PV, disp);
                        switch (iptr->op1) {
                        case TYPE_INT:
-                               d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                               d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                                M_ILD_INTERN(d, REG_ITMP1, 0);
                                store_reg_to_var_int(iptr->dst, d);
                                break;
                        case TYPE_LNG:
-                               d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                               d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                                M_ILD_INTERN(GET_LOW_REG(d), REG_ITMP1, 4);/* keep this order */
                                M_ILD_INTERN(GET_HIGH_REG(d), REG_ITMP1, 0);/*keep this order */
                                store_reg_to_var_lng(iptr->dst, d);
                                break;
                        case TYPE_ADR:
-                               d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                               d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                                M_ALD_INTERN(d, REG_ITMP1, 0);
                                store_reg_to_var_adr(iptr->dst, d);
                                break;
                        case TYPE_FLT:
-                               d = reg_of_var(rd, iptr->dst, REG_FTMP1);
+                               d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP1);
                                M_FLD_INTERN(d, REG_ITMP1, 0);
                                store_reg_to_var_flt(iptr->dst, d);
                                break;
                        case TYPE_DBL:                          
-                               d = reg_of_var(rd, iptr->dst, REG_FTMP1);
+                               d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP1);
                                M_DLD_INTERN(d, REG_ITMP1, 0);
                                store_reg_to_var_dbl(iptr->dst, d);
                                break;
@@ -1911,12 +1919,12 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
 
                        switch (iptr->op1) {
                        case TYPE_INT:
-                               d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                               d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                                M_ILD(d, s1, disp);
                                store_reg_to_var_int(iptr->dst, d);
                                break;
                        case TYPE_LNG:
-                               d = reg_of_var(rd, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
+                               d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, PACK_REGS(REG_ITMP2, REG_ITMP1));
                                if (GET_HIGH_REG(d) == s1) {
                                        M_ILD(GET_LOW_REG(d), s1, disp + 4);
                                        M_ILD(GET_HIGH_REG(d), s1, disp);
@@ -1927,17 +1935,17 @@ bool codegen(methodinfo *m, codegendata *cd, registerdata *rd)
                                store_reg_to_var_lng(iptr->dst, d);
                                break;
                        case TYPE_ADR:
-                               d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                               d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                                M_ALD(d, s1, disp);
                                store_reg_to_var_adr(iptr->dst, d);
                                break;
                        case TYPE_FLT:
-                               d = reg_of_var(rd, iptr->dst, REG_FTMP1);
+                               d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP1);
                                M_FLD(d, s1, disp);
                                store_reg_to_var_flt(iptr->dst, d);
                                break;
                        case TYPE_DBL:                          
-                               d = reg_of_var(rd, iptr->dst, REG_FTMP1);
+                               d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FTMP1);
                                M_DLD(d, s1, disp);
                                store_reg_to_var_dbl(iptr->dst, d);
                                break;
@@ -2882,18 +2890,18 @@ gen_method:
                        if (d != TYPE_VOID) {
                                if (IS_INT_LNG_TYPE(iptr->dst->type)) {
                                        if (IS_2_WORD_TYPE(iptr->dst->type)) {
-                                               s1 = reg_of_var(rd, iptr->dst,
+                                               s1 = codegen_reg_of_var(rd, iptr->opc, iptr->dst,
                                                                                PACK_REGS(REG_RESULT2, REG_RESULT));
                                                M_TINTMOVE(iptr->dst->type,
                                                                   PACK_REGS(REG_RESULT2, REG_RESULT), s1);
                                                store_reg_to_var_lng(iptr->dst, s1);
                                        } else {
-                                               s1 = reg_of_var(rd, iptr->dst, REG_RESULT);
+                                               s1 = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_RESULT);
                                                M_TINTMOVE(iptr->dst->type, REG_RESULT, s1);
                                                store_reg_to_var_int(iptr->dst, s1);
                                        }
                                } else {
-                                       s1 = reg_of_var(rd, iptr->dst, REG_FRESULT);
+                                       s1 = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_FRESULT);
                                        M_FLTMOVE(REG_FRESULT, s1);
                                        if (IS_2_WORD_TYPE(iptr->dst->type)) {
                                                store_reg_to_var_dbl(iptr->dst, s1);
@@ -3054,7 +3062,7 @@ gen_method:
                                        M_BGT(0);
                                        codegen_add_classcastexception_ref(cd, mcodeptr);
                                }
-                               d = reg_of_var(rd, iptr->dst, s1);
+                               d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, s1);
 
                        } else {
                                /* array type cast-check */
@@ -3084,7 +3092,7 @@ gen_method:
                                codegen_add_classcastexception_ref(cd, mcodeptr);
 
                                var_to_reg_int(s1, src, REG_ITMP1);
-                               d = reg_of_var(rd, iptr->dst, s1);
+                               d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, s1);
                        }
                        M_INTMOVE(s1, d);
                        store_reg_to_var_adr(iptr->dst, d);
@@ -3126,7 +3134,7 @@ gen_method:
             codegen_threadcritrestart(cd, (u1*) mcodeptr - cd->mcodebase);
 #endif
                        var_to_reg_int(s1, src, REG_ITMP1);
-                       d = reg_of_var(rd, iptr->dst, REG_ITMP2);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_ITMP2);
                        if (s1 == d) {
                                M_MOV(s1, REG_ITMP1);
                                s1 = REG_ITMP1;
@@ -3302,7 +3310,7 @@ gen_method:
                        M_BEQ(0);
                        codegen_add_fillinstacktrace_ref(cd, mcodeptr);
 
-                       d = reg_of_var(rd, iptr->dst, REG_RESULT);
+                       d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, REG_RESULT);
                        M_INTMOVE(REG_RESULT, d);
                        store_reg_to_var_adr(iptr->dst, d);
                        break;
@@ -3526,8 +3534,9 @@ gen_method:
                {
                        int i;
 
-                       replacementpoint = cd->code->rplpoints;
-                       for (i=0; i<cd->code->rplpointcount; ++i, ++replacementpoint) {
+                       replacementpoint = jd->code->rplpoints;
+
+                       for (i = 0; i < jd->code->rplpointcount; ++i, ++replacementpoint) {
                                /* check code segment size */
 
                                MCODECHECK(100);
@@ -3566,7 +3575,7 @@ gen_method:
                }
        }
 
-       codegen_finish(m, cd, (ptrint) ((u1 *) mcodeptr - cd->mcodebase));
+       codegen_finish(jd, (s4) ((u1 *) mcodeptr - cd->mcodebase));
 
        /* everything's ok */
 
@@ -3629,17 +3638,25 @@ u1 *createcompilerstub(methodinfo *m)
 
 *******************************************************************************/
 
-u1 *createnativestub(functionptr f, methodinfo *m, codegendata *cd,
-                                        registerdata *rd, methoddesc *nmd)
+u1 *createnativestub(functionptr f, jitdata *jd, methoddesc *nmd)
 {
-       s4         *mcodeptr;               /* code generation pointer            */
-       s4          stackframesize;         /* size of stackframe if needed       */
-       methoddesc *md;
-       s4          nativeparams;
-       s4          i, j;                   /* count variables                    */
-       s4          t;
-       s4          s1, s2, disp;
-       s4          funcdisp;
+       methodinfo   *m;
+       codegendata  *cd;
+       registerdata *rd;
+       s4           *mcodeptr;             /* code generation pointer            */
+       s4            stackframesize;       /* size of stackframe if needed       */
+       methoddesc   *md;
+       s4            nativeparams;
+       s4            i, j;                 /* count variables                    */
+       s4            t;
+       s4            s1, s2, disp;
+       s4            funcdisp;
+
+       /* get required compiler data */
+
+       m  = jd->m;
+       cd = jd->cd;
+       rd = jd->rd;
 
        /* set some variables */
 
@@ -4066,9 +4083,9 @@ u1 *createnativestub(functionptr f, methodinfo *m, codegendata *cd,
                }
        }
 
-       codegen_finish(m, cd, (s4) ((u1 *) mcodeptr - cd->mcodebase));
+       codegen_finish(jd, (s4) ((u1 *) mcodeptr - cd->mcodebase));
 
-       return cd->code->entrypoint;
+       return jd->code->entrypoint;
 }
 
 
index efc83792953981c02f2ee6a6493e6c6447a5d0fe..e5b14416379dfaf1cb08c320a4509127c8dfcfb6 100644 (file)
@@ -31,7 +31,7 @@
    Changes: Christian Thalinger
             Christian Ullrich
 
-   $Id: codegen.h 4631 2006-03-16 14:19:52Z twisti $
+   $Id: codegen.h 4712 2006-03-30 11:59:46Z twisti $
 
 */
 
@@ -71,7 +71,7 @@
 /* MCODECHECK(icnt) */
 
 #define MCODECHECK(icnt) \
-       if ((mcodeptr + (icnt)) > cd->mcodeend) \
+    if ((mcodeptr + (icnt)) > cd->mcodeend) \
         mcodeptr = codegen_increase(cd, (u1 *) mcodeptr)
 
 
 #define M_COPY(from,to) \
     do { \
         if (from->type == TYPE_LNG) \
-            d = reg_of_var(rd, to, PACK_REGS(REG_ITMP2, REG_ITMP1)); \
+            d = codegen_reg_of_var(rd, iptr->opc, (to), PACK_REGS(REG_ITMP2, REG_ITMP1)); \
         else \
-            d = reg_of_var(rd, to, REG_IFTMP); \
+            d = codegen_reg_of_var(rd, iptr->opc, (to), REG_IFTMP); \
         if ((from->regoff != to->regoff) || \
             ((from->flags ^ to->flags) & INMEMORY)) { \
             if (IS_INT_LNG_TYPE(from->type)) { \
index d1cf46cf05ea204b3f9ca179f4f65a62e28d623f..7ccb0f29640487c6d652f45742b1da9bf6910a39 100644 (file)
@@ -30,7 +30,7 @@
    Changes: Stefan Ring
             Christian Thalinger
 
-   $Id: disass.c 4357 2006-01-22 23:33:38Z twisti $
+   $Id: disass.c 4712 2006-03-30 11:59:46Z twisti $
 
 */
 
 #include "vm/jit/disass.h"
 
 
-char *regs[] = {
-       "r0",
-       "r1",
-       "r2",
-       "r3",
-       "r4",
-       "r5",
-       "r6",
-       "r7",
-       "r8",
-       "r9",
-       "r10",
-       "r11",
-       "r12",
-       "r13",
-       "r14",
-       "r15",
-       "r16",
-       "r17",
-       "r18",
-       "r19",
-       "r20",
-       "r21",
-       "r22",
-       "r23",
-       "r24",
-       "r25",
-       "r26",
-       "r27",
-       "r28",
-       "r29",
-       "r30",
-       "r31",
-};
-
-
 /* disassinstr *****************************************************************
 
    Outputs a disassembler listing of one machine code instruction on