/ C library-- versions of long *, /, % for non-floating point hardware / also =* =% =/ .globl lmul, almul .globl csv, cret / / called:2(sp):LHS 6(sp):RHS lmul: jsr r5,csv mov 4.(r5),r2 mov 6.(r5),r3 clr r0 clr r1 mov $32.,r4 1: asl r1 rol r0 rol r3 rol r2 bcc 2f add 10.(r5),r1 adc r0 add 8.(r5),r0 2: sob r4,1b jmp cret / call is 2(sp):LHSptr 4(sp):RHS almul: jsr r5,csv mov 4.(r5),r3 mov (r3)+,r2 mov (r3)+,r3 clr r0 clr r1 mov $32.,r4 1: asl r1 rol r0 rol r3 rol r2 bcc 2f add 8.(r5),r1 adc r0 add 6.(r5),r0 2: sob r4,1b mov 4.(r5),r3 mov r0,(r3)+ mov r1,(r3)+ jmp cret .globl ldiv .globl lrem / Both called 2(sp):LHS 6(sp):RHS lrem: jsr r5,csv mov $100,-(sp) br 1f ldiv: jsr r5,csv clr -(sp) 1: mov 6.(r5),r3 mov 4.(r5),r2 bpl 1f inc (sp) neg r2 neg r3 sbc r2 1: clr r0 clr r1 tst 8.(r5) bge 1f neg 8.(r5) neg 10.(r5) sbc 8.(r5) inc (sp) 1: mov $32.,r4 1: ashc $1,r2 rol r1 rol r0 cmp 8.(r5),r0 blt 2f bgt 3f cmp 10.(r5),r1 blos 2f 3: sob r4,1b br 1f 2: sub 10.(r5),r1 sbc r0 sub 8.(r5),r0 inc r3 sob r4,1b 1: bit $100,(sp) beq 3f tst 4.(r5) bpl 1f br 2f 3: mov r2,r0 mov r3,r1 bit $1,(sp)+ beq 1f 2: neg r0 neg r1 sbc r0 1: jmp cret .globl alrem, aldiv / Called 2(sp):LHSptr 4(sp):RHS alrem: jsr r5,csv mov $100,-(sp) br 1f aldiv: jsr r5,csv clr -(sp) 1: mov 4.(r5),r2 mov 2(r2),r3 mov (r2),r2 bpl 1f inc (sp) neg r2 neg r3 sbc r2 1: clr r0 clr r1 tst 6.(r5) bge 1f neg 6.(r5) neg 8.(r5) sbc 6.(r5) inc (sp) 1: mov $32.,r4 1: ashc $1,r2 rol r1 rol r0 cmp 6.(r5),r0 blt 2f bgt 3f cmp 8.(r5),r1 blos 2f 3: sob r4,1b br 1f 2: sub 8.(r5),r1 sbc r0 sub 6.(r5),r0 inc r3 sob r4,1b 1: mov 4(r5),r4 bit $100,(sp) beq 3f tst (r4) bpl 1f br 2f 3: mov r2,r0 mov r3,r1 bit $1,(sp)+ beq 1f 2: neg r0 neg r1 sbc r0 1: mov r0,(r4)+ mov r1,(r4) jmp cret