.TITLE RI ; JEFFREY KODOSKY ARL JUN76 ; ; UTILITY: REAL TO INTEGER CONVERTER ; ENTRY: 1 ARG (SP) ; EXIT: 1 ARG (SP) ; ERRORS: I4, HARD ARITHMETIC ERROR ; CALLS: NONE ; R5 PRESERVED ; ASSEMBLY SWITCHES: FPU,EAE,EIS ;(THIS ROUTINE IS A MODIFIED VERSION OF $RI04 OF FPMP) .GLOBL RI,QI4ERR MQ=177304 LSH=177314 .IFDF FPU RI: ROL @SP BEQ 2$ ;JUMP IF 0 OR +-INF ROR @SP .WORD 170001 ;SETF .WORD 170002 ;SETI .WORD 172426 ;LDF (SP)+,F0 .WORD 175446 ;STCFI F0,-(SP) .WORD 170000 ;CFCC BCS OVFL 1$: JMP @-(R4) 2$: CMP (SP)+,(SP)+ BEQ 1$ ;RETURN 0 OVFL: QI4ERR .ENDC .IFNDF FPU RI: CLR R2 INC R2 MOV (SP)+,R1 ROL R1 BEQ ZORINF ROL -(SP) ROL @SP ADC R1 MOVB R1,R3 CLRB R1 SWAB R1 SUB #201,R1 BLT ZERO BEQ DONE CMP #15.,R1 BLT OVFL SWAB R3 CLRB R3 BISB 3(SP),R3 SHFT: .IFNDF EAE&EIS ROL R3 ROL R2 DEC R1 BGT SHFT .ENDC .IFDF EAE MOV #MQ,R0 MOV R3,@R0 MOV R2,-(R0) MOV R1,@#LSH MOV @R0,R2 .ENDC .IFDF EIS .WORD 073201 ;ASHC R1,R2 .ENDC DONE: NEG R2 BVS NEGM BGT OVFL ROR (SP)+ BCS OUT NEG R2 OUT: MOV R2,@SP JMP @-(R4) NEGM: ROR (SP)+ BCS OUT OVFL: QI4ERR ZORINF: TST @SP BNE OVFL JMP @-(R4) ZERO: TST (SP)+ CLR @SP JMP @-(R4) .ENDC .END