.TITLE MABTD MATRIX TRANSPOSE MULTIPLY (DOUBLE PRECISION) .IDENT /1.0/ ; 08/15/79 .GLOBL MABTD,M3ABTD,MPABTD .ENABL LSB ; F0=R0 ;DEFINE FLOATING REGISTER 0 F1=R1 ;DEFINE FLOATING REGISTER 1 F2=R2 ;DEFINE FLOATING REGISTER 2 M3ABTD: CMPB #4,(R5) ;ARE THERE 4 ARGUMENTS? BNE BOMB3 ;BOMB IF # OF ARGS. NE 4 ADD #8.,R5 ;R5=>END OF ARG LIST MOV #24.,R0 ;R0=8*NRA=24. MOV #3,R3 ;R3=L (TEMPORARY) MOV R3,R2 ;R2=M MOV @(R5),R1 ;R1=N MOV R1,-(SP) ;PLACE N ON STACK BR 20$ MPABTD: 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),R1 ;NRB MOV @-(R5),R0 ;NRA ASH #3,R0 ;R0=8*NRA MOV @-(R5),-(SP) ;PLACE N ON STACK MOV @-(R5),R2 ;R2=M MOV @-(R5),R3 ;R3=L (TEMPORARY) MOV R3,-(SP) ;PLACE L ON STACK SUB R3,R4 ;NRC-L ASH #3,R4 ;8*(NRC-L) MOV R4,-(SP) ;PLACE 8*(NRC-L) ON STACK BR 30$ MABTD: 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),R1 ;R1=N=NRB MOV R1,-(SP) ;PLACE N ON STACK MOV @-(R5),R2 ;R2=M MOV @-(R5),R3 ;R3=L (TEMPORARY) MOV R3,R0 ;R0=NRA=L ASH #3,R0 ;R0=8*NRA 20$: MOV R3,-(SP) ;PLACE L ON STACK MOV #0,-(SP) ;PLACE 8*(NRC-L) ON STACK 30$: ASH #3,R1 ;R1=8*NRB 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 10(SP),-(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 ADD R1,R3 ;NEXT ELEMENT OF B SOB R2,50$ ;DONE FORMING ELEMENT OF C? STD F2,(R5)+ ;STORE IN C CLRD F2 ;F2=0 DEC 14(SP) ;GO TO NEXT COLUMN OF C? BNE 40$ ;NO DEC 16(SP) ;DONE? BEQ 60$ ;YES MOV 10(SP),R4 ;RESTORE A MOV R4,4(SP) ;NEXT A ON STACK ADD #8.,6(SP) ;NEXT ROW OF B ADD 12(SP),R5 ;NEXT COLUMN OF C MOV 2(SP),14(SP) ;RESET L BR 45$ 60$: ADD #20,SP ;RESTORE STACK RTS PC ;RETURN BOMBP: MOV #7644,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #51701,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 70$ BOMB3: MOV #7644,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #53151,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 70$ BOMB: MOV #76640,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #50552,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