.TITLE MCOMD LINEAR COMBINATION OF 2 MATRICES (DOUBLE PREC.) .IDENT /1.0/ ; 08/15/79 .GLOBL MCOMD, M3COMD, MPCOMD .ENABL LSB ; F0=R0 ;DEFINE FLOATING REGISTER 0 F1=R1 ;DEFINE FLOATING REGISTER 1 F2=R2 ;DEFINE FLOATING REGISTER 2 F3=R3 ;DEFINE FLOATING REGISTER 3 M3COMD: CMP #5,(R5)+ ;CHECK FOR 5 ARGUMENTS BNE BOMB3 ;BOMB IF # OF ARGS. NE 5 MOV #3,R0 ;R0=M=3 MOV #3,R1 ;R1=N=3 MOV #3,-(SP) ;MOVE M ON STACK BR 20$ MCOMD: CMP #7,(R5)+ ;ARE THERE 7 ARGUMENTS? BNE BOMB ;BOMB IF # OF ARGS. NE 7 MOV @12(R5),R0 ;R0=M MOV @14(R5),R1 ;R1=N MOV R0,-(SP) ;MOVE M ON STACK 20$: MOV #0,-(SP) ;MOVE 8*(NRB-M)=0 ON STACK MOV #0,-(SP) ;MOVE 8*(NRC-M)=0 ON STACK MOV #0,R2 ;R2=8*(NRA-M)=0 BR 40$ MPCOMD: CMP #12,(R5)+ ;ARE THERE 10 ARGUMENTS? BNE BOMBP ;BOMB IF # OF ARGS. NE 10 MOV @12(R5),R0 ;R0=M MOV @14(R5),R1 ;R1=N MOV R0,-(SP) ;MOVE M ON STACK MOV @16(R5),R2 ;GET NRA SUB R0,R2 ;NRA-M ASH #3,R2 ;R2=8*(NRA-M) MOV @20(R5),R3 ;GET NRB SUB R0,R3 ;NRB-M ASH #3,R3 ;8*(NRB-M) MOV R3,-(SP) ;MOVE 8*(NRB-M) ON STACK MOV @22(R5),R3 ;GET NRC SUB R0,R3 ;NRC-M ASH #3,R3 ;8*(NRC-M) MOV R3,-(SP) ;MOVE 8*(NRC-M) ON STACK 40$: MOV (R5)+,R3 ;R3=ADDRESS OF C MOV 2(R5),R4 ;R4=ADDRESS OF A SETD ;SET FLOATING DOUBLE MODE LDD @(R5),F2 ;F2=P LDD @4(R5),F3 ;F3=Q MOV 6(R5),R5 ;R5=ADDRESS OF B BR 60$ ;LOOP TO COMBINE 2 MATRICES 50$: ADD (SP),R3 ;GO TO START OF NEXT COLUMN OF C ADD R2,R4 ;GO TO START OF NEXT COLUMN OF A ADD 2(SP),R5 ;GO TO START OF NEXT COLUMN OF B MOV 4(SP),R0 ;RESET M 60$: LDD (R4)+,F0 ;A(I) MULD F2,F0 ;P*A(I) LDD (R5)+,F1 ;B(I) MULD F3,F1 ;Q*B(I) ADDD F0,F1 ;P*A(I)+Q*B(I) STD F1,(R3)+ ;C(I)=P*A(I)+Q*B(I) SOB R0,60$ ;DONE WITH THIS COLUMN? SOB R1,50$ ;DONE WITH ALL COLUMNS? ADD #6,SP ;RESTORE STACK RTS PC ;RETURN BOMBP: MOV #57714,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #51703,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 70$ BOMB3: MOV #57714,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #53153,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 70$ BOMB: MOV #50740,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #50707,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