--- gforth/prim 2012/09/17 19:58:36 1.277 +++ gforth/prim 2012/12/31 15:25:18 1.280 @@ -1,6 +1,6 @@ \ Gforth primitives -\ Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007,2008,2009,2010,2011 Free Software Foundation, Inc. +\ Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012 Free Software Foundation, Inc. \ This file is part of Gforth. @@ -1109,7 +1109,7 @@ if (u1 select ; umin ( u1 u2 -- u ) core if (u1 IF swap THEN drop ; + 2dup u< select ; + +mux ( u1 u2 u3 -- u ) gforth +""multiplex @i{u1} for 1 bits in @i{u3}, @i{u2} for 0 bits in @i{u3} into @i{u}"" +u = (u3 & u1) | (~u3 & u2); +: + tuck and >r invert and r> ; + +select ( u1 u2 f -- u ) gforth +""select @i{u1} if @i{f} is true, @i{u2} if false."" +u = f ? u1 : u2; +: + IF swap THEN nip ; \g compare @@ -1519,6 +1531,13 @@ c_addr2 = c_addr1+1; cell/ ( n1 -- n2 ) gforth cell_divide ""@i{n2} is the number of cells that fit into @i{n1}"" n2 = n1 / sizeof(Cell); +: + [ cell + 2/ dup [IF] ] 2/ [ [THEN] + 2/ dup [IF] ] 2/ [ [THEN] + 2/ dup [IF] ] 2/ [ [THEN] + 2/ dup [IF] ] 2/ [ [THEN] + drop ] ; \g compiler @@ -2083,7 +2102,7 @@ clock_gettime(CLOCK_REALTIME,&time1); #else struct timeval time2; gettimeofday(&time2,NULL); -time1.tv_sec = time2.tv_sec;1 +time1.tv_sec = time2.tv_sec; time1.tv_nsec = time2.tv_usec*1000; #endif dtime = timespec2ns(&time1);