File: DMOD.RA of Tape: Sources/Fortran/os8-f4-3
(Source file text)
/D=DMOD(D1,D2) DOUBLE PREC. D1 MODULO D2 / / / VERSION 40A 27-MAY-80 / / SECT DMOD JA #DMOD DPCHK EXTERN #ARGER AMODER, TRAP4 #ARGER TEXT +DMOD + AMODXR, SETX XRAMOD SETB BPAMOD BPAMOD, F 0.0 F 0.0 XRAMOD, 0;1;73 /73 FOR ALIGNING ON 59 XSTOR, F 0.0 F 0.0 AMODX, F 0.0 F 0.0 ORG 10*3+BPAMOD FNOP JA AMODXR 0 AMDRTN, JA . DMLIM, 0066 /2^65 LIMIT FOR M&S CHIP 2000 0000 0000 0000 0000 / BASE 0 #DMOD, STARTD FLDA 10*3 FSTA AMDRTN FLDA 0 SETX XRAMOD SETB BPAMOD BASE BPAMOD FSTA BPAMOD LDX 1,1 FLDA% BPAMOD,1 /ADDR OF X FSTA AMODX FLDA% BPAMOD,1+ /ADDR OF Y FSTA BPAMOD STARTE FLDA% BPAMOD /GET Y JEQ AMODER /Y=0 IS ERROR JGT .+3 /GET ABS VALUE FNEG FSTA BPAMOD FLDA% AMODX /GET X JGT .+5 FNEG /GET ABS VALUE OF X LDX 0,1 /NOTE THE SIGN FSTA AMODX /SAVE IN A TEMPORARY FSUB DMLIM /TOO LARGE FOR REMULTIPLY ? JGE AMODER /YES, ERROR FLDA AMODX /GET AGAIN FDIV BPAMOD /DIVIDE BY Y FSTA XSTOR /SAVE X/Y FSUB DMLIM /CHECK SIZE JGE AMODER /TOO BIG FLDA XSTOR /ABS VALUE X/Y ALN 2 /FIX IT UP NOW. FNORM FMUL BPAMOD /MULTIPLY IT. FNEG /NEGATE IT. FADD AMODX /AND ADD IN X. JXN AMR,1 FNEG /RESTORE SIGN AMR, JA AMDRTN