Annotation of researchv10no/cmd/PDP11/fpp/rhflibFIS.s, revision 1.1

1.1     ! root        1: /
        !             2: / floating point for 11/40 or 11/03 only
        !             3: / modified from rhflibp.asm by DEPT 2242 BTL WH
        !             4: / 06-JUN-78
        !             5: /
        !             6: / 11/70 floating point removed
        !             7: /
        !             8: / The test:
        !             9: /
        !            10: /      mov     sp,-(sp)
        !            11: /      sub     sp,(sp)
        !            12: /      tst     (sp)+
        !            13: /      bne     11/70
        !            14: /
        !            15: / does NOT WORK on the LSI-11 (PDP-11/03)
        !            16: /
        !            17: .globl fad,fsb,fmp,fdv,int,float,fltused
        !            18: 
        !            19: .text
        !            20: fltused: 1     / used to satisfy c compile reference when floating
        !            21:                /  point is used
        !            22: fad:   mov (sp)+,ret
        !            23:        075006          / fadd sp on 11/35/40/03
        !            24:        jmp *ret
        !            25: 
        !            26: fsb:   mov (sp)+,ret
        !            27:        075016          / fsub sp on 11/35/40/03
        !            28:        jmp *ret
        !            29: 
        !            30: fmp:   mov (sp)+,ret
        !            31:        075026          / fmul sp on 11/35/40/03
        !            32:        jmp *ret
        !            33: 
        !            34: fdv:   mov (sp)+,ret
        !            35:        075036          / fdiv sp on 11/35/40/03
        !            36:        jmp *ret
        !            37: /
        !            38: /
        !            39: /
        !            40: /
        !            41: int:   mov     r0,-(sp)
        !            42:        mov     r1,-(sp)
        !            43:        mov     r2,-(sp)
        !            44:        clr     -(sp)           /sign of number
        !            45:        mov     12.(sp),r1              / low part
        !            46:        mov     10.(sp),r0              / hi part
        !            47:        bpl     1f                      / ok, positive
        !            48:        mov     $100000,(sp)    / set sign -
        !            49:        bic     (sp),r0         / set number pos
        !            50: 1:     mov     r0,r2           / extract exponent
        !            51:        bic     $100177,r2
        !            52:        bic     r2,r0
        !            53:        ash     $-7,r2          / make it integer
        !            54:        bis     $200,r0         / set hidden bit
        !            55:        sub     $200,r2         / subtr off excess 200
        !            56:        ble     2f                      / exponent 0, treat as zero number
        !            57:        sub     $24.,r2         / set for shift
        !            58:        ashc    r2,r0           / left or right
        !            59: 4:     tst     (sp)+           / sign
        !            60:        bpl     3f
        !            61:        neg     r0
        !            62:        neg     r1
        !            63:        sbc     r0
        !            64: 3:     mov     r0,8.(sp)               / hi part
        !            65:        mov     r1,10.(sp)              / low part
        !            66:        mov     (sp)+,r2
        !            67:        mov     (sp)+,r1
        !            68:        mov     (sp)+,r0
        !            69:        rts     pc
        !            70: 
        !            71: 2:     clr     r0                      / exponent was 0, set number to 0
        !            72:        clr     r1
        !            73:        br      4b
        !            74: /
        !            75: /
        !            76: /
        !            77: /
        !            78: float: mov     4(sp),-(sp)
        !            79:        mov     4(sp),-(sp)
        !            80:        bmi     negflt
        !            81:        clr     -(sp)
        !            82:        mov     $[200+24.]*200,-(sp)
        !            83: 1:     bit     $377*200,4(sp)
        !            84:        beq     2f
        !            85:        asr     4(sp)
        !            86:        ror     6(sp)
        !            87:        add     $200,(sp)
        !            88:        br      1b
        !            89: 2:     bis     (sp),4(sp)
        !            90:        jsr     pc,fsb
        !            91:        mov     (sp)+,4(sp)
        !            92:        mov     (sp)+,4(sp)
        !            93:        rts     pc
        !            94: 
        !            95: negflt:        neg     (sp)
        !            96:        neg     2(sp)
        !            97:        sbc     (sp)
        !            98:        bmi     3f              / overflow on sign flip
        !            99:        jsr     pc,float
        !           100:        bis     $100000,(sp)
        !           101:        mov     (sp)+,4(sp)
        !           102:        mov     (sp)+,4(sp)
        !           103:        rts     pc
        !           104: 
        !           105: 3:     cmp     (sp)+,(sp)+             / toss
        !           106:        mov     $[200+32.]*200+100000,2(sp)             /
        !           107:        clr     4(sp)
        !           108:        rts     pc
        !           109: 
        !           110: .data
        !           111: ret:0

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.