| |
|
| Label compile_prim(Label prim) |
Label compile_prim(Label prim) |
| { |
{ |
| #ifdef DOUBLY_INDIRECT |
#if defined(DOUBLY_INDIRECT) |
| if (prim<((Label)(xts+DOESJUMP)) || prim>((Label)(xts+npriminfos))) { |
if (prim<((Label)(xts+DOESJUMP)) || prim>((Label)(xts+npriminfos))) { |
| fprintf(stderr,"compile_prim encountered xt %p\n", prim); |
fprintf(stderr,"compile_prim encountered xt %p\n", prim); |
| return prim; |
return prim; |
| } else |
} else |
| return prim-((Label)xts)+((Label)vm_prims); |
return prim-((Label)xts)+((Label)vm_prims); |
| #else /* !defined(DOUBLY_INDIRECT) */ |
#elif defined(IND_JUMP_LENGTH) && !defined(VM_PROFILING) && !defined(INDIRECT_THREADED) |
| #if defined(IND_JUMP_LENGTH) && !defined(VM_PROFILING) |
|
| unsigned i; |
unsigned i; |
| Address old_code_here=code_here; |
Address old_code_here=code_here; |
| static Address last_jump=0; |
static Address last_jump=0; |
| code_here += priminfos[i].length; |
code_here += priminfos[i].length; |
| last_jump = (priminfos[i].super_end) ? 0 : (prim+priminfos[i].length); |
last_jump = (priminfos[i].super_end) ? 0 : (prim+priminfos[i].length); |
| return (Label)old_code_here; |
return (Label)old_code_here; |
| #else |
#else /* !defined(DOUBLY_INDIRECT), no code replication */ |
| |
#if !defined(INDIRECT_THREADED) |
| prim = *(Xt)prim; |
prim = *(Xt)prim; |
| return prim; |
|
| #endif |
#endif |
| |
return prim; |
| #endif /* !defined(DOUBLY_INDIRECT) */ |
#endif /* !defined(DOUBLY_INDIRECT) */ |
| } |
} |
| |
|