.TITLE MSCL SCALE A MATRIX .IDENT /1.0/ ; 08/15/79 ;+ ++EXTSPC>> ;.NAME MSCL ;.INDEX M3SCL ;.INDEX MPSCL ;.INDEX MSCLD ;.INDEX M3SCLD ;.INDEX MPSCLD ;.TITLE SUBROUTINE MSCL ; ; CALL MSCL (C,P,A,M,N) ; ; CALL M3SCL (C,P,A) ; ; CALL MPSCL (C,P,A,M,N,NRA,NRC) ; ; CALL MSCLD (C,P,A,M,N) ; ; CALL M3SCLD (C,P,A) ; ; CALL MPSCLD (C,P,A,M,N,NRA,NRC) ; ; VERSION: VECTOR / MATRIX ROUTINES SAM MILLER REL 1.0 ; ; FUNCTION: ; ; SCALAR MULTIPLICATION OF A MATRIX ; ; C = P A ; ; ; LANGUAGE: MACRO-11 ; ; ; ARGUMENTS: ; ; C = OUTPUT MATRIX (RESULT IS STORED IN UPPER M X N SUBMATRIX) ; P = SCALAR ; A = INPUT MATRIX ; M,N = UPPER M X N SUBMATRICES ARE USED ; NRA = NUMBER OF ROWS IN A ; NRC = NUMBER OF ROWS IN C ; ; ; COMMONS: ; ; (NONE) ; ; ; GENERAL DESCRIPTION: ; ; REAL ARGUMENTS: C,P,A ; INTEGER ARGUMENTS: M,N,NRA,NRC ; ; ; SINGLE PRECISION - MSCL FOR MXN MATRICES ; M3SCL FOR 3X3 MATRICES ; MPSCL FOR UPPER MXN SUBMATRICES ; ; DOUBLE PRECISION - MSCLD FOR MXN MATRICES ; M3SCLD FOR 3X3 MATRICES ; MPSCLD FOR UPPER MXN SUBMATRICES ; ; ; PERIPHERAL INPUT/OUTPUT: ; ; (NONE) ; ; ; LOGICAL UNIT USAGE: ; ; (NONE) ; ; ; EXTERNAL ROUTINES CALLED: ; ; NAM$ ; $BOMB ; ;- --EXTSPC>> ; ; WRITTEN BY: ; ; DENIS MAHONY AND SAM MILLER 08/15/79 ; ; ; MODIFIED BY: ; ; ********** **DATE** ; **DETAIL** ; ;- --EXTSPC>> .PAGE .GLOBL MSCL, M3SCL, MPSCL .ENABL LSB ; F0=R0 ;DEFINE FLOATING REGISTER 0 F1=R1 ;DEFINE FLOATING REGISTER 1 M3SCL: CMP #3,(R5) ;CHECK FOR 3 ARGUMENTS BNE BOMB3 ;NO MOV #3,R0 ;R0=M=3 MOV #3,R1 ;R1=N=3 BR 20$ MPSCL: CMP #7,(R5) ;ARE THERE 7 ARGUMENTS? BNE BOMBP ;BOMB IF # OF ARGS. NE 7 MOV @10(R5),R0 ;R0=M MOV @12(R5),R1 ;R1=N MOV R0,-(SP) ;MOVE M ON STACK MOV @14(R5),R2 ;GET NRA SUB R0,R2 ;NRA-M ASH #2,R2 ;R2=4*(NRA-M) MOV @16(R5),R3 ;GET NRC SUB R0,R3 ;NRC-M ASH #2,R3 ;R3=4*(NRC-M) BR 40$ MSCL: CMP #5,(R5) ;CHECK FOR 5 ARGUMENTS BNE BOMB ;BOMB IF # OF ARGS. NE 5 MOV @10(R5),R0 ;R0=M MOV @12(R5),R1 ;R1=N 20$: MOV #0,R3 ;R3=4*(NRC-M)=0 MOV #0,R2 ;R2=4*(NRA-M)=0 MOV R0,-(SP) ;MOVE M ON STACK 40$: MOV 2(R5),R4 ;R4=ADDRESS OF C SETF ;SET FLOATING MODE LDF @4(R5),F1 ;F1=P MOV 6(R5),R5 ;R5=ADDRESS OF A BR 60$ ;LOOP TO SCALE MATRIX 50$: ADD R3,R4 ;GO TO START OF NEXT COLUMN OF C ADD R2,R5 ;GO TO START OF NEXT COLUMN OF A MOV (SP),R0 ;RESET M 60$: LDF (R5)+,F0 ;A(I) MULF F1,F0 ;P*A(I) STF F0,(R4)+ ;C(I)=P*A() SOB R0,60$ ;DONE WITH THIS COLUMN? SOB R1,50$ ;DONE WITH ALL COLUMNS? ADD #2,SP ;RESTORE STACK RTS PC ;RETURN BOMBP: MOV #12240,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #51723,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 70$ BOMB3: MOV #12240,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #53173,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 70$ BOMB: MOV #45400,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #52073,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