|
|
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: 6144 (0x1800)
Types: TextFile
Names: »tscalpr«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦09b4e9619⟧ »thcømat«
└─⟦this⟧
message scalpr
(scalpr=set 1
(scalpr=slang fpnames type.yes insertproc entry.no
scalpr vectpr1 vectpr2)
; 23-7-74 ojh
; scalar product with extended accuracy
b. g1,e5 w.
k=10000
s. g6,j40,a16,b10,c20
h.
g0=0
e2:
g1: g3,g2
j13: g0+13,0 ; last used
j30: g0+30,0 ; saved sr,w3
j6: g0+6,0 ; end register expr
j8: g0+8,0 ; end address expr
j4: g0+4,0 ; take expr
j18: g0+18,0 ; zone alarm (index)
g2=k-2-g1, g3=g2 ; end of abs words, points
w.
e0: g0
0
23 07 74, 16 30 00
e4:
am 1 ; entry vectpr2, mode=2
e3: am 1 ; entry vectpr1, mode=1
e1: al w1 0 ; entry scalpr , mode=0
rl. w2 (j13.)
ds. w3 (j30.)
rx w1 x2+8 ; take n , store mode
rl w0 x2+6
so w0 16
jl. w3 (j4.)
ds. w3 (j30.)
dl w1 x1
rl w3 x2+6
sz w3 1
cf w1 0 ; w1=n
sh w1 -1 ; if n<0 then
jl. w3 (j18.) ; alarm index n
rs. w1 a0.
rl w3 x2+8
sn w3 0 ; if mode=0 then w1=n
jl. c0.
wm w1 2
sz w3 1 ; else if mode is odd then w1=n*n
jl. c0.
wa. w1 a0. ; else w1=n*(n+1)/2
as w1 -1
c0: rl w3 x2+12 ; take first array (A)
rl w0 x3
ba w3 x2+10
wa w0 x3
rs. w0 a1.
rl w0 x3-2 ; index check
ws w0 x3
as w0 -2
sh w0 x1 ; if not w1 elements then
jl. w3 (j18.) ; alarm index w1
rl. w1 a0.
rl w3 x2+16 ; take second array (B)
rl w0 x3
ba w3 x2+14
wa w0 x3
rs. w0 a2.
rl w0 x3-2 ; index check
ws w0 x3
as w0 -2
sh w0 x1 ; if not n elements then
jl. w3 (j18.) ; alarm index n
rl w1 x2+8 ; w1=mode
al. w0 c3.
rs. w0 b1.
se w1 0 ; if mode=0 then
jl. c5. ; goto vectpr init
rl. w1 j6. ; initialize for scalpr
rs. w1 b6.
rl. w1 a1.
rs. w1 b5.
jl. c1. ; goto accumulated product
c5: rl w3 x2+20 ; vectpr init: take third array (C)
rl w0 x3
ba w3 x2+18
wa w0 x3
rs. w0 a3.
rl w0 x3-2 ; index check
ws w0 x3
as w0 -2
rl. w1 a0.
sh w0 x1 ; if not n elements then
jl. w3 (j18.) ; alarm index n
rl w0 x2+8 ; w0=mode
sn w0 2 ; if mode=2 then
jl. c6. ; goto vectpr2 init
rx. w1 a1. ; initialize for vectpr2
rs. w1 b4.
al. w1 c7.
rs. w1 b6.
jl. c1.
c7: rl. w3 a3. ; counter for vectpr1
al w3 x3+4
ds w1 x3 ; store result in C(i)
rl. w2 a1.
al w2 x2-1 ; count
sh w2 0
jl. (j8.)
ds. w3 a3.
jl. c1.
c6: rs. w1 b7. ; init vecpr2: b7:=n
al w0 0
rs. w0 a4.
al. w0 c11.
rs. w0 b6.
jl. c13.
c11: rl. w3 a3. ; counter for vectpr2
al w3 x3+4
ds w1 x3
rs. w3 a3.
rl. w3 b7.
sh w3 0
jl. (j8.)
c13: ; entry for accumulated product, if
al w3 4 ; only lower half of matrix is stored
rs. w3 a10.
rl. w3 b7.
al w2 x3-1
rs. w2 b7.
rl. w2 a1.
rs. w2 b5.
rl. w2 a4.
al w2 x2+4
rs. w2 a4.
c1: rl. w1 a2. ; normal entry for accum.product
rs. w1 b4.
rl. w1 a0.
rs. w1 b2.
rl. w0 a8.
rs. w0 a7.
ld w3 48
ds. w3 a6.
c2: dl. w3 a10. ; continue for normal accum.prod.
c12: aa. w3 b5. ; cont. for lower half of matrix stored
ds. w3 b5.
bz w1 x2-1 ; start product, addr. of last byte
; of the two reals in w2 and w3
wm w1 x3-2
ds. w1 a11.
bz w1 x3-1
wm w1 x2-2
aa. w1 a11.
ad w1 -12
ds. w1 a11.
rl w1 x2-2
wm w1 x3-2
aa. w1 a11.
bl w2 x2
ba w2 x3 ; product in w0w1,w2
sn w0 0 ; if product=0 then
rl. w2 a8. ; w2= -4096
sh. w2 (a7.) ; start accumulation, firts assure number
; with smallest 2-exponent in w0w1,w2
jl. c17.
rx. w0 a5.
rx. w1 a6.
rx. w2 a7.
c17: ws. w2 a7.
ad w1 x2 ; shift of smallest addend
aa. w1 a6. ; addition
nd. w1 11 ; and normalization
ad w1 -1
ds. w1 a6.
rl. w2 a7.
am 1
al w2 x2 ; adjust exponent
rs. w2 a7.
rl. w3 b2. ; counter for accum. product
al w3 x3-1
sh w3 0
jl. (b1.)
rs. w3 b2.
se. w3 (b7.)
jl. c14.
rl. w2 a4.
rs. w2 a6.
rl. w2 b5.
rs. w2 a1.
jl. 6
c14: sl. w3 (b7.)
jl. c2.
dl. w3 a6.
al w3 x3+4
rs. w3 a6.
jl. c12.
c3: sl w2 -2048
jl. b9.
al w0 0
ac w1 -2048
jl. (b6.)
b9: sl. w2 (a9.)
jl. c16.
c15: ad w1 1
hl w1 5
jl. (b6.)
c16: ds. w1 a11.
al w1 8
ci w1 x2
dl. w1 a11.
jl. c15.
a8: -4096
a9: 2048
4
a10: 4
a0: 0
a3: 0
a1: 0
a2: 0
a4: 0
a5: 0
a6: 0
a7: 0
0
a11: 0
b1: 0
b2: 0
b4: 0
b5: 0
b6: 0
b7: 0
h. 0,r. (:10504-k:) w.
<:scalpr <0>:>
e.
;scalpr
g0:
g1: 1
0,0,0,0
1<23+e1-e2
4<18+26<12+26<6+13 ; real procedure scalpr(n,A,B);
0 ; value n; integer n; array A,B;
4<12+e0-e2
1<12+0
n.
▶EOF◀