--- gforth/prim 2012/08/20 23:10:34 1.276 +++ gforth/prim 2012/09/18 15:21:08 1.278 @@ -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 @@ -1516,6 +1528,17 @@ c_addr2 = c_addr1+1; : dup 1+ swap c@ ; +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 \+f83headerstring @@ -2475,6 +2498,15 @@ if (flag) { fp[0]=r; } +float/ ( n1 -- n2 ) gforth float_divide +n2 = n1 / sizeof(Float); + +dfloat/ ( n1 -- n2 ) gforth sfloat_divide +n2 = n1 / sizeof(DFloat); + +sfloat/ ( n1 -- n2 ) gforth dfloat_divide +n2 = n1 / sizeof(SFloat); + \+ \ The following words access machine/OS/installation-dependent