#include <assert.h>
#include <stdlib.h>
+#include "arch.h"
+
#include "mm/memory.h"
#include "toolbox/logging.h"
#include "vm/options.h"
+#include "vm/jit/abi.h"
#include "vm/jit/jit.h"
#include "vm/jit/replace.h"
#include "vm/jit/asmpart.h"
#include "vm/jit/disass.h"
-#include "arch.h"
+
/*** constants used internally ************************************************/
*******************************************************************************/
-bool replace_create_replacement_points(codeinfo *code,registerdata *rd)
+bool replace_create_replacement_points(jitdata *jd)
{
+#if 0
+ codeinfo *code;
+ registerdata *rd;
basicblock *bptr;
int count;
methodinfo *m;
stackptr sp;
bool indexused;
+ /* get required compiler data */
+
+ code = jd->code;
+ rd = jd->rd;
+
/* assert that we wont overwrite already allocated data */
assert(code);
count = 0;
alloccount = 0;
- for (bptr = m->basicblocks; bptr; bptr = bptr->next) {
+
+ for (bptr = jd->new_basicblocks; bptr; bptr = bptr->next) {
if (!(bptr->bitflags & BBFLAG_REPLACEMENT))
continue;
/* initialize replacement point structs */
rp = rplpoints;
- for (bptr = m->basicblocks; bptr; bptr = bptr->next) {
+
+ for (bptr = jd->new_basicblocks; bptr; bptr = bptr->next) {
if (!(bptr->bitflags & BBFLAG_REPLACEMENT))
continue;
/* store the data in the codeinfo */
- code->rplpoints = rplpoints;
+ code->rplpoints = rplpoints;
code->rplpointcount = count;
- code->regalloc = regalloc;
+ code->regalloc = regalloc;
code->regalloccount = alloccount;
- code->globalcount = globalcount;
+ code->globalcount = globalcount;
code->savedintcount = INT_SAV_CNT - rd->savintreguse;
code->savedfltcount = FLT_SAV_CNT - rd->savfltreguse;
- code->memuse = rd->memuse;
- code->isleafmethod = m->isleafmethod; /* XXX will be moved to codeinfo */
+ code->memuse = rd->memuse;
/* everything alright */
return true;
+#endif
}
/* replace_free_replacement_points *********************************************
rp->target = target;
-#if (defined(__I386__) || defined(__X86_64__) || defined(__ALPHA__) || defined(__POWERPC__)) && defined(ENABLE_JIT)
+#if (defined(__I386__) || defined(__X86_64__) || defined(__ALPHA__) || defined(__POWERPC__) || defined(__MIPS__)) && defined(ENABLE_JIT)
md_patch_replacement_point(rp);
#endif
}
rp->target = NULL;
-#if (defined(__I386__) || defined(__X86_64__) || defined(__ALPHA__) || defined(__POWERPC__)) && defined(ENABLE_JIT)
+#if (defined(__I386__) || defined(__X86_64__) || defined(__ALPHA__) || defined(__POWERPC__) || defined(__MIPS__)) && defined(ENABLE_JIT)
md_patch_replacement_point(rp);
#endif
}
/* in some cases the top stack slot is passed in REG_ITMP1 */
if ( (rp->type == BBTYPE_EXH)
-#if defined(__ALPHA__) || defined(__POWERPC__)
+#if defined(__ALPHA__) || defined(__POWERPC__) || defined(__MIPS__)
|| (rp->type == BBTYPE_SBR)
#endif
)
/* in some cases the top stack slot is passed in REG_ITMP1 */
if ( (rp->type == BBTYPE_EXH)
-#if defined(__ALPHA__) || defined(__POWERPC__)
+#if defined(__ALPHA__) || defined(__POWERPC__) || defined(__MIPS__)
|| (rp->type == BBTYPE_SBR)
#endif
)
target = rp->target;
- /* XXX DEBUG turn of self-replacement */
+ /* XXX DEBUG turn off self-replacement */
if (target == rp)
replace_deactivate_replacement_point(rp);
/* enter new code */
-#if (defined(__I386__) || defined(__X86_64__) || defined(__ALPHA__) || defined(__POWERPC__)) && defined(ENABLE_JIT)
+#if (defined(__I386__) || defined(__X86_64__) || defined(__ALPHA__) || defined(__POWERPC__) || defined(__MIPS__)) && defined(ENABLE_JIT)
asm_replacement_in(es);
#endif
abort();
printf("\tpc = %p\n",(void*)es->pc);
printf("\tsp = %p\n",(void*)es->sp);
printf("\tpv = %p\n",(void*)es->pv);
+#if defined(ENABLE_DISASSEMBLER)
for (i=0; i<INT_REG_CNT; ++i) {
printf("\t%-3s = %016llx\n",regs[i],(unsigned long long)es->intregs[i]);
}
for (i=0; i<FLT_REG_CNT; ++i) {
printf("\tfltregs[%2d] = %016llx\n",i,(unsigned long long)es->fltregs[i]);
}
+#endif
#ifdef HAS_4BYTE_STACKSLOT
sp = (u4*) es->sp;
while (nregdescint[--reg] != REG_SAV)
;
if (ss->savedintregs[i] != 0x00dead0000dead00ULL) {
+#if defined(ENABLE_DISASSEMBLER)
printf("\t%-3s = ",regs[reg]);
+#endif
printf("%016llx\n",(unsigned long long) ss->savedintregs[i]);
}
}