From: cuz Date: Sat, 2 Nov 2002 10:52:36 +0000 (+0000) Subject: Moved divt.s from runtime into common because it's a C library function, not a X-Git-Tag: V2.12.0~2153 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=2275e4c2a841c070358ec5222c491a8fd100f4e2;p=cc65 Moved divt.s from runtime into common because it's a C library function, not a runtime support function. git-svn-id: svn://svn.cc65.org/cc65/trunk@1479 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/common/Makefile b/libsrc/common/Makefile index 906ba5773..2dd8096e3 100644 --- a/libsrc/common/Makefile +++ b/libsrc/common/Makefile @@ -62,6 +62,7 @@ S_OBJS = _fdesc.o \ calloc.o \ copydata.o \ cprintf.o \ + divt.o \ errno.o \ fmisc.o \ fprintf.o \ diff --git a/libsrc/common/divt.s b/libsrc/common/divt.s new file mode 100644 index 000000000..c36ea7944 --- /dev/null +++ b/libsrc/common/divt.s @@ -0,0 +1,43 @@ +; divt.s +; +; 2002-10-22, Greg King +; +; This signed-division function returns both the quotient and the remainder, +; in this structure: +; +; typedef struct { +; int rem, quot; +; } div_t; +; +; div_t __fastcall__ div (int numer, int denom); +; +; Both sides of an assignment-expression must be cast to (long) +; because cc65 functions can't return structures -- yet. Example: +; +; #include +; div_t answer; +; +; (long)answer = (long)div(-41, +3); +; printf("The quotient is %d, and the remainder is %d.\n", +; answer.quot, answer.rem); + + .export _div + + .import tosdivax, negax + .importzp sreg, ptr1, tmp1 + +_div: jsr tosdivax ; Division-operator does most of the work + sta sreg ; Quotient is in sreg + stx sreg+1 + lda ptr1 ; Unsigned remainder is in ptr1 + ldx ptr1+1 + +; Adjust the sign of the remainder. +; It must be the same as the sign of the dividend. +; + bit tmp1 ; Load high-byte of left argument + bpl Pos ; Jump if sign-of-result is positive + jmp negax ; Result is negative, adjust the sign + +Pos: rts + diff --git a/libsrc/runtime/Makefile b/libsrc/runtime/Makefile index a0b41c09c..a7808a82b 100644 --- a/libsrc/runtime/Makefile +++ b/libsrc/runtime/Makefile @@ -54,7 +54,6 @@ OBJS = add.o \ decsp7.o \ decsp8.o \ div.o \ - divt.o \ enter.o \ eq.o \ ge.o \ diff --git a/libsrc/runtime/divt.s b/libsrc/runtime/divt.s deleted file mode 100644 index c36ea7944..000000000 --- a/libsrc/runtime/divt.s +++ /dev/null @@ -1,43 +0,0 @@ -; divt.s -; -; 2002-10-22, Greg King -; -; This signed-division function returns both the quotient and the remainder, -; in this structure: -; -; typedef struct { -; int rem, quot; -; } div_t; -; -; div_t __fastcall__ div (int numer, int denom); -; -; Both sides of an assignment-expression must be cast to (long) -; because cc65 functions can't return structures -- yet. Example: -; -; #include -; div_t answer; -; -; (long)answer = (long)div(-41, +3); -; printf("The quotient is %d, and the remainder is %d.\n", -; answer.quot, answer.rem); - - .export _div - - .import tosdivax, negax - .importzp sreg, ptr1, tmp1 - -_div: jsr tosdivax ; Division-operator does most of the work - sta sreg ; Quotient is in sreg - stx sreg+1 - lda ptr1 ; Unsigned remainder is in ptr1 - ldx ptr1+1 - -; Adjust the sign of the remainder. -; It must be the same as the sign of the dividend. -; - bit tmp1 ; Load high-byte of left argument - bpl Pos ; Jump if sign-of-result is positive - jmp negax ; Result is negative, adjust the sign - -Pos: rts -