DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦2833993e9⟧ TextFile

    Length: 9216 (0x2400)
    Types: TextFile
    Names: »tmatrixmult«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦09b4e9619⟧ »thcømat« 
            └─⟦this⟧ 

TextFile

\f


message matrixmult prik

(matrixmult=slang entry.no message.no
matrixmult prik)

b. h99                   ;
p.    <:fpnames:>        ;

b. g1,e3                 ;
k=0                      ;

s. g2,j42,b20            ;
h.                       ;
g0=0                     ;
e3:                      ;
g1:   g2   , g2          ;

j3:   g0+ 3, 0           ;  rs entry  3, reserve
j4:   g0+ 4, 0           ;  rs entry  4, take expression
j6:   g0+ 6, 0           ;  rs entry  6, end register expression
j8:   g0+ 8, 0           ;  rs entry  8, end address expression
j13:  g0+13, 0           ;  rs entry 13, last used
j18:  g0+18, 0           ;  rs entry 18, zone alarm
j29:  g0+29, 0           ;  rs entry 29, param alarm
j30:  g0+30, 0           ;  rs entry 30, saved stack ref, saved w3

g2=-g1.-2                ;
w.                       ;
e0:   g0                 ;
      0                  ;
      811221,0           ;

; integer procedure take positive parameter;
;   4 bytes must have been reserved in stack before entry.
;           call          return
;   w0:                   ?
;   w1:     formal1addr   parameter
;   w2:     stackref      stackref
;   w3:     link          ?
;   the parameter is also stored in formal1.

b. a5, w.                ; begin
b0:   rs  w1  x2-2       ;   save formal1addr;
      al. w0     a1.     ;
      ws  w3     0       ;   catculate return;
      rs  w3  x2-4       ;   save link;
      dl  w1  x1+2       ;   take formals;
      sz  w0     16      ;   if expression then
      jl.        a0.     ;   begin
      jl. w3 (   j4.)    ;      take expression;
      ds. w3 (   j30.)   ;      save stack reference
                         ;   end;
a0:   dl  w1  x1         ;   take value;
      rl  w3 (x2-2)      ;   w3:= formal1;
      sz  w3     1       ;   if real
      cf  w1     0       ;      then round;
      sh  w1     0       ;   if not positive
      jl. w3 (   j29.)   ;      then param alarm;
      rs  w1 (x2-2)      ;   save param in formal1;
      am     (x2-4)      ;
a1:   jl.        0       ;   return
e.                       ; end;

; procedure take real array and check index;
;   4 bytes must have been reserved in stack before entry.
;           call          return
;   w0:     formal1addr   ?
;   w1:     index         index
;   w2:     stackref      stackref
;   w3:     link          ?
;   the address of the first element is stored in formal1.

b. a5, w.                ; begin
b1:   rx  w1     0       ;
      ds  w0  x2-2       ;   save index; save link;
      rl  w3  x1+2       ;
      ba  w3  x1         ;   w3:= absolute dope address;
      al  w0     4       ;
      wa  w0  x3         ;   w0:= lower index;
      wa  w0 (x1+2)      ;   w0:= address of first element;
      rs  w0  x1         ;   formal1:= w0;
      rl  w0  x3-2       ;   w0:= (upper index
      ws  w0  x3         ;        -lower index+4)
      as  w0    -2       ;        //4;
      rl  w1  x2-2       ;   w1:= index;
      sl  w0  x1         ;   if subscriptrange+1 >= index
      jl     (x2-4)      ;      then return
      jl. w3 (   j18.)   ;   else index alarm
e.                       ; end;

;real procedure sigma;
;   performs the calculation
;
;     m
;   SIGMA a  b
;    j=1   ij jk
;
;   using extended accuracy.
;           call          return
;   w0:     4*m
;   w1:     link          result
;   w2:     a(i,1)addr    w2+w0
;   w3:     b(1,k)addr    ?
;   b3:     4*n
b. a6, d7, w.            ; begin
      0                  ;
d0:   2048               ;   real zero;
      0                  ;   address b1k,
d1:   0                  ;           a1m+4,
d2:   0                  ;           link;
      0                  ;
d3:   0                  ;   long fraction;
d4:   0                  ;   integer exponent;
      0                  ;
d5:   0                  ;   long work1,
      0                  ;
d6:   0                  ;        work2;
      0                  ;
d7:   1024               ;   long roundconstant;

b2:   wa  w0     4       ;   w0:= w0+w2;
      ds. w0     d1.     ;   save w3; save w0;
      rs. w1     d2.     ;   save link;
      ld  w1    -65      ;
      ds. w1     d3.     ;   fraction:= 0; 
      al  w1    -2048    ;
      rs. w1     d4.     ;   exponent:= -2048;
      jl.        a2.     ;   goto start;

a0:   ds. w1     d3.     ;   save fraction;
      rs. w3     d4.     ;   save exponent;
a1:   rl. w3     d1.-2   ;
      wa. w3     b3.     ;
      rs. w3     d1.-2   ;
a2:   rl  w0  x2-2       ;
      rl  w1  x3-2       ;
      se  w0     0       ;
      sn  w1     0       ;
      jl.        a6.     ;
      wm  w1     0       ;
      ds. w1     d5.     ;
      bz  w1  x2-1       ;
      wm  w1  x3-2       ;
      ds. w1     d6.     ;
      bz  w1  x3-1       ;
      wm  w1  x2-2       ;
      aa. w1     d6.     ;
      ad  w1    -12      ;
      aa. w1     d5.     ;
      bl  w3  x3         ;
      ba  w3  x2         ;
      al  w3  x3+1       ;
      sh. w3 (   d4.)    ;
      jl.        a3.     ;
      rx. w0     d3.-2   ;
      rx. w1     d3.     ;
      rx. w3     d4.     ;
a3:   ws. w3     d4.     ;
      ad  w1  x3         ;
      aa. w1     d3.     ;
      nd  w1     7       ;
      ad  w1    -1       ;
      bl  w3     7       ;
      al  w3  x3+1       ;
      wa. w3     d4.     ;
      sn  w0     0       ;
      al  w3    -2048    ;
      al  w2  x2+4       ;
      se. w2 (   d1.)    ;
      jl.        a0.     ;
a4:   sn  w0     0       ;
      jl.        a5.     ;
      aa. w1     d7.     ;
      nd. w1     3       ;
      al  w3  x3         ;
a5:   hl  w1     7       ;
      sl  w3    -2048    ;
      sl. w3 (   d0.)    ;
      fd. w1     d0.     ;
      jl.    (   d2.)    ;

a6:   al  w2  x2+4       ;
      se. w2 (   d1.)    ;
      jl.        a1.     ;
      dl. w1     d3.     ;
      rl. w3     d4.     ;
      jl.        a4.     ;
e.

b3:   0                  ;

b. a5, d6, w.            ;
d0:   0                  ;
d1:   0                  ;
d2:   0                  ;
d3:   0                  ;
d4:   0                  ;
d5:   0                  ;
d6:   0                  ;

e1:   rl. w2 (   j13.)   ;matrixmult:
      ds. w3 (   j30.)   ;
      al  w1    -4       ;
      jl. w3 (   j3.)    ;
      al  w1  x2+6       ;
      jl. w3     b0.     ;
      al  w1  x2+10      ;
      jl. w3     b0.     ;
      wm  w1  x2+6       ;
      rs  w1  x2+8       ;
      al  w0  x2+18      ;
      jl. w3     b1.     ;
      al  w1  x2+14      ;
      jl. w3     b0.     ;
      wm  w1  x2+10      ;
      al  w0  x2+22      ;
      jl. w3     b1.     ;
      rl  w1  x2+14      ;
      wm  w1  x2+6       ;
      al  w0  x2+26      ;
      jl. w3     b1.     ;
      rs. w2 (   j13.)   ;
      rl  w0  x2+10      ;
      ls  w0     2       ;
      rl  w1  x2+26      ;
      ds. w1     d1.     ;
      rl  w0  x2+8       ;
      rl  w1  x2+14      ;
      ld  w1     2       ;
      rs. w1     b3.     ;
      al  w1  x1-4       ;
      rl  w3  x2+22      ;
      rl  w2  x2+18      ;
      aa  w1     6       ;
      ds. w1     d3.     ;
      ds. w3     d5.     ;
      rs. w3     d6.     ;
      rl. w0     d0.     ;
      jl. w1     b2.     ;

a0:   ds. w1 (   d1.)    ;
      rl. w3     d5.     ;
      se. w3 (   d3.)    ;
      jl.        a2.     ;
      sl. w2 (   d2.)    ;
      jl.    (   j8.)    ;
      rs. w2     d4.     ;
      rl. w3     d6.     ;
a1:   rs. w3     d5.     ;
      dl. w1     d1.     ;
      al  w1  x1+4       ;
      rs. w1     d1.     ;
      al. w1     a0.     ;
      jl.        b2.     ;

a2:   al  w3  x3+4       ;
      rl. w2     d4.     ;
      jl.        a1.     ;
e.

e2:   rl. w2 (   j13.)   ;prik:
      ds. w3 (   j30.)   ; save stackref;
      al  w1    -4       ;
      jl. w3 (   j3.)    ; reserve 4 bytes;
      al  w1  x2+6       ;
      jl. w3     b0.     ; take m;
      al  w0  x2+10      ;
      jl. w3     b1.     ; take A and test for m elements;
      al  w0  x2+14      ;
      jl. w3     b1.     ; take B and test for m elements;
      rs. w2 (   j13.)   ; release 4 bytes;
      rl  w3  x2+14      ; w3:= firstaddr(A)+2;
      al  w0     4       ;
      rs. w0     b3.     ; b3:= 1*4;
      rl  w0  x2+6       ; w0:= m
      ls  w0     2       ;       *4;
      rl  w2  x2+10      ; w2:= firstaddr(B)+2;
      jl. w1     b2.     ; sigma;
      jl.    (   j6.)    ; end register expression;

h.                       ; end
      0,r.(:504-k:)      ;
w.                       ;
      <:matrixmult <0>:> ;

e.                       ;

w.                       ;
;matrixmult:
g0:   1                  ;
      0,0,0,0            ;
      1<23+e1-e3         ;
      1<18+26<12+26<6+26 ;  procedure matrixmult(l,m,n,A,B,C);
      13<18+13<12+13<6   ;  value l,m,n; integer l,m,n; array A,B,C;
      4<12+e0-e3         ;
      1<12+0             ;

;prik:
g1:   1<23+4             ;
      0,0,0,0            ;
      1<23+e2-e3         ;
      4<18+26<12+26<6+13 ;  real procedure prik(m,A,B);
      0                  ;  value m; integer m; array A,B;
      4<12+e0-e3         ;
      1<12+0             ;
p.    <:insertproc:>     ;
e.
▶EOF◀