rAmuy@@@ @(@0@8@@@H@0   0 rtt`)sy5UEC&=*`Ms 0U`YN@"D$` MsF[?4[ "`Ms\W(g4\@, l`Ms GMpg6~i *H KMs7`g6~i iI2`.Ms='`i&l\@*LsyFHkV~@2` MsMMpu?' .x`syFHu?' %guySp+;&9 h ai#g     !#%')+-/13579;=? A!C"E#G$I%K&M'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w<y={>}?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc ` if1 [ %%main==0 ; assume being insrt'd, and ife .fnam1-.ifnm1, %%main==1 ; Set flag if not being .insrt'd. %%incl==1 ; also assume need TITLE, ac defs, etc, ife %%main, ifdef p, ifdef a, %%incl==0 ; correct mistaken idea if don't need. ] ifn %%incl,{ title timer irp ac,,[f,a,b,c,d,x1,x2,x3,chk,xpr,cnt,u1,u2,u3,u4,p] ac=:.irpcnt termin tyoc==:1 loc 200 ; leave 100 wds room for hacks. UFLOAT==1 ife .osmidas-sixbit/ITS/, .insrt ksc;nuuos > ifn .osmidas-sixbit/ITS/, .insrt nuuos.mid pat: block 200 pdl: -100,,. block 100 } ifndef junk, junk==:. ; for wrandom writes block 2 time1: 0 time2: 0 ; for holding 2nd word of KL perf counter klpfwd: 1502,,1400 ; mode word to use for setting KLPERF klsw: 0 ; -1 if runing on KL. loops: 1000. floops: 0 ncheks: 100. fnchks: 0 ifn os%tnx,[ tnxerr: fwrite tyoc,[[Ugh, JSYS error return! - ]] movei a,.priou move b,[.fhslf,,-1] setz c, erstr jfcl jfcl halt jrst .-1 define .value ?barf jsr tnxval termin tnxval: 0 fwrite tyoc,[[Ugh, program lossage at ],rh,tnxval,[ ]] halt jrst @tnxval ; if continued, return ] go: move p,pdl move a,[jsr uuoh] ; set up (may have been clobberd) movem a,41 ; See if on a KL setzm klsw setz blt caie setom klsw ; yep, a KL. ifn os%20x,[ movei a,.fhslf gtrpi ; get paging info outopn tyoc,[$uciot,,[.priou]] fwrite tyoc,[n9,a,[:],n9,b,[:],n9,c,[ ]] ] ; set up some stuff move a,ncheks fsc a,233 movem a,fnchks move a,loops fsc a,233 movem a,floops movsi xpr,-maxxpr xperlp: movn chk,ncheks hrlzs chk setzm tottim ; clear total time for xperiment. setzm ftot2 ; also stuff for variance. ; get loop into acs (or otherwise set up) skipn xprnam(xpr) ; See if something there. jrst xperle ; if none, skip it. move a,xprins(xpr) ; get instr movem a,instr ; store into loop ; This stuff is/was for running in ACs. ifn 0,[ move x1,[.suset [.rrunt,,time1]] move x3,[sojg cnt,x2] move x4,[.suset [.rrunt,,a]] move x5,[popj p,] ] cheklp: move cnt,loops skipe a,xprini(xpr) pushj p,(a) ; do idiosyncratic setup ifn os%its,[ skipe klsw jrst [ move u4,klpfwd ; Record # ticks in user mode xor u4,[74,,] ; hardware idiocy syscal klperf,[ cimm %jself ? u4 repeat 4,[cret junk ? ] cret time1 ? cret time2] .value [asciz /: Can't grab KL perf counter! /] jrst instr] .suset [.rrunt,,time1] ] ifn os%tnx,[push p,a ? movei a,1 ; 1 = .hprnt hptim ; JSYS 501 erjmp tnxerr exch a,(p) pop p,time1] ; Here's the timing loop.... instr: jfcl ; Instruction is inserted here return: sojg cnt,instr ; Loop fast, fall thru when done. ifn os%its,[ skipn klsw .suset [.rrunt,,a] ; Record time now. skipe klsw jrst [ move u4,klpfwd xor u4,[74,,] syscal klperf,[ ; No input args. repeat 4,[cret junk ? ] cret a ? cret b] .value [asciz /: Argh! Lossage with perf counter! /] ashc a,-12. ; Shift over dmove c,time1 ; get original counter ashc c,-12. ; shift tha over too. dsub a,c ; OK, have at it. move a,b ; leae result in A addi a,<<1000./80.>/2> ; basic tick time is 80 nsec idivi a,<1000./80.> ; Find # of usec (round off) jrst havtim] ] ifn os%tnx,[movei a,1 hptim erjmp tnxerr] sub a,time1 ; get time eaten in loop. ifn os%its, lsh a,2 ; multiply by 4 to get # usec ifn os%tnx, imuli a,10. havtim: addm a,tottim ; and add to total. fsc a,233 fmpr a,a fadrm a,ftot2 ; add to total**2 aobjn chk,cheklp pushj p,scntms ; ok, figure stats from time table. skpins: xperle: aobjn xpr,xperlp ; do more experiments. jrst show define xper sym,*name*,*ins*,ctlidx,?setup ifle maxxpr-%%xpri, .err Too many xperiments. if1 ifsn [sym][] sym==%%xpri ; def a sym for this xper tmploc xprnam+%%xpri,{ascnt [name]} tmploc xprins+%%xpri,{ins} tmploc xprini+%%xpri,{setup} ifsn [ctlidx][] tmploc xprclp+%%xpri,{ctlidx} %%xpri==%%xpri+1 if1 %%nxpr==%%xpri termin %%xpri==0 ifndef maxxpr, maxxpr==20 xprnam: block maxxpr ; `/ascnt ptr to name xprini: block maxxpr ; setup stuff xprins: block maxxpr ; instruction to execute xpravg: block maxxpr ; avg time per check xprdev: block maxxpr ; deviation xprvar: block maxxpr ; variance xprclp: block maxxpr ; index of xperiment considered "control" for this. xprcor: block maxxpr ; avg time corrected for control loop xprtpi: block maxxpr ; resulting avg time per instruction xprdvi: block maxxpr ; resulting std dev per instr. comment \ XPER experiment definition macro Basic format: XPER , "Name of test", ||, ,[] - Given symbol will be set to the index of this experiment. This is useful for referencing a particular test, as wehn furnishing a in some other test. Can be left unspecified by just giving a comma. " ... " - Name of experiment. Will be printed out. || - Actual instruction to execute for testing. It is inserted at symbolic location INSTR, and falls through to symbolic location RETURN. It should not skip, and if it jumps should return to RETURN. It may NOT use acs C, D, CNT, P but otherwise can reference any of them. JUNK is available as a memory reference location for reads or writes. - Can be omitted for the usual case; it defaults to 0, which is the basic control loop. The time used by the specified control loop is subtracted from the total time used by this test in order to derive the actual time used only by some specific operation. - Can be omitted if the instruction requires no special setup. But if present, square brackets must enclose the code as it is taken as a literal. It is called by a PUSHJ and thus must return by a POPJ when done. Note that this is only invoked once before each check, not each time the instruction is about to be executed. \ xper ,|Basic control loop|,|sojle cnt,return|,0,[setz a, ? setz b, ? popj p,] xper xmvi,|MOVEI 0|,|movei| xper xidx,"Indexing",|movei (a)|,xmvi xper xmve,"MOVE 70",|move 70| ;xper xu1,"Std UUO dispatch",|utest a,junk|,0,[move a,[jsr uuoh] ? movem a,41 ? popj p,] uuodef utest,u.test u.test: jrst uuoret ; return asap. scntms: skipge a,tottim .value fsc a,233 movem a,ftotim fdvr a,fnchks movem a,xpravg(xpr) ; average # usecs ; Calculate variance skipge a,ftot2 .value fdvr a,fnchks ; total(X^2) / n move b,xpravg(xpr) fmpr b,b ; - avg^2 camge a,b ; something funny has been happening. .value fsbr a,b ; now have variance movem a,xprvar(xpr) ; store variance pushj p,sqrt ; get std dev movem a,xprdev(xpr) ; store that. fdvr a,floops ; find std dev per single pass movem a,xprdvi(xpr) ; store as dev per instr trnn xpr,-1 ; control loop? jrst [ setzm xprcor(xpr) setzm xprtpi(xpr) popj p,] move a,xpravg(xpr) move b,xprclp(xpr) ; get idx for control loop fsbr a,xpravg(b) ; get corrected time (minus selected ctl loop) movem a,xprcor(xpr) fdvr a,floops ; find time per instruction movem a,xprtpi(xpr) ; tim per ins execution (hope) popj p, ; all for now tottim: 0 ftotim: 0 ftot2: 0 ; Done with timings, now can output cruft. show: move a,[jsr uuoh] movem a,41 ; set up properly. ifn os%its,[ .open tyoc,[.uao,,'tty] .lose 1000 outopn tyoc,] ifn os%tnx, outopn tyoc,[$uciot,,[.priou]] fwrite tyoc,[n9,ncheks,[ checks per exper, ],n9,loops,[ executes per check <#>(# of correction chk): Name - , sd= avg usec/chk, corrected usec/chk ]] movsi b,-maxxpr showlp: movei a,(b) skipn xprnam(b) jrst show8 jumpe a,[fwrite tyoc,[[Control: ],nfl,xpravg(a),[ avg/chk, ],nfl,xprdev(a),[ std dev (usec) per chk ]] jrst show8] fwrite tyoc,[n9,a] skipe xprclp(b) jrst [ fwrite tyoc,[[(],n9,xprclp(b),[)]] jrst .+1] fwrite tyoc,[[: ]] hlrz c,xprnam(b) jumpe c,[fwrite tyoc,[[?]] jrst show4] fwrite tyoc,[tc,xprnam(b)] show4: fwrite tyoc,[[ - ],nfl,xprtpi(b),[ usec, sd=],nfl,xprdvi(b),[ ],NFL,xpravg(a),[ ],nfl,xprcor(a),[ ]] show8: aobjn b,showlp ifn os%its,[ .close tyoc, ; in case translating to dsk skipe klsw jrst [ syscal klperf,[cimm %jself ? cimm 0] .lose jrst .+1] .value [asciz /: Done /] jrst .-1 ] ifn os%tnx,[ movei a,.fhslf gtrpi fwrite tyoc,[n9,a,[:],n9,b,[:],n9,c,[ Done!]] haltf jrst .-2 ] ; Famous AGB sqrt routine. clobbers B, C. Ignores neg #'s. SQRT: SKIPG B,A POPJ P, ASH A,-1 ADD A,[262370613] ; 0.292893/0.840186 B8. ; or 0.414214/0.594101 B9. TLON A,400 JRST SQRT2 FMPRI A,301460 ; 0.594101^101 JRST SQRT3 SQRT2: FMPRI A,300656 ; 0.840186^100 SQRT3: MOVE C,B FDV B,A FAD A,B ? FSC A,-1 FDVR C,A FAD A,C ? FSC A,-1 ; MORE EXACT THAN FADR POPJ P, ife %%main,.ineof end goZ %%inst==1 .insrt timer > xper xmm,"Control base, pushj/popj",|pushj p,[popj p,]| xper xmvm,"MOVE/MOVEM",|pushj p,[move a,junk ? movem a,junk+1 ? popj p,]|,xmm xper xmvp,"MOVEI/PUSH",|pushj p,[movei a,junk ? push a,junk ? popZ &j p,]|,xmm xper xmpp,"PUSH/POP",|pushj p,[push p,junk ? pop p,junk+1 ? popj p,]|,xmm end go  & h!%%inst==1 maxxpr==60. .insrt timer > define setvrs lab,val,cid ifsn [cid][] cidx1==xlsh!cid .else cidx1==0 irp ins,,[lsh,rot,lshc,rotc] ifn cidx1, cidx==cidx1+.irpcnt .else cidx==0 xper x!ins!!lab,"ins val",|ins val|,cidx termin termin irp grp,,[[a,0],[b,9.],[c,-9.],[d,10.,b],[e,-10.,c],[f,18.,a],[g,-18.,a]] setvrs grp termin end go !( %%inst==1 maxxpr==50. .insrt timer > xper xujmp1,"UUO JSP/JRST",|utest a,junk|,0,[ move a,[jsp u4,[jrst (u4)]] movem a,41 popj p,] xper xujmp2,"UUO JSP/MOVEM/JRST",|utest a,junk|,0,[ move a,[jsp u4,[movem u4,uuoh ? jrst @uuoh]] movem a,41 popj p,] xper ujmp3,"UUO JSR/JRST",|utest a,junk|,0,[ move a,[jsr jmp3l] movem a,41 ? popj p,] xper ujmp4,"UUO PUSHJ/POPJ",|utest a,junk|,0,[ move a,[pushj p,[popj p,]] movem a,41 ? popj p,] xper udsp1,"UUODISP LDB",|utst a,junk|,ujmp3,[jrst disp1l] xper udsp1a,"UUODISPA LDB",|utsta a,junk|,ujmp3,[jrst disp1l] xper udsp1e,"UUODISPE LDB",|utste a,junk|,ujmp3,[jrst disp1l] xper udsp2,"UUODISP LSHC",|utst a,junk|,ujmp3,[jrst disp2l] xper udsp2a,"UUODISPA LSHC",|utsta a,junk|,ujmp3,[jrst disp2l] xper udsp2e,"UUODISPE LSHC",|utste a,junk|,ujmp3,[jrst disp2l] xper udsp3,"UUODISP TDNN",|utst a,junk|,ujmp3,[jrst disp3l] xper udsp3a,"UUODISPA TDNN",|utsta a,junk|,ujmp3,[jrst disp3l] xper udsp3e,"UUODISPE TDNN",|utste|,ujmp3,[jrst disp3l] xper udspx,"UUODSPX LDB",|utst a,junk|,xujmp2,[ pushj p,disp1l move b,[jsp u4,disp1x] movem b,41 popj p,] xper udspxa,"UUODSPXA LDB",|utsta a,junk|,xujmp2,[ pushj p,disp1l move b,[jsp u4,disp1x] movem b,41 popj p,] xper udspxe,"UUODSPXE LDB",|utste a,junk|,xujmp2,[ pushj p,disp1l move b,[jsp u4,disp1x] movem b,41 popj p,] disp1x: movem u4,disp1 ldb u1,[330600,,40] jrst @uuotab(u1) fixup: move b,(a) movem b,41 move b,1(a) movem b,uuotab+ move b,2(a) movem b,uuotab+ move b,3(a) movem b,uuotab+ setz a, popj p, uuodef utst,iluuo uuodef utsta,iluuo uuodef utste,iluuo tstae: jrst uuoret disp1l: movei a,[jsr disp1 ? disp1r ? disp1a ? disp1e] jrst fixup disp1: 0 ldb u1,[330600,,40] jrst @uuotab(u1) disp1a: ldb u1,uacfld jrst @(a)[disp1r] disp1e: hrrz u1,40 caige u1, .value jrst @(a)[disp1r] disp1r: jrst @disp1 disp2l: movei a,[jsr disp2 ? disp2r ? disp2a ? disp2e] jrst fixup disp2: 0 move u2,40 lshc u1,9. andi u1,77 jrst @uuotab(u1) disp2a: rot u2,4 andi u2,17 jrst @(a)[disp2r] disp2e: lsh u2,-9. caige u2, .value jrst @(a)[disp2r] disp2r: jrst @disp2 disp3l: movei a,[jsr disp3 ? disp3r ? disp3a ? disp3e] jrst fixup disp3: 0 move u2,40 tdnn u2,[0,,-1] jrst @(a)[disp3r] lshc u1,9. andi u1,77 jrst @uuotab(u1) disp3a: ldb u2,uacfld jrst @(a)[disp3r] disp3e: hrrz u1,40 caige u1,0 .value jrst @(a)[disp3r] disp3r: jrst @disp3 jmp3l: 0 jrst @jmp3l end go ( $ %%inst==1 .insrt timer > xper xlup,"Basic call/test loop",|pushj p,tstbyt|,0,[ movei b,[popj p,] ? jrst tlset0] xper new,"New SUBI/ILDB diff",|pushj p,tstbyt|,xlup,[ movei b,u7pdif ? jrst tlset] xper newer,"Newer MULI diff",|pushj p,tstbyt|,xlup,[ movei b,updif7 ? jrst tlset] xper nxlup,"control for MULI optimize",|pushj p,tstbyt|,xlup,[ movei b,[push p,u2 ? move u1,u2 ? pop p,u2 ? popj p,] jrst tlset0] xper nnewer,"Newer MULI diff",|pushj p,tstbyt|,nxlup,[ movei b,updif7 ? jrst tlset] xper nnchk,"Check on above",|pushj p,tstbyt|,xlup,[ movei b,chkdf ? jrst tlset0] bpbase: 440700,,0 bpbump: 440700,,0 bpcnt: 0 tlset0: skipa a,[popj p,] tlset: move a,[.value] movem a,tstchk move a,bpbase ibp a movem a,bpbump movem a,bpbase setzm bpcnt popj p, tstbyt: ibp bpbump move u1,bpbump move u2,bpbase pushj p,(b) aos a,bpcnt came u1,a tstchk: .value popj p, chkdf: MULI U2,5 TLNE U3,777774 ; if LH originally zero, ADD U3,UADBP7(U2) ; needn't add anything. MULI U1,5 TLNE U2,777774 ADD U2,UADBP7(U1) SUB U2,U3 popj p, tstall: hrlzi a,440700 setz c, tstalp: move u1,a setz u2, pushj p,u7pdif came u1,c .value move u1,a setz u2, pushj p,updif7 came u1,c .value ibp a aoja c,tstalp end go$ 9.5954 BYTE - 5/2 - 44.77 WORD - 5/2 - 59.5736 BYTE - 5/3 - 44.7766 WORD - 5/3 - 56.3118005 BYTE - 5/4 - 44.9312 WORD - 5/4 - 62.9432 BYTE8Z6 BYTE - 1/0 - 41.094 WORD - 1/0 - 61.1364 BYTE - 1/1 - 40.9982 WORD - 1/1 - 47.6394 BYTE - 1/2 - 41.0156 WORD - 1/2 - 60.2406 BYTE - 1/3 - 41.0294 WORD - 1/3 - 60.2162 BYTE - 1/4 - 41.0202 WORD - 1/4 - 56.9836 BYTE - 1/5 - 41.1562 WORD - 1/5 - 61.4806 BYTE - 2/0 - 41.0716 WORD - 2/0 - 61.0424 BYTE - 2/1 - 40.993 WORD - 2/1 - 62.4508 BYTE - 2/2 - 41.0132 WORD - 2/2 - 47.5992 BYTE - 2/3 - 40.9846 WORD - 2/3 - 60.1752 BYTE - 2/4 - 41.0122 WORD - 2/4 - 56.9786 BYTE - 2/5 - 41.1616 WORD - 2/5 - 61.4732 BYTE - 3/0 - 41.0688 6q WORD - 3/0 - 61.1 BYTE - 3/1 - 41.0262 WORD - 3/1 - 62.4494 BYTE - 3/2 - 40.9918 WORD - 3/2 - 62.5002 BYTE - 3/3 - 40.998 WORD - 3/3 - 47.5594 BYTE - 3/4 - 41.003 WORD - 3/4 - 56.9956 BYTE - 3/5 - 41.1856 WORD - 3/5 - 61.5094 BYTE - 4/0 - 41.1004 WORD - 4/0 - 60.8974 BYTE - 4/1 - 41.029 WORD - 4/1 - 62.1878 BYTE - 4/2 - 40.9984 WORD - 4/2 - 62.1928005 BYTE - 4/3 - 40.9964 WORD - 4/3 - 62.2618 BYTE - 4/4 - 41.0196 WORD - 4/4 - 44.0836 BYTE - 4/5 - 41.1732 WORD - 4/5 - 61.2322 BYTE - 5/0 - 41.1842 WORD - 5/0 - 43.6144 BYTE - 5/1 - 41.0874 WORD - 5/1 - 59.578 BYTE - 5/2 - 41.0928 WORD - 5/2 - 59.6038 BYTE - 5/3 - 41.1018 WORD - 5/3 - 59.478 BYTE - 5/4 - 41.076 WORD - 5/4 - 56.3028 BYTE - 5/5 - 41.2786 WORD - 5/5 - 43.9274 12 BYTE - 0/0 - 44.768 WORD - 0/0 - 43.1918 BYTE - 0/1 - 44.6896 WORD - 0/1 - 59.18 BYTE - 0/2 - 44.6906 WORD - 0/2 - 59.1672 BYTE - 0/3 - 44.6726 WORD - 0/3 - 55.9038005 BYTE - 0/4 - 44.8526 WORD - 0/4 - 62.538 BYTE - 0/5 - 44.8824 WORD - 0/5 - 43.5204 BYTE - 1/0 - 44.752 WORD - 1/0 - 61.1166 BYTE - 1/1 - 44.6908 WORD - 1/1 - 47.6236 BYTE - 1/2 - 44.7062 WORD - 1/2 - 60.2706 BYTE - 1/3 - 44.6814 WORD - 1/3 - 56.9826 BYTE - 1/4 - 44.877 WORD - 1/4 - 63.6428 BYTE - 1/5 - 44.8724 WORD - 1/5 - 61.5452 BYTE - 2/0 - 44.7684 WORD - 2/0 - 61.0864 BYTE - 2/1 - 44.6796 WORD - 2/1 - 62.4008 BYTE - 2/2 - 44.6862 WORD - 2/2 - 47.5998 BYTE - 2/3 - 44.6706 WORD - 2/3 - 56.9986 BYTE - 2/4 - 44.8402 WORD - 2/4 - 63.5818 BYTE - 2/5 - 44.8396 WORD - 2/5 - 61.5676 BYTE - 3/0 - 44.8042 WORD - 3/0 - 60.8704 BYTE - 3/1 - 44.7002 WORD - 3/1 - 62.1534 BYTE - 3/2 - 44.6876 WORD - 3/2 - 62.1694 BYTE - 3/3 - 44.6878 WORD - 3/3 - 44.0758 BYTE - 3/4 - 44.831 WORD - 3/4 - 63.3674 BYTE - 3/5 - 44.8592 WORD - 3/5 - 61.253 BYTE - 4/0 - 44.8552 WORD - 4/0 - 62.278 BYTE - 4/1 - 44.753 WORD - 4/1 - 63.6316 BYTE - 4/2 - 44.7504 WORD - 4/2 - 63.6354 BYTE - 4/3 - 44.7626 WORD - 4/3 - 60.3914 BYTE - 4/4 - 44.9358 WORD - 4/4 - 48.3786 BYTE - 4/5 - 44.9462 WORD - 4/5 - 62.6932 BYTE - 5/0 - 44.8414 WORD - 5/0 - 43.5362 BYTE - 5/1 - 44.7684 WORD - 5/1 - 5`H%4%%inst==1 .insrt timer > xper xcpcal,"Control, pushj/popj",|pushj p,[popj p,]| xper ,"PUSH/POP pair - per ac",|pushj p,tpush|,xcpcal xper ,"PUSH/POP, 15. ACs",|pushj p,tpusha|,xcpcal xper xcblt,"BLT save, 1 AC",|pushj p,tblt|,xcpcal xper ,"BLT save, per ac (no ovhd)",|pushj p,tblt2|,xcblt xper ,"BLT, 15. ACs (no ovhd)",|pushj p,tblta|,xcblt xper ,"BLT, 15. ACs on stack",|pushj p,tbltas|,xcpcal xper ,"PUSH/POP 4 acs",|pushj p,tpush4|,xcpcal xper ,"BLT 4 acs",|pushj p,tblt4|,xcpcal xper xblts4,"BLT 4 acs on stack",|pushj p,tblt4s|,xcpcal xper ,"BLT on stack, per ac",|pushj p,tblt5s|,xblts4 tpush: push p,a pop p,a popj p, tpusha: repeat 17, push p,a repeat 17, pop p,a popj p, tpush4: repeat 4,push p,.rpcnt repeat 4,pop p,<4-.rpcnt> popj p, define bltsav acb,ace ; save acs from acb to ace inclusive movem ace,savacs+ace move ace,[acb,,savacs] blt ace,savacs+ace-1 termin define bltrst acb,ace ; restore acs to acb thru ace inclusive move ace,[savacs,,acb] blt ace,ace termin define bltpush acb,ace ; save acs acb thru ace inclusive on stack. %%nacs==1+ace-acb add p,[%%nacs,,%%nacs] movem ace,(p) movei ace,-<%%nacs-1>(p) hrli ace,acb blt ace,-1(p) termin define bltpop acb,ace ; restore acs acb thru ace inclusive from stack. movei ace,acb hrli ace,-(p) blt ace,ace sub p,[+1,,+1] termin tblt2: bltsav a,b bltrst a,b popj p, tblt4: bltsav 0,3 bltrst 0,3 popj p, tblt4s: bltpush 0,3 bltpop 0,3 popj p, tblt5s: bltpush 0,4 bltpop 0,4 popj p, tblt: bltsav 0,0 bltrst 0,0 popj p, tblta: bltsav 0,16 bltrst 0,16 popj p, tbltas: bltpush 0,16 bltpop 0,16 popj p, savacs: block 20 end go %4Z%%inst==1 maxxpr==100. .insrt timer ; Zero xper ,"SETZ A,",|setz a,| xper ,"MOVEI A,0",|movei a,0| xper ,"TDC A,A",|tdc a,a| xper ,"TDZ A,A",|tdz a,a| xper ,"TLC A,",|tlc a,| ; Add one xper ,"MOVEI A,1(A)",|movei a,1(a)| xper ,"ADDI A,1",|addi a,1| xper ,"AOJ A,",|aoj a,| xper ,"AOS A",|aos a| ; Subtract one xper ,"SUBI A,1",|subi A,1| xper ,"SOJ A,",|soj a,| xper ,"SOS A",|sos a| xper ,"MOVEI A,-1(A)",|movei a,-1(a)| ; Random moves xper ,"MOVE A,B",|move a,b| xper ,"MOVE A,70",|move a,70| xper ,"HRRI A,0",|hrri a,| xper ,"HRRZI A,0",|hrrzi a,| xper ,"HRRZ A,A",|hrrz a,a| xper ,"HRRZ A,70",|hrrz a,70| xper ,"HRR A,70",|hrr a,70| xper ,"HLL A,70",|hll a,70| xper ,"HRL A,70",|hrl a,70| xper ,"MOVEI A,(B)",|movei a,(b)| xper ,"MOVSI A,(B)",|movsi a,(b)| xper ,"MOVNS A",|movns a| xper ,"MOVNI A,(A)",|movni a,(a)| xper ,"MOVN A,A",|movn a,a| xper ,"HRRM A,70",|hrrm a,70| xper ,"MOVEM A,70",|movem a,70| ; Simulation of DFKFB xper xcpshj,"Control for PUSHJ",|jrst pshctl| xper xcidpb,"Control for IDPB",|jrst dpbctl| xper xcidx,"Control for indexing/indirect (movei)",|movei| xper ,"Indexing (movei (a))",|movei (a)|,xcidx xper ,"IZ$^ndirect (movei @a)",|movei @a|,xcidx xper ,"Indirect (movei @70)",|movei @70|,xcidx xper ,"Indexing & indirect (movei @([70]))",|movei @(a)|,xcidx,[movei a,70 ? popj p,] xper ,"MOVEI ",|movei| xper ,"MOVE A,A",|move a,a| xper ,"MOVE A,70",|move a,70| xper ,"HRR A,70",|hrr a,70| xper ,"SETOM 0",|setom| xper xcjrst,"JRST",|jrst return| xper ,"JSR ",|jsr [0 ? jrst return]|,xcjrst xper ,"PUSHJ",|jrst pshtst|,xcpshj pshctl: movei a,junk jrst return pshtst: movei a,junk pushj a,.+1 jrst return xper ,"ADD A,70",|add a,70| ;xper ,"MUL something",|mul a,a| ; ... xper ,"DMOVE A,70",|dmove a,70|,0,[skipe klsw ? popj p, ? pop p,a ? jrst skpins] ; ... xper ,"MOVEM A,70",|movem a,70| xper ,"LSH A, 35.",|lsh a,35.| xper ,"LSH A,-35.",|lsh a,-35.| xper ,"LSHC A, 71.",|lshc a,71.| xper ,"LSHC A,-71.",|lshc a,-71.| xper ,"IBP 70",|ibp 70|,,[move a,[440700,,] ? movem a,70 ? popj p,] xper ,"ILDB 70",|ildb 70|,,[movei a,440700 ? hrlzm a,70 ? popj p,] xper ,"IDPB 70",|jrst dpbtst|,xcidpb,[movei a, 440700 ? hrlzm a,70 ? popj p,] dpbctl: movei a,junk hrrm a,70 jrst return dpbtst: movei a,junk hrrm a,70 idpb 70 jrst return xper ,"JFCL",|jfcl| xper ,"CAI",|cai| xper ,"JUMP",|jump| xper ,"CAM",|cam| xper ,"EQV A,A",|eqv a,a| xper ,"EQV A,70",|eqv a,70| xper ,"SETOB 0,0",|setob| xper ,"AOS 70",|aos 70| xper ,"EXCH A,B",|exch a,b| xper ,"EXCH A,70",|exch a,70| xper ,"XCT 70",|xct 70|,xcjrst,[move a,[jrst return] ? movem a,70 ? popj p,] ; ... end go $^!8These routines are for purposes of making timing tests of various instruction sequences. All of them insert the main file, TIMER >. There is one program, SMOVE >, which is slightly different in that it is intended to test routines for fast string moving; it has the hooks for checking correctness of the string move, as well as for timing its performance. See the file FSCOPY > (in the HAKPRG archive maybe) for the fast-string-move routine it tests. !8bH 10YE - 0/0 - 37.1596 WORD - 0/0 - 38.8792 BYTE - 0/1 - 37.2422 WORD - 0/1 - 57.6564 BYTE - 0/2 - 37.2466 WORD - 0/2 - 57.738801 BYTE - 0/3 - 37.2408 WORD - 0/3 - 57.7378 BYTE - 0/4 - 37.2556 WORD - 0/4 - 57.7244 BYTE - 0/5 - 37.2684 WORD - 0/5 - 39.2396 BYTE - 1/0 - 37.2432 WORD - 1/0 - 54.5158 BYTE - 1/1 - 37.3476 WORD - 1/1 - 47.5832 BYTE - 1/2 - 37.3508 WORD - 1/2 - 60.148 BYTE - 1/3 - 37.3346 WORD - 1/3 - 60.2046 BYTE - 1/4 - 37.3008 WORD - 1/4 - 60.2086 BYTE - 1/5 - 37.3318 WORD - 1/5 - 54.8972 BYTE - 2/0 - 37.221 WORD - 2/0 - 54.5108 BYTE - 2/1 - 37.3072 WORD - 2/1 - 62.4746 BYTE - 2/2 - 37.3212 WORD - 2/2 - 47.6116 BYTE - 2/3 - 37.3048 WORD - 2/3 - 60.1708 BYTE - 2/4 - 37.3182 WORD - 2/4 - 60.1948 BYTE - 2/5 - 37.2896 WORD - 2/5 - 54.8542 BYTE - 3/0 - 37.2586 WORD - 3/0 - 54.5006 BYTE - 3/1 - 37.2884 WORD - 3/1 - 62.4562 BYTE - 3/2 - 37.3034 WORD - 3/2 - 62.4814 BYTE - 3/3 - 37.3076 WORD - 3/3 - 47.5788 BYTE - 3/4 - 37.295 WORD - 3/4 - 60.174 BYTE - 3/5 - 37.3202 WORD - 3/5 - 54.8938 BYTE - 4/0 - 37.2736 WORD - 4/0 - 54.464 BYTE - 4/1 - 37.3382 WORD - 4/1 - 62.4974 BYTE - 4/2 - 37.3408 WORD - 4/2 - 62.4652 BYTE - 4/3 - 37.3252 WORD - 4/3 - 62.4156 BYTE - 4/4 - 37.3014 WORD - 4/4 - 47.568 BYTE - 4/5 - 37.3312 WORD - 4/5 - 54.8176 BYTE - 5/0 - 37.25 WORD - 5/0 - 39.1988 BYTE - 5/1 - 37.3186 WORD - 5/1 - 58.081 BYTE - 5/2 - 37.3102 WORD - 5/2 - 58.073 BYTE - 5/3 - 37.347 WORD - 5/3 - 58.0618005 BYTE - 5/4 - 37.3136 WORD - 5/4 - 58.0772 BYTE - 5/5 - 37.3176 WORD - 5/5 - 39.6026 11 BYTE - 0/0 - 41.0744 WORD - 0/0 - 43.1562 BYTE - 0/1 - 41.0176 WORD - 0/1 - 59.141 BYTE - 0/2 - 40.9682 WORD - 0/2 - 59.1308 BYTE - 0/3 - 41.01 WORD - 0/3 - 59.1748 BYTE - 0/4 - 41.0282 WORD - 0/4 - 55.9476 BYTE - 0/5 - 41.2014 WORD - 0/5 - 43.563bp.symtab 4000.,6000. %%inst==1 ;os%==4 bigtst==1 ifn bigtst, maxxpr==10.+<6*6*10.*2> .insrt timer ifndef e,e=d+1 tstlup: move p,pdl move a,[jsr uuoh] movem a,41 ifn os%its,[ .open tyoc,[.uao,,'tty] .lose outopn tyoc, ] ifn os%tnx,[ outopn tyoc,[$uciot,,[.priou]] ] fwrite tyoc,[[Starting string copy test... ]] movsi e,-6 move a,strsrc tstlp2: movsi d,-6 move b,strds3 movem b,strd3 move b,strdst movem b,strd2 tstlp3: movsi cnt,-5 move c,strcnt tstlp4: move u1,[ascii /xxxxx/] movem u1,strbf2 move u1,[strbf2,,strbf2+1] blt u1,strbfe-1 move b,strd2 pushj p,fscpy2 move b,strd3 pushj p,bytcpy pushj p,check jrst [ fwrite tyoc,[[Ugh! Src offset ],rhv,e,[ Dst offset ],rhv,d,[ Length ],n9,c,[ ]] pushj p,report .value jrst .+1] soj c, aobjn cnt,tstlp4 ; fwrite tyoc,[[ ;------]] ibp strd2 ibp strd3 aobjn d,tstlp3 ; fwrite tyoc,[[ ;-------------------]] ibp a aobjn e,tstlp2 fwrite tyoc,[[ --- END OF TEST --- ]] .value jrst tstlup check: pushae p,[a,b,c] movsi c,-strbfl check2: move a,strbf2(c) move b,strbf3(c) andcmi a,1 andcmi b,1 came a,b jrst check4 aobjn c,check2 aos -3(p) check4: popae p,[c,b,a] popj p, repp,$ort: push p,a push p,b move a,strcnt addi a,9. idivi a,5 imul a,[5,,0] hrri a,strbf2 move b,a hrri b,strbf3 fwrite tyoc,[[Good: ],tc,b,[ Bad: ],tc,a,[ ]] pop p,b pop p,a popj p, gochk: move p,pdl movei b,fscpy2 gochk1: .value [asciz /: Ready /] pushj p,cpytst jrst gochk1 ;xper xcbas,"Base - calling seq",|pushj p,cpytst|,0,[setzm strcnt ? movei b,cpyctl ? popj p,] ifn bigtst,[ xper xcbyt,"Byte loop control",|pushj p,bytctl| define xnam rtn,soff,doff,len tmploc xprnam+%%xpri-1,{ascnt [rtn - soff/doff, len chars]} termin irp rout,,[bytcpy,fscpy2]name,,[BYTE,WORD]con,,[xcbyt,0] repeat 10.,[ %%len==.rpcnt repeat 6,[ %%soff==.rpcnt repeat 6,[ %%doff==.rpcnt xper ,"foo",|pushj p,rout|,con,[movei a,%%soff ? movei b,%%doff ? movei c,%%len ? jrst cpyzap] .radix 10. xnam name,\%%soff,\%%doff,\<10.+%%len> .radix 8. ]]] constants variables termin ] ifn 0,[ xper xbytl1,"Byte loop - 10 chars",|pushj p,cpytst|,xcbyt,[movei b,bytcpy ? movei a,10. ? jrst cpyset] xper xmovl1,"Word loop - 10 chars",|pushj p,cpytst|,xcbas,[movei b,fscpy2 ? popj p,] xper xbytl2,"Byte loop - 20 chars",|pushj p,cpytst|,xbytl1,[movei b,bytcpy ? movei a,20. ? jrst cpyset] xper xmovl2,"Word loop - 20 chars",|pushj p,cpytst|,xmovl1,[movei b,fscpy2 ? popj p,] xper xbytl3,"Byte loop - 30 chars",|pushj p,cpytst|,xbytl2,[movei b,bytcpy ? movei a,30. ? jrst cpyset] xper xmovl3,"Word loop - 30 chars",|pushj p,cpytst|,xmovl2,[movei b,fscpy2 ? popj p,] xper xbytl4,"Byte loop - 40 chars",|pushj p,cpytst|,xbytl3,[movei b,bytcpy ? movei a,40. ? jrst cpyset] xper xmovl4,"Word loop - 40 chars",|pushj p,cpytst|,xmovl3,[movei b,fscpy2 ? popj p,] xper xbytl5,"Byte loop - 50 chars",|pushj p,cpytst|,xbytl4,[movei b,bytcpy ? movei a,50. ? jrst cpyset] xper xmovl5,"Word loop - 50 chars",|pushj p,cpytst|,xmovl4,[movei b,fscpy2 ? popj p,] ] strcst: 10. ; # chars to start at. strct: 0 ; current # chars dpct: 0 ; index for dest ptr srct: 0 ; index for src ptr lstxpr: 0 cpyzap: add c,strcst move d,strsrc exch a,d caie d, ptskip d,a move d,strdst exch b,d caie d, ptskip d,b popj p, cpysam: movem xpr,lstxpr ; Com here to use same setup args as last. cpyset: camn xpr,lstxpr ; same exper as last setup? jrst cpyst5 movem xpr,lstxpr ; Nope, set up new stuff. skipe lstxpr ; initializing? jrst cpyst3 ; Nope, do normal increments move a,strcst movem a,strct setom dpct setom srct cpyst3: sosl dpct jrst [ ibp strd2 ? jrst cpyst5] move a,strdst movem a,strd2 movei a,6 movem a,dpct sosl srct jrst [ ibp strs1 ? jrst cpyst5] move a,strsrc movem a,strs1 movei a,6 movem a,srct aos strct cpyst5: move a,strs1 ; Yes, get args. move b,strd2 move c,strct popj p, cpytst: pushae p,[a,b,c,d] move d,b move a,strsrc move b,strdst move c,strcnt pushj p,(d) popae p,[d,c,b,a] cpyctl: popj p, bytctl: jumpe p,[popj p,] ; will never happen. pushae p,[a,b,c,d] popae p,[d,c,b,a] popj p, bytcpy: jumpe c,[popj p,] pushae p,[a,b,c,d] ildb d,a idpb d,b sojg c,.-2 popae p,[d,c,b,a] popj p, ifn os%its, .insrt fscopy > ifn os%tnx, .insrt fscopy.mid strcnt: 52. strsrc: 440700,,strbf1 strs1: 0 strdst: 440700,,strbf2 strd2: 0 strds3: 440700,,strbf3 strd3: 0 ;strsrc: 260700,,strbf1 ;strdst: 170100,,strbf2 strbf1: ascii |0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789| ascii | This will have to be a very long string, for purposes of testing the string copying routines. Goal is to first find out if the damn thing actually works, and at what string size it becomes faster to use FSCOPY instead of plain old byte copying. dum te dum...| strbfl==500 strbf2: block strbfl strbf3: block strbfl strbfe: ifn bigtst,end go ife bigtst,end tstlup P - 5/5 - 44.9262 WORD - 5/5 - 43.9382 13 BYTE - 0/0 - 48.4362 WORD - 0/0 - 43.242 BYTE - 0/1 - 48.3546 WORD - 0/1 - 59.172 BYTE - 0/2 - 48.358 WORD - 0/2 - 55.9512 BYTE - 0/3 - 48.5416 WORD - 0/3 - 62.5998 BYTE - 0/4 - 48.5428 WORD - 0/4 - 62.5198 BYTE - 0/5 - 48.5596 WORD - 0/5 - 43.5814 BYTE - 1/0 - 48.465 WORD - 1/0 - 61.173 BYTE - 1/1 - 48.4088 WORD - 1/1 - 47.6294 BYTE - 1/2 - 48.3914 WORD - 1/2 - 56.972 BYTE - 1/3 - 48.5618 WORD - 1/3 - 63.5784 BYTE - 1/4 - 48.5636 WORD - 1/4 - 63.6428 BYTE - 1/5 - 48.5522 WORD - 1/5 - 61.5056 BYTE - 2/0 - 48.4646 WORD - 2/0 - 60.8954 BYTE - 2/1 - 48.3882 WORD - 2/1 - 62.2454 BYTE - 2/2 - 48.3702 WORD - 2/2 - 44.1346 BYTE - 2/3 - 48.5366 WORD - 2/3 - 63.3666 BYTE - 2/4 - 48.5392 WORD - 2/4 - 63.4124 BYTE - 2/5 - 48.5432 WORD - 2/5 - 61.3076 BYTE - 3/0 - 48.526 WORD - 3/0 - 62.3792 BYTE - 3/1 - 48.4472 WORD - 3/1 - 63.6388 BYTE - 3/2 - 48.4318 WORD - 3/2 - 60.3924 BYTE - 3/3 - 48.6138 WORD - 3/3 - 48.4474 BYTE - 3/4 - 48.603 WORD - 3/4 - 64.7794 BYTE - 3/5 - 48.6376 WORD - 3/5 - 62.7254 BYTE - 4/0 - 48.5272 WORD - 4/0 - 62.2874 BYTE - 4/1 - 48.4412 WORDtqz - 4/1 - 63.712 BYTE - 4/2 - 48.4844 WORD - 4/2 - 60.3918 BYTE - 4/3 - 48.6456 WORD - 4/3 - 67.0628 BYTE - 4/4 - 48.674 WORD - 4/4 - 48.4262 BYTE - 4/5 - 48.6478 WORD - 4/5 - 62.7258005 BYTE - 5/0 - 48.5116 WORD - 5/0 - 43.5748005 BYTE - 5/1 - 48.4778 WORD - 5/1 - 59.5976 BYTE - 5/2 - 48.4806 WORD - 5/2 - 56.3068 BYTE - 5/3 - 48.66 WORD - 5/3 - 62.9442 BYTE - 5/4 - 48.6648 WORD - 5/4 - 62.8484 BYTE - 5/5 - 48.6502 WORD - 5/5 - 43.9082 14 BYTE - 0/0 - 52.1588 WORD - 0/0 - 43.1412 BYTE - 0/1 - 52.0708 WORD - 0/1 - 55.9496 BYTE - 0/2 - 52.2126 WORD - 0/2 - 62.5652 BYTE - 0/3 - 52.2066 WORD - 0/3 - 62.5104 BYTE - 0/4 - 52.2182 WORD - 0/4 - 62.542 BYTE - 0/5 - 52.2092 WORD - 0/5 - 43.5264 BYTE - 1/0 - 52.097 WORD - 1/0 - 60.8594 BYTE - 1/1 - 52.0614 WORD - 1/1 - 44.1016 BYTE - 1/2 - 52.24 WORD - 1/2 - 63.4004 BYTE - 1/3 - 52.1992 WORD - 1/3 - 63.347 BYTE - 1/4 - 52.1784 WORD - 1/4 - 63.3934 BYTE - 1/5 - 52.205 WORD - 1/5 - 61.2722 BYTE - 2/0 - 52.2052 WORD - 2/0 - 62.4002 BYTE - 2/1 - 52.1262 WORD - 2/1 - 60.4506 BYTE - 2/2 - 52.3174 WORD - 2/2 - 48.433 BYTE - 2/3 - 52.3068 WORD - 2/3 - 64.8664 BYTE - 2/4 - 52.3426 WORD - 2/4 - 64.8304 BYTE - 2/5 - 52.3312 WORD - 2/5 - 62.773 BYTE - 3/0 - 52.222 WORD - 3/0 - 62.3762 BYTE - 3/1 - 52.151 WORD - 3/1 - 60.4814 BYTE - 3/2 - 52.3428 WORD - 3/2 - 67.0408 BYTE - 3/3 - 52.3528 WORD - 3/3 - 48.4306 BYTE - 3/4 - 52.3304 WORD - 3/4 - 64.714 BYTE - 3/5 - 52.3204 WORD - 3/5 - 62.7306 BYTE - 4/0 - 52.2264 WORD - 4/0 - 62.3976 BYTE - 4/1 - 52.1746 WORD - 4/1 - 60.4884 BYTE - 4/2 - 52.3162 WORD - 4/2 - 67.0826 BYTE - 4/3 - 52.309 WORD - 4/3 - 67.0726 BYTE - 4/4 - 52.3094 WORD - 4/4 - 48.4226 BYTE - 4/5 - 52.3332 WORD - 4/5 - 62.7332 BYTE - 5/0 - 52.1978 WORD - 5/0 - 43.6372 BYTE - 5/1 - 52.1568 WORD - 5/1 - 56.3218 BYTE - 5/2 - 52.3352 WORD - 5/2 - 62.9544 BYTE - 5/3 - 52.3186 WORD - 5/3 - 62.8954 BYTE - 5/4 - 52.275 WORD - 5/4 - 63.0566 BYTE - 5/5 - 52.3222 WORD - 5/5 - 44.0026 15 BYTE - 0/0 - 55.8402 WORD - 0/0 - 39.7104 BYTE - 0/1 - 55.884 WORD - 0/1 - 62.3438 BYTE - 0/2 - 55.8846 WORD - 0/2 - 62.3666 BYTE - 0/3 - 55.9056 WORD - 0/3 - 62.3392 BYTE - 0/4 - 55.9058 WORD - 0/4 - 62.3682 BYTE - 0/5 - 55.9166 WORD - 0/5 - 40.0846 BYTE - 1/0 - 55.8916 WORD - 1/0 - 59.1224 BYTE - 1/1 - 55.979599 WORD - 1/1 - 48.416 BYTE - 1/2 - 55.9728 WORD - 1/2 - 64.8466 BYTE - 1/3 - 55.9768 WORD - 1/3 - 64.7536 BYTE - 1/4 - 55.9792 WORD - 1/4 - 64.8236 BYTE - 1/5 - 55.9456 WORD - 1/5 - 59.4804 BYTE - 2/0 - 55.8882 WORD - 2/0 - 59.1282 BYTE - 2/1 - 55.9794 WORD - 2/1 - 67.0704 BYTE - 2/2 - 55.9518 WORD - 2/2 - 48.4382 BYTE - 2/3 - 55.9764 WORD - 2/3 - 64.811 BYTE - 2/4 - 55.9506 WORD - 2/4 - 64.8082 BYTE - 2/5 - 55.98 WORD - 2/5 - 59.5142 BYTE - 3/0 - 55.9108 WORD - 3/0 - 59.1192 BYTE - 3/1 - 56.0122 WORD - 3/1 - 67.084198 BYTE - 3/2 - 55.973599 WORD - 3/2 - 67.1086 BYTE - 3/3 - 55.953 WORD - 3/3 - 48.4472 BYTE - 3/4 - 55.9568 WORD - 3/4 - 64.834 BYTE - 3/5 - 55.9892 WORD - 3/5 - 59.4742 BYTE - 4/0 - 55.9308 WORD - 4/0 - 59.1006 BYTE - 4/1 - 55.983 WORD - 4/1 - 67.0766 BYTE - 4/2 - 55.9816 WORD - 4/2 - 67.128 BYTE - 4/3 - 56.0138 WORD - 4/3 - 67.0816 BYTE - 4/4 - 55.987401 WORD - 4/4 - 48.4348 BYTE - 4/5 - 55.9906 WORD - 4/5 - 59.4566 BYTE - 5/0 - 55.9124 WORD - 5/0 - 40.0856 BYTE - 5/1 - 55.987401 WORD - 5/1 - 62.7078 BYTE - 5/2 - 55.9896 WORD - 5/2 - 62.7464 BYTE - 5/3 - 56.0054 WORD - 5/3 - 62.658 BYTE - 5/4 - 55.9858 WORD - 5/4 - 62.7948 BYTE - 5/5 - 56.002 WORD - 5/5 - 40.4336 16 BYTE - 0/0 - 59.7454 WORD - 0/0 - 43.9864 BYTE - 0/1 - 59.6464 WORD - 0/1 - 63.7538 BYTE - 0/2 - 59.7248 WORD - 0/2 - 63.7914 BYTE - 0/3 - 59.697401 WORD - 0/3 - 63.7312 BYTE - 0/4 - 59.672 WORD - 0/4 - 60.5242 BYTE - 0/5 - 59.8264 WORD - 0/5 - 44.3626 BYTE - 1/0 - 59.7438 WORD - 1/0 - 65.7452 BYTE - 1/1 - 59.665 WORD - 1/1 - 48.4058 BYTE - 1/2 - 59.6702 WORD - 1/2 - 64.7732 BYTE - 1/3 - 59.6458 WORD - 1/3 - 64.8466 BYTE - 1/4 - 59.6526 WORD - 1/4 - 61.5618005 BYTE - 1/5 - 59.8302 WORD - 1/5 - 66.0846 BYTE - 2/0 - 59.7334 WORD - 2/0 - 65.6402 BYTE - 2/1 - 59.6784005 WORD - 2/1 - 67.0364 BYTE - 2/2 - 59.6692 WORD - 2/2 - 48.419 BYTE - 2/3 - 59.6602 WORD - 2/3 - 64.8582 BYTE - 2/4 - 59.6544 WORD - 2/4 - 61.517 BYTE - 2/5 - 59.823 WORD - 2/5 - 66.1206 BYTE - 3/0 - 59.7425995 WORD - 3/0 - 65.7778 BYTE - 3/1 - 59.6726 WORD - 3/1 - 67.126 BYTE - 3/2 - 59.671401 WORD - 3/2 - 67.085 BYTE - 3/3 - 59.6738 WORD - 3/3 - 48.4468 BYTE - 3/4 - 59.663 WORD - 3/4 - 61.6294 BYTE - 3/5 - 59.8382 WORD - 3/5 - 66.135 BYTE - 4/0 - 59.733 WORD - 4/0 - 65.2674 BYTE - 4/1 - 59.664401 WORD - 4/1 - 66.560198 BYTE - 4/2 - 59.664401 WORD - 4/2 - 66.581399 BYTE - 4/3 - 59.6536 WORD - 4/3 - 66.5762 BYTE - 4/4 - 59.6518 WORD - 4/4 - 44.6578 BYTE - 4/5 - 59.848 WORD - 4/5 - 65.6294 BYTE - 5/0 - 59.8654 WORD - 5/0 - 44.4432 BYTE - 5/1 - 59.743599 WORD - 5/1 - 64.1662 BYTE - 5/2 - 59.741 WORD - 5/2 - 64.1994 BYTE - 5/3 -/ 59.7622 WORD - 5/3 - 64.2002 BYTE - 5/4 - 59.715 WORD - 5/4 - 61.0066 BYTE - 5/5 - 59.893 WORD - 5/5 - 44.8214 17 BYTE - 0/0 - 63.4548 WORD - 0/0 - 44.0148 BYTE - 0/1 - 63.336 WORD - 0/1 - 63.845 BYTE - 0/2 - 63.3186 WORD - 0/2 - 63.826 BYTE - 0/3 - 63.3302 WORD - 0/3 - 60.5694 BYTE - 0/4 - 63.4816 WORD - 0/4 - 67.2496 BYTE - 0/5 - 63.4772 WORD - 0/5 - 44.437 BYTE - 1/0 - 63.3842 WORD - 1/0 - 65.860199 BYTE - 1/1 - 63.3312 WORD - 1/1 - 48.422 BYTE - 1/2 - 63.3475995 WORD - 1/2 - 64.8646 BYTE - 1/3 - 63.336 WORD - 1/3 - 61.572 BYTE - 1/4 - 63.5192 WORD - 1/4 - 68.1422 BYTE - 1/5 - 63.4944005 WORD - 1/5 - 66.0974 BYTE - 2/0 - 63.403 WORD - 2/0 - 65.7278 BYTE - 2/1 - 63.329401 WORD - 2/1 - 67.052 BYTE - 2/2 - 63.3264 WORD - 2/2 - 48.4166 BYTE - 2/3 - 63.341 WORD - 2/3 - 61.5644 BYTE - 2/4 - 63.5146 WORD - 2/4 - 68.149 BYTE - 2/5 - 63.5356 WORD - 2/5 - 66.1794 BYTE - 3/0 - 63.437 WORD - 3/0 - 65.225 BYTE - 3/1 - 63.3402 WORD - 3/1 - 66.5466 BYTE - 3/2 - 63.3394 WORD - 3/2 - 66.5786 BYTE - 3/3 - 63.343 WORD - 3/3 - 44.6498 BYTE - 3/4 - 63.5054 WORD - 3/4 - 67.768199 BYTE - 3/5 - 63.4958 WORD - 3/5 - 65.5876 BYTE - 4/0 - 63.4844 WORD - 4/0 - 66.6728 BYTE - 4/1 - 63.4056 WORD - 4/1 - 67.9544 BYTE - 4/2 - 63.4454 WORD - 4/2 - 67.9664 BYTE - 4/3 - 63.4662 WORD - 4/3 - 64.7972 BYTE - 4/4 - 63.6026 WORD - 4/4 - 48.9394 BYTE - 4/5 - 63.612 WORD - 4/5 - 67.0092 BYTE - 5/0 - 63.516 WORD - 5/0 - 44.4892 BYTE - 5/1 - 63.4048 WORD - 5/1 - 64.1286 BYTE - 5/2 - 63.4294 WORD - 5/2 - 64.1474 BYTE - 5/3 - 63.407 WORD - 5/3 - 60.8854 BYTE - 5/4 - 63.6082 WORD - 5/4 - 67.567 BYTE - 5/5 - 63.6144 WORD - 5/5 - 44.7994 18 BYTE - 0/0 - 67.1272 WORD - 0/0 - 44.0088005 BYTE - 0/1 - 67.0236 WORD - 0/1 - 63.7638 BYTE - 0/2 - 67.0532 WORD - 0/2 - 60.4578 BYTE - 0/3 - 67.2042 WORD - 0/3 - 67.0546 BYTE - 0/4 - 67.2 WORD - 0/4 - 67.048399 BYTE - 0/5 - 67.193 WORD - 0/5 - 44.3942 BYTE - 1/0 - 67.1334 WORD - 1/0 - 65.645 BYTE - 1/1 - 67.063 WORD - 1/1 - 48.3762 BYTE - 1/2 - 67.0372 WORD - 1/2 - 61.5272 BYTE - 1/3 - 67.2078 WORD - 1/3 - 68.1358 BYTE - 1/4 - 67.2312 WORD - 1/4 - 68.1326 BYTE - 1/5 - 67.25 WORD - 1/5 - 66.1058 BYTE - 2/0 - 67.1368 WORD - 2/0 - 65.21 BYTE - 2/1 - 67.052 WORD - 2/1 - 66.5704 BYTE - 2/2 - 67.0572 WORD - 2/2 - 44.6336 BYTE - 2/3 - 67.211 WORD - 2/3 - 67.671 BYTE - 2/4 - 67.194 WORD - 2/4 - 67.7048 BYTE - 2/5 - 67.1818 WORD - 2/5 - 65.506 BYTE - 3/0 - 67.2122 WORD - 3/0 - 66.5432 BYTE - 3/1 - 67.1146 WORD - 3/1 - 67.8926 BYTE - 3/2 - 67.099 WORD - 3/2 - 64.6704 BYTE - 3/3 - 67.298 WORD - 3/3 - 48.932 BYTE - 3/4 - 67.313 WORD - 3/4 - 69.046 BYTE - 3/5 - 67.2314 WORD - 3/5 - 66.9512 BYTE - 4/0 - 67.1896 WORD - 4/0 - 66.5786 BYTE - 4/1 - 67.0886 WORD - 4/1 - 67.881 BYTE - 4/2 - 67.1148 WORD - 4/2 - 64.7124 BYTE - 4/3 - 67.2728 WORD - 4/3 - 71.3052 BYTE - 4/4 - 67.2814 WORD - 4/4 - 48.9384 BYTE - 4/5 - 67.2748 WORD - 4/5 - 66.9448 BYTE - 5/0 - 67.2058 WORD - 5/0 - 44.4072 BYTE - 5/1 - 67.1402 WORD - 5/1 - 64.0668 BYTE - 5/2 - 67.0818 WORD - 5/2 - 60.8138 BYTE - 5/3 - 67.27 WORD - 5/3 - 67.4762 BYTE - 5/4 - 67.2784 WORD - 5/4 - 67.482 BYTE - 5/5 - 67.2704 WORD - 5/5 - 44.7416 19 BYTE - 0/0 - 70.773 WORD - 0/0 - 43.9664 BYTE - 0/1 - 70.6776 WORD - 0/1 - 60.44 BYTE - 0/2 - 70.8226 WORD - 0/2 - 67.086 BYTE - 0/3 - 70.8426 WORD - 0/3 - 67.086198 BYTE - 0/4 - 70.8704 WORD - 0/4 - 67.173399 BYTE - 0/5 - 70.8412 WORD - 0/5 - 44.3862 BYTE - 1/0 - 70.7832 WORD - 1/0 - 65.2268 BYTE - 1/1 - 70.6622 WORD - 1/1 - 44.633 BYTE - 1/2 - 70.8634 WORD - 1/2 - 67.6758 BYTE - 1/3 - 70.8522 WORD - 1/3 - 67.684 BYTE - 1/4 - 70.9036 WORD - 1/4 - 67.7088 BYTE - 1/5 - 70.8872 WORD - 1/5 - 65.6548 BYTE - 2/0 - 70.892 WORD - 2/0 - 66.6198 BYTE - 2/1 - 70.7882 WORD - 2/1 - 64.8046 BYTE - 2/2 - 70.9682 WORD - 2/2 - 48.9674 BYTE - 2/3 - 70.9552 WORD - 2/3 - 69.1286 BYTE - 2/4 - 70.942 WORD - 2/4 - 69.115 BYTE - 2/5 - 70.9428 WORD - 2/5 - 67.088 BYTE - 3/0 - 70.8768 WORD - 3/0 - 66.681 BYTE - 3/1 - 70.7838 WORD - 3/1 - 64.732 BYTE - 3/2 - 70.9384 WORD - 3/2 - 71.350198 BYTE - 3/3 - 70.9852 WORD - 3/3 - 48.9326 BYTE - 3/4 - 70.9758 WORD - 3/4 - 69.143 BYTE - 3/5 - 70.9402 WORD - 3/5 - 67.0294 BYTE - 4/0 - 70.8312 WORD - 4/0 - 66.659 BYTE - 4/1 - 70.789 WORD - 4/1 - 64.7946 BYTE - 4/2 - 70.9458 WORD - 4/2 - 71.3388 BYTE - 4/3 - 70.9506 WORD - 4/3 - 71.3158 BYTE - 4/4 - 70.9552 WORD - 4/4 - 48.9392 BYTE - 4/5 - 70.9882 WORD - 4/5 - 67.0226 BYTE - 5/0 - 70.8512 WORD - 5/0 - 44.397 BYTE - 5/1 - 70.75 WORD - 5/1 - 60.8028 BYTE - 5/2 - 70.9688 WORD - 5/2 - 67.4586 BYTE - 5/3 - 70.9544 WORD - 5/3 - 67.5054 BYTE - 5/4 - 70.9438 WORD - 5/4 - 67.5162 BYTE - 5/5 - 70.9614 WORD - 5/5 - 44.738801 /^$There are two sections in this file; the first is a sample run on MC (exhibiting KL performance) and the second a sample run on ML (exhibiting KA performance). ML's memory is uniformly MF-10's with 1.0 usec cycle time (I think). For MC^z( generally the memory references are being satisfied by the cache. ---------------------------------------------------------- MIT-MC KL-10: 100 checks per exper, 1000 executes per check <#>(# of correction chk): Name - , sd= avg usec/chk, corrected usec/chk Control: 551.46 avg/chk, 3.91062254 std dev (usec) per chk 1: MOVEI 0 - 0.3349 usec, sd=6.2861454E-3 886.36 334.9 2(1): Indexing - 0.0415599975 usec, sd=4.8822062E-3 927.92 41.559998 3: MOVE 70 - 0.50144 usec, sd=4.8169621E-3 1052.9 501.439994 4: SETZ A, - 0.33419 usec, sd=4.1655206E-3 885.65 334.19 5: MOVEI A,0 - 0.33476 usec, sd=4.9220486E-3 886.22 334.76 6: TDC A,A - 0.58499 usec, sd=4.4791182E-3 1136.45 584.99 7: TDZ A,A - 0.58566 usec, sd=6.8590724E-3 1137.12 585.66 8: TLC A, - 0.45984 usec, sd=6.0136563E-3 1011.3 459.840004 9: MOVEI A,1(A) - 0.37678 usec, sd=5.6630655E-3 928.24 376.78 10: ADDI A,1 - 0.37653 usec, sd=5.5438592E-3 927.99 376.53 11: AOJ A, - 0.54412 usec, sd=6.2462488E-3 1095.58 544.12 12: AOS A - 0.75400001 usec, sd=6.8271059E-3 1305.46 754.00001 13: SUBI A,1 - 0.50171 usec, sd=5.6789083E-3 1053.17 501.71 14: SOJ A, - 0.54387 usec, sd=6.0518591E-3 1095.33 543.87 15: SOS A - 0.7523 usec, sd=5.326819E-3 1303.76 752.3 16: MOVEI A,-1(A) - 0.37698 usec, sd=6.2243222E-3 928.44 376.98 17: MOVE A,B - 0.460090004 usec, sd=5.4112151E-3 1011.55 460.090004 18: MOVE A,70 - 0.5028 usec, sd=7.4340852E-3 1054.26 502.799995 19: HRRI A,0 - 0.37664 usec, sd=5.0859795E-3 928.1 376.64 20: HRRZI A,0 - 0.33478 usec, sd=5.8690129E-3 886.24 334.78 21: HRRZ A,A - 0.46052 usec, sd=6.7215836E-3 1011.98 460.520004 22: HRRZ A,70 - 0.50198 usec, sd=5.0342576E-3 1053.44 501.98 23: HRR A,70 - 0.54337 usec, sd=4.1495482E-3 1094.83 543.37 24: HLL A,70 - 0.5436 usec, sd=4.5017357E-3 1095.06 543.6 25: HRL A,70 - 0.54419 usec, sd=5.96212E-3 1095.65 544.19 26: MOVEI A,(B) - 0.37656 usec, sd=6.0337591E-3 928.02 376.56 27: MOVSI A,(B) - 0.37639 usec, sd=4.4756284E-3 927.85 376.39 28: MOVNS A - 0.9192 usec, sd=5.0124844E-3 1470.66 919.2 29: MOVNI A,(A) - 0.58523 usec, sd=6.0389361E-3 1136.69 585.23 30: MOVN A,A - 0.66904 usec, sd=5.7090936E-3 1220.5 669.04 31: HRRM A,70 - 0.92095 usec, sd=6.9664373E-3 1472.41 920.95 32: MOVEM A,70 - 0.71172 usec, sd=7.655676E-3 1263.18 711.72 33: Control for PUSHJ - 1.08767 usec, sd=6.6001893E-3 1639.13 1087.67 34: Control for IDPB - 2.00908 usec, sd=9.516433E-3 2560.54 2009.08001 35: Control for indexing/indirect (movei) - 0.33402 usec, sd=3.7395688E-3 885.48 334.020004 36(35): Indexing (movei (a)) - 0.042079994 usec, sd=5.3786324E-3 927.56 42.079994 37(35): Indirect (movei @a) - 0.293659996 usec, sd=7.0721726E-3 1179.14 293.659996 38(35): Indirect (movei @70) - 0.335840005 usec, sd=6.3307285E-3 1221.32 335.840004 39(35): Indexing & indirect (movei @([70])) - 0.37704999 usec, sd=5.9002118E-3 1262.53 377.049995 40: MOVEI - 0.33356 usec, sd=4.0658639E-3 885.02 333.56 41: MOVE A,A - 0.45986 usec, sd=6.2786841E-3 1011.32 459.86 42: MOVE A,70 - 0.50211001 usec, sd=5.125E-3 1053.57 502.11001 43: HRR A,70 - 0.54388 usec, sd=5.983049E-3 1095.34 543.88 44: SETOM 0 - 0.58493 usec, sd=5.5028401E-3 1136.39 584.93 45: JRST - 0.37635 usec, sd=4.5276925E-3 927.81 376.35 46(45): JSR - 0.71152 usec, sd=7.9392222E-3 1639.33 711.52 47(33): PUSHJ - 0.87926001 usec, sd=9.899495E-3 2518.39 879.26001 48: ADD A,70 - 0.54412 usec, sd=5.9055059E-3 1095.58 544.12 49: DMOVE A,70 - 0.92068 usec, sd=7.185054E-3 1472.14 920.68 50: MOVEM A,70 - 0.71159 usec, sd=6.619101E-3 1263.05 711.59 51: LSH A, 35. - 0.66909 usec, sd=5.1931444E-3 1220.55 669.09 52: LSH A,-35. - 0.7944 usec, sd=5.7987067E-3 1345.86 794.4 53: LSHC A, 71. - 1.17078002 usec, sd=6.3442887E-3 1722.24 1170.78 54: LSHC A,-71. - 1.21274 usec, sd=6.3835726E-3 1764.2 1212.74 55: IBP 70 - 1.06226001 usec, sd=6.6001893E-3 1613.72 1062.26 56: ILDB 70 - 1.5277 usec, sd=0.015811388 2079.16 1527.7 57(34): IDPB 70 - 1.91547 usec, sd=0.01174734 4476.01 1915.47 58: JFCL - 0.92124 usec, sd=8.470537E-3 1472.7 921.24 59: CAI - 0.50215 usec, sd=5.7744046E-3 1053.61 502.15 60: JUMP - 0.50202 usec, sd=5.9187203E-3 1053.48 502.02 61: CAM - 0.62759 usec, sd=6.4153137E-3 1179.05 627.59 62: EQV A,A - 0.50211001 usec, sd=5.6499446E-3 1053.57 502.11001 63: EQV A,70 - 0.54438 usec, sd=5.5915672E-3 1095.84 544.38 64: SETOB 0,0 - 0.58538 usec, sd=5.6720256E-3 1136.84 585.38 65: AOS 70 - 0.87857 usec, sd=6.4006835E-3 1430.03 878.57 66: EXCH A,B - 0.66909 usec, sd=5.3033008E-3 1220.55 669.09 67: EXCH A,70 - 0.87791 usec, sd=6.2861454E-3 1429.37 877.91 68(45): XCT 70 - 0.50196001 usec, sd=6.6567634E-3 1429.77 501.96001 MIT-ML KA-10: 100 checks per exper, 1000 executes per check <#>(# of correction chk): Name - , sd= avg usec/chk, corrected usec/chk Control: 2986.24 avg/chk, 7.5415515 std dev (usec) per chk 1: MOVEI 0 - 2.20160004 usec, sd=3.24037033E-3 5187.84 2201.6z#g-f0004 2(1): Indexing - 0.30527997 usec, sd=0.01698528766 5493.12 305.27997 3: MOVE 70 - 3.80076 usec, sd=3.7416574E-3 6787.0 3800.76 4: SETZ A, - 2.2034 usec, sd=0.01324764127 5189.64 2203.4 5: MOVEI A,0 - 2.21088 usec, sd=0.030062435 5197.12 2210.88 6: TDC A,A - 3.23228 usec, sd=0.0144568323 6218.52 3232.28 7: TDZ A,A - 3.23316005 usec, sd=0.01797220064 6219.4 3233.16003 8: TLC A, - 2.73788 usec, sd=0.014422205 5724.12 2737.88 9: MOVEI A,1(A) - 2.50544 usec, sd=0.0142741024 5491.68 2505.44 10: ADDI A,1 - 2.5428 usec, sd=0.01303840486 5529.04 2542.8 11: AOJ A, - 2.54152 usec, sd=5.5452682E-3 5527.76 2541.52 12: AOS A - 3.50208 usec, sd=9.3005376E-3 6488.32 3502.08 13: SUBI A,1 - 2.54092 usec, sd=4.0926763E-3 5527.16 2540.92 14: SOJ A, - 2.54172003 usec, sd=0.01036822074 5527.96 2541.72003 15: SOS A - 3.50096 usec, sd=3.8729833E-3 6487.2 3500.96 16: MOVEI A,-1(A) - 2.5064 usec, sd=7.615773E-3 5492.64 2506.4 17: MOVE A,B - 2.69796 usec, sd=0.01142365962 5684.2 2697.96 18: MOVE A,70 - 3.80084 usec, sd=8.093207E-3 6787.08 3800.84 19: HRRI A,0 - 2.42588 usec, sd=0.118072011 5412.12 2425.88 20: HRRZI A,0 - 2.20712 usec, sd=0.031264996 5193.36 2207.12 21: HRRZ A,A - 2.6984 usec, sd=3.7749172E-3 5684.64 2698.4 22: HRRZ A,70 - 3.80096003 usec, sd=3.6742346E-3 6787.2 3800.96 23: HRR A,70 - 3.95512 usec, sd=3.8078865E-3 6941.36 3955.12 24: HLL A,70 - 3.96792 usec, sd=0.072374028 6954.16 3967.92 25: HRL A,70 - 4.34016 usec, sd=0.02393741836 7326.4 4340.16 26: MOVEI A,(B) - 2.50356 usec, sd=3.96862695E-3 5489.8 2503.56 27: MOVSI A,(B) - 2.50264 usec, sd=3.6742346E-3 5488.88 2502.64 28: MOVNS A - 3.5002 usec, sd=4.0620192E-3 6486.44 3500.2 29: MOVNI A,(A) - 2.68676 usec, sd=3.6742346E-3 5673.0 2686.76 30: MOVN A,A - 2.88224 usec, sd=3.5355339E-3 5868.48 2882.24 31: HRRM A,70 - 4.88032 usec, sd=3.082207E-3 7866.56 4880.32 32: MOVEM A,70 - 4.0232 usec, sd=3.31662476E-3 7009.44 4023.2 33: Control for PUSHJ - 6.60316 usec, sd=2.99999997E-3 9589.4 6603.16 34: Control for IDPB - 11.48592 usec, sd=4.0E-3 14472.16 11485.92 35: Control for indexing/indirect (movei) - 2.2022 usec, sd=3.6400549E-3 5188.44 2202.2 36(35): Indexing (movei (a)) - 0.30035999 usec, sd=3.60555124E-3 5488.8 300.359985 37(35): Indirect (movei @a) - 0.65764002 usec, sd=4.0E-3 5846.08 657.64001 38(35): Indirect (movei @70) - 1.76115997 usec, sd=3.7416574E-3 6949.6 1761.15997 39(35): Indexing & indirect (movei @([70])) - 2.06244 usec, sd=3.5355339E-3 7250.88 2062.44 40: MOVEI - 2.205 usec, sd=0.015411035 5191.24 2205.0 41: MOVE A,A - 2.70168 usec, sd=0.01928730146 5687.92 2701.68 42: MOVE A,70 - 3.8034 usec, sd=0.01058300514 6789.64 3803.4 43: HRR A,70 - 3.95596004 usec, sd=3.5355339E-3 6942.2 3955.96 44: SETOM 0 - 2.70804 usec, sd=3.6742346E-3 5694.28 2708.04004 45: JRST - 2.20464 usec, sd=0.017930421 5190.88 2204.64 46(45): JSR - 4.251 usec, sd=0.017117243 9441.88 4251.0 47(33): PUSHJ - 4.9694 usec, sd=0.036769553 14558.8 4969.4 48: ADD A,70 - 4.19648 usec, sd=0.133626345 7182.72 4196.48 49: DMOVE A,70 - 0.0 usec, sd=0.0 0.0 0.0 50: MOVEM A,70 - 4.02444 usec, sd=0.0107238053 7010.68 4024.44 51: LSH A, 35. - 8.09752 usec, sd=0.0498798555 11083.76 8097.52 52: LSH A,-35. - 7.9282 usec, sd=4.6904157E-3 10914.44 7928.2 53: LSHC A, 71. - 14.1233998 usec, sd=6.6332495E-3 17109.64 14123.4 54: LSHC A,-71. - 13.9616 usec, sd=4.8989795E-3 16947.84 13961.6 55: IBP 70 - 4.84176 usec, sd=3.60555124E-3 7828.0 4841.76 56: ILDB 70 - 10.2694 usec, sd=4.8989795E-3 13255.64 10269.4 57(34): IDPB 70 - 12.7122 usec, sd=7.4833147E-3 27184.36 12712.2 58: JFCL - 2.20176 usec, sd=3.5355339E-3 5188.0 2201.76 59: CAI - 2.54088 usec, sd=3.8729833E-3 5527.12 2540.88 60: JUMP - 2.54004005 usec, sd=3.4641016E-3 5526.28 2540.04004 61: CAM - 3.03544 usec, sd=3.7416574E-3 6021.68 3035.44 62: EQV A,A - 2.8518 usec, sd=3.5355339E-3 5838.04 2851.8 63: EQV A,70 - 3.95548 usec, sd=3.5355339E-3 6941.72 3955.48 64: SETOB 0,0 - 3.05616003 usec, sd=3.60555124E-3 2]4 3056.16003 65: AOS 70 - 4.90824 usec, sd=3.082207E-3 7894.48 4908.24 66: EXCH A,B - 3.83560005 usec, sd=3.4641016E-3 6821.84 3835.60004 67: EXCH A,70 - 5.24576 usec, sd=3.31662476E-3 8232.0 5245.76 68(45): XCT 70 - 2.19848 usec, sd=3.8729833E-3 7389.36 2198.48 -f$BB