.TITLE MMULD MATRIX MULTIPLY (DOUBLE PRECISION) .IDENT /1.0/ ; 08/15/79 .GLOBL MPMULD, MMULD, M3MULD .ENABL LSB ; F0=R0 ;DEFINE FLOATING REGISTER 0 F1=R1 ;DEFINE FLOATING REGISTER 1 F2=R2 ;DEFINE FLOATING REGISTER 2 M3MULD: CMP #4,(R5) ;ARE THERE 4 ARGUMENTS? BNE BOMB3 ;BOMB IF # OF ARGS. NE 4 ADD #10,R5 ;R5=END OF LIST=N MOV @(R5),-(SP) ;(N) TO STACK MOV #3,R1 ;R1=(L)=3 MOV R1,R2 ;R2=(M)=3 MOV R1,R3 ;R3=(NRB)=3 MOV R1,R4 ;R4=(NRC)=3 MOV R1,R0 ;R0=(NRA)=3 BR 10$ MPMULD: CMP #11,(R5) ;ARE THERE 9 ARGUMENTS? BNE BOMBP ;BOMB IF # OF ARGS. NE 9 ADD #22,R5 ;R5=END OF LIST=NRC MOV @(R5),R4 ;(NRC) MOV @-(R5),R3 ;(NRB) MOV @-(R5),R0 ;(NRA) MOV @-(R5),-(SP) ;(N) TO STACK MOV @-(R5),R2 ;(M) MOV @-(R5),R1 ;(L) BR 10$ MMULD: CMP #6,(R5) ;ARE THERE 6 ARGUMENTS? BNE BOMB ;BOMB IF # OF ARGS. NE 6 ADD #14,R5 ;R5=END OF LIST=N MOV @(R5),-(SP) ;PLACE (N) ON STACK MOV @-(R5),R2 ;(M) MOV @-(R5),R1 ;(L) MOV R2,R3 ;(NRB)=(M) MOV R1,R4 ;(NRC)=(L) MOV R1,R0 ;(NRA)=(L) 10$: ASH #3,R3 ;8*(NRB) ASH #3,R0 ;8*(NRA) MOV R3,-(SP) ;PLACE 8*(NRB) ON STACK SUB R1,R4 ;(NRC)-(L) ASH #3,R4 ;8*((NRC)-(L)) MOV R4,-(SP) ;PLACE 8*((NRC)-(L)) ON STACK MOV -(R5),R3 ;R3=B MOV -(R5),R4 ;R4=A MOV -(R5),R5 ;R5=C MOV R4,-(SP) ;PLACE A ON STACK MOV R3,-(SP) ;PLACE B ON STACK MOV R4,-(SP) ;PLACE NEXT A ON STACK ADD #8.,(SP) ;NEXT A MOV R1,-(SP) ;PLACE (L) ON STACK MOV R2,-(SP) ;PLACE (M) ON STACK SETD ;SET FLOATING DOUBLE MODE CLRD F2 ;F2=0 BR 50$ 40$: MOV 4(SP),R4 ;SET A TO NEXT ROW 45$: MOV 6(SP),R3 ;RESTORE B ADD #8.,4(SP) ;SET NEXT A ON STACK MOV (SP),R2 ;RESET (M) ;MULTIPLICATION LOOP 50$: LDD (R4),F0 ;F0=A LDD (R3)+,F1 ;F1=B MULD F0,F1 ;A*B ADDD F1,F2 ;F2=SUM ADD R0,R4 ;NEXT ELEMENT OF A SOB R2,50$ ;DONE FORMING ELEMENT OF C? STD F2,(R5)+ ;STORE IN C CLRD F2 ;F2=0 SOB R1,40$ ;GO TO NEXT COLUMN OF C? DEC 16(SP) ;DONE? BEQ 60$ ;YES MOV 10(SP),R4 ;RESTORE A MOV R4,4(SP) ;NEXT A ON STACK ADD 14(SP),6(SP) ;NEXT COLUMN OF B ADD 12(SP),R5 ;NEXT COLUMN OF C MOV 2(SP),R1 ;RESET (L) BR 45$ 60$: ADD #20,SP ;RESTORE STACK RTS PC ;RETURN BOMBP: MOV #102444,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #51715,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 70$ BOMB3: MOV #102444,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #53165,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 70$ BOMB: MOV #45640,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #51535,R4 ;MOVE 1ST HALF OF NAME TO R4 70$: JSR R4,NAM$ ;SUBR TO PUT NAME IN WALKBACK JMP $BOMB ;ABORT, $BOMB DOES NOT EXIST .END