.TITLE DOUBLE INTEGER ARITHMETIC PACKAGE FOR FORTRAN OTS / / / FIRST PRINTING, FEBRUARY 1974 / / THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO / CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED / AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPON- / SIBILITY FOR ANY ERRORS THAT MAY APPEAR IN THIS / DOCUMENT. / / THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FUR- / NISHED TO THE PURCHASER UNDER A LICENSE FOR USE ON / A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH / INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR / USE IN SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PRO- / VIDED IN WRITING BY DIGITAL. / / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY / FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIP- / MENT THAT IS NOT SUPPLIED BY DIGITAL. / / COPYRIGHT (C) 1974, BY DIGITAL EQUIPMENT CORPORATION / / .EJECT /COPYRIGHT 1971, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 01754 / /EDIT #007 7-14-71 / .DEFIN GETARG,SUBR LAC* SUBR ISZ SUBR SMA!CLL JMP .+3 DAC TEMP LAC* TEMP /SIGN BIT ON = ARG INDIRECT DAC TEMP .ENDM .DEFIN TAD1 .IFDEF %PDP9 TAD (1 .ENDC .IFUND %PDP9 IAC .ENDC .ENDM .DEFIN CIA .IFDEF %PDP9 CMA TAD (1 .ENDC .IFUND %PDP9 TCA .ENDC .ENDM .GLOBL .JG,.JH,.JI,.JJ,.JK,.JL,.JM,.JN,.JW,.JX,.JA,.AA,.AB,.AC,.CD .GLOBL DBLINT DBLINT=. / .JG CAL 0 /DOUBLE INTEGER LOAD GETARG .JG TAD1 DAC TM2 LAC* TM2 LMQ LAC* TEMP JMP* .JG / .JH CAL 0 /DOUBLE INTEGER STORE DAC TM2 GETARG .JH LAC TM2 DAC* TEMP ISZ TEMP LACQ DAC* TEMP JMP* .JH / .JI CAL 0 /DOUBLE INTEGER ADD DAC .JH .JIXXX GETARG .JI TAD1 DAC TM2 LACQ TAD* TM2 LMQ RAL!CLA /GET CARRY INTO AC17 TAD* TEMP TAD .JH JMP* .JI / .JJ CAL 0 /DOUBLE INTEGER SUBTRACT DAC TM3 GETARG .JJ .IFDEF %PDP9 TAD (1 CML .ENDC .IFUND %PDP9 CML!IAC .ENDC DAC TM2 LACQ DAC TM4 LAC* TM2 CIA /DO DOUBLE SUBTRACT IN ONE OPERATION TAD TM4 LMQ RAL!CLA TAD* TEMP CIA TAD TM3 JMP* .JJ / .JK CAL 0 /DOUBLE INTEGER MULTIPLY DAC TM3 LAC .JK JMS MULDIV /MAKE ARGUMENTS POSITIVE SNA JMP JK1 JMS .JH .DSA TM6 LAC TM5 JMP JK2 JK1 LAC TM4 DAC TM6 LAC TM5 DAC TM7 LACQ JK2 JMS DBLMPY JFXSGN DAC TM2 LAC TM3 XOR* JARG RAL LAC TM2 SZL JMS .JA JMP* JEXIT / DBLMPY 0 DAC JK3 DAC JK4 LAC TM6 LMQ!MUL JK3 0 LACQ DAC TM2 LAC TM7 LMQ!MUL JK4 0 TAD TM2 JMP* DBLMPY / .JM CAL 0 /DOUBLE INTEGER REVERSE SUBTRACT JMS .JA DAC .JH LAC .JM DAC .JI JMP .JIXXX /SIMPLY COMPLEMENT AC AND ADD / .JW CAL 0 /DOUBLE INTEGER TO REAL CONVERSION SMA JMP .+3 JMS .JA TAD (400000 DAC* .AB LACQ DAC* .AC LAC (43 DAC* .AA JMS* .CD JMP* .JW / .JX CAL 0 /REAL TO DOUBLE INTEGER CONVERSION LAC* .AA SPA CLA TAD (-43 SMA!CMA CLC TAD (LRSS 1 DAC JXINST /FORM THE PROPER SHIFT INST LAC* .AC LMQ LAC* .AB AND (377777 JXINST HLT DAC TEMP LAC* .AB RAL LAC TEMP SZL JMS .JA JMP* .JX / .JA CAL 0 /DOUBLE INTEGER NEGATION DAC .JG LACQ CLL!CML!CMA TAD1 LMQ CLA!RAL TAD .JG CIA JMP* .JA / MULDIV CAL 0 /COMMON ROUTINE FOR MULTIPLY AND DIVIDE DAC JEXIT LAC TM3 SPA JMS .JA JMS .JH .DSA TM4 GETARG JEXIT DAC JARG JMS .JG JARG .DSA 0 SPA JMS .JA JMP* MULDIV JEXIT .DSA 0 ECLA=641000 ECLALS=ECLA!LLS / .JN CAL 0 JMS .JH .DSA JDVTMP LAC* .JN DAC .+2 JMS .JG 0 JMS .JL .DSA JDVTMP ISZ .JN JMP* .JN JDVTMP 0 0 / .JL CAL 0 DAC TM3 LAC .JL JMS MULDIV SNA!CLL JMP JLTRIV DAC TM6 LACQ DAC TM7 LAC TM6 NORM DAC JL1 LACS TAD (ECLALS-33 /MAGIC!! DAC JL2 LAC JL1 LLS 1 DAC JL1 LAC TM5 LMQ LAC TM4 DIV JL1 0 CLL JL2 HLT JL3 JMS DBLMPY JMS .JM .DSA TM4 SPA!CLA CLC TAD JK3 LRSS 22 JMP JFXSGN JLTRIV LACQ DAC JL4 DAC JL5 LAC TM4 IDIV JL4 0 DAC TM2 LACQ DAC TM6 LAC TM5 LMQ LAC TM2 DIV JL5 0 LAC TM6 JMP JFXSGN TEMP .DSA 0 TM2 .DSA 0 TM3 .DSA 0 TM4 .DSA 0 TM5 .DSA 0 TM6 .DSA 0 TM7 .DSA 0 .END