--- gforth/prim 2001/01/27 20:14:55 1.71 +++ gforth/prim 2001/02/24 13:44:39 1.74 @@ -72,7 +72,6 @@ \ df_.* DFloat * \ sf_.* SFloat * \ xt.* XT -\ wid.* WID \ f83name.* F83Name * \E get-current prefixes set-current @@ -91,7 +90,6 @@ \E s" DFloat *" single data-stack type-prefix df_ \E s" SFloat *" single data-stack type-prefix sf_ \E s" Xt" single data-stack type-prefix xt -\E s" WID" single data-stack type-prefix wid \E s" struct F83Name *" single data-stack type-prefix f83name \E s" struct Longname *" single data-stack type-prefix longname \E @@ -1187,7 +1185,7 @@ f83name2=f83name1; r> @ REPEAT THEN nip nip ; : (find-samelen) ( u f83name1 -- u f83name2/0 ) - BEGIN 2dup cell+ c@ $1F and <> WHILE @ dup 0= UNTIL THEN ; + BEGIN 2dup cell+ c@ $1F and <> WHILE @ dup 0= UNTIL THEN ; \+hash @@ -2288,13 +2286,13 @@ for (; longname1 != NULL; longname1 = (s break; longname2=longname1; : - BEGIN dup WHILE (find-samelen) dup WHILE - >r 2dup r@ cell+ char+ capscomp 0= + BEGIN dup WHILE (findl-samelen) dup WHILE + >r 2dup r@ cell+ cell+ capscomp 0= IF 2drop r> EXIT THEN r> @ REPEAT THEN nip nip ; -: (find-samelen) ( u longname1 -- u longname2/0 ) - BEGIN 2dup cell+ c@ $1F and <> WHILE @ dup 0= UNTIL THEN ; +: (findl-samelen) ( u longname1 -- u longname2/0 ) + BEGIN 2dup cell+ @ lcount-mask and <> WHILE @ dup 0= UNTIL THEN ; \+hash @@ -2314,8 +2312,8 @@ while(a_addr != NULL) } : BEGIN dup WHILE - 2@ >r >r dup r@ cell+ c@ $1F and = - IF 2dup r@ cell+ char+ capscomp 0= + 2@ >r >r dup r@ cell+ @ lcount-mask and = + IF 2dup r@ cell+ cell+ capscomp 0= IF 2drop r> rdrop EXIT THEN THEN rdrop r> REPEAT nip nip ; @@ -2337,10 +2335,28 @@ while(a_addr != NULL) } : BEGIN dup WHILE - 2@ >r >r dup r@ cell+ c@ $1F and = - IF 2dup r@ cell+ char+ -text 0= + 2@ >r >r dup r@ cell+ @ lcount-mask and = + IF 2dup r@ cell+ cell+ -text 0= IF 2drop r> rdrop EXIT THEN THEN rdrop r> REPEAT nip nip ; \+ + +primtable ( -- wprimtable ) new +""wprimtable is a table containing the xts of the primitives indexed +by sequence-number in prim (for use in prepare-peephole-table)."" +wprimtable = (Cell)primtable(symbols+DOESJUMP+1,MAX_SYMBOLS); + +prepare-peephole-table ( wprimtable -- wpeeptable ) new prepare_peephole_opt +""wpeeptable is a data structure used by @code{peephole-opt}; it is +constructed by combining a primitives table with a simple peephole +optimization table."" +wpeeptable = prepare_peephole_table((Xt *)wprimtable); + +peephole-opt ( xt1 xt2 wpeeptable -- xt ) new peephole_opt +""xt is the combination of xt1 and xt2 (according to wpeeptable); if +they cannot be combined, xt is 0."" +xt = peephole_opt(xt1, xt2, wpeeptable); + +lit_plus = lit +