.TITLE GREATERP ; JEFFREY KODOSKY ARL JUL76 ; ; SUBR ; ENTRY: 2 ARGS ; ; EXIT: 1 ARG ; ERRORS: NONE ; CALLS: ATM2N ; IR ; CMR .GLOBL GREATERP,ZGREATERP,QATM2N,QIR,QCMR,.T. GREATERP:QATM2N ;GET N1 BCS GRT10 ;JUMP IF N1 IS REAL OR INF QATM2N ;GET N2 BCS GRT04 ;JUMP IF N1=INT , N2=REAL OR INF CMP (SP)+,(SP)+ ;COMPARE INTEGERS BLT TRUE ;JUMP IF N20 BR FALSE GRT07: MOV @SP,-(SP) ;MOVE UP N2 MOV 4(SP),2(SP) MOV 6(SP),-(SP) QIR ;CONVERT N1 TO REAL MOV (SP)+,6(SP) MOV (SP)+,6(SP) BR GRT30 ;JUMP TO COMPARE REALS GRT10: BIT #77777,@SP BNE GRT20 ;JUMP IF N1 REAL TST (SP)+ BMI FALSE$ TST (SP)+ BNE GRT17 ;JUMP IF N1=+INF QATM2N ;N1=0: GET N2 BCC GRT13 TST (SP)+ BMI TRUE1 ;TRUE IF N2<0 (OR -INF) BR FALSE1 ;FALSE IF N2>=0 (OR +INF) GRT13: TST (SP)+ BMI TRUE BR FALSE GRT17: QATM2N ;N1=INF, GET N2 BCC TRUE2 ;N1> ANY INTEGER TST (SP)+ BNE TRUE1 ;N1>ANY REAL OR -INF TST (SP)+ BEQ TRUE BR FALSE ;N1 NOT GREATER THAN +INF GRT20: QATM2N ;N1 REAL, GET N2 BCS GRT22 ;JUMP IF N2 REAL OR INF QIR BR GRT30 ;JUMP TO COMPARE REALS GRT22: BIT #77777,@SP BNE GRT30 ;JUMP TO COMPARE REALS TST (SP)+ BMI TRUE3 ;N1>N2=-INF TST (SP)+ BNE FALSE2 ;N1<+INF TST (SP)+ BGT TRUE1 ;TRUE IF N1>N2=0 BR FALSE1 GRT30: QCMR ;COMPARE TWO REALS BMI TRUE ;JUMP IF N2; ; EXIT: 1 ARG ; ERRORS: NONE ; CALLS: GREATERP .GLOBL LESSP,ZLESSP LESSP: MOV (R5)+,R0 ;SWITCH ARGS MOV @R5,-(R5) MOV R0,2(R5) BR GREATERP ;AND CHECK FOR GREATER THAN ZLESSP=.-LESSP .END