| : stores ( -- ) |
: stores ( -- ) |
| prim prim-effect-out prim prim-effect-out-end @ ['] store map-items ; |
prim prim-effect-out prim prim-effect-out-end @ ['] store map-items ; |
| |
|
| |
: output-super-end ( -- ) |
| |
prim prim-c-code 2@ s" SET_IP" search if |
| |
." SUPER_END;" cr |
| |
endif |
| |
2drop ; |
| |
|
| : output-c-tail ( -- ) |
: output-c-tail ( -- ) |
| \ the final part of the generated C code |
\ the final part of the generated C code |
| |
output-super-end |
| ." NEXT_P1;" cr |
." NEXT_P1;" cr |
| stores |
stores |
| fill-tos |
fill-tos |
| ." ip += " inst-stream stack-in @ 1+ 0 .r ." ;" cr |
." ip += " inst-stream stack-in @ 1+ 0 .r ." ;" cr |
| ." } else " ; |
." } else " ; |
| |
|
| |
: output-profile ( -- ) |
| |
\ generate code for postprocessing the VM block profile stuff |
| |
." if (*ip == VM_INST(" function-number @ 0 .r ." )) {" cr |
| |
." add_inst(b, " quote prim prim-name 2@ type quote ." );" cr |
| |
." ip += " inst-stream stack-in @ 1+ 0 .r ." ;" cr |
| |
prim prim-c-code 2@ s" SET_IP" search nip nip |
| |
prim prim-c-code 2@ s" SUPER_END" search nip nip or if |
| |
." return;" cr |
| |
endif |
| |
." } else " cr ; |
| |
|
| : gen-arg-parm { item -- } |
: gen-arg-parm { item -- } |
| item item-stack @ inst-stream = if |
item item-stack @ inst-stream = if |
| ." , " item item-type @ type-c-name 2@ type space |
." , " item item-type @ type-c-name 2@ type space |
| : process-combined ( -- ) |
: process-combined ( -- ) |
| combined combined-prims num-combined @ cells |
combined combined-prims num-combined @ cells |
| combinations ['] constant insert-wordlist |
combinations ['] constant insert-wordlist |
| |
combined-prims num-combined @ 1- th ( last-part ) |
| |
@ prim-c-code 2@ prim prim-c-code 2! \ used by output-super-end |
| prim compute-effects |
prim compute-effects |
| prim init-effects |
prim init-effects |
| output-combined perform ; |
output-combined perform ; |