|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 14592 (0x3900) Types: TextFile Names: »tdecomposef«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦this⟧ »tdecomposef«
b. g1,e10 ; <*** special version of decompose, solve where fielding is allowed ***> s. a14,b70,c40,d10 k=10000 h. a9: a10 , a10 ; last abs-word a0: 4 , 0 ; take expression a1: 6 , 0 ; end reg.expression a8: 8 , 0 ; end addr.expression a2: 13 , 0 ; last used a4: 30 , 0 ; saved sref,w3 a5: 1<11+1 , 0 ; segm.table address(next segm.) a10=a5-a9 ; define rel. last abs-word 0 , 0 ; constants and working locations 0 , c11:-2048 ; real 0 0 , 0 ; 0 , c12: 0 ; max 1<10 , 0 ; 0 , c15: 0 ; real 0.5 0 , 0 ; 0 , c16: 0 ; work.loc. w. c18: 0 ; addr(addr-increment) c19: 0 ; addr(entry inner-product) c2: 0 ; n c1: 0 ; addr(piv(1)) c4: 0 ; addr(ex(1)) c9: 0 ; addr(a(k+1,1)) c8: 0 ; k c17: 0 ; dec:p,solve:4*n c7: 0 ; dec: j,addr(a(k,k)) e3: 0 ; external list 0 310869 1516 e1: am -6 ; entry decompose : w1:=-2 e2: al w1 4 ; entry solve: w1:=4 rl. w2 (a2.) ; w2:=last used ds. w3 (a4.) ; save w2w3 rl w0 x2 +14 ; rx w1 x2 +16 ; w0w1:=formal(mode); 2. formal:=entry so w0 16 ; if expression jl. w3 (a0.) ; then take expression dl w1 x1 ; w0w1:=mode rl w3 x2 +14 ; w3:=first formal(mode) sz w3 1 ; if real cf w1 0 ; then convert ds. w3 (a4.) ; save w2w3 rl. w3 (a5.) ; w3:=segment table location al w0 4 ; rs w0 x3 +d1 ; first addr-incr.:=4; second segment in core se w1 0 ; am d2 ; mode=1 => rel.addr(inner-pr.):=d2+d3 al w0 x3 +d3 ; mode=0 => rel.addr(inner-pr.):=d3 al w3 x3 +d4 ; w3:=addr(addr-increment) ds. w0 c19. ; store w3w0 al w3 x3 +d0 ; rs. w3 c7. ; store addr(array-transformation) sl w1 0 ; if mode<0 sl w1 2 ; or mode>1 jl. b33. ; then fejl 3 dl w1 x2 +12 ; w0w1:=formal(piv) jl w3 x3 ; transform(piv) as w0 -1 ; w0:=length in words rs. w0 c2. ; store n al w3 x3 +1 ; w3:=addr(piv(1)) wa w0 6 ; w0:=addr(ex(1)) ds. w0 c4. ; store addr dl w1 x2 +8 ; w0w1:=formal(a) jl. w3 (c7.); transform a al w3 x3 +4 ; w3:=addr(a(x,y)) (last byte) ; <* fielding allowed *> ds. w0 c8. ; c8:=length; c9:=addr(a(1,1)) rl. w0 c2. ; w0:=n as w0 2 ; w0:=4*n rs. w0 (c18.) ; second addr-increment:=4*n wm. w0 c2. ; w0:=4*n**2 rs. w0 c8. ; c8:=4*n**2; dl. w1 (c18.) ; w0w1:=4,4*n se w0 (x2 +16) ; if entry<>4 jl. b0. ; then go to decompose rs. w0 (c18.) ; address-increment:=4,4 SOLVE rs. w1 c17. ; store 4*n dl w1 x2 +20 ; w0w1:=formal(b) jl. w3 (c7.) ; transform b se. w0 (c17.) ; if length<>4*n jl. b34. ; then fejl 4 al w2 x3 +4 ; w2:=addr(b(1)) rl. w3 c9. ; w3:=addr(a(1,1)) ds. w3 b29. ; store addr al w0 0 ; k:=0 b20: rs. w0 c8. ; store k L*y=b wa. w0 c1. ; bl w1 (0) ; w1:=piv(k) sl. w1 (c8.) ; sl. w1 (c2.) ; if p<k or p>n-1 jl. b32. ; then fejl 2 as w1 2 ; w1:=4*p wa. w1 b28. ; w1:=addr(b(p)) dl w0 x2 ; w3w0:=b(k) rx w0 x1 ; rx w3 x1 -2 ; w3w0:=b(p); b(p):=b(k) ds w0 x2 ; b(k):=b(p) jl. w3 (c19.) ; w0w1:=b(k)-S(b(i)*a(k,i)) i:=1,2,..,k-1 b28: 0 ; addr(b(1)) b29: 0 ; addr(a(k,1)) fd w1 x3 ; w0w1:=w0w1/a(k,k) ds w1 x2 ; b(k):=w0w1 ds. w3 b25. ; dl. w1 c17. ; w0:=k; w1:=4*n wa. w1 b29. ; adjust addr(a(k,1)) rs. w1 b29. ; ba. w0 1 ; w0:=k+1 al w2 x2 +4 ; se. w0 (c2.) ; if w2<n jl. b20. ; then continue ld w1 48 ; w0w1:=0 ss. w1 (c18.) ; w1:=-5;w1:=-4 ds. w1 (c18.) ; store addr-increment b23: al w2 x2 -4 ; jl. w3 (c19.) ; w0w1:=b(k)-S(b(i)*a(k,i)) i:=n,n-1,..,k+1 b24: 0 ; addr(b(n)) b25: 0 ; addr(a(k,n)) ds w1 x2 ; b(k):=w0w1 sn. w2 (b28.) ; if k=1 jl. (a8.) ; then exit rl. w1 b25. ; ws. w1 c17. ; rs. w1 b25. ; adjust addr(a(k,n)) jl. b23. ; continue b0: rl. w0 c9. ; Decompose al w1 0 ; i:=0 MAXEXP rl w2 0 ; w2:=addr(aÆ1,1) b2: wa. w0 (c18.) ; w0:=addr(a(k+1,1)) al w3 -2048 ; maxexp:=-2048 b1: bs w3 x2 ; maxexp-akt sh w3 -1 al w3 0 ; max<akt : nulstil ba w3 x2 ; add akt al w2 x2+4 ; øg addr(akt) se w0 x2 ; række ikke slut jl. b1. ; => continue am. (c4.) hs w3 x1 ; ex(i):=maxexp al w1 x1+1 ; i:=i+1 se. w1 (c2.) ; i<n jl. b2. ; => continue al w1 0 ; k:=0 INIT. K-STEP rl. w2 c9. ; w2:=w3:= al w3 x2 ; addr(aÆ1,1) b11:ds. w3 b4. ; store addr(a(1,k)), addr(a(k,1)) rl w0 4 ; ds. w0 b8. ; wa. w0 (c18.) ; ds. w1 c8. ; store addr(a(k+1,1)),k al w3 x1 ; as w3 2 ; wa w2 6 ; dl. w0 c11. ; ds. w0 c12. ; max:=0 b5: rs. w1 c7. ; store j (init k) Lower am. (c4.) ; bl w1 x1 ; w1:=ex(j) hs. w1 c15. ; sæt exp jl. w3 (c19.) ; w0w1:=a(j,k)-S(a(j,i)*a(i,k)) i:=1,2,...,k-1 0 ; b4: 0 ; ds w1 x2 ; store w0w1 rx. w3 c7. ; w3:=j; c7:=addr(a(k,k)) sl w0 0 ; jl. b9. ; w0w10 => hop dl. w1 c11. ; fs w1 x2 ; w0w1:=abs(a(j,k)) b9: fd. w1 c15. ; w0w1:=abs(a(j,k))/2**ex(j)-1) ds. w1 c16. ; fs. w1 c12. ; w0w1:=akt-max sh w0 0 ; jl. b3. ; akt=<max => hop dl. w1 c16. ; ds. w1 c12. ; max:= akt rs. w3 c17. ; p:=j b3: wa. w2 (c18.) ; rl. w1 b4.-2 ; wa. w1 (c18.) ; rs. w1 b4.-2 ; al w1 x3+1 ; w1:=j+1 se. w1 (c2.) ; jl. b5. ; j<n => hop dl. w2 c12. ; w1w2:=max se w1 0 ; if max=0 then jl.b13. ; begin value:=false hs. w2 (c1.) ; piv(1):=-2048; jl. (a1.) ; exit end; b13: dl. w2 c17. ; w1:=k; w2:=p am. (c1.) ; hs w2 x1 ; piv(k):=p sn w2 x1 ; jl. b6. ; p=k => ikke ombyt am. (c4.) ; OMBYT bl w0 x1 ; w0:=EÆk am. (c4.) ; hs w0 x2 ; EÆp:=EÆk ws w2 2 ; w2:=p-k wm. w2 (c18.) ; w2:=4*n*(p-k) rl. w1 b8. ; w2:=dddr(aÆk,1) wa w2 2 ; w2:=addr(aÆp,1) b7: dl w0 x2 ; rx w0 x1 ; rx w3 x1-2 ; ds w0 x2 ; ombyt al w1 x1+4 ; al w2 x2+4 ; se. w1 (c9.) ; addr(a(k,i))<>addr(a(k+1,1)) jl. b7. ; => continue b6: dl. w1 (c18.) ; rx w1 0 ; ds. w1 (c18.) ; rl. w2 c7. ; w2:=addr(a(k,k)) b10:al w2 x2+4 ; w2:=addr(aÆj,k) am. (b12.) ; al w1 4 ; rs. w1 b12. ; w1:=addr(aÆ1,j) sn. w2 (c9.) ; w2=addr(aÆk+1,1) jl. b14. ; => end upper jl. w3 (c19.) ; w0w1:=a(k,j)-S(a(i,j)*a(k,i)); i:=1,2,...,k-1 b12:0 ; addr(a(1,j)) b8: 0 ; addr(a(k,1)) fd w1 x3 ; w0w1:=w0w1/a(k,k) ds w1 x2 ; a(k,j):=w0w1 jl. b10. ; b14:dl. w0 (c18.) ; rx w3 0 ; ds. w0 (c18.) ; wa. w3 b4. ; rl. w1 c8. ; al w1 x1+1 ; w1:=k+1 se. w1 (c2.) ; jl. b11. ; k<n => forfra al w1 -1 ; value:=true jl. (a1.) ; exit b34: am 1 ; fejl 4 b33: am 1 ; fejl 3 b32: am 1 ; fejl 2 b31: al w1 1 ; fejl 1 dl. w3 (a4.) ; am. (c18.) ; jl d5 ; 0,r. 253+a9>1-k>1 ; fill with zeroes <:lin. eq. 1:> ; second segment h. b41: a11 , a11 ; rel addr last abs word a12: 21 , 0 ; general alarm a13: 22 , 0 ; overflow a11=a13-b41 ; define last abs-word w. ; constants and working locations 0 ; save w2 b43: 0 ; save w3 0 ; b40: 0 ; addr.-increment 0 ; b36: 0 ; sum b49: -1<12 b47: 0 ; exponent 0 0 b58: 1<10 b59: 2048 f. b37: 0 ; real 0 b45: 0 ; save actual addresses b46: 0 b48: -1 b65: '600 '-600 w. b44: rs. w3 b36. rl w3 x1 ba w1 0 rl w0 x1 -2 ws w0 x1 ; wa w3 x1 ; <* in this comal version fielding is allowed *> jl. (b36.) b30: am (x2+16) al. w0 b64. ; jl. w3 (a12.) ; b42: ds. w3 b43. ; inner-produre(mode=0) : save 2w3 dl w3 x3 +2 ; w2w3:=start-addr dl. w1 b37. ; w0w1:=0 b38: ds. w1 b36. ; dl w1 x2 ; w0w1:=l sn. w2 (b43.-2) ; if addr(l)=slutaddr(l) jl. b39. ; then go to slut fm w1 x3 ; w0w1:=l*m fa. w1 b36. ; w0w1:=sum+l*m aa. w3 b40. ; add addr-increments jl. b38. ; continue b39: fs. w1 b36. ; slut: w0w1:=l am. (b43.) ; jl 4 ; return d0=b44-b40, d1=b40-b41-2, d2=k-b42, d3=b42-b41, d4=b40-b41 , d5=b30-b40 ds. w3 b43. ; inner-product(mode=1) : save w2w3 dl w3 x3 +2 ; w2w3:=start-addr. ld w1 48 ; w0w1:= long 0 ds. w1 b36. ; sum:=0 b50: ds. w3 b45. ; save addr sn. w2 (b43.-2) ; al. w3 b48.+1 ; if w2=slut-addr then w3:=addr(-1) dl w1 x2 ; w0w1:=l la. w1 b49. ; exponent:=0 ad w1 -1 ; ls w1 -1 ; dl w3 x3 ; hs. w3 b47.+2 ; store exponent(m) la. w3 b49. ; exponent:=0 ad w3 -1 ; ls w3 -1 ; ds. w2 b46. ; save l2,m1 wm w2 0 ; w1w2:=l1*m1 sn w1 0 ; if l*m=0 jl. b52. ; then goto next wm w0 6 ; w0w3:=l1*m2 rx. w1 b46.-2 ; rx. w2 b46. ; wm w2 2 ; w1w2:=l2*m1 aa w2 0 ; w1w2:=l1*m2+l2*m1 ad w2 -23 ; aa. w2 b46. ; w1w2:=l1*m1+(l1*m2+l2*m1)*2**(-23) bl. w3 (b45.-2) ; ba. w3 b47.+2 ; w3:=exponent(l)+exponent(m) rl. w0 b36.-2 ; sn w0 0 ; if sum=0 jl. b51. ; then goto store sl. w3 (b47.) ; if w3>4exponent jl. b55. ; then goto big_exp b57: ws. w3 b47. ; w3:=w3-exponent sh w3 -48 ; if expdiff<= -48 jl. b52. ; then goto store ad w2 x3 ; shift product rl. w3 b47. ; w3:=exponent b56: aa. w2 b36. ; add sum b51: nd w2 1 ; store: ad w2 -1 ; w1w2:=sum normalized shift(-1) ba w3 1 ; al w3 x3 +1 ; exponent:=exponent+norm_exp+1 ds. w2 b36. ; store sum rs. w3 b47. ; store exponent b52: dl. w3 b45. ; next: w2w3:=addr sn. w2 (b43.-2) ;if w2=slutaddr(l) jl. b53. ; then goto prepare exit aa. w3 b40. ; add addr-incr jl. b50. ; continue b55: sn. w3 (b47.) ; big_exp: if w3=exponent jl. b56. ; then goto no_shift rx. w1 b36.-2 ; rx. w2 b36. ; exchange(w1w2,sum) rx. w3 b47. ; exchange(w3,exponent) jl. b57. ; b53: ld w1 48 ; prepare exit: ss. w1 b36. ; w0w1:=-sum nd w1 7 ; sum:=sum normalized sn w0 0 ; if sum=0 jl. b54. ; then exit ad w1 -1 ; sum:=sum shift (-1) aa. w1 b58. ; round nd. w1 b36. ; normalize bl w3 7 ; ba. w3 b36. ; wa. w3 b47. ; al w3 x3 +4 ; exponent:=exponent+norm_exp1+norm_exp2+4 sl w3 -2048 ; sl. w3 (b59.) ; jl. b60. ; if exponent<-2048 or exponent>2047 then goto error b54: hs w3 3 ; b62: rl. w3 b45. ; w3:=slutaddr(m) am. (b43.) ; jl 4 ; exit b60: sh w3 0 ; am 4 ; dl. w1 b65. ; fm w1 2 ; jl. b62. ; b64=k+2 <:<10>decomp :> <:<10>solve :> 0,r. 253+b41>1-k>1 ; fill with zeroes <:lin. eq. 2:> e1=e1-a9, e2=e2-a9, e3=e3-a9 e. ; end segment w. g0: 2 ; tailpart decompose: size of area 0,0,0,0 ; 1<23+e1 ; entry 2<18+13<12+25<6+26 ; spec. 0 ; spec. 4<12+e3 ; ext. list 2<12 ; number of segments g1: 1<23+4 ; tailpart solve: shared entry 0,0,0,0 ; 1<23+e2 ; entry 1<18+26<12+13<6+25 ; spec. 26<18 ; spec. 4<12+e3 ; ext. list 2<12 ; number of segments \f ▶EOF◀