.TITLE ADD64 .IDENT /V1.0/ .SBTTL 64-BIT ADDITION ROUTINE ; ROUTINE TO ADD 64 BIT NUMBERS ; ; ; --- AUTHORED BY --- ; ; BOB ROCK ; NORTHEAST ELECTRONICS DIV. ; NORTHERN TELECOM INC. ; AIRPORT RD. ; CONCORD, N.H. 03301 ; (603) 224-6511 EXT 347 ; ; BY BOB ROCK APR-81 ; ; LAST EDIT: 6-NOV-1987 09:22:15 ; ; NOTE: ; FORMAT OF LONG WORDS IS LSW,...,MSW ; ; IT WAS FURTHER MODIFIED BY BOB THOMAS,CARGILL,INC.,P.O. BOX 9300 ; MPLS,MN,55440, (612)475-5432. THOSE FURTHER MODIFICATIONS ; WERE TO CORRECT THE VALUES FOR 1 SEC, 1 MIN AND 1 HOUR. IN ; ADDITION THE ADD64 ROUTINE WAS REWRITTEN TO PROVIDE FOR CASCADING ; CARRY BITS (SUCH AS THOSE THAT OCCUR ON 05-JUN-86 17:09:27). ; THIS ROUTINE WAS REWRITTEN BY BOB THOMAS ; ON 21-AUG-86 TO PROVIDE FOR HANDLING CASCADING ; CARRY BITS (E.G. 05-JUN-86 17:09:27) ; ; PETER STADICK OCT-NOV '87 - BROKEN ROUTINES INTO SEPERATE MODULES ; AND MODIFYIED TO ALLOW THEM TO BE BUILD INTO A SUPERVISOR MODE ; LIBRARY. ALSO ADDED DEC CALL SITE TO ADD, SUBTRACT, MULTIPLY AND ; DIVIDE ROUTINES SO THEY CAN BE CALLED FROM FORTRAN, PASCAL, ETC.. ; PETER STADICK, CARGILL INC, P.O. DRAWER AR, RESERVE,LA 70084 ; (504)-536-4111. ; ; ; CALLING PARAMETER LIST ; 2(R5) = FIRST CLUNK VALUE ( INPUT PRESERVED ) ; 4(R5) = SECOND CLUNK VALUE ( INPUT PRESERVED ) ; 6(R5) = SUM (OUTPUT) ; 10(R5) = STATUS 1=SUCCESS OR -3=OVERFLOW ( OUTPUT ) ; ; R0 AND R1 POINT TO VALUES TO BE ADDED ; R2 POINTS TO DESTINATION OF SUM ; ; STATUS WILL BE SET TO -3 AND THE CARRY BIT ; WILL BE SET ON RETURN IF OVERFLOW OCCURS ; ; ALL REGISTERS ARE PRESERVED ; .PSECT CLUNK,RO,I,LCL,REL ADD64:: MOV R0,-(SP) ; PRESERVE REGISTERS MOV R1,-(SP) MOV R2,-(SP) MOV 2(R5),R0 ; FIRST VALUE MOV 4(R5),R1 ; SECOND VALUE MOV 6(R5),R2 ; DESTINATION OF SUM MOV #1,@10(R5) ; SET STATUS TO SUCCESS MOV (R1),(R2) ;Move the R1 values to R2 MOV 2(R1),2(R2) MOV 4(R1),4(R2) MOV 6(R1),6(R2) ADD (R0),(R2) ;Add the first word from R0 ADC 2(R2) ;Handle any carry bits ADC 4(R2) ADC 6(R2) BCC 10$ MOV #-3,@10(R5) ;If carry on the fourth word - error 10$: ADD 2(R0),2(R2) ;Add the second word from R0 ADC 4(R2) ;Handle any carry bits ADC 6(R2) BCC 20$ MOV #-3,@10(R5) ;If carry on the fourth word - error 20$: ADD 4(R0),4(R2) ;Add the third word from R0 ADC 6(R2) ;Handle any carry bits BCC 30$ MOV #-3,@10(R5) ;If carry on the fourth word - error 30$: ADD 6(R0),6(R2) ;Add the fourth word from R0 BCC 40$ MOV #-3,@10(R5) ;If carry on the fourth word - error 40$: MOV (SP)+,R2 ;Restore registers MOV (SP)+,R1 MOV (SP)+,R0 RTS PC ;Return .END