File:  [gforth] / gforth / peeprules.vmg
Revision 1.16: download - view: text, annotated - select for diffs
Sun Jan 25 12:35:58 2004 UTC (20 years, 1 month ago) by anton
Branches: MAIN
CVS tags: HEAD
minore bugfixes (Makefile.in)
enabled 3-state stack caching for gforth-fast and gforth-native
   bugfixes (EXECUTE and PERFORM; spbREG use)
   explicit register allocation to spb for gforth-native, but not gforth-fast
   Due to the shortest-path algorithm this means that gforth-fast uses only
     S0 and S1, not S2, so we could keep that.
     However, we probably want to use more states etc. for other
     architectures, so we may want to have a way to select different
       cache.vmg and different peeprules.vmg files for different
       archs, builds, and binaries.

    1: \ Gforth superinstructions and stack caching replicas
    2: 
    3: \ Copyright (C) 2003 Free Software Foundation, Inc.
    4: 
    5: \ This file is part of Gforth.
    6: 
    7: \ Gforth is free software; you can redistribute it and/or
    8: \ modify it under the terms of the GNU General Public License
    9: \ as published by the Free Software Foundation; either version 2
   10: \ of the License, or (at your option) any later version.
   11: 
   12: \ This program is distributed in the hope that it will be useful,
   13: \ but WITHOUT ANY WARRANTY; without even the implied warranty of
   14: \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   15: \ GNU General Public License for more details.
   16: 
   17: \ You should have received a copy of the GNU General Public License
   18: \ along with this program; if not, write to the Free Software
   19: \ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
   20: 
   21: \ taken from David Gregg's EuroForth 2001 paper; omitted some sequences
   22: \ eliminated for gforth-native:
   23: \ 1) sequences containing call
   24: \ 2) sequences with immediate arguments not in the first position
   25: 
   26: \ no new prim-nums for supers and state-replicas
   27: \E ' noop is output-c-prim-num
   28: 
   29: super1 = lit +
   30: \ super2 = lit call
   31: super3 = lit @
   32: \ super4 = lit @ call
   33: \ super5 = @ call
   34: super6 = lit !
   35: \ super7 = lit lit
   36: \ super8 = dup lit
   37: \ super9 = ! lit
   38: \ super10 = lit ! lit
   39: super11 = ! ;s
   40: super12 = lit + @
   41: \ super13 = 0= ?branch
   42: \ super14 = dup call
   43: super15 = useraddr @
   44: super16 = + @
   45: \ super17 = lit @ ?branch
   46: super18 = lit ! ;s
   47: super19 = lit @ and
   48: \ super20 = = ?branch
   49: \ super21 = lit lit !
   50: \ super22 = @ ?branch
   51: super23 = useraddr !
   52: \ super24 = dup ?branch
   53: super25 = @ ;s
   54: super26 = lit @ +
   55: super27 = dup @
   56: 
   57: \F 0 [if]
   58: 
   59: \ \E prim-states ;s                   \ 2950159
   60: \E prim-states lit                  \ 2802835
   61: \ \E prim-states call                 \ 2558373
   62: \E prim-states @                    \ 2244351
   63: \E branch-states ?branch              \ 1134432
   64: \E prim-states lit@                 \ 1051813
   65: \E prim-states swap                 \ 737988
   66: \E S0 S2 state-prim swap
   67: \E S1 S2 state-prim swap
   68: \  \E S2 S3 state-prim swap
   69: \  \E S3 S2 state-prim swap
   70: \E prim-states c@                   \ 651406
   71: \E prim-states =                    \ 590006
   72: \E prim-states 0=                   \ 584487
   73: \E prim-states dup                  \ 566855
   74: \E S0 S1 state-prim dup
   75: \E prim-states +                    \ 566003
   76: \E prim-states i                    \ 502908
   77: \E prim-states +!                   \ 448925
   78: \ \E prim-states branch               \ 409561
   79: \ \E prim-states (loop)               \ 379646
   80: \ \E prim-states lp!                  \ 326743
   81: \E prim-states and                  \ 309427
   82: \E prim-states useraddr             \ 303254
   83: \E prim-states over                 \ 283556
   84: \E S0 S1 state-prim over
   85: \E S1 S2 state-prim over
   86: \E S2 S1 state-prim over
   87: \  \E S3 S2 state-prim over
   88: \E prim-states negate               \ 257417
   89: \E prim-states cells                \ 254644
   90: \E prim-states rot                  \ 220273
   91: \  \E S3 S1 state-prim rot
   92: \  \E S2 S3 state-prim rot
   93: \  \E S1 S3 state-prim rot
   94: \  \E S0 S3 state-prim rot
   95: \E prim-states !                    \ 218672
   96: \E prim-states 2dup                 \ 211315
   97: \E S0 S1 state-prim 2dup
   98: \E S0 S2 state-prim 2dup
   99: \  \E S1 S3 state-prim 2dup
  100: \E S2 S2 state-prim 2dup
  101: \  \E S3 S1 state-prim 2dup
  102: \ \E branch-states lit-perform          \ 188331
  103: \E prim-states <>                   \ 179502
  104: \E prim-states c!                   \ 179332
  105: \E prim-states lit+                 \ 179156
  106: \E prim-states drop                 \ 173995
  107: \E S0 S0 state-prim drop
  108: \E prim-states lshift               \ 164671
  109: \E prim-states /mod                 \ 164670
  110: \E prim-states >r                   \ 145247
  111: \E prim-states r>                   \ 133792
  112: \ \E branch-states does-exec            \ 120944
  113: \E prim-states cell+                \ 116183
  114: \E prim-states lp+!#                \ 106697 \ --
  115: \E prim-states -                    \ 106245
  116: \E prim-states unloop               \ 98938 \ --
  117: \E prim-states lp+                  \ 87190 \ --
  118: \E prim-states >=                   \ 80994
  119: \E prim-states tuck                 \ 78696
  120: \E S2 S2 state-prim tuck
  121: \E prim-states /string              \ 78595
  122: \E prim-states char+                \ 77542
  123: \ \E prim-states ?dup                 \ 76850
  124: \E prim-states @local0              \ 75322
  125: \E prim-states min                  \ 75264
  126: \ \E prim-states compare              \ 65603
  127: \E branch-states (u+do)               \ 63823
  128: \ \E prim-states (read-line)          \ 63823
  129: \E prim-states 2>r                  \ 62646
  130: \E prim-states 2r>                  \ 62644
  131: \E prim-states 2r@                  \ 61338
  132: \E prim-states 2@                   \ 61067
  133: \E prim-states nip                  \ 54961
  134: \E S1 S1 state-prim nip
  135: \E S0 S1 state-prim nip
  136: \E prim-states within               \ 51075
  137: \E prim-states 1-                   \ 47441
  138: \ \E branch-states execute              \ 46674 \ !! if_spTOS problem
  139: \E prim-states lp-                  \ 45385
  140: \ \E branch-states perform              \ 38756 \ !! if_spTOS problem
  141: \E prim-states xor                  \ 35599
  142: \E prim-states @local#              \ 34586
  143: \ \E prim-states pick                 \ 32015
  144: \E prim-states u>                   \ 29373
  145: \E prim-states -rot                 \ 26211
  146: \  \E S3 S2 state-prim -rot
  147: \  \E S1 S3 state-prim -rot
  148: \E prim-states 2drop                \ 25418
  149: \E S0 S0 state-prim 2drop
  150: \E S1 S0 state-prim 2drop
  151: \ \E prim-states (tablelfind)         \ 22243
  152: \E prim-states or                   \ 21587
  153: \E prim-states @local2              \ 20859
  154: \E branch-states (+loop)              \ 20006
  155: \E prim-states 1+                   \ 17944
  156: \E prim-states rdrop                \ 17902
  157: \E branch-states (?do)                \ 17348
  158: \E prim-states max                  \ 16948
  159: \E prim-states 2*                   \ 15606
  160: \ \E prim-states filename-match       \ 15003
  161: \ \E prim-states (listlfind)          \ 13074
  162: \ \E prim-states sp@                  \ 12741
  163: \ \E prim-states fp@                  \ 12384
  164: \ \E prim-states um/mod               \ 12288
  165: \E prim-states 2!                   \ 11904
  166: \ \E prim-states fill                 \ 10781
  167: \ \E prim-states (parse-white)        \ 10624
  168: \E branch-states (do)                 \ 10516
  169: \ \E prim-states (hashkey1)           \ 10239
  170: \E prim-states u<                   \ 9602
  171: \ \E prim-states write-file           \ 8973
  172: \E prim-states count                \ 8873
  173: \ \E prim-states rp@                  \ 8410
  174: \E prim-states 0<                   \ 8380
  175: \E prim-states <                    \ 7741
  176: \E prim-states @local1              \ 7458
  177: \ \E prim-states move                 \ 7050
  178: \E prim-states u>=                  \ 6138
  179: \E branch-states (+do)                \ 5863
  180: \ \E prim-states va-return-double     \ 5517
  181: \E prim-states um*                  \ 5342
  182: \E prim-states toupper              \ 3517
  183: \ \E prim-states f@local1             \ 2907
  184: \ \E prim-states rp!                  \ 2859
  185: \ \E prim-states ?dup-?branch         \ 2829
  186: \E prim-states d+                   \ 2671
  187: \ \E prim-states ftuck                \ 2636
  188: \ \E prim-states read-file            \ 2623
  189: \ \E prim-states ms                   \ 2454
  190: \ \E prim-states (s+loop)             \ 2429
  191: \ \E prim-states allocate             \ 1869
  192: \E prim-states *                    \ 1520
  193: \E prim-states 0<>                  \ 925
  194: \ \E prim-states noop                 \ 715
  195: \E prim-states aligned              \ 714
  196: \E prim-states u<=                  \ 684
  197: \E prim-states i'                   \ 684
  198: \E prim-states >                    \ 411
  199: \ \E prim-states (hashlfind)          \ 397
  200: \E prim-states 2swap                \ 336
  201: \  \E S0 S3 state-prim 2swap
  202: \  \E S1 S3 state-prim 2swap
  203: \E prim-states laddr#               \ 335
  204: \ \E prim-states faxpy                \ 286
  205: \ \E prim-states (next)               \ 272
  206: \ \E prim-states (-loop)-lp+!#        \ 248
  207: \E prim-states <=                   \ 199
  208: \E prim-states invert               \ 170
  209: \E branch-states (-do)                \ 169
  210: \E prim-states 2over                \ 165
  211: \E S0 S2 state-prim 2over
  212: \  \E S1 S3 state-prim 2over
  213: \E prim-states under+               \ 154
  214: \E prim-states dnegate              \ 128
  215: \E prim-states u<>                  \ 128
  216: \E prim-states 0>                   \ 122
  217: \ \E prim-states (loop)-lp+!#         \ 118
  218: \E prim-states j                    \ 117
  219: \E prim-states float+               \ 78
  220: \ \E prim-states (for)                \ 68
  221: \E prim-states 2rdrop               \ 60 \ --
  222: \ \E prim-states f!                   \ 14
  223: \E prim-states >l                   \ 14
  224: \ \E prim-states close-file           \ 5
  225: \ \E prim-states call-c               \ 4
  226: \ \E prim-states reposition-file      \ 3
  227: \E prim-states /                    \ 3
  228: \ \E prim-states resize-file          \ 2
  229: \ \E prim-states free                 \ 2
  230: \E prim-states 2/                   \ 2
  231: \ \E prim-states up!                  \ 1
  232: \ \E prim-states stdin                \ 1
  233: \ \E prim-states key?-file            \ 1
  234: \ \E prim-states flush-icache         \ 1
  235: \ \E prim-states cmove                \ 1
  236: \ \E prim-states (system)             \ 1
  237: 
  238: \E ' noop is output-nextp0
  239: \E ' noop is output-nextp1
  240: 
  241: \E gen-transitions noop
  242: 
  243: \F [ENDIF]

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