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

1.1     ! root        1: / floating point for 11/40 or 11/70 for norgen use on either machine
        !             2: / uses the appropriate floating point unit
        !             3: 
        !             4: .globl fad,fsb,fmp,fdv,int,float
        !             5: 
        !             6: .text
        !             7: fad:   mov (sp)+,ret
        !             8:        mov sp,-(sp)
        !             9:        sub sp,(sp)
        !            10:        tst (sp)+
        !            11:        bne 1f
        !            12:        75006 /fadd sp on 11/35/40
        !            13:        jmp *ret
        !            14: 1:     ldfps $1100
        !            15:        movf 4(sp),fr0
        !            16:        addf (sp)+,fr0
        !            17:        movf fr0,(sp)
        !            18:        jmp *ret
        !            19: 
        !            20: fsb:   mov (sp)+,ret
        !            21:        mov sp,-(sp)
        !            22:        sub sp,(sp)
        !            23:        tst (sp)+
        !            24:        bne 1f
        !            25:        75016 /fsub sp on 11/35/40
        !            26:        jmp *ret
        !            27: 1:     ldfps $1100
        !            28:        movf 4(sp),fr0
        !            29:        subf (sp)+,fr0
        !            30:        movf fr0,(sp)
        !            31:        jmp *ret
        !            32: 
        !            33: fmp:   mov (sp)+,ret
        !            34:        mov sp,-(sp)
        !            35:        sub sp,(sp)
        !            36:        tst (sp)+
        !            37:        bne 1f
        !            38:        75026 /fmul sp on 11/35/40
        !            39:        jmp *ret
        !            40: 1:     ldfps $1100
        !            41:        movf 4(sp),fr0
        !            42:        mulf (sp)+,fr0
        !            43:        movf fr0,(sp)
        !            44:        jmp *ret
        !            45: 
        !            46: fdv:   mov (sp)+,ret
        !            47:        mov sp,-(sp)
        !            48:        sub sp,(sp)
        !            49:        tst (sp)+
        !            50:        bne 1f
        !            51:        75036 /fdiv sp on 11/35/40
        !            52:        jmp *ret
        !            53: 1:     ldfps $1100
        !            54:        movf 4(sp),fr0
        !            55:        divf (sp)+,fr0
        !            56:        movf fr0,(sp)
        !            57:        jmp *ret
        !            58: 
        !            59: int:   mov r0,-(sp)
        !            60:        mov r1,-(sp)
        !            61:        mov r2,-(sp)
        !            62:        clr -(sp) /sign of number
        !            63:        mov 12.(sp),r1/ low part
        !            64:        mov 10.(sp),r0/ hi part
        !            65:        bpl 1f/ ok, positive
        !            66:        mov $100000,(sp)/ set sign -
        !            67:        bic (sp),r0/ set number pos
        !            68: 1:     mov r0,r2/ extract exponent
        !            69:        bic $100177,r2
        !            70:        bic r2,r0
        !            71:        ash $-7,r2/ make it integer
        !            72:        bis $200,r0/ set hidden bit
        !            73:        sub $200,r2/ subtr off excess 200
        !            74:        ble 2f/ exponent 0, treat as zero number
        !            75:        sub $24.,r2/ set for shift
        !            76:        ashc r2,r0/ left or right
        !            77: 4:     tst (sp)+/ sign
        !            78:        bpl 3f
        !            79:        neg r0
        !            80:        neg r1
        !            81:        sbc r0
        !            82: 3:     mov r0,8.(sp)/ hi part
        !            83:        mov r1,10.(sp)/ low part
        !            84:        mov (sp)+,r2
        !            85:        mov (sp)+,r1
        !            86:        mov (sp)+,r0
        !            87:        rts pc
        !            88: 
        !            89: 2:     clr r0/ exponent was 0, set number to 0
        !            90:        clr r1
        !            91:        br 4b
        !            92: 
        !            93: float: mov 4(sp),-(sp)
        !            94:        mov 4(sp),-(sp)
        !            95:        bmi negflt
        !            96:        clr -(sp)
        !            97:        mov $[200+24.]*200,-(sp)
        !            98: 1:     bit $377*200,4(sp)
        !            99:        beq 2f
        !           100:        asr 4(sp)
        !           101:        ror 6(sp)
        !           102:        add $200,(sp)
        !           103:        br 1b
        !           104: 2:     bis (sp),4(sp)
        !           105:        jsr pc,fsb
        !           106:        mov (sp)+,4(sp)
        !           107:        mov (sp)+,4(sp)
        !           108:        rts pc
        !           109: 
        !           110: negflt:        neg (sp)
        !           111:        neg 2(sp)
        !           112:        sbc (sp)
        !           113:        bmi 3f/ overflow on sign flip
        !           114:        jsr pc,float
        !           115:        bis $100000,(sp)
        !           116:        mov (sp)+,4(sp)
        !           117:        mov (sp)+,4(sp)
        !           118:        rts pc
        !           119: 
        !           120: 3:     cmp (sp)+,(sp)+/ toss
        !           121:        mov $[200+32.]*200+100000,2(sp)/
        !           122:        clr 4(sp)
        !           123:        rts pc
        !           124: 
        !           125: .data
        !           126: ret:0

unix.superglobalmegacorp.com

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