--- gforth/prim 2005/12/31 15:46:10 1.184 +++ gforth/prim 2006/01/28 17:55:31 1.186 @@ -1229,7 +1229,7 @@ useraddr ( #u -- a_addr ) new a_addr = (Cell *)(up+u); up! ( a_addr -- ) gforth up_store -UP=up=(char *)a_addr; +gforth_UP=up=(char *)a_addr; : up ! ; Variable UP @@ -1788,11 +1788,11 @@ access the stack itself. The stack point variables @code{SP} and @code{FP}."" /* This is a first attempt at support for calls to C. This may change in the future */ -FP=fp; -SP=sp; +gforth_FP=fp; +gforth_SP=sp; ((void (*)())w)(); -sp=SP; -fp=FP; +sp=gforth_SP; +fp=gforth_FP; \+ \+file @@ -2440,27 +2440,33 @@ u3 = 0; #endif wcall ( ... u -- ... ) gforth -FP=fp; -sp=(Cell*)(SYSCALL(Cell*(*)(Cell *, void *))u)(sp, &FP); -fp=FP; - -w@ ( a_addr -- u ) gforth wfetch -u = *(UWyde*)(a_addr); - -sw@ ( a_addr -- u ) gforth swfetch -u = *(Wyde*)(a_addr); - -w! ( u a_addr -- ) gforth wstore -*(Wyde*)(a_addr) = u; - -l@ ( a_addr -- u ) gforth lfetch -u = *(UTetrabyte*)(a_addr); - -sl@ ( a_addr -- u ) gforth slfetch -u = *(Tetrabyte*)(a_addr); - -l! ( u a_addr -- ) gforth lstore -*(Tetrabyte*)(a_addr) = u; +gforth_FP=fp; +sp=(Cell*)(SYSCALL(Cell*(*)(Cell *, void *))u)(sp, &gforth_FP); +fp=gforth_FP; + +uw@ ( c_addr -- u ) gforth u_w_fetch +""@i{u} is the zero-extended 16-bit value stored at @i{c_addr}."" +u = *(UWyde*)(c_addr); + +sw@ ( c_addr -- n ) gforth s_w_fetch +""@i{n} is the sign-extended 16-bit value stored at @i{c_addr}."" +n = *(Wyde*)(c_addr); + +w! ( w c_addr -- ) gforth w_store +""Store the bottom 16 bits of @i{w} at @i{c_addr}."" +*(Wyde*)(c_addr) = w; + +ul@ ( c_addr -- u ) gforth u_l_fetch +""@i{u} is the zero-extended 32-bit value stored at @i{c_addr}."" +u = *(UTetrabyte*)(c_addr); + +sl@ ( c_addr -- n ) gforth s_l_fetch +""@i{n} is the sign-extended 32-bit value stored at @i{c_addr}."" +n = *(Tetrabyte*)(c_addr); + +l! ( w c_addr -- ) gforth l_store +""Store the bottom 32 bits of @i{w} at @i{c_addr}."" +*(Tetrabyte*)(c_addr) = w; \+FFCALL @@ -2565,7 +2571,7 @@ REST_REGS c_addr = prv; alloc-callback ( a_ip -- c_addr ) gforth alloc_callback -c_addr = (char *)alloc_callback(engine_callback, (Xt *)a_ip); +c_addr = (char *)alloc_callback(gforth_callback, (Xt *)a_ip); va-start-void ( -- ) gforth va_start_void va_start_void(clist); @@ -2662,7 +2668,7 @@ ffi_call(a_cif, a_ip, a_rvalue, a_avalue REST_REGS ffi-prep-closure ( a_ip a_cif a_closure -- w ) gforth ffi_prep_closure -w = ffi_prep_closure(a_closure, a_cif, ffi_callback, a_ip); +w = ffi_prep_closure(a_closure, a_cif, gforth_callback, a_ip); ffi-2@ ( a_addr -- d ) gforth ffi_2fetch #ifdef BUGGY_LONG_LONG