Diff for /gforth/prim between versions 1.194 and 1.197

version 1.194, 2006/05/25 22:10:16 version 1.197, 2006/10/21 22:13:48
Line 809  n = n1*n2; Line 809  n = n1*n2;
   
 /       ( n1 n2 -- n )          core    slash  /       ( n1 n2 -- n )          core    slash
 n = n1/n2;  n = n1/n2;
 if(FLOORED_DIV && ((n1^n2) < 0) && (n1%n2 != 0)) n--;  if (CHECK_DIVISION && (n2 == 0))
     throw(-10);
   if (CHECK_DIVISION && n2 == -1 && n1 == CELL_MIN)
     throw(-11);
   if (FLOORED_DIV && ((n1^n2) < 0) && (n1%n2 != 0))
     n--;
 :  :
  /mod nip ;   /mod nip ;
   
 mod     ( n1 n2 -- n )          core  mod     ( n1 n2 -- n )          core
 n = n1%n2;  n = n1%n2;
   if (CHECK_DIVISION && (n2 == 0))
     throw(-10);
   if (CHECK_DIVISION && n2 == -1 && n1 == CELL_MIN)
     throw(-11);
 if(FLOORED_DIV && ((n1^n2) < 0) && n!=0) n += n2;  if(FLOORED_DIV && ((n1^n2) < 0) && n!=0) n += n2;
 :  :
  /mod drop ;   /mod drop ;
Line 822  if(FLOORED_DIV && ((n1^n2) < 0) && n!=0) Line 831  if(FLOORED_DIV && ((n1^n2) < 0) && n!=0)
 /mod    ( n1 n2 -- n3 n4 )              core            slash_mod  /mod    ( n1 n2 -- n3 n4 )              core            slash_mod
 n4 = n1/n2;  n4 = n1/n2;
 n3 = n1%n2; /* !! is this correct? look into C standard! */  n3 = n1%n2; /* !! is this correct? look into C standard! */
   if (CHECK_DIVISION && (n2 == 0))
     throw(-10);
   if (CHECK_DIVISION && n2 == -1 && n1 == CELL_MIN)
     throw(-11);
 if (FLOORED_DIV && ((n1^n2) < 0) && n3!=0) {  if (FLOORED_DIV && ((n1^n2) < 0) && n3!=0) {
   n4--;    n4--;
   n3+=n2;    n3+=n2;
Line 2698  w = ffi_prep_closure((ffi_closure *)a_cl Line 2711  w = ffi_prep_closure((ffi_closure *)a_cl
   
 ffi-2@ ( a_addr -- d )  gforth ffi_2fetch  ffi-2@ ( a_addr -- d )  gforth ffi_2fetch
 #ifdef BUGGY_LONG_LONG  #ifdef BUGGY_LONG_LONG
 DLO_IS(d, (Cell*)(*a_addr));  DLO_IS(d, *(Cell*)(*a_addr));
 DHI_IS(d, 0);  DHI_IS(d, 0);
 #else  #else
 d = *(DCell*)(a_addr);  d = *(DCell*)(a_addr);
Line 2719  w = *(long *)(*gforth_clist++); Line 2732  w = *(long *)(*gforth_clist++);
   
 ffi-arg-longlong ( -- d )       gforth ffi_arg_longlong  ffi-arg-longlong ( -- d )       gforth ffi_arg_longlong
 #ifdef BUGGY_LONG_LONG  #ifdef BUGGY_LONG_LONG
 DLO_IS(d, (Cell*)(*gforth_clist++));  DLO_IS(d, *(Cell*)(*gforth_clist++));
 DHI_IS(d, -((Cell*)(*gforth_clist++)<0));  DHI_IS(d, -(*(Cell*)(*gforth_clist++)<0));
 #else  #else
 d = *(DCell*)(*gforth_clist++);  d = *(DCell*)(*gforth_clist++);
 #endif  #endif
   
 ffi-arg-dlong ( -- d )  gforth ffi_arg_dlong  ffi-arg-dlong ( -- d )  gforth ffi_arg_dlong
 #ifdef BUGGY_LONG_LONG  #ifdef BUGGY_LONG_LONG
 DLO_IS(d, (Cell*)(*gforth_clist++));  DLO_IS(d, *(Cell*)(*gforth_clist++));
 DHI_IS(d, -((Cell*)(*gforth_clist++)<0));  DHI_IS(d, -(*(Cell*)(*gforth_clist++)<0));
 #else  #else
 d = *(Cell*)(*gforth_clist++);  d = *(Cell*)(*gforth_clist++);
 #endif  #endif
Line 2766  ffi-ret-dlong ( d -- ) gforth ffi_ret_dl Line 2779  ffi-ret-dlong ( d -- ) gforth ffi_ret_dl
 return 0;  return 0;
   
 ffi-ret-long ( n -- )   gforth ffi_ret_long  ffi-ret-long ( n -- )   gforth ffi_ret_long
 #ifdef BUGGY_LONG_LONG  
 *(Cell*)(gforth_ritem) = DLO(n);  
 #else  
 *(Cell*)(gforth_ritem) = n;  *(Cell*)(gforth_ritem) = n;
 #endif  
 return 0;  return 0;
   
 ffi-ret-ptr ( c_addr -- )       gforth ffi_ret_ptr  ffi-ret-ptr ( c_addr -- )       gforth ffi_ret_ptr

Removed from v.1.194  
changed lines
  Added in v.1.197


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>