Annotation of researchv10no/cmd/PDP11/crt/ldiv.s, revision 1.1.1.1

1.1       root        1: / Long quotient
                      2: 
                      3: .globl ldiv
                      4: .globl csv, cret
                      5: 
                      6: ldiv:
                      7:        jsr     r5,csv
                      8:        mov     10.(r5),r3
                      9:        sxt     r4
                     10:        bpl     1f
                     11:        neg     r3
                     12:        bmi     hardldiv
                     13: 1:
                     14:        cmp     r4,8.(r5)
                     15:        bne     hardldiv
                     16:        mov     6.(r5),r2
                     17:        mov     4.(r5),r1
                     18:        bge     1f
                     19:        neg     r1
                     20:        neg     r2
                     21:        sbc     r1
                     22:        com     r4
                     23: 1:
                     24:        mov     r4,-(sp)
                     25:        clr     r0
                     26:        div     r3,r0
                     27:        mov     r0,r4           /high quotient
                     28:        mov     r1,r0
                     29:        mov     r2,r1
                     30:        mov     r0,-(sp)
                     31:        div     r3,r0
                     32:        bvc     1f
                     33:        mov     (sp),r0
                     34:        mov     r2,r1           / restore clobbered dividend
                     35:        sub     r3,r0           / this is the clever part
                     36:        div     r3,r0
                     37:        tst     r1
                     38:        sxt     r1
                     39:        add     r1,r0           / cannot overflow!
                     40: 1:
                     41:        tst     (sp)+
                     42:        mov     r0,r1
                     43:        mov     r4,r0
                     44:        tst     (sp)+
                     45:        bpl     9f
                     46:        neg     r0
                     47:        neg     r1
                     48:        sbc     r0
                     49: 9:
                     50:        jmp     cret
                     51: 
                     52: / The divisor is known to be >= 2^15 so only 17 cycles are needed.
                     53: hardldiv:
                     54:        clr     -(sp)
                     55:        mov     6.(r5),r2
                     56:        mov     4.(r5),r1
                     57:        bpl     1f
                     58:        com     (sp)
                     59:        neg     r1
                     60:        neg     r2
                     61:        sbc     r1
                     62: 1:
                     63:        clr     r0
                     64:        mov     8.(r5),r3
                     65:        bge     1f
                     66:        neg     r3
                     67:        neg     10.(r5)
                     68:        sbc     r3
                     69:        com     (sp)
                     70: 1:
                     71:        clr     -(sp)
                     72:        cmp     r3,r0
                     73:        bhi     1f
                     74:        blo     2f
                     75:        cmp     10.(r5),r1
                     76:        bhi     1f
                     77: 2:
                     78:        inc     (sp)
                     79:        sub     10.(r5),r1
                     80:        sbc     r0
                     81:        sub     r3,r0
                     82: 1:
                     83:        mov     $16.,r4
                     84: 1:
                     85:        clc
                     86:        rol     r2
                     87:        rol     r1
                     88:        rol     r0
                     89:        cmp     r3,r0
                     90:        bhi     3f
                     91:        blo     2f
                     92:        cmp     10.(r5),r1
                     93:        blos    2f
                     94: 3:
                     95:        sob     r4,1b
                     96:        br      1f
                     97: 2:
                     98:        sub     10.(r5),r1
                     99:        sbc     r0
                    100:        sub     r3,r0
                    101:        inc     r2
                    102:        sob     r4,1b
                    103: 1:
                    104:        mov     r2,r1
                    105:        mov     (sp)+,r0
                    106:        tst     (sp)+
                    107:        beq     1f
                    108:        neg     r0
                    109:        neg     r1
                    110:        sbc     r0
                    111: 1:
                    112:        jmp     cret

unix.superglobalmegacorp.com

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