Annotation of researchv10no/cmd/PDP11/fpp/rhflibFIS.s, revision 1.1.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.