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

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

unix.superglobalmegacorp.com

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