From: maartenbrock Date: Tue, 15 Mar 2005 07:34:20 +0000 (+0000) Subject: * device/lib/printf_large.c: removed inline assembly for portability and X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=feb1eb7834cd72b164af79a58edc49e6b86dee7f;p=fw%2Fsdcc * device/lib/printf_large.c: removed inline assembly for portability and readability. Use printf_fast if speed or size are more important. * src/pic16/gen.c: removed conditions around use of DEBUGpc * src/pic16/genutils.h: added define for DEBUGpc for MSVC git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3696 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index d5cacd96..9f4e7af7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2005-03-15 Maarten Brock + + * device/lib/printf_large.c: removed inline assembly for portability and + readability. Use printf_fast if speed or size are more important. + * src/pic16/gen.c: removed conditions around use of DEBUGpc + * src/pic16/genutils.h: added define for DEBUGpc for MSVC + 2005-03-15 Vangelis Rokas * src/pic16/genutils.c (pic16_genCmp_special): initialized offs to @@ -84,7 +91,7 @@ * src/pic16/gen.c (pic16_loadFSR0, genPackBits, genUnpackBits, genNearPointerGet): (hopefully) fixed access to bitfields via pointers (p->bitN = x; and x = p->bitN; failed) - + 2005-03-09 Paul Stoffregen * device/lib/printf_fast.c: fix leading zero format, eg "%02d" diff --git a/device/lib/printf_large.c b/device/lib/printf_large.c index b5cfb5e7..1dfb9bd6 100644 --- a/device/lib/printf_large.c +++ b/device/lib/printf_large.c @@ -24,16 +24,6 @@ what you give them. Help stamp out software-hoarding! -------------------------------------------------------------------------*/ -#ifdef SDCC_STACK_AUTO - #ifdef ASM_ALLOWED - /* Eventually we should get rid of ASM_ALLOWED completely as it */ - /* prevents portability, clobbers this source and brings only 2% */ - /* optimization. A better alternative is a completely handcrafted */ - /* asm version if needed. */ - #undef ASM_ALLOWED - #endif -#endif - #if defined(__ds390) #define USE_FLOATS 1 #endif @@ -79,15 +69,7 @@ static const char memory_id[] = "IXCP-"; static BOOL lower_case; static pfn_outputchar output_char; static void* p; - - #ifdef ASM_ALLOWED - static bool lsd; - - /* this one NEEDS to be in data */ - static data value_t value; - #else - static value_t value; - #endif + static value_t value; #endif /****************************************************************************/ @@ -122,39 +104,7 @@ static const char memory_id[] = "IXCP-"; /*--------------------------------------------------------------------------*/ -#if defined ASM_ALLOWED -static void calculate_digit( unsigned char radix ) -{ - unsigned char i; - - for( i = 32; i != 0; i-- ) - { -_asm - clr c - mov a,_value+0 - rlc a - mov _value+0,a - mov a,_value+1 - rlc a - mov _value+1,a - mov a,_value+2 - rlc a - mov _value+2,a - mov a,_value+3 - rlc a - mov _value+3,a - mov a,_value+4 - rlc a - mov _value+4,a -_endasm; - if (radix <= value.byte[4] ) - { - value.byte[4] -= radix; - value.byte[0]++; - } - } -} -#elif defined SDCC_STACK_AUTO +#if defined SDCC_STACK_AUTO static void calculate_digit( value_t* value, unsigned char radix ) { unsigned char i; @@ -400,9 +350,7 @@ int _print_format (pfn_outputchar pfn, void* pvoid, const char *format, va_list BOOL lower_case; value_t value; #endif -#ifndef ASM_ALLOWED BOOL lsd; -#endif unsigned char radix; int charsOutputted; @@ -623,10 +571,8 @@ get_conversion_spec: { // Apperently we have to output an integral type // with radix "radix" -#ifndef ASM_ALLOWED unsigned char store[6]; unsigned char _AUTOMEM *pstore = &store[5]; -#endif // store value in byte[0] (LSB) ... byte[3] (MSB) if (char_argument) @@ -668,21 +614,6 @@ get_conversion_spec: #else calculate_digit(radix); #endif -#if defined ASM_ALLOWED -_asm - jb _lsd,1$ - pop b ; b = - mov a,_value+4 ; a = - swap a - orl b,a ; b = - push b - sjmp 2$ -1$: - mov a,_value+4 ; a = - push acc -2$: -_endasm; -#else if (!lsd) { *pstore = (value.byte[4] << 4) | (value.byte[4] >> 4) | *pstore; @@ -692,7 +623,6 @@ _endasm; { *pstore = value.byte[4]; } -#endif length++; lsd = !lsd; } while( value.ul ); @@ -762,22 +692,6 @@ _endasm; while( length-- ) { lsd = !lsd; -#ifdef ASM_ALLOWED -_asm - jb _lsd,3$ - pop acc ; a = - nop ; to disable the "optimizer" - push acc - swap a - anl a,#0x0F ; a = - sjmp 4$ -3$: - pop acc - anl a,#0x0F ; a = -4$: - mov _value+4,a -_endasm; -#else if (!lsd) { pstore++; @@ -787,7 +701,6 @@ _endasm; { value.byte[4] = *pstore & 0x0F; } -#endif #ifdef SDCC_STACK_AUTO output_digit( value.byte[4], lower_case, output_char, p ); #else diff --git a/src/pic16/gen.c b/src/pic16/gen.c index 41b5a82a..aa092a06 100644 --- a/src/pic16/gen.c +++ b/src/pic16/gen.c @@ -5026,9 +5026,7 @@ static void genCmp (operand *left,operand *right, * make sure that left is register (or the like) * *************************************************/ if (!isAOP_REGlike(left)) { - #if !defined(__BORLANDC__) && !defined(_MSC_VER) DEBUGpc ("swapping arguments (AOP_TYPEs %d/%d)", AOP_TYPE(left), AOP_TYPE(right)); - #endif assert (isAOP_LIT(left)); assert (isAOP_REGlike(right)); // swap left and right @@ -5064,9 +5062,7 @@ static void genCmp (operand *left,operand *right, if (isAOP_LIT(right)) { if (!sign) { // unsigned comparison to a literal - #if !defined(__BORLANDC__) && !defined(_MSC_VER) DEBUGpc ("unsigned compare: left %s lit(0x%X=%lu), size=%d", performedLt ? "<" : ">=", lit, lit, size+1); - #endif if (lit == 0) { // unsigned left < 0? always false if (performedLt) emitCLRC; else emitSETC; @@ -5074,9 +5070,7 @@ static void genCmp (operand *left,operand *right, } } else { // signed comparison to a literal - #if !defined(__BORLANDC__) && !defined(_MSC_VER) DEBUGpc ("signed compare: left %s lit(0x%X=%ld), size=%d, mask=%x", performedLt ? "<" : ">=", lit, lit, size+1, mask); - #endif if ((lit & mask) == ((0x80 << (size*8)) & mask)) { // signed left < 0x80000000? always false if (performedLt) emitCLRC; else emitSETC; diff --git a/src/pic16/genutils.h b/src/pic16/genutils.h index 2ada0772..187bda36 100644 --- a/src/pic16/genutils.h +++ b/src/pic16/genutils.h @@ -12,6 +12,8 @@ #if !defined(__BORLANDC__) && !defined(_MSC_VER) #define DEBUGpc(fmt,...) DEBUGpic16_emitcode("; =:=", "%s:%s:%d: " fmt, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__) +#else +#define DEBUGpc 1 ? (void)0 : printf #endif #define isAOP_LIT(x) (AOP_TYPE(x) == AOP_LIT) #define isAOP_REGlike(x) (AOP_TYPE(x) == AOP_REG || AOP_TYPE(x) == AOP_DIR || AOP_TYPE(x) == AOP_PCODE || AOP_TYPE(x) == AOP_STA)