X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftv%2Fstrcalc.c;h=4e4472e4ec241f1c3ac5bbdcec61bd437c12957d;hb=afbbc0b1ccd684c4c24bfd43d0f994123245f39f;hp=43b3ed3892fcf4022ee8608fa6d055658eeec661;hpb=f2d236f4fac425604e8552790432332ff216c065;p=libfirm diff --git a/ir/tv/strcalc.c b/ir/tv/strcalc.c index 43b3ed389..4e4472e4e 100644 --- a/ir/tv/strcalc.c +++ b/ir/tv/strcalc.c @@ -41,6 +41,7 @@ #include "strcalc.h" #include "xmalloc.h" +#include "error.h" /* * local definitions and macros @@ -1324,7 +1325,7 @@ const char *sc_print(const void *value, unsigned bits, enum base_t base, int sig static const char small_digits[] = "0123456789abcdef"; char *base_val, *div1_res, *div2_res, *rem_res; - int counter, nibbles, i, sign; + int counter, nibbles, i, sign, mask; char x; const char *val = (const char *)value; @@ -1364,7 +1365,8 @@ const char *sc_print(const void *value, unsigned bits, enum base_t base, int sig /* last nibble must be masked */ if (bits & 3) { - x = and_table[_val(val[++counter])][bits & 3]; + mask = zex_digit[bits & 3]; + x = and_table[_val(val[counter++])][mask]; *(--pos) = digits[_val(x)]; } @@ -1390,7 +1392,8 @@ const char *sc_print(const void *value, unsigned bits, enum base_t base, int sig /* last nibble must be masked */ if (bits & 3) { - x = and_table[_val(val[++counter])][bits & 3]; + mask = zex_digit[bits & 3]; + x = and_table[_val(val[counter++])][mask]; pos -= 4; p = binary_table[_val(x)]; @@ -1429,9 +1432,9 @@ const char *sc_print(const void *value, unsigned bits, enum base_t base, int sig /* last nibble must be masked */ if (bits & 3) { + mask = zex_digit[bits & 3]; + div1_res[counter] = and_table[_val(p[counter])][mask]; ++counter; - - div1_res[counter] = and_table[_val(p[counter])][bits & 3]; } m = div1_res; @@ -1455,9 +1458,7 @@ const char *sc_print(const void *value, unsigned bits, enum base_t base, int sig break; default: - printf("%i\n", base); - assert(0); - return NULL; + panic("Unsupported base %d", base); } return pos; } @@ -1473,8 +1474,8 @@ void init_strcalc(int precision) { calc_buffer_size = (precision / 2); max_value_size = (precision / 4); - calc_buffer = xmalloc(calc_buffer_size+1 * sizeof(char)); - output_buffer = xmalloc(bit_pattern_size+1 * sizeof(char)); + calc_buffer = XMALLOCN(char, calc_buffer_size + 1); + output_buffer = XMALLOCN(char, bit_pattern_size + 1); DEBUGPRINTF(("init strcalc: \n\tPRECISION: %d\n\tCALC_BUFFER_SIZE = %d\n\tMAX_VALUE_SIZE = %d\n\tbuffer pointer: %p\n", precision, calc_buffer_size, max_value_size, calc_buffer)); }