.TITLE VMAGD MAGNITUDE OF VECTOR (DOUBLE PRECISION) .IDENT /1.0/ ; 08/15/79 .GLOBL VMAGD, V3MAGD, $$DSQR .ENABL LSB ; F0=R0 ;DEFINE FLOATING REGISTER 0 F1=R1 ;DEFINE FLOATING REGISTER 1 V3MAGD: CMP #1,(R5)+ ;CHECK NUMBER OF ARGUMENTS BNE BOMB3D ;BOMB IF # OF ARGS. NE 1 MOVB #3,R2 ;R2=VECTOR SIZE=3 BR 10$ VMAGD: CMP #2,(R5)+ ;ARE THERE 2 ARGUMENTS? BNE BOMBD ;BOMB IF # OF ARGS. NE 2 MOVB @2(R5),R2 ;R2=VECTOR SIZE=N 10$: MOV (R5),R3 ;R3=ADDRESS OF A SETD ;SET FLOATING DOUBLE MODE CLRD F0 ;INITIALIZE MAGNITUDE TO 0 ; LOOP TO FORM MAGNITUDE OF VECTOR 20$: LDD (R3)+,F1 ;GET A(I) MULD F1,F1 ;A(I)*A(I) ADDD F1,F0 ;SUM OF A(I)*A(I) SOB R2,20$ ;DONE? JSR PC,$$DSQR ;TAKE SQUARE ROOT ; PLACE DOUBLE PRECISION NUMBER ON STACK AND POP OFF INTO ; REGISTERS R0,R1,R2,R3 SINCE THAT IS CONVENTION FOR RETURN ; OF REAL*8 FUNCTIONAL VALUE STD F0,-(SP) MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 RTS PC ;RETURN BOMB3D: MOV #3534,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #107265,R4 ;MOVE 1ST HALF OF NAME TO R4 BR 30$ BOMBD: MOV #26140,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #105611,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