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