Trailing-Edge
-
PDP-10 Archives
-
decuslib10-12
-
43,50547/pltlib/cmisc1/maxmin.mac
There is 1 other file named maxmin.mac in the archive. Click here to see a list.
TITLE MAXMIN - Routine to find MAX and MIN of an array
SUBTTL Disassebled from OLD:FORLIB.REL by Joe Smith, 8-Sep-83
; SUBROUTINE MAXMIN(ARRAY,ISIZE,ARMAX,ARMIN)
; DIMENSION ARRAY(ISIZE)
; ARMAX = ARRAY(1)
; ARMIN = ARRAY(1)
; DO 2 I=1,ISIZE
; IF(ARRAY(I).LT.ARMIN) ARMIN=ARRAY(I)
; IF(ARRAY(I).GT.ARMAX) ARMAX=ARRAY(I)
;2 CONTINUE
; RETURN
; END
; ARRAY, ARMAX, and ARMIN can all be INTEGER or all be REAL.
; In order to run very fast on a PDP-10 model KA, the main loop is
; executed out of the fast memory in the accumulators.
ENTRY MAXMIN ;Name of subroutine
SIXBIT /MAXMIN/ ;Mark the entry point
MAXMIN: MOVN 14,@1(16) ;Get negative of size of array
MOVSI 14,(14) ;Put in LH for AOBJN
HRRI 14,@(16) ;Addr of 1st element in the array
MOVSI 13,.+2 ;Put routine into the ACs
BLT 13,12 ; 0 thru 12
;The next 13 words are executed in the accumulators, locations 00 to 12
MOVE 13,(14) ;00 Get next entry in the array
CAMG 11,13 ;01 Larger than previous max?
MOVE 11,13 ;02 Yes, set new max
CAML 12,13 ;03 Smaller than previous min?
MOVE 12,13 ;04 Yes, set new min
AOBJN 14,00 ;05 Loop thru array
MOVEM 11,@2(16) ;06 Store max in 3rd arg
MOVEM 12,@3(16) ;07 Store min in 4th arg
POPJ 17, ;10 Return from MAXMIN
XWD 400000,000001 ;11 Start with MAX=-INFINITY
XWD 377777,777777 ;12 Start with MIN=+INFINITY
END