--- gforth/prim 2005/09/27 13:50:43 1.177 +++ gforth/prim 2005/12/04 13:46:12 1.181 @@ -2444,6 +2444,24 @@ FP=fp; sp=(Cell*)(SYSCALL(Cell*(*)(Cell *, void *))u)(sp, &FP); fp=FP; +w@ ( a_addr -- u ) gforth wfetch +u = *(UWyde*)(a_addr); + +wx@ ( a_addr -- u ) gforth wxfetch +u = *(Wyde*)(a_addr); + +w! ( u a_addr -- ) gforth wstore +*(Wyde*)(a_addr) = u; + +t@ ( a_addr -- u ) gforth tfetch +u = *(UTetrabyte*)(a_addr); + +tx@ ( a_addr -- u ) gforth txfetch +u = *(Tetrabyte*)(a_addr); + +t! ( u a_addr -- ) gforth tstore +*(Tetrabyte*)(a_addr) = u; + \+FFCALL av-start-void ( c_addr -- ) gforth av_start_void @@ -2649,7 +2667,7 @@ ffi-2@ ( a_addr -- d ) gforth ffi_2fetch DLO_IS(d, (Cell*)(*a_addr)); DHI_IS(d, 0); #else -d = *(DCell*)(*a_addr); +d = *(DCell*)(a_addr); #endif ffi-2! ( d a_addr -- ) gforth ffi_2store @@ -2660,7 +2678,7 @@ ffi-2! ( d a_addr -- ) gforth ffi_2store #endif ffi-arg-int ( -- w ) gforth ffi_arg_int -w = *(Cell*)(*clist++); +w = *(int *)(*clist++); ffi-arg-longlong ( -- d ) gforth ffi_arg_longlong #ifdef BUGGY_LONG_LONG @@ -2679,24 +2697,32 @@ r = *(float*)(*clist++); ffi-arg-double ( -- r ) gforth ffi_arg_double r = *(double*)(*clist++); -ffi-ret-int ( -- w ) gforth ffi_ret_int +ffi-ret-void ( -- ) gforth ffi_ret_void +return 0; + +ffi-ret-int ( w -- ) gforth ffi_ret_int *(int*)(ritem) = w; +return 0; -ffi-ret-longlong ( -- d ) gforth ffi_ret_longlong +ffi-ret-longlong ( d -- ) gforth ffi_ret_longlong #ifdef BUGGY_LONG_LONG *(Cell*)(ritem) = DLO(d); #else *(DCell*)(ritem) = d; #endif +return 0; -ffi-ret-ptr ( -- c_addr ) gforth ffi_ret_ptr +ffi-ret-ptr ( c_addr -- ) gforth ffi_ret_ptr *(char **)(ritem) = c_addr; +return 0; -ffi-ret-float ( -- r ) gforth ffi_ret_float +ffi-ret-float ( r -- ) gforth ffi_ret_float *(float*)(ritem) = r; +return 0; -ffi-ret-double ( -- r ) gforth ffi_ret_double +ffi-ret-double ( r -- ) gforth ffi_ret_double *(double*)(ritem) = r; +return 0; \+