From 97548b98fa3abaa6c42bdbdf550bd6844aa69976 Mon Sep 17 00:00:00 2001 From: Michael Starzinger Date: Tue, 11 Sep 2007 00:45:35 +0200 Subject: [PATCH] * src/vm/jit/alpha/codegen.c (codegen_emit): ICMD_BUILTIN no longer checks for exceptions, this is done by the stub itself. Stubs are called now. * src/vm/jit/m68k/codegen.c: Likewise. * src/vm/jit/mips/codegen.c: Likewise. * src/vm/jit/powerpc64/codegen.c: Likewise. * src/vm/jit/s390/codegen.c: Likewise. * src/vm/jit/sparc64/codegen.c: Likewise. --HG-- branch : michi --- src/vm/jit/alpha/codegen.c | 2 -- src/vm/jit/m68k/codegen.c | 8 +++++--- src/vm/jit/mips/codegen.c | 7 ++++--- src/vm/jit/powerpc64/codegen.c | 15 +++++++++------ src/vm/jit/s390/codegen.c | 6 ++++-- src/vm/jit/sparc64/codegen.c | 1 - 6 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/vm/jit/alpha/codegen.c b/src/vm/jit/alpha/codegen.c index a5fe6b0ad..0647ee925 100644 --- a/src/vm/jit/alpha/codegen.c +++ b/src/vm/jit/alpha/codegen.c @@ -2614,8 +2614,6 @@ gen_method: REPLACEMENT_POINT_FORGC_BUILTIN_RETURN(cd, iptr); disp = (s4) (cd->mcodeptr - cd->mcodebase); M_LDA(REG_PV, REG_RA, -disp); - - emit_exception_check(cd, iptr); break; case ICMD_INVOKESPECIAL: diff --git a/src/vm/jit/m68k/codegen.c b/src/vm/jit/m68k/codegen.c index b8c1ce7c9..3b8787dea 100644 --- a/src/vm/jit/m68k/codegen.c +++ b/src/vm/jit/m68k/codegen.c @@ -1692,13 +1692,15 @@ bool codegen_emit(jitdata *jd) /* arguments in place now */ switch(iptr->opc) { - case ICMD_BUILTIN: - disp = (ptrint) bte->fp; + case ICMD_BUILTIN: + if (bte->stub == NULL) + disp = (ptrint) bte->fp; + else + disp = (ptrint) bte->stub; d = md->returntype.type; M_JSR_IMM(disp); REPLACEMENT_POINT_INVOKE_RETURN(cd, iptr); - emit_exception_check(cd, iptr); break; case ICMD_INVOKESPECIAL: diff --git a/src/vm/jit/mips/codegen.c b/src/vm/jit/mips/codegen.c index f75e067bd..772ac7363 100644 --- a/src/vm/jit/mips/codegen.c +++ b/src/vm/jit/mips/codegen.c @@ -3099,7 +3099,10 @@ gen_method: switch (iptr->opc) { case ICMD_BUILTIN: - disp = dseg_add_functionptr(cd, bte->fp); + if (bte->stub == NULL) + disp = dseg_add_functionptr(cd, bte->fp); + else + disp = dseg_add_functionptr(cd, bte->stub); M_ALD(REG_ITMP3, REG_PV, disp); /* built-in-function pointer */ @@ -3113,8 +3116,6 @@ gen_method: REPLACEMENT_POINT_INVOKE_RETURN(cd, iptr); disp = (s4) (cd->mcodeptr - cd->mcodebase); M_LDA(REG_PV, REG_RA, -disp); - - emit_exception_check(cd, iptr); break; case ICMD_INVOKESPECIAL: diff --git a/src/vm/jit/powerpc64/codegen.c b/src/vm/jit/powerpc64/codegen.c index bbf41ebf1..7946a17da 100644 --- a/src/vm/jit/powerpc64/codegen.c +++ b/src/vm/jit/powerpc64/codegen.c @@ -2177,20 +2177,23 @@ gen_method: switch (iptr->opc) { case ICMD_BUILTIN: - disp = dseg_add_functionptr(cd, bte->fp); - M_ALD(REG_PV, REG_PV, disp); - M_ALD(REG_PV, REG_PV, 0); /* TOC */ + if (bte->stub == NULL) { + disp = dseg_add_functionptr(cd, bte->fp); + M_ALD(REG_PV, REG_PV, disp); + M_ALD(REG_PV, REG_PV, 0); /* TOC */ + } + else { + disp = dseg_add_functionptr(cd, bte->stub); + M_ALD(REG_PV, REG_PV, disp); + } /* generate the actual call */ - REPLACEMENT_POINT_INVOKE_RETURN(cd, iptr); M_MTCTR(REG_PV); M_JSR; REPLACEMENT_POINT_INVOKE_RETURN(cd, iptr); disp = (s4) (cd->mcodeptr - cd->mcodebase); M_MFLR(REG_ITMP1); M_LDA(REG_PV, REG_ITMP1, -disp); - - emit_exception_check(cd, iptr); break; diff --git a/src/vm/jit/s390/codegen.c b/src/vm/jit/s390/codegen.c index f0d583221..3abba4992 100644 --- a/src/vm/jit/s390/codegen.c +++ b/src/vm/jit/s390/codegen.c @@ -2837,7 +2837,10 @@ gen_method: switch (iptr->opc) { case ICMD_BUILTIN: - disp = dseg_add_functionptr(cd, bte->fp); + if (bte->stub == NULL) + disp = dseg_add_functionptr(cd, bte->fp); + else + disp = dseg_add_functionptr(cd, bte->stub); M_ASUB_IMM(96, REG_SP); /* register save area as required by C abi */ if (N_VALID_DSEG_DISP(disp)) { @@ -2930,7 +2933,6 @@ gen_method: switch (iptr->opc) { case ICMD_BUILTIN: M_AADD_IMM(96, REG_SP); /* remove C abi register save area */ - emit_exception_check(cd, iptr); /* check for exception */ break; } diff --git a/src/vm/jit/sparc64/codegen.c b/src/vm/jit/sparc64/codegen.c index df1293732..e968ffb49 100644 --- a/src/vm/jit/sparc64/codegen.c +++ b/src/vm/jit/sparc64/codegen.c @@ -2547,7 +2547,6 @@ gen_method: /* REG_RA holds the value of the jmp instruction, therefore +8 */ M_LDA(REG_ZERO, REG_RA_CALLER, -disp + 8); - emit_exception_check(cd, iptr); if (md->returntype.type == TYPE_FLT) { /* special handling for float return value in %f0 */ M_FMOV_INTERN(0,1); -- 2.25.1