.TITLE CROSS CROSS PRODUCT OF TWO 3-VECTORS .IDENT /1.0/ ; 08/15/79 ;+ ++EXTSPC>> ;.NAME CROSS ;.INDEX CROSSD ;.TITLE SUBROUTINE CROSS ; ; CALL CROSS (C,A,B) ; ; CALL CROSSD (C,A,B) ; ; VERSION: VECTOR / MATRIX ROUTINES SAM MILLER REL 1.0 ; ; FUNCTION: ; ; CROSS PRODUCT OF TWO 3-VECTORS ; ; C = A X B ; ; ; LANGUAGE: MACRO-11 ; ; ; ARGUMENTS: ; ; C = OUTPUT 3-VECTOR ; A,B = INPUT 3-VECTORS ; ; ; COMMONS: ; ; (NONE) ; ; ; GENERAL DESCRIPTION: ; ; ALL REAL ARGUMENTS. ; ; ; SINGLE PRECISION - CROSS FOR 3-VECTORS ; ; DOUBLE PRECISION - CROSSD FOR 3-VECTORS ; ; ; C CAN NOT OVERLAP A OR B. ; ; ; 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 CROSS ; F0=R0 ;DEFINE FLOATING REGISTER 0 F1=R1 ;DEFINE FLOATING REGISTER 1 F2=R2 ;DEFINE FLOATING REGISTER 2 CROSS: CMP #3,(R5)+ ;CHECK NUMBER OF ARGUMENTS BNE BOMB ;BOMB IF # OF ARGS. IS INCORRECT MOV (R5)+,R2 ;R2=ADDRESS OF C MOV (R5)+,R0 ;R0=ADDRESS OF A MOV (R5)+,R1 ;R1=ADDRESS OF B SETF ;SET FLOATING MODE LDF 4(R0),F0 ;A(2) LDF 8.(R1),F2 ;B(3) MULF F0,F2 ;F2=A(2)*B(3) LDF 8.(R0),F0 ;A(3) LDF 4(R1),F1 ;B(2) MULF F0,F1 ;A(3)*B(2) SUBF F1,F2 ;A(3)*B(2) - A(2)*B(3) STF F2,(R2)+ ;C(1) = " LDF 8.(R0),F0 ;A(3) LDF (R1),F2 ;B(1) MULF F0,F2 ;A(3)*B(1) LDF (R0),F0 ;A(1) LDF 8.(R1),F1 ;B(3) MULF F0,F1 ;A(1)*B(3) SUBF F1,F2 ;A(3)*B(1) - A(1)*B(3) STF F2,(R2)+ ;C(2) = " LDF (R0),F0 ;A(1) LDF 4(R1),F2 ;B(2) MULF F0,F2 ;A(1)*B(2) LDF 4(R0),F0 ;A(2) LDF (R1),F1 ;B(1) MULF F0,F1 ;A(2)*B(1) SUBF F1,F2 ;A(1)*B(2)-A(2)*B(1) STF F2,(R2) ;C(3) = " RTS PC ;RETURN BOMB: MOV #74670,-(SP) ;MOVE 2ND HALF OF NAME TO STACK MOV #12637,R4 ;MOVE 1ST HALF OF NAME TO R4 JSR R4,NAM$ ;SUBR TO PUT NAME IN WALKBACK JMP $BOMB ;ABORT, $BOMB DOES NOT EXIST .END