--- gforth/prim 2005/11/20 23:15:42 1.178 +++ gforth/prim 2005/12/11 20:08:09 1.183 @@ -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); + +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; + \+FFCALL av-start-void ( c_addr -- ) gforth av_start_void @@ -2639,23 +2657,19 @@ ffi-prep-cif ( a_atypes n a_rtype a_cif w = ffi_prep_cif(a_cif, FFI_DEFAULT_ABI, n, a_rtype, a_atypes); ffi-call ( a_avalues a_rvalue a_ip a_cif -- ) gforth ffi_call +SAVE_REGS ffi_call(a_cif, a_ip, a_rvalue, a_avalues); +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); -ffi-i@ ( a_addr -- n ) gforth ffi_ifetch -n = *(int*)(*a_addr); - -ffi-i! ( n a_addr -- ) gforth ffi_istore -*(int*)(a_addr) = n; - ffi-2@ ( a_addr -- d ) gforth ffi_2fetch #ifdef BUGGY_LONG_LONG 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