* device/lib/_strlen.c: assembler version for mcs51
[fw/sdcc] / device / lib / _divslong.c
index 5165d01cc02d5e116b4eac352e6fc26f74c4758f..2a8c03d0f5a84b869677135375a8eadd8c77f325 100644 (file)
@@ -26,7 +26,7 @@
 #include <sdcc-lib.h>
 
 #if _SDCC_MANGLES_SUPPORT_FUNS
-unsigned long _divulong (unsigned long a, unsigned long b);
+unsigned long _divulong (unsigned long x, unsigned long y);
 #endif
 
 /*   Assembler-functions are provided for:
@@ -37,7 +37,7 @@ unsigned long _divulong (unsigned long a, unsigned long b);
 #if !defined(SDCC_USE_XSTACK) && !defined(_SDCC_NO_ASM_LIB_FUNCS)
 #  if defined(SDCC_mcs51)
 #    if defined(SDCC_MODEL_SMALL)
-#      if defined(SDCC_STACK_AUTO)
+#      if defined(SDCC_STACK_AUTO) && !defined(SDCC_PARMS_IN_BANK1)
 #        define _DIVSLONG_ASM_SMALL_AUTO
 #      else
 #        define _DIVSLONG_ASM_SMALL
@@ -53,24 +53,30 @@ _divslong_dummy (void) _naked
 {
        _asm
 
-               #define a0      dpl
-               #define a1      dph
-               #define a2      b
-               #define a3      r3
+               #define x0      dpl
+               #define x1      dph
+               #define x2      b
+               #define x3      r3
 
                .globl __divslong
 
                // _divslong_PARM_2 shares the same memory with _divulong_PARM_2
                // and is defined in _divulong.c
-               #define b0      (__divslong_PARM_2)
-               #define b1      (__divslong_PARM_2 + 1)
-               #define b2      (__divslong_PARM_2 + 2)
-               #define b3      (__divslong_PARM_2 + 3)
-
+#if defined(SDCC_PARMS_IN_BANK1)
+               #define y0      (b1_0)
+               #define y1      (b1_1)
+               #define y2      (b1_2)
+               #define y3      (b1_3)
+#else
+               #define y0      (__divslong_PARM_2)
+               #define y1      (__divslong_PARM_2 + 1)
+               #define y2      (__divslong_PARM_2 + 2)
+               #define y3      (__divslong_PARM_2 + 3)
+#endif
        __divslong:
-                                       ; a3 in acc
-                                       ; b3 in (__divslong_PARM_2 + 3)
-               mov     a3,a            ; save a3
+                                       ; x3 in acc
+                                       ; y3 in (__divslong_PARM_2 + 3)
+               mov     x3,a            ; save x3
 
                clr     F0              ; Flag 0 in PSW
                                        ; available to user for general purpose
@@ -80,62 +86,61 @@ _divslong_dummy (void) _naked
 
                clr     a
                clr     c
-               subb    a,a0
-               mov     a0,a
+               subb    a,x0
+               mov     x0,a
                clr     a
-               subb    a,a1
-               mov     a1,a
+               subb    a,x1
+               mov     x1,a
                clr     a
-               subb    a,a2
-               mov     a2,a
+               subb    a,x2
+               mov     x2,a
                clr     a
-               subb    a,a3
-               mov     a3,a
+               subb    a,x3
+               mov     x3,a
 
        a_not_negative:
 
-               mov     a,b3
+               mov     a,y3
                jnb     acc.7,b_not_negative
 
                cpl     F0
 
                clr     a
                clr     c
-               subb    a,b0
-               mov     b0,a
+               subb    a,y0
+               mov     y0,a
                clr     a
-               subb    a,b1
-               mov     b1,a
+               subb    a,y1
+               mov     y1,a
                clr     a
-               subb    a,b2
-               mov     b2,a
+               subb    a,y2
+               mov     y2,a
                clr     a
-               subb    a,b3
-               mov     b3,a
+               subb    a,y3
+               mov     y3,a
 
        b_not_negative:
 
-               mov     a,a3            ; restore a3 in acc
+               mov     a,x3            ; restore x3 in acc
 
                lcall   __divulong
 
                jnb     F0,not_negative
 
-               mov     a3,a            ; save a3
+               mov     x3,a            ; save x3
 
                clr     a
                clr     c
-               subb    a,a0
-               mov     a0,a
+               subb    a,x0
+               mov     x0,a
                clr     a
-               subb    a,a1
-               mov     a1,a
+               subb    a,x1
+               mov     x1,a
                clr     a
-               subb    a,a2
-               mov     a2,a
+               subb    a,x2
+               mov     x2,a
                clr     a
-               subb    a,a3
-               mov     a3,a
+               subb    a,x3    ; x3 ends in acc
 
        not_negative:
                ret
@@ -150,17 +155,17 @@ _divslong_dummy (void) _naked
 {
        _asm
 
-               #define a0      dpl
-               #define a1      dph
-               #define a2      b
-               #define a3      r3
+               #define x0      dpl
+               #define x1      dph
+               #define x2      b
+               #define x3      r3
 
                .globl __divslong
 
        __divslong:
 
-                                       ; a3 in acc
-               mov     a3,a            ; save a3
+                                       ; x3 in acc
+               mov     x3,a            ; save x3
 
                clr     F0              ; Flag 0 in PSW
                                        ; available to user for general purpose
@@ -170,24 +175,24 @@ _divslong_dummy (void) _naked
 
                clr     a
                clr     c
-               subb    a,a0
-               mov     a0,a
+               subb    a,x0
+               mov     x0,a
                clr     a
-               subb    a,a1
-               mov     a1,a
+               subb    a,x1
+               mov     x1,a
                clr     a
-               subb    a,a2
-               mov     a2,a
+               subb    a,x2
+               mov     x2,a
                clr     a
-               subb    a,a3
-               mov     a3,a
+               subb    a,x3
+               mov     x3,a
 
        a_not_negative:
 
                mov     a,sp
                add     a,#-2           ; 2 bytes return address
-               mov     r0,a            ; r0 points to b3
-               mov     a,@r0           ; b3
+               mov     r0,a            ; r0 points to y3
+               mov     a,@r0           ; y3
 
                jnb     acc.7,b_not_negative
 
@@ -199,45 +204,44 @@ _divslong_dummy (void) _naked
 
                clr     a
                clr     c
-               subb    a,@r0           ; b0
+               subb    a,@r0           ; y0
                mov     @r0,a
                clr     a
                inc     r0
-               subb    a,@r0           ; b1
+               subb    a,@r0           ; y1
                mov     @r0,a
                clr     a
                inc     r0
-               subb    a,@r0           ; b2
+               subb    a,@r0           ; y2
                mov     @r0,a
                clr     a
                inc     r0
-               subb    a,@r0           ; b3
+               subb    a,@r0           ; y3
                mov     @r0,a
 
        b_not_negative:
                dec     r0
                dec     r0
-               dec     r0              ; r0 points to b0
+               dec     r0              ; r0 points to y0
 
                lcall   __divlong
 
                jnb     F0,not_negative
 
-               mov     a3,a            ; save a3
+               mov     x3,a            ; save x3
 
                clr     a
                clr     c
-               subb    a,a0
-               mov     a0,a
+               subb    a,x0
+               mov     x0,a
                clr     a
-               subb    a,a1
-               mov     a1,a
+               subb    a,x1
+               mov     x1,a
                clr     a
-               subb    a,a2
-               mov     a2,a
+               subb    a,x2
+               mov     x2,a
                clr     a
-               subb    a,a3
-               mov     a3,a
+               subb    a,x3            ; x3 ends in acc
 
        not_negative:
                ret
@@ -248,13 +252,13 @@ _divslong_dummy (void) _naked
 #else // _DIVSLONG_ASM
 
 long
-_divslong (long a, long b)
+_divslong (long x, long y)
 {
   long r;
 
-  r = _divulong((a < 0 ? -a : a),
-                (b < 0 ? -b : b));
-  if ( (a < 0) ^ (b < 0))
+  r = _divulong((x < 0 ? -x : x),
+                (y < 0 ? -y : y));
+  if ( (x < 0) ^ (y < 0))
     return -r;
   else
     return r;