Annotation of gforth/contrib/divspeed.fs, revision 1.1
1.1 ! anton 1: \ divspeed.fs
! 2: \
! 3: \ Measure speed of division words in gforth.
! 4: \
! 5: \ Krishna Myneni, 2006-10-26
! 6: (
! 7: In the development version of gforth, code has been added to test for division
! 8: by zero in the division words. We want to measure the performance penalty
! 9: introduced by these tests. Words to be checked are:
! 10:
! 11: /
! 12: MOD
! 13: /MOD
! 14: */
! 15: */MOD
! 16: FM/MOD
! 17: SM/REM
! 18: UM/MOD
! 19: )
! 20:
! 21: : ms@ ( -- u | return time in ms) utime 1 1000 m*/ d>s ;
! 22: : ?allot ( u -- a ) here swap allot ;
! 23: : table ( v1 v2 ... vn n <name> -- | create a table of singles )
! 24: create dup cells ?allot over 1- cells + swap
! 25: 0 ?do dup >r ! r> 1 cells - loop drop ;
! 26:
! 27: 1 31 lshift 1- constant DIVIDEND
! 28: DIVIDEND negate s>d 2constant D_DIVIDEND
! 29: 1000000 constant N
! 30:
! 31: \ Some helpful macros
! 32: variable xt
! 33: s" :noname [ xt @ >name name>string ] 2literal type ms@" 2constant s1
! 34:
! 35: : get-xt ( "op" -- ) bl word find 0= ABORT" Unknown word!" xt ! ;
! 36:
! 37: : testA ( "op" -- )
! 38: get-xt s1 evaluate
! 39: s" DIVIDEND N 1 DO dup I" evaluate xt @ compile,
! 40: s" drop LOOP drop ;" evaluate ; immediate
! 41:
! 42: : testB ( "op" -- )
! 43: get-xt s1 evaluate
! 44: s" DIVIDEND N 1 DO dup I" evaluate xt @ compile,
! 45: s" 2drop LOOP drop ;" evaluate ; immediate
! 46:
! 47: : testC ( "op" -- )
! 48: get-xt s1 evaluate
! 49: s" D_DIVIDEND N 1 DO 2dup I" evaluate xt @ compile,
! 50: s" 2drop LOOP 2drop ;" evaluate ; immediate
! 51:
! 52: : testD ( "op" -- )
! 53: get-xt s1 evaluate
! 54: s" DIVIDEND s>d N 1 DO 2dup I" evaluate xt @ compile,
! 55: s" 2drop LOOP 2drop ;" evaluate ; immediate
! 56:
! 57: \ The tests return the start time in ms
! 58:
! 59: testA /
! 60: testA MOD
! 61: testB /MOD
! 62: testC */MOD
! 63: testC FM/MOD
! 64: testC SM/REM
! 65: testD UM/MOD ( testC causes overflow for UM/MOD )
! 66:
! 67: 7 table tests
! 68:
! 69: : .elapsed ( starttime -- ) ms@ 9 emit swap - 4 .r ." ms" ;
! 70:
! 71: : run-tests
! 72: cr ." Speed Tests:"
! 73: 7 0 DO cr I cells tests + @ execute .elapsed LOOP cr ;
! 74:
! 75:
! 76: run-tests
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>