.TITLE MATBD MATRIX TRANSPOSE MULTIPLY (DOUBLE PRECISION) .IDENT /1.0/ ;08/15/79 .GLOBL MATBD,M3ATBD,MPATBD .ENABL LSB ; F0=R0 ;DEFINE FLOATING REGISTER 0 F1=R1 ;DEFINE FLOATING REGISTER 1 F2=R2 ;DEFINE FLOATING REGISTER 2 M3ATBD: CMPB #4,(R5) ;ARE THERE 4 ARGUMENTS? BNE BOMB3 ;BOMB IF # OF ARGS. NE 4 ADD #8.,R5 ;R5=>END OF ARG LIST MOV #3,R1 ;R1=L=3 MOV R1,R2 ;R2=M=3 MOV @(R5),-(SP) ;PLACE N ON STACK BR 20$ MPATBD: CMPB #9.,(R5) ;ARE THERE 9 ARGUMENTS? BNE BOMBP ;BOMB IF # OF ARGS. NE 9 ADD #18.,R5 ;R5=>END OF ARG LIST MOV @(R5),R4 ;NRC MOV @-(R5),R3 ;NRB MOV @-(R5),R0 ;NRA MOV @-(R5),-(SP) ;PLACE N ON STACK MOV @-(R5),R2 ;R2=M MOV @-(R5),R1 ;R1=L SUB R2,R0 ;NRA-M ASH #3,R0 ;8*(NRA-M) ASH #3,R3 ;8*NRB 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 BR 30$ MATBD: CMPB #6,(R5) ;ARE THERE 6 ARGUMENTS? BNE BOMB ;BOMB IF # OF ARGS. NE 6 ADD #12.,R5 ;R5=>END OF ARG LIST MOV @(R5),-(SP) ;PLACE N ON STACK MOV @-(R5),R2 ;R2=M MOV @-(R5),R1 ;R1=L 20$: MOV R2,R3 ;R3=NRB=M ASH #3,R3 ;R3=8*NRB MOV R3,-(SP) ;PLACE 8*NRB ON STACK MOV #0,-(SP) ;PLACE 8*(NRC-L) ON STACK MOV #0,R0 ;4*(NRA-M)=0 30$: 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$: ADD R0,R4 ;SET A TO NEXT COLUMN 45$: MOV 6(SP),R3 ;RESTORE B 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 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 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 #76524,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #51701,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 70$ BOMB3: MOV #76524,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #53151,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 70$ BOMB: MOV #6440,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #50574,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