--- gforth/prim 2010/04/05 22:17:56 1.246 +++ gforth/prim 2010/04/17 21:32:49 1.247 @@ -233,14 +233,12 @@ SET_IP(DOES_CODE1(CFA)); ""just a slot to have an encoding for the DOESJUMP, which is no longer used anyway (!! eliminate this)"" -(doabicode) ( s:... f:... -- s:... f:...) gforth-internal paren_doabicode +(doabicode) ( ... -- ...) gforth-internal paren_doabicode ""run-time routine for ABI-CODE definitions"" -struct abi_code_ret_t { - Cell *sp; - double * fp; -} ret = ((struct abi_code_ret_t(*)(Cell *, double *))(PFA(CFA)))(sp, fp); -sp = ret.sp; -fp = ret.fp; +abifunc *f = (abifunc *)PFA(CFA); +Float *fp_mem = fp; +sp = (*f)(sp, &fp_mem); +fp = fp_mem; #ifdef NO_IP INST_TAIL; goto *next_code; @@ -638,13 +636,11 @@ k ( R:w R:w1 R:w2 R:w3 R:w4 -- w R:w R:w \ digit is high-level: 0/0% -abi-call ( #a_callee s:... f:... -- s:... f:... ) gforth abi_call -struct abi_code_ret_t { - Cell *sp; - double * fp; -} ret = ((struct abi_code_ret_t(*)(Cell *, double *))(a_callee))(sp, fp); -sp = ret.sp; -fp = ret.fp; +abi-call ( #a_callee ... -- ... ) gforth abi_call +abifunc *f = (abifunc *)a_callee; +Float *fp_mem = fp; +sp = (*f)(sp, &fp_mem); +fp = fp_mem; \g strings