From: frief Date: Fri, 27 Apr 2007 13:24:27 +0000 (+0000) Subject: * device/lib/_ltoa.c: 36 bytes less __data mem. This really helps printf_small. 32... X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=025f549fbb89aa070e3f3baeb6c8ef4ca72d8210;p=fw%2Fsdcc * device/lib/_ltoa.c: 36 bytes less __data mem. This really helps printf_small. 32 bytes more __idata mem. git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4773 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index dee6a8f8..1cefc888 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-03-27 Frieder Ferlemann + + * device/lib/_ltoa.c: 36 bytes less __data mem. This really + helps printf_small. 32 bytes more __idata mem. + 2007-04-27 Raphael Neider * src/pic/pcode.c (addpCode2pBlock,LinkFlow,pBlockRemoveUnusedLabels): diff --git a/device/lib/_ltoa.c b/device/lib/_ltoa.c index 0ee8be26..82dd693b 100755 --- a/device/lib/_ltoa.c +++ b/device/lib/_ltoa.c @@ -13,24 +13,38 @@ radix -> Base of value (e.g.: 2 for binary, 10 for decimal, 16 for hex) ---------------------------------------------------------------------------*/ -#define NUMBER_OF_DIGITS 32 +/* "11110000111100001111000011110000" base 2 */ +/* "37777777777" base 8 */ +/* "4294967295" base 10 */ +#define NUMBER_OF_DIGITS 32 /* eventually adapt if base 2 not needed */ + +#if NUMBER_OF_DIGITS < 32 +# warning _ltoa() and _ultoa() are not save for radix 2 +#endif + +#if defined (SDCC_mcs51) && defined (SDCC_MODEL_SMALL) && !defined (SDCC_STACK_AUTO) +# define MEMSPACE_BUFFER __idata /* eventually __pdata or __xdata */ +# pragma nogcse +#else +# define MEMSPACE_BUFFER +#endif void _ultoa(unsigned long value, char* string, unsigned char radix) { -unsigned char index; -char buffer[NUMBER_OF_DIGITS]; /* space for NUMBER_OF_DIGITS + '\0' */ - - index = NUMBER_OF_DIGITS; + char MEMSPACE_BUFFER buffer[NUMBER_OF_DIGITS]; /* no space for '\0' */ + unsigned char index = NUMBER_OF_DIGITS; do { - buffer[--index] = '0' + (value % radix); - if ( buffer[index] > '9') buffer[index] += 'A' - '9' - 1; + unsigned char c = '0' + (value % radix); + if (c > '9') + c += 'A' - '9' - 1; + buffer[--index] = c; value /= radix; - } while (value != 0); + } while (value); do { - *string++ = buffer[index++]; - } while ( index < NUMBER_OF_DIGITS ); + *string++ = buffer[index]; + } while ( ++index != NUMBER_OF_DIGITS ); *string = 0; /* string terminator */ }