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

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

unix.superglobalmegacorp.com

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