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

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

unix.superglobalmegacorp.com

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