version 1.64, 2002/09/01 15:15:07
|
version 1.65, 2002/09/15 20:30:01
|
Line 83 int optind = 1;
|
Line 83 int optind = 1;
|
|
|
Address code_area=0; |
Address code_area=0; |
Address code_here=0; /* does for code-area what HERE does for the dictionary */ |
Address code_here=0; /* does for code-area what HERE does for the dictionary */ |
|
Address start_flush=0; /* start of unflushed code */ |
|
|
static int no_super=0; /* true if compile_prim should not fuse prims */ |
static int no_super=0; /* true if compile_prim should not fuse prims */ |
static int no_dynamic=1; /* true if compile_prim should not generate code */ |
static int no_dynamic=1; /* true if compile_prim should not generate code */ |
Line 363 void alloc_stacks(ImageHeader * header)
|
Line 364 void alloc_stacks(ImageHeader * header)
|
header->fp_stack_base=my_alloc(fsize); |
header->fp_stack_base=my_alloc(fsize); |
header->return_stack_base=my_alloc(rsize); |
header->return_stack_base=my_alloc(rsize); |
header->locals_stack_base=my_alloc(lsize); |
header->locals_stack_base=my_alloc(lsize); |
code_here = code_area = my_alloc(dictsize); |
code_here = start_flush = code_area = my_alloc(dictsize); |
} |
} |
|
|
#warning You can ignore the warnings about clobbered variables in go_forth |
#warning You can ignore the warnings about clobbered variables in go_forth |
Line 516 Label compile_prim(Label prim)
|
Line 517 Label compile_prim(Label prim)
|
memcpy(code_here, last_jump, IND_JUMP_LENGTH); |
memcpy(code_here, last_jump, IND_JUMP_LENGTH); |
code_here += IND_JUMP_LENGTH; |
code_here += IND_JUMP_LENGTH; |
last_jump = 0; |
last_jump = 0; |
|
FLUSH_ICACHE(start_flush, code_here-start_flush); |
|
start_flush=code_here; |
} |
} |
return prim; |
return prim; |
} |
} |
Line 526 Label compile_prim(Label prim)
|
Line 529 Label compile_prim(Label prim)
|
memcpy(code_here, (Address)prim, priminfos[i].length); |
memcpy(code_here, (Address)prim, priminfos[i].length); |
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); |
|
if (last_jump == 0) { |
|
FLUSH_ICACHE(start_flush, code_here-start_flush); |
|
start_flush=code_here; |
|
} |
return (Label)old_code_here; |
return (Label)old_code_here; |
#else /* !defined(DOUBLY_INDIRECT), no code replication */ |
#else /* !defined(DOUBLY_INDIRECT), no code replication */ |
#if !defined(INDIRECT_THREADED) |
#if !defined(INDIRECT_THREADED) |