.TITLE CROSSD CROSS PRODUCT OF TWO 3-VECTORS (DOUBLE PRE.) .IDENT /1.0/ ; 08/15/79 .GLOBL CROSSD ; F0=R0 ;DEFINE FLOATING REGISTER 0 F1=R1 ;DEFINE FLOATING REGISTER 1 F2=R2 ;DEFINE FLOATING REGISTER 2 CROSSD: CMP #3,(R5)+ ;CHECK NUMBER OF ARGUMENTS BNE BOMBD ;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 SETD ;SET FLOATING DOUBLE MODE LDD 8.(R0),F0 ;A(2) LDD 16.(R1),F2 ;B(3) MULD F0,F2 ;F2=A(2)*B(3) LDD 16.(R0),F0 ;A(3) LDD 8.(R1),F1 ;B(2) MULD F0,F1 ;A(3)*B(2) SUBD F1,F2 ;A(3)*B(2) - A(2)*B(3) STD F2,(R2)+ ;C(1) = " LDD 16.(R0),F0 ;A(3) LDD (R1),F2 ;B(1) MULD F0,F2 ;A(3)*B(1) LDD (R0),F0 ;A(1) LDD 16.(R1),F1 ;B(3) MULD F0,F1 ;A(1)*B(3) SUBD F1,F2 ;A(3)*B(1) - A(1)*B(3) STD F2,(R2)+ ;C(2) = " LDD (R0),F0 ;A(1) LDD 8.(R1),F2 ;B(2) MULD F0,F2 ;A(1)*B(2) LDD 8.(R0),F0 ;A(2) LDD (R1),F1 ;B(1) MULD F0,F1 ;A(2)*B(1) SUBD F1,F2 ;A(1)*B(2)-A(2)*B(1) STD F2,(R2) ;C(3) = " RTS PC ;RETURN BOMBD: MOV #74674,-(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