.TITLE VSCL SCALE A VECTOR .IDENT /1.0/ ; 08/15/79 ;+ ++EXTSPC>> ;.NAME VSCL ;INDEX V3SCL ;INDEX VSCLD ;INDEX V3SCLD ;.TITLE SUBROUTINE VSCL ; ; CALL VSCL (C,P,A,N) ; ; CALL V3SCL (C,P,A) ; ; CALL VSCLD (C,P,A,N) ; ; CALL V3SCLD (C,P,A) ; ; VERSION: VECTOR / MATRIX ROUTINES SAM MILLER REL 1.0 ; ; FUNCTION: ; ; SCALAR TIMES A VECTOR ; ; C = P*A ; ; ; LANGUAGE: MACRO-11 ; ; ; ARGUMENTS: ; ; C = OUTPUT VECTOR ; P = SCALAR ; A = INPUT VECTOR ; N = VECTOR DIMENSION ; ; ; COMMONS: ; ; (NONE) ; ; ; GENERAL DESCRIPTION: ; ; ALL REAL ARGUMENTS EXCEPT INTEGER N. ; ; SINGLE PRECISION - VSCL FOR N-VECTORS ; V3SCL FOR 3-VECTORS ; ; DOUBLE PRECISION - VSCLD FOR N-VECTORS ; V3SCLD FOR 3-VECTORS ; ; ; ; ; 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 VSCL, V3SCL .ENABL LSB ; F0=R0 ;DEFINE FLOATING REGISTER 0 F1=R1 ;DEFINE FLOATING REGISTER 1 V3SCL: CMP #3,(R5)+ ;CHECK NUMBER OF ARGUMENTS BNE BOMB3 ;BOMB IF # OF ARGS. IS INCORRECT MOVB #3,R2 ;R2=VECTOR SIZE=3 BR 10$ VSCL: CMP #4,(R5)+ ;ARE THERE 4 ARGUMENTS? BNE BOMB ;BOMB IF # OF ARGS. IS INCORRECT MOVB @6(R5),R2 ;R2=VECTOR SIZE=N 10$: MOV (R5)+,R3 ;R3=ADDRESS OF C MOV (R5)+,R0 ;R0=ADDRESS OF P MOV (R5),R4 ;R4=ADDRESS OF A SETF ;SET FLOATING MODE LDF (R0),F1 ;F1=P ; LOOP TO FORM VECTOR 20$: LDF (R4)+,F0 ;GET A(I) MULF F1,F0 ;P*A(I) STF F0,(R3)+ ;PUT SUM IN C(I) SOB R2,20$ ;DONE? RTS PC ;RETURN BOMB3: MOV #12240,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #107273,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 30$ BOMB: MOV #45400,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #106173,R4 ;MOVE 1ST HALF OF NAME TO R4 30$: JSR R4,NAM$ ;SUBR TO PUT NAME IN WALKBACK JMP $BOMB ;ABORT, $BOMB DOES NOT EXIST .END