#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
// _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)
#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
// _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)
#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
#else // SDCC_STACK_AUTO
+#if !defined(SDCC_PARMS_IN_BANK1)
#if defined(SDCC_NOOVERLAY)
.area DSEG (DATA)
#else
.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
#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
#define reste1 r5
#define reste2 r6
#define reste3 r7
+#if !defined(SDCC_PARMS_IN_BANK1)
#if defined(SDCC_NOOVERLAY)
.area DSEG (DATA)
#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
#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
#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)
#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
#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)
#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
.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
.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
# 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
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
.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
.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
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;
#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
#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
.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
; 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:
.globl __mulslong_PARM_2 ; obsolete
.ds 4
-
+#endif
.area CSEG (CODE)
; parameter a comes in a, b, dph, dpl
; 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
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
; 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
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
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
; 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