diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /support/regression/tests/bug3475656.c | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'support/regression/tests/bug3475656.c')
| -rw-r--r-- | support/regression/tests/bug3475656.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/support/regression/tests/bug3475656.c b/support/regression/tests/bug3475656.c new file mode 100644 index 0000000..23ee19a --- /dev/null +++ b/support/regression/tests/bug3475656.c @@ -0,0 +1,73 @@ +/* + bug3475656.c + + Digits in output were reversed (e.g. 192 was written as "291"). +*/ + +#include <testfwk.h> + +#ifdef __SDCC +#pragma disable_warning 85 +#endif + +#define UCHAR unsigned char +#define USHORT unsigned short +#define PCHAR unsigned char * + +UCHAR mod_16x8(USHORT s16, UCHAR i8) +{ + return(s16 % i8); +} + +USHORT div_16x8(USHORT s16, UCHAR i8) +{ + return(s16 / i8); +} + +#if 1 +void itoa(USHORT sVal, PCHAR pBuf, UCHAR iRadix) +{ + PCHAR p; // pointer to traverse string + PCHAR pFirstDigit; // pointer to first digit + UCHAR iTmp; // temp UCHAR + + p = pBuf; + pFirstDigit = p; // save pointer to first digit + + do + { + iTmp = mod_16x8(sVal, iRadix); + sVal = div_16x8(sVal, iRadix); + + // convert to ascii and store + *p++ = (iTmp > 9) ? iTmp - 10 + 'A' : iTmp + '0'; // a letter or a digit + } while (sVal > 0); + + // We now have the digit of the number in the buffer, but in reverse order. Thus we reverse them now. + + *p-- = '\0'; // terminate string; p points to last digit + + do + { + iTmp = *p; + *p = *pFirstDigit; + *pFirstDigit = iTmp; // swap *p and *pFirstDigit + --p; + ++pFirstDigit; // advance to next two digits + } while (pFirstDigit < p); // repeat until halfway +} +#endif + +void testBug(void) +{ + unsigned char c[8]; + unsigned short i; + + i = 192; +#if 1 + itoa(i, c, 10); + ASSERT(c[0] == '1'); + ASSERT(c[1] == '9'); + ASSERT(c[2] == '2'); +#endif +} |
