--- gforth/peeprules.vmg 2003/10/09 20:25:59 1.9 +++ gforth/peeprules.vmg 2004/01/25 12:35:58 1.16 @@ -1,28 +1,55 @@ +\ Gforth superinstructions and stack caching replicas + +\ Copyright (C) 2003 Free Software Foundation, Inc. + +\ This file is part of Gforth. + +\ Gforth is free software; you can redistribute it and/or +\ modify it under the terms of the GNU General Public License +\ as published by the Free Software Foundation; either version 2 +\ of the License, or (at your option) any later version. + +\ This program is distributed in the hope that it will be useful, +\ but WITHOUT ANY WARRANTY; without even the implied warranty of +\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +\ GNU General Public License for more details. + +\ You should have received a copy of the GNU General Public License +\ along with this program; if not, write to the Free Software +\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + \ taken from David Gregg's EuroForth 2001 paper; omitted some sequences +\ eliminated for gforth-native: +\ 1) sequences containing call +\ 2) sequences with immediate arguments not in the first position + +\ no new prim-nums for supers and state-replicas +\E ' noop is output-c-prim-num + super1 = lit + -super2 = lit call +\ super2 = lit call super3 = lit @ -super4 = lit @ call -super5 = @ call +\ super4 = lit @ call +\ super5 = @ call super6 = lit ! -super7 = lit lit -super8 = dup lit -super9 = ! lit -super10 = lit ! lit +\ super7 = lit lit +\ super8 = dup lit +\ super9 = ! lit +\ super10 = lit ! lit super11 = ! ;s super12 = lit + @ -super13 = 0= ?branch -super14 = dup call +\ super13 = 0= ?branch +\ super14 = dup call super15 = useraddr @ super16 = + @ -super17 = lit @ ?branch +\ super17 = lit @ ?branch super18 = lit ! ;s super19 = lit @ and -super20 = = ?branch -super21 = lit lit ! -super22 = @ ?branch +\ super20 = = ?branch +\ super21 = lit lit ! +\ super22 = @ ?branch super23 = useraddr ! -super24 = dup ?branch +\ super24 = dup ?branch super25 = @ ;s super26 = lit @ + super27 = dup @ @@ -38,8 +65,8 @@ super27 = dup @ \E prim-states swap \ 737988 \E S0 S2 state-prim swap \E S1 S2 state-prim swap -\E S2 S3 state-prim swap -\E S3 S2 state-prim swap +\ \E S2 S3 state-prim swap +\ \E S3 S2 state-prim swap \E prim-states c@ \ 651406 \E prim-states = \ 590006 \E prim-states 0= \ 584487 @@ -57,20 +84,21 @@ super27 = dup @ \E S0 S1 state-prim over \E S1 S2 state-prim over \E S2 S1 state-prim over -\E S3 S2 state-prim over +\ \E S3 S2 state-prim over \E prim-states negate \ 257417 \E prim-states cells \ 254644 \E prim-states rot \ 220273 -\E S3 S1 state-prim rot -\E S2 S3 state-prim rot -\E S1 S3 state-prim rot -\E S0 S3 state-prim rot +\ \E S3 S1 state-prim rot +\ \E S2 S3 state-prim rot +\ \E S1 S3 state-prim rot +\ \E S0 S3 state-prim rot \E prim-states ! \ 218672 \E prim-states 2dup \ 211315 +\E S0 S1 state-prim 2dup \E S0 S2 state-prim 2dup -\E S1 S3 state-prim 2dup +\ \E S1 S3 state-prim 2dup \E S2 S2 state-prim 2dup -\E S3 S1 state-prim 2dup +\ \E S3 S1 state-prim 2dup \ \E branch-states lit-perform \ 188331 \E prim-states <> \ 179502 \E prim-states c! \ 179332 @@ -107,16 +135,16 @@ super27 = dup @ \E S0 S1 state-prim nip \E prim-states within \ 51075 \E prim-states 1- \ 47441 -\E branch-states execute \ 46674 +\ \E branch-states execute \ 46674 \ !! if_spTOS problem \E prim-states lp- \ 45385 -\E branch-states perform \ 38756 +\ \E branch-states perform \ 38756 \ !! if_spTOS problem \E prim-states xor \ 35599 \E prim-states @local# \ 34586 \ \E prim-states pick \ 32015 \E prim-states u> \ 29373 \E prim-states -rot \ 26211 -\E S3 S2 state-prim -rot -\E S1 S3 state-prim -rot +\ \E S3 S2 state-prim -rot +\ \E S1 S3 state-prim -rot \E prim-states 2drop \ 25418 \E S0 S0 state-prim 2drop \E S1 S0 state-prim 2drop @@ -170,8 +198,8 @@ super27 = dup @ \E prim-states > \ 411 \ \E prim-states (hashlfind) \ 397 \E prim-states 2swap \ 336 -\E S0 S3 state-prim 2swap -\E S1 S3 state-prim 2swap +\ \E S0 S3 state-prim 2swap +\ \E S1 S3 state-prim 2swap \E prim-states laddr# \ 335 \ \E prim-states faxpy \ 286 \ \E prim-states (next) \ 272 @@ -181,7 +209,7 @@ super27 = dup @ \E branch-states (-do) \ 169 \E prim-states 2over \ 165 \E S0 S2 state-prim 2over -\E S1 S3 state-prim 2over +\ \E S1 S3 state-prim 2over \E prim-states under+ \ 154 \E prim-states dnegate \ 128 \E prim-states u<> \ 128