TITLE ARITH - MULTIPLE PRECISION ARITHMETIC FOR EDT ; IDENT 1-001 ;AUTHOR : GRAHAM BEECH CREATION DATE : 28-JAN-1983 ;****************************************************************************** ;* * ;* COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATIO 1978, 1988 ALL RIGHTS RESERVED.* ;* * ;* THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED * ;* ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE * ;* INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER * ;* COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY * ;* OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY * ;* TRANSFERRED. * ;* * ;* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE * ;* AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT * ;* CORPORATION. * ;* * ;* DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS * ;* SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. * ;* * ;****************************************************************************** ; ;FACILITY: EDT VERSION 3 ; ;FUNCTIONAL DESCRIPTION: ; ; THIS MODULE CONTAINS 54-BIT ARITHMETIC ROUTINES TO HANDLE THE LINE ; NUMBERS USED BY EDT VERSION 3. ; ;MODIFIED BY: ; ; 1-001 ORIGINAL. GB 28-Jan-1983 ;-- ; ALL ROUTINES ARE CALLED BY THE SAME INTERFACE, TWO SOURCE PARAMETERS ; AND A DESTINATION PARAMETER, EACH OF WHICH IS THE ADDRESS OF A 54-BIT ; UNSIGNED INTEGER. ; SALL TWOSEG RELOC 400000 ; ; TABLE OF CONTENTS: ; INTERN A54%AD,A54%SU,A54%MU,MOVELI ; ; INCLUDE FILES: ; SEARCH MACSYM SEARCH MONSYM ; DEFINITIONS T1=1 T2=2 T3=3 T4=4 P=17 ; A54%AD - MULTIPLE PRECISION ADDITION ; ; ADD TWO 54-BIT NUMBERS USING 2-WORD ARITHMETIC, AND RETURN THE CARRY-BIT ; ; FORMAL PARAMTERS ; ; P1 POINTER TO SOURCE1 ; P2 POINTER TO SOURCE2 ; P3 POINTER TO DESTINATION (RESULT) ;- A54%AD:: DMOVE T1,@-2(P) ;GET SOURCE1 INTO T1,T2 HRRZS T2 ;54 BITS ONLY EXCH T1,T2 ;SWAP ROUND FOR ARITHMETIC DMOVE T3,@-3(P) ;GET SOURCE2 INTO T3,T4 HRRZS T4 ;ZERO UNUSED BITS EXCH T3,T4 ;SWAP ROUND FOR ARITHMETIC DADD T1,T3 ;ADD THEM MOVE T3,-1(P) ;GET DESTINATION ADDRESS MOVEM T2,(T3) ;STORE RESULT HRRM T1,1(T3) ;... TLNN T1,-1 ;LOOK FOR OVERFLOW TDZA T1,T1 ;NO OVERFLOW. MOVEI T1,1 ;RETURN OVERFLOW RET ; A54%SU - MULTIPLE PRECISION SUBTRACTION ; ; SUBTRACT TWO 54-BIT NUMBERS USING 2-WORD ARITHMETIC ; ; FORMAL PARAMTERS ; ; P1 POINTER TO SOURCE1 ; P2 POINTER TO SOURCE2 ; P3 POINTER TO DESTINATION (RESULT) ;- A54%SU:: DMOVE T1,@-2(P) ;GET SOURCE1 INTO T1,T2 HRRZS T2 ;54 BITS ONLY EXCH T1,T2 ;SWAP ROUND FOR ARITHMETIC DMOVE T3,@-3(P) ;GET SOURCE2 INTO T3,T4 HRRZS T4 ;ZERO UNUSED BITS EXCH T3,T4 ;SWAP ROUND FOR ARITHMETIC DSUB T1,T3 ;SUBTRACT SOURCE2 FROM SOURCE1 MOVE T3,-1(P) ;GET DESTINATION ADDRESS MOVEM T2,(T3) ;STORE RESULT HRRM T1,1(T3) ;... ; ; EDT DOES NOT ALLOW RESULT TO GO NEGATIVE SO JUST RETURN ; RET ; A54%MU - MULTIPLE PRECISION MULTIPLICATION ; ; MULTIPLY TWO 54-BIT NUMBERS USING 2-WORD ARITHMETIC. ; ; FORMAL PARAMTERS ; ; P1 POINTER TO SOURCE1 ; P2 POINTER TO SOURCE2 ; P3 POINTER TO DESTINATION (RESULT) ;- A54%MU:: DMOVE T1,@-2(P) ;GET SOURCE1 INTO T1,T2 HRRZS T2 ;54 BITS ONLY EXCH T1,T2 ;SWAP ROUND FOR ARITHMETIC DMOVE T3,@-3(P) ;GET SOURCE2 INTO T3,T4 HRRZS T4 ;ZERO UNUSED BITS EXCH T3,T4 ;SWAP ROUND FOR ARITHMETIC DMUL T1,T3 ;ADD THEM MOVE T1,-1(P) ;GET DESTINATION ADDRESS MOVEM T4,(T1) ;STORE RESULT HRRM T3,1(T1) ;... ; ; NO CHECK FOR OVERFLOW EDT SHOULD NOT LET IT HAPPEN ??! ; RET ; ; MOVELINE - COPY A 54 BIT LINE NUMBER ; ; FORMAL PARAMETERS: ; ; SOURCE - LINE NO. TO COPY ; DESTINATION - WHERE TO COPY IT TO ; MOVELI:: DMOVE T1,@-2(P) ;GET LINE # TO COPY MOVE T3,-1(P) ;WHERE TO PUT IT MOVEM T1,(T3) ;STORE LO & MD HRRM T2,1(T3) ;STORE HI RET END