adjusted for --parms-in-bank1 option
authorsandeep <sandeep@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 30 Jan 2002 04:06:48 +0000 (04:06 +0000)
committersandeep <sandeep@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 30 Jan 2002 04:06:48 +0000 (04:06 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1859 4a8a32a2-be11-0410-ad9d-d568d2c75423

device/lib/_divsint.c
device/lib/_divslong.c
device/lib/_divuint.c
device/lib/_divulong.c
device/lib/_modsint.c
device/lib/_modslong.c
device/lib/_modulong.c
device/lib/_mulint.c
device/lib/_mullong.c

index 38745fb0e2edfcafc6ae2ebe5d7601d4860a493e..ce31bd171163e4995032c28f1d989cd1fb8eabb0 100644 (file)
@@ -38,7 +38,7 @@ unsigned unsigned _divuint (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 _DIVSINT_ASM_SMALL_AUTO
 #      else
 #        define _DIVSINT_ASM_SMALL
@@ -61,9 +61,13 @@ _divsint_dummy (void) _naked
 
                // _divsint_PARM_2 shares the same memory with _divuint_PARM_2
                // and is defined in _divuint.c
+#if defined(SDCC_PARMS_IN_BANK1)
+               #define b0      (b1_0)
+               #define b1      (b1_1)
+#else
                #define b0      (__divsint_PARM_2)
                #define b1      (__divsint_PARM_2 + 1)
-
+#endif
        __divsint:
                                        ; a1 in dph
                                        ; b1 in (__divsint_PARM_2 + 1)
index 5165d01cc02d5e116b4eac352e6fc26f74c4758f..748ef92a6948ced18b3184ec2b2ea30d0465af58 100644 (file)
@@ -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
@@ -62,11 +62,17 @@ _divslong_dummy (void) _naked
 
                // _divslong_PARM_2 shares the same memory with _divulong_PARM_2
                // and is defined in _divulong.c
+#if defined(SDCC_PARMS_IN_BANK1)
+               #define b0      (b1_0)
+               #define b1      (b1_1)
+               #define b2      (b1_2)
+               #define b3      (b1_3)
+#else
                #define b0      (__divslong_PARM_2)
                #define b1      (__divslong_PARM_2 + 1)
                #define b2      (__divslong_PARM_2 + 2)
                #define b3      (__divslong_PARM_2 + 3)
-
+#endif
        __divslong:
                                        ; a3 in acc
                                        ; b3 in (__divslong_PARM_2 + 3)
index 43a11ee4d2b17eaf1e3e202a9bdaf0ab2769f614..9cb36f0e69df2aef9bc6a2f095dbd4eed3185a0f 100644 (file)
@@ -56,7 +56,7 @@ _divuint_dummy (void) _naked
                #define al      dpl
                #define ah      dph
 
-#ifdef SDCC_STACK_AUTO
+#if defined(SDCC_STACK_AUTO) && !defined(SDCC_PARMS_IN_BANK1)
 
                ar0 = 0                 ; BUG register set is not considered
                ar1 = 1
@@ -78,6 +78,7 @@ _divuint_dummy (void) _naked
 
 #else // SDCC_STACK_AUTO
 
+#if !defined(SDCC_PARMS_IN_BANK1)
 #if defined(SDCC_NOOVERLAY)
                .area DSEG    (DATA)
 #else
@@ -92,10 +93,14 @@ _divuint_dummy (void) _naked
                .ds     2
 
                .area CSEG    (CODE)
-
+#endif // !SDCC_PARMS_IN_BANK1
+#if defined(SDCC_PARMS_IN_BANK1)
+               #define bl      (b1_0)
+               #define bh      (b1_1)
+#else
                #define bl      (__divuint_PARM_2)
                #define bh      (__divuint_PARM_2 + 1)
-
+#endif // SDCC_PARMS_IN_BANK1
 #endif // SDCC_STACK_AUTO
 
                mov     count,#16
index ecebfa2569553e21e921d90028fbfee6a0022a10..94d8e9f403852ed0fc7f9d7de4182480dfdf7002 100644 (file)
@@ -30,7 +30,7 @@
 #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 _DIVULONG_ASM_SMALL_AUTO
 #      else
 #        define _DIVULONG_ASM_SMALL
@@ -61,6 +61,7 @@ _divlong_dummy (void) _naked
                #define reste1  r5
                #define reste2  r6
                #define reste3  r7
+#if !defined(SDCC_PARMS_IN_BANK1)
 
 #if defined(SDCC_NOOVERLAY)
                .area DSEG    (DATA)
@@ -81,7 +82,12 @@ _divlong_dummy (void) _naked
                #define b1      (__divulong_PARM_2 + 1)
                #define b2      (__divulong_PARM_2 + 2)
                #define b3      (__divulong_PARM_2 + 3)
-
+#else
+               #define b0      (b1_0)
+               #define b1      (b1_1)
+               #define b2      (b1_2)
+               #define b3      (b1_3)
+#endif // !SDCC_PARMS_IN_BANK1
                                        ; parameter a comes in a, b, dph, dpl
                mov     a3,a            ; save parameter a3
 
index fb0147dcfb4b72af4c97ec1add2c1e97c5793c86..abf270b0e81fce0b4f384835337f32a9262b852b 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
@@ -57,12 +57,15 @@ _modsint_dummy (void) _naked
                #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)
index dc5038cbb4bc331215f0205f0b9a769fb0e83fe9..99c3f8d98cf6290312f40191d2493a36048ee7a1 100644 (file)
@@ -36,7 +36,7 @@ unsigned long _modulong (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 _MODSLONG_ASM_SMALL_AUTO
 #      else
 #        define _MODSLONG_ASM_SMALL
@@ -58,14 +58,19 @@ _modslong_dummy (void) _naked
                #define a3      r1
 
                .globl __modslong
-
+#if defined(SDCC_PARMS_IN_BANK1)
+               #define b0      (b1_0)
+               #define b1      (b1_1)
+               #define b2      (b1_2)
+               #define b3      (b1_3)
+#else
                // _modslong_PARM_2 shares the same memory with _modulong_PARM_2
                // and is defined in _modulong.c
                #define b0      (__modslong_PARM_2)
                #define b1      (__modslong_PARM_2 + 1)
                #define b2      (__modslong_PARM_2 + 2)
                #define b3      (__modslong_PARM_2 + 3)
-
+#endif
        __modslong:
                                        ; a3 in acc
                                        ; b3 in (__modslong_PARM_2 + 3)
index c2f8927db10c10214ecdafd1c188eabd65179bf4..0ef610ff6222c64b997ba2e3390e638e8827d491 100644 (file)
@@ -32,7 +32,7 @@
 #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 _MODULONG_ASM_SMALL_AUTO
 #      else
 #        define _MODULONG_ASM_SMALL
@@ -50,8 +50,19 @@ _modlong_dummy (void) _naked
 
                .globl __modulong
 
-       __modulong:
+               #define a0      dpl
+               #define a1      dph
+               #define a2      b
+               #define a3      r1
+               #define count   r0
 
+       __modulong:
+#if defined(SDCC_PARMS_IN_BANK1)
+               #define b0      (b1_0)
+               #define b1      (b1_1)
+               #define b2      (b1_2)
+               #define b3      (b1_3)
+#else
 #if defined(SDCC_NOOVERLAY)
                .area DSEG    (DATA)
 #else
@@ -67,18 +78,12 @@ _modlong_dummy (void) _naked
 
                .area CSEG    (CODE)
 
-               #define count   r0
-
-               #define a0      dpl
-               #define a1      dph
-               #define a2      b
-               #define a3      r1
 
                #define b0      (__modulong_PARM_2)
                #define b1      (__modulong_PARM_2 + 1)
                #define b2      (__modulong_PARM_2 + 2)
                #define b3      (__modulong_PARM_2 + 3)
-
+#endif
                                        ; parameter a comes in a, b, dph, dpl
                mov     a3,a            ; save parameter a3
 
index ce92e5b61990009193163bdfa95b47e30ed7f737..dc6824c0f5f8a9b19b36233b5ff9822357e60412 100644 (file)
@@ -43,7 +43,7 @@
 #    endif
 #  elif defined(SDCC_mcs51)
 #    if defined(SDCC_MODEL_SMALL)
-#      if defined(SDCC_STACK_AUTO)
+#      if defined(SDCC_STACK_AUTO) && !defined(SDCC_PARMS_IN_BANK1)
 #        define _MULINT_ASM_SMALL_AUTO
 #      else
 #        define _MULINT_ASM_SMALL
@@ -74,21 +74,33 @@ _muluint (unsigned int a, unsigned int b)   // in future: _mulint
     mov r3,dpl ; lsb_a
 
     mov b,r3 ; lsb_a
+#if defined(SDCC_PARMS_IN_BANK1)
+    mov a,b1_0
+#else
     mov dptr,#__muluint_PARM_2
     movx a,@dptr ; lsb_b
+#endif
     mul ab ; lsb_a*lsb_b
     mov r0,a
     mov r1,b
 
     mov b,r2 ; msb_a
+#if defined(SDCC_PARMS_IN_BANK1)
+    mov a,b1_0
+#else
     movx a,@dptr ; lsb_b
+#endif
     mul ab ; msb_a*lsb_b
     add a,r1
     mov r1,a
 
     mov b,r3 ; lsb_a
+#if defined(SDCC_PARMS_IN_BANK1)
+    mov a,b1_1
+#else
     inc dptr
     movx a,@dptr ; msb_b
+#endif
     mul ab ; lsb_a*msb_b
     add a,r1
 
@@ -119,14 +131,19 @@ _mulint_dummy (void) _naked
                .globl __muluint                ; obsolete
                .globl __mulsint                ; obsolete
 
-#if !defined(SDCC_STACK_AUTO)
+#if !defined(SDCC_STACK_AUTO) || defined(SDCC_PARMS_IN_BANK1)
 
 #if defined(SDCC_NOOVERLAY)
                .area DSEG    (DATA)
 #else
                .area OSEG    (OVR,DATA)
 #endif
-
+#if defined(SDCC_PARMS_IN_BANK1)
+       #define bl      (b1_0)   
+       #define bh      (b1_1)   
+#else
+       #define bl      (__mulint_PARM_2)        
+       #define bh      (__mulint_PARM_2 + 1)    
        __mulint_PARM_2:
        __muluint_PARM_2:                       ; obsolete
        __mulsint_PARM_2:                       ; obsolete
@@ -136,24 +153,25 @@ _mulint_dummy (void) _naked
                .globl __mulsint_PARM_2         ; obsolete
 
                .ds     2
+#endif                                              
 
                .area CSEG    (CODE)
 
                ; globbered registers none
 
                mov     a,dpl                   ;  1  al
-               mov     b,__mulint_PARM_2       ;  2  bl
+               mov     b,bl                    ;  2  bl
                mul     ab                      ;  4  al * bl
                xch     a,dpl                   ;  1  store low-byte of return value, fetch al
                push    b                       ;  2
 
-               mov     b,__mulint_PARM_2 + 1   ;  2  bh
+               mov     b,bh                    ;  2  bh
                mul     ab                      ;  4  al * bh
                pop     b                       ;  2
                add     a,b                     ;  1
                xch     a,dph                   ;  1  ah -> acc
 
-               mov     b,__mulint_PARM_2       ;  2  bl
+               mov     b,bl                    ;  2  bl
                mul     ab                      ;  4  ah * bl
                add     a,dph                   ;  1
                mov     dph,a                   ;  1
@@ -206,7 +224,7 @@ union uu {
 unsigned int
 _muluint (unsigned int a, unsigned int b)      // in future: _mulint
 {
-#ifdef SDCC_MODEL_LARGE                // still needed for large + stack-auto
+#if defined(SDCC_MODEL_LARGE) || defined(SDCC_ds390)           // still needed for large + stack-auto
        union uu xdata *x;
        union uu xdata *y;
        union uu t;
index bf8a355ff4be4f2f86ac8a517493a92b95cc9448..7afdc5afefe572dbd3f7505d76d84652cd15eaff 100644 (file)
@@ -38,7 +38,7 @@
 #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 _MULLONG_ASM_SMALL_AUTO
 #      else
 #        define _MULLONG_ASM_SMALL
@@ -72,13 +72,23 @@ _mullong_dummy (void) _naked
                #define c2 r6
                #define c3 r7
 
+               #define a0 dpl
+               #define a1 dph
+               #define a2 r2
+               #define a3 r3
+
        ; c0  a0 * b0
        ; c1  a1 * b0 + a0 * b1
        ; c2  a2 * b0 + a1 * b1 + a0 * b2
        ; c3  a3 * b0 + a2 * b1 + a1 * b2 + a0 * b3
 
-#if !defined SDCC_STACK_AUTO
-
+#if !defined(SDCC_STACK_AUTO) || defined(SDCC_PARMS_IN_BANK1)
+#if defined(SDCC_PARMS_IN_BANK1)
+               #define b0  (b1_0)
+               #define b1  (b1_1)
+               #define b2  (b1_2)
+               #define b3  (b1_3)
+#else
 #if defined(SDCC_NOOVERLAY)
                .area DSEG    (DATA)
 #else
@@ -95,22 +105,18 @@ _mullong_dummy (void) _naked
 
                .ds     4
 
+               b0 =  __mullong_PARM_2
+               b1 = (__mullong_PARM_2+1)
+               b2 = (__mullong_PARM_2+2)
+               b3 = (__mullong_PARM_2+3)
+
+#endif
                .area CSEG    (CODE)
 
                                        ; parameter a comes in a, b, dph, dpl
                mov     r2,b            ; save parameter a
                mov     r3,a
 
-               #define a0 dpl
-               #define a1 dph
-               #define a2 r2
-               #define a3 r3
-
-               b0 =  __mullong_PARM_2
-               b1 = (__mullong_PARM_2+1)
-               b2 = (__mullong_PARM_2+2)
-               b3 = (__mullong_PARM_2+3)
-
                                        ;       Byte 0
                mov     a,a0
                mov     b,b0
@@ -341,6 +347,7 @@ _mullong_dummy (void) _naked
        ; c2  a2 * b0 + a1 * b1 + a0 * b2
        ; c3  a3 * b0 + a2 * b1 + a1 * b2 + a0 * b3
 
+#if !defined(SDCC_PARMS_IN_BANK1)
                .area XSEG    (XDATA)
 
        __mullong_PARM_2:
@@ -352,7 +359,7 @@ _mullong_dummy (void) _naked
                .globl __mulslong_PARM_2        ; obsolete
 
                .ds     4
-
+#endif
                .area CSEG    (CODE)
 
                                        ; parameter a comes in a, b, dph, dpl
@@ -368,15 +375,23 @@ _mullong_dummy (void) _naked
 
                                        ;       Byte 0
                mov     b,a0
+#if defined(SDCC_PARMS_IN_BANK1)
+               mov     a,b1_0          ; b0                                               
+#else
                mov     dptr,#__mullong_PARM_2
                movx    a,@dptr         ; b0
+#endif
                mul     ab              ; a0 * b0
                mov     c0,a
                mov     c1,b
 
                                        ;       Byte 1
                mov     b,a1
+#if defined(SDCC_PARMS_IN_BANK1)
+               mov     a,b1_0          ; b0                                               
+#else
                movx    a,@dptr         ; b0
+#endif
                mul     ab              ; a1 * b0
                add     a,c1
                mov     c1,a
@@ -386,8 +401,12 @@ _mullong_dummy (void) _naked
                
 
                mov     b,a0
+#if defined(SDCC_PARMS_IN_BANK1)
+               mov     a,b1_1          ; b1
+#else
                inc     dptr            ; b1
                movx    a,@dptr
+#endif
                mul     ab              ; a0 * b1
                add     a,c1
                mov     c1,a
@@ -400,7 +419,11 @@ _mullong_dummy (void) _naked
 
                                        ;       Byte 2
                mov     b,a1
+#if defined(SDCC_PARMS_IN_BANK1)
+               mov     a,b1_1          ; b1
+#else
                movx    a,@dptr         ; b1
+#endif
                mul     ab              ; a1 * b1
                add     a,c2
                mov     c2,a
@@ -409,8 +432,12 @@ _mullong_dummy (void) _naked
                mov     c3,a
 
                mov     b,a0
+#if defined(SDCC_PARMS_IN_BANK1)
+               mov     a,b1_2          ; b2
+#else
                inc     dptr            ; b2
                movx    a,@dptr
+#endif
                mul     ab              ; a0 * b2
                add     a,c2
                mov     c2,a
@@ -419,8 +446,12 @@ _mullong_dummy (void) _naked
                mov     c3,a
 
                mov     b,a2
+#if defined(SDCC_PARMS_IN_BANK1)
+               mov     a,b1_0          ; b0
+#else
                mov     dptr,#__mullong_PARM_2
                movx    a,@dptr         ; b0
+#endif
                mul     ab              ; a2 * b0
                add     a,c2
                mov     c2,a
@@ -430,28 +461,44 @@ _mullong_dummy (void) _naked
 
                                        ;       Byte 3
                mov     b,a3
+#if defined(SDCC_PARMS_IN_BANK1)
+               mov     a,b1_0          ; b0
+#else
                movx    a,@dptr         ; b0
+#endif
                mul     ab              ; a3 * b0
                add     a,c3
                mov     c3,a
 
                mov     b,a2
+#if defined(SDCC_PARMS_IN_BANK1)
+               mov     a,b1_1          ; b1
+#else
                inc     dptr            ; b1
                movx    a,@dptr
+#endif
                mul     ab              ; a2 * b1
                add     a,c3
                mov     c3,a
 
                mov     b,a1
+#if defined(SDCC_PARMS_IN_BANK1)
+               mov     a,b1_2          ; b2
+#else
                inc     dptr            ; b2
                movx    a,@dptr
+#endif
                mul     ab              ; a1 * b2
                add     a,c3
                mov     c3,a
 
                mov     b,a0
+#if defined(SDCC_PARMS_IN_BANK1)
+               mov     a,b1_3          ; b3
+#else
                inc     dptr            ; b3
                movx    a,@dptr
+#endif
                mul     ab              ; a0 * b3
                add     a,c3