.TITLE ICR_QUAD_MATH ; ; CALL SUBQUAD(A,B,C) ; ; RETURNS: A - B -> C ; .psect code,pic,usr,con,rel,lcl,shr,exe,rd,nowrt,novec,long .ENTRY SUBQUAD ^M ; ; A=4 B=8 C=12 MOVQ @A(AP),R0 MOVAQ @B(AP),R2 SUBL (R2)+,R0 SBWC (R2),R1 MOVQ R0,@C(AP) RET ; ; ; .psect code,pic,usr,con,rel,lcl,shr,exe,rd,nowrt,novec,long .ENTRY COMPQUAD ^M ; ; ival = COMPQUAD(a,b) ; ; if a > b 1 --> ival ; a = b 0 --> ival ; a < b -1 --> ival ; ; MOVQ @A(AP),R0 MOVAQ @B(AP),R2 SUBL (R2)+,R0 SBWC (R2),R1 MOVQ R0,R0 ;"TEST" QUADWORD BEQL 10$ BGTR 20$ MOVL #-1,R0 BRB 30$ 10$: CLRL R0 BRB 30$ 20$: MOVL #1,R0 30$: RET ; ; ; .psect code,pic,usr,con,rel,lcl,shr,exe,rd,nowrt,novec,long .ENTRY EDIV ^M ; ; CALL EDIV (A,B,C) ; RETURNS A/B->C ; MOVQ @A(AP),R0 MOVAL @B(AP),R2 EDIV (R2),R0,R0,R1 MOVL R0,@C(AP) RET ; ; ; .psect code,pic,usr,con,rel,lcl,shr,exe,rd,nowrt,novec,long .ENTRY EMUL ^M ; ; CALL EMUL (A,B,C) ; RETURNS A*B->C ; MOVAL @A(AP),R1 MOVAL @B(AP),R2 EMUL (R1),(R2),#0,R0 MOVQ R0,@C(AP) RET ; ; ; CALL ADDQUAD(A,B,C) ; ; RETURNS: A + B -> C ; .psect code,pic,usr,con,rel,lcl,shr,exe,rd,nowrt,novec,long .ENTRY ADDQUAD ^M ; ; A=4 B=8 C=12 MOVQ @A(AP),R0 MOVAQ @B(AP),R2 ADDL (R2)+,R0 ADWC (R2),R1 MOVQ R0,@C(AP) RET ; ; ; RESULT = QUAD_TO_D,F(A) ; ; RETURNS: A -> CONVERT TO DOUBLE,FLOATING -> RESULT ; .psect code,pic,usr,con,rel,lcl,shr,exe,rd,nowrt,novec,long QUAD_TO_F:: .ENTRY QUAD_TO_D ^M ; ; A=4 MOVQ @A(AP),R0 CVTLD R1,R2 TSTL R2 BEQL 5$ EXTV #7,#8,R2,R1 ADDL #32,R1 INSV R1,#7,#8,R2 5$: BBCC #31,R0,10$ ADDD #^F2147483648,R2 10$: CVTLD R0,R0 ADDD R2,R0 RET .END