minmax.fs 1.68 KB
Newer Older
bp's avatar
bp committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
\ Vorschlag zur Optimierung
1 [IF]
code min  ( n1 n2 -- )  dx pop  ax dx cmp  dx ax cmovl  next end-code macro
code max  ( n1 n2 -- )  dx pop  ax dx cmp  dx ax cmovnle  next end-code macro
code umin  ( n1 n2 -- )  dx pop  ax dx cmp  dx ax cmovb  next end-code macro
code umax  ( n1 n2 -- )  dx pop  ax dx cmp  dx ax cmovnbe  next end-code macro
code abs  ( n -- +n )  cwd  dx ax xor  dx ax sub  next  end-code macro
[THEN]


\ serialize instructions
code 0ticks  ( -- )  ax push  bx push  cpuid  bx pop  ax pop  next end-code macro

\ read time-stamp counter
code ticks  ( -- ud )  ax push  rdtsc  ax push  dx ax mov  next end-code macro

: .ticks  ( ud1 ud2 -- )  2swap d- ud. ;


\ Benchmarks
: cal   0ticks ticks ticks .ticks ;
: bmin1  0ticks ticks -1 2 min drop ticks .ticks ;
: bmin2  0ticks ticks 1 -2 min drop ticks .ticks ;
: bmax1  0ticks ticks -1 2 max drop ticks .ticks ;
: bmax2  0ticks ticks 1 -2 max drop ticks .ticks ;
: bumin1  0ticks ticks -1 2 umin drop ticks .ticks ;
: bumin2  0ticks ticks 1 -2 umin drop ticks .ticks ;
: bumax1  0ticks ticks -1 2 umax drop ticks .ticks ;
: bumax2  0ticks ticks 1 -2 umax drop ticks .ticks ;
: babs1  0ticks ticks  42 abs drop ticks .ticks ;
: babs2  0ticks ticks -42 abs drop ticks .ticks ;

.( cal:) cal cal cal cal cal cr
.( min:) bmin1 bmin1 bmin1 bmin1 bmin1 cr
.( min:) bmin2 bmin2 bmin2 bmin2 bmin2 cr
.( max:) bmax1 bmax1 bmax1 bmax1 bmax1 cr
.( max:) bmax2 bmax2 bmax2 bmax2 bmax2 cr
.( umin:) bumin1 bumin1 bumin1 bumin1 bumin1 cr
.( umin:) bumin2 bumin2 bumin2 bumin2 bumin2 cr
.( umax:) bumax1 bumax1 bumax1 bumax1 bumax1 cr
.( umax:) bumax2 bumax2 bumax2 bumax2 bumax2 cr
.( abs:) babs1 babs1 babs1 babs1 babs1 cr
.( abs:) babs2 babs2 babs2 babs2 babs2 cr