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

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

unix.superglobalmegacorp.com

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