(calculate_digit): added optimization for octal and hex
* support/regression/tests/bug1057979.c: added test for bug
1073386
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3586
4a8a32a2-be11-0410-ad9d-
d568d2c75423
+2004-11-18 Maarten Brock <sourceforge.brock AT dse.nl>
+
+ * device/lib/printf_large.c (_print_format): fixed bug 1073386,
+ (calculate_digit): added optimization for octal and hex
+ * support/regression/tests/bug1057979.c: added test for bug 1073386
+
2004-11-25 Vangelis Rokas <vrokas AT otenet.gr>
- * src/pic16/pcode.c: fixed bug which may produce error in non-GNU
- compilers
-
+
+ * src/pic16/pcode.c: fixed bug which may produce error in non-GNU
+ compilers
+
2004-11-25 Vangelis Rokas <vrokas AT otenet.gr>
* src/pic16/device.h,
Library is not automatically build yet. But one can build it by
invoking 'make' inside the libc directory.
* added ADC library under libio. Preliminary version yet.
-
+
* src/pic16/gen.h: added emitTOGC macro, to toggle Carry flag,
* src/pic16/gen.c (aopForRemat): asmop size is filled by
aopForRemat() now and not by pic16_aopOp(),
#if defined ASM_ALLOWED
static void calculate_digit( unsigned char radix )
{
+ if (radix == 8)
+ {
+ value.byte[4] = value.ul & 0x07;
+ value.ul >>= 3;
+ }
+ else if (radix == 16)
+ {
+ value.byte[4] = value.ul & 0x0F;
+ value.ul >>= 4;
+ }
+ else
+ {
unsigned char i;
for( i = 32; i != 0; i-- )
}
}
}
+}
#elif defined SDCC_STACK_AUTO
static void calculate_digit( value_t* value, unsigned char radix )
{
+ if (radix == 8)
+ {
+ value->byte[4] = value->ul & 0x07;
+ value->ul >>= 3;
+ }
+ else if (radix == 16)
+ {
+ value->byte[4] = value->ul & 0x0F;
+ value->ul >>= 4;
+ }
+ else
+ {
unsigned char i;
for( i = 32; i != 0; i-- )
}
}
}
+}
#else
static void calculate_digit( unsigned char radix )
{
+ if (radix == 8)
+ {
+ value.byte[4] = value.ul & 0x07;
+ value.ul >>= 3;
+ }
+ else if (radix == 16)
+ {
+ value.byte[4] = value.ul & 0x0F;
+ value.ul >>= 4;
+ }
+ else
+ {
unsigned char i;
for( i = 32; i != 0; i-- )
}
}
}
+}
#endif
#if USE_FLOATS
if (char_argument)
{
value.l = va_arg(ap,char);
+ if (!signed_argument)
+ {
+ value.l &= 0xFF;
+ }
}
else if (long_argument)
{
else // must be int
{
value.l = va_arg(ap,int);
+ if (!signed_argument)
+ {
+ value.l &= 0xFFFF;
+ }
}
if ( signed_argument )
sprintf( s, "%ld", 2147483647L );
ASSERT( 0 == strcmp( s, "2147483647" ) );
+ //and from bug 1073386
+ sprintf( s, "%04X", 0x8765u );
+ ASSERT( 0 == strcmp( s, "8765" ) );
+
ASSERT( s[12]==0x12 );
}