.TITLE VCOM LINEAR COMBINATION OF TWO VECTORS .IDENT /1.0/ ; 08/15/79 ;+ ++EXTSPC>> ;.NAME VCOM ;.INDEX V3COM ;.INDEX VCOMD ;.INDEX V3COMD ;.TITLE SUBROUTINE VCOM ; ; CALL VCOM (C,P,A,Q,B,N) ; ; CALL V3COM (C,P,A,Q,B) ; ; CALL VCOMD (C,P,A,Q,B,N) ; ; CALL V3COMD (C,P,A,Q,B) ; ; VERSION: VECTOR / MATRIX ROUTINES SAM MILLER REL 1.0 ; ; FUNCTION: ; ; LINEAR COMBINATION OF TWO VECTORS ; ; C = P*A + Q*B ; ; ; LANGUAGE: MACRO-11 ; ; ; ARGUMENTS: ; ; C = OUTPUT VECTOR ; P,Q = SCALARS ; A,B = INPUT VECTOR ; N = VECTOR DIMENSION ; ; ; COMMONS: ; ; (NONE) ; ; ; GENERAL DESCRIPTION: ; ; ALL REAL ARGUMENTS EXCEPT INTEGER N. ; ; ; SINGLE PRECISION - VCOM FOR N-VECTORS ; V3COM FOR 3-VECTORS ; ; DOUBLE PRECISION - VCOMD FOR N-VECTORS ; V3COMD 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 VCOM, V3COM .ENABL LSB ; F0=R0 ;DEFINE FLOATING REGISTER 0 F1=R1 ;DEFINE FLOATING REGISTER 1 F2=R2 F3=R3 V3COM: CMP #5,(R5)+ ;CHECK NUMBER OF ARGUMENTS BNE BOMB3 ;BOMB IF # OF ARGS. IS INCORRECT MOVB #3,R2 ;R2=VECTOR SIZE=3 BR 10$ VCOM: CMP #6,(R5)+ ;ARE THERE 6 ARGUMENTS? BNE BOMB ;BOMB IF # OF ARGS. IS INCORRECT MOVB @12(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 MOV (R5)+,R1 ;R1=ADDRESS OF Q MOV (R5),R5 ;R5=ADDRESS OF B SETF ;SET FLOATING DOUBLE MODE LDF (R0),F2 ;F2=P LDF (R1),F3 ;F3=Q ; LOOP TO COMBINE VECTORS 20$: LDF (R4)+,F0 ;GET A(I) MULF F2,F0 ;P*A(I) LDF (R5)+,F1 ;GET B(I) MULF F3,F1 ;Q*B(I) ADDF F0,F1 ;P*A(I) + Q*B(I) STF F1,(R3)+ ;PUT SUM IN C(I) SOB R2,20$ ;DONE? RTS PC ;RETURN BOMB3: MOV #57710,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #107253,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 30$ BOMB: MOV #50500,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #105007,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