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 $
*/
#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"
.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 */
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)
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 */
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? */
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
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
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:
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
.long L_handle_a6
.long L_handle_a7
+ .text
+ .align 2
+
L_handle_a0:
lwz a0,offvmargdata+4(itmp1)
b L_register_copy
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
.long 0
#endif
+ .text
+ .align 2
+
L_handle_a0_a1:
lwz a0,offvmargdata+0(itmp1)
lwz a1,offvmargdata+4(itmp1)
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)
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
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
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 */
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)
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
/* 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 **********************************************************
.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__)
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 $
*/
#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"
#endif
-
-
s4 *codegen_trace_args( methodinfo *m, codegendata *cd, registerdata *rd,
s4 *mcodeptr, s4 parentargs_base, bool nativestub);
*******************************************************************************/
-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;
methoddesc *md;
rplpoint *replacementpoint;
+ /* get required compiler data */
+
+ m = jd->m;
+ cd = jd->cd;
+ rd = jd->rd;
+
/* prevent compiler warnings */
d = 0;
/* 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) {
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)) {
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;
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;
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);
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);
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)) {
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;
/* 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;
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;
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;
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;
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);
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);
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;
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;
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;
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;
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;
/* 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 {
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 */
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 {
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;
/* 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 {
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 */
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 {
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);
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);
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;
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;
/* 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 {
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);
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);
/* 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;
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);
/* 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;
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);
/* 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 {
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;
/* 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);
}
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 */
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 {
/* 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));
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;
/* 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 {
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 */
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 {
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;
/* 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 {
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 */
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 {
*******************************************************************/
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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);
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;
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;
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);
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);
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);
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;
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;
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;
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;
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;
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;
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;
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;
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;
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);
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;
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);
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 */
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);
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;
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;
{
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);
}
}
- codegen_finish(m, cd, (ptrint) ((u1 *) mcodeptr - cd->mcodebase));
+ codegen_finish(jd, (s4) ((u1 *) mcodeptr - cd->mcodebase));
/* everything's ok */
*******************************************************************************/
-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 */
}
}
- 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;
}