* as/link/lkar.h: sgetl and sputl are independent of endianness
[fw/sdcc] / device / lib / _modsint.c
index fb0147dcfb4b72af4c97ec1add2c1e97c5793c86..6ca1f5201c095be8ba00c322f429f15e1a783a58 100644 (file)
@@ -37,7 +37,7 @@ unsigned unsigned _moduint (unsigned a, unsigned 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 _MODSINT_ASM_SMALL_AUTO
 #      else
 #        define _MODSINT_ASM_SMALL
@@ -49,150 +49,149 @@ unsigned unsigned _moduint (unsigned a, unsigned b);
 #if defined _MODSINT_ASM_SMALL
 
 static void
-_modsint_dummy (void) _naked
+_modsint_dummy (void) __naked
 {
-       _asm
-
-               #define a0      dpl
-               #define a1      dph
-
-               .globl __modsint
-
-               // _modsint_PARM_2 shares the same memory with _moduint_PARM_2
-               // and is defined in _moduint.c
-               #define b0      (__modsint_PARM_2)
-               #define b1      (__modsint_PARM_2 + 1)
-
-       __modsint:
-                                       ; a1 in dph
-                                       ; b1 in (__modsint_PARM_2 + 1)
-
-               clr     F0              ; Flag 0 in PSW
-                                       ; available to user for general purpose
-               mov     a,a1
-               jnb     acc.7,a_not_negative
+       __asm
+
+       #define a0      dpl
+       #define a1      dph
+
+       .globl __modsint
+#if defined(SDCC_PARMS_IN_BANK1)
+       #define b0      (b1_0)
+       #define b1      (b1_1)
+#else
+       // _modsint_PARM_2 shares the same memory with _moduint_PARM_2
+       // and is defined in _moduint.c
+       #define b0      (__modsint_PARM_2)
+       #define b1      (__modsint_PARM_2 + 1)
+#endif
+__modsint:
+                               ; a1 in dph
+                               ; b1 in (__modsint_PARM_2 + 1)
 
-               setb    F0
+       clr     F0              ; Flag 0 in PSW
+                               ; available to user for general purpose
+       mov     a,a1
+       jnb     acc.7,a_not_negative
 
-               clr     a
-               clr     c
-               subb    a,a0
-               mov     a0,a
-               clr     a
-               subb    a,a1
-               mov     a1,a
+       setb    F0
 
-       a_not_negative:
+       clr     a
+       clr     c
+       subb    a,a0
+       mov     a0,a
+       clr     a
+       subb    a,a1
+       mov     a1,a
 
-               mov     a,b1
-               jnb     acc.7,b_not_negative
+a_not_negative:
 
-               cpl     F0
+       mov     a,b1
+       jnb     acc.7,b_not_negative
 
-               clr     a
-               clr     c
-               subb    a,b0
-               mov     b0,a
-               clr     a
-               subb    a,b1
-               mov     b1,a
+       clr     a
+       clr     c
+       subb    a,b0
+       mov     b0,a
+       clr     a
+       subb    a,b1
+       mov     b1,a
 
-       b_not_negative:
+b_not_negative:
 
-               lcall   __moduint
+       lcall   __moduint
 
-               jnb     F0,not_negative
+       jnb     F0,not_negative
 
-               clr     a
-               clr     c
-               subb    a,a0
-               mov     a0,a
-               clr     a
-               subb    a,a1
-               mov     a1,a
+       clr     a
+       clr     c
+       subb    a,a0
+       mov     a0,a
+       clr     a
+       subb    a,a1
+       mov     a1,a
 
-       not_negative:
-               ret
+not_negative:
+       ret
 
-       _endasm ;
+       __endasm;
 }
 
 #elif defined _MODSINT_ASM_SMALL_AUTO
 
 static void
-_modsint_dummy (void) _naked
+_modsint_dummy (void) __naked
 {
-       _asm
-
-               #define a0      dpl
-               #define a1      dph
+       __asm
 
-               ar0 = 0                 ; BUG register set is not considered
-               ar1 = 1
+       #define a0      dpl
+       #define a1      dph
 
-               .globl __modsint
+       ar0 = 0                 ; BUG register set is not considered
+       ar1 = 1
 
-       __modsint:
+       .globl __modsint
 
-               clr     F0              ; Flag 0 in PSW
-                                       ; available to user for general purpose
-               mov     a,a1
-               jnb     acc.7,a_not_negative
+__modsint:
 
-               setb    F0
+       clr     F0              ; Flag 0 in PSW
+                               ; available to user for general purpose
+       mov     a,a1
+       jnb     acc.7,a_not_negative
 
-               clr     a
-               clr     c
-               subb    a,a0
-               mov     a0,a
-               clr     a
-               subb    a,a1
-               mov     a1,a
+       setb    F0
 
-       a_not_negative:
+       clr     a
+       clr     c
+       subb    a,a0
+       mov     a0,a
+       clr     a
+       subb    a,a1
+       mov     a1,a
 
-               mov     a,sp
-               add     a,#-2           ; 2 bytes return address
-               mov     r0,a            ; r0 points to b1
-               mov     a,@r0           ; b1
+a_not_negative:
 
-               jnb     acc.7,b_not_negative
+       mov     a,sp
+       add     a,#-2           ; 2 bytes return address
+       mov     r0,a            ; r0 points to b1
+       mov     a,@r0           ; b1
 
-               cpl     F0
+       jnb     acc.7,b_not_negative
 
-               dec     r0
+       dec     r0
 
-               clr     a
-               clr     c
-               subb    a,@r0           ; b0
-               mov     @r0,a
-               clr     a
-               inc     r0
-               subb    a,@r0           ; b1
-               mov     @r0,a
+       clr     a
+       clr     c
+       subb    a,@r0           ; b0
+       mov     @r0,a
+       clr     a
+       inc     r0
+       subb    a,@r0           ; b1
+       mov     @r0,a
 
-       b_not_negative:
+b_not_negative:
 
-               mov     ar1,@r0         ; b1
-               dec     r0
-               mov     ar0,@r0         ; b0
+       mov     ar1,@r0         ; b1
+       dec     r0
+       mov     ar0,@r0         ; b0
 
-               lcall   __modint
+       lcall   __modint
 
-               jnb     F0,not_negative
+       jnb     F0,not_negative
 
-               clr     a
-               clr     c
-               subb    a,a0
-               mov     a0,a
-               clr     a
-               subb    a,a1
-               mov     a1,a
+       clr     a
+       clr     c
+       subb    a,a0
+       mov     a0,a
+       clr     a
+       subb    a,a1
+       mov     a1,a
 
-       not_negative:
-               ret
+not_negative:
+       ret
 
-       _endasm ;
+       __endasm;
 }
 
 #else  // _MODSINT_ASM_
@@ -204,7 +203,7 @@ int _modsint (int a, int b)
        r = _moduint((a < 0 ? -a : a),
                    (b < 0 ? -b : b));
 
-       if ( (a < 0) ^ (b < 0))
+       if (a < 0)
            return -r;
        else
            return r;