From f4f4125941b902be802bbe45871e8d86e2dc0959 Mon Sep 17 00:00:00 2001 From: sandeep Date: Wed, 30 Jan 2002 04:06:48 +0000 Subject: [PATCH] adjusted for --parms-in-bank1 option git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1859 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- device/lib/_divsint.c | 8 +++-- device/lib/_divslong.c | 10 ++++-- device/lib/_divuint.c | 11 +++++-- device/lib/_divulong.c | 10 ++++-- device/lib/_modsint.c | 9 +++-- device/lib/_modslong.c | 11 +++++-- device/lib/_modulong.c | 23 ++++++++----- device/lib/_mulint.c | 32 ++++++++++++++---- device/lib/_mullong.c | 75 ++++++++++++++++++++++++++++++++++-------- 9 files changed, 144 insertions(+), 45 deletions(-) diff --git a/device/lib/_divsint.c b/device/lib/_divsint.c index 38745fb0..ce31bd17 100644 --- a/device/lib/_divsint.c +++ b/device/lib/_divsint.c @@ -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) diff --git a/device/lib/_divslong.c b/device/lib/_divslong.c index 5165d01c..748ef92a 100644 --- a/device/lib/_divslong.c +++ b/device/lib/_divslong.c @@ -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) diff --git a/device/lib/_divuint.c b/device/lib/_divuint.c index 43a11ee4..9cb36f0e 100644 --- a/device/lib/_divuint.c +++ b/device/lib/_divuint.c @@ -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 diff --git a/device/lib/_divulong.c b/device/lib/_divulong.c index ecebfa25..94d8e9f4 100644 --- a/device/lib/_divulong.c +++ b/device/lib/_divulong.c @@ -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 diff --git a/device/lib/_modsint.c b/device/lib/_modsint.c index fb0147dc..abf270b0 100644 --- a/device/lib/_modsint.c +++ b/device/lib/_modsint.c @@ -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) diff --git a/device/lib/_modslong.c b/device/lib/_modslong.c index dc5038cb..99c3f8d9 100644 --- a/device/lib/_modslong.c +++ b/device/lib/_modslong.c @@ -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) diff --git a/device/lib/_modulong.c b/device/lib/_modulong.c index c2f8927d..0ef610ff 100644 --- a/device/lib/_modulong.c +++ b/device/lib/_modulong.c @@ -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 diff --git a/device/lib/_mulint.c b/device/lib/_mulint.c index ce92e5b6..dc6824c0 100644 --- a/device/lib/_mulint.c +++ b/device/lib/_mulint.c @@ -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; diff --git a/device/lib/_mullong.c b/device/lib/_mullong.c index bf8a355f..7afdc5af 100644 --- a/device/lib/_mullong.c +++ b/device/lib/_mullong.c @@ -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 -- 2.47.2