X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftv%2Fstrcalc.c;h=b012b7479694ae7b1460d1bc604b68212786d884;hb=2d09549421b49587d4680a94dab277646e9fef44;hp=fd3a3b65cb4b6efae229175c8f5d2c1a74460e8d;hpb=8dc4091a707bf66377da637d17cb20080847bf1c;p=libfirm diff --git a/ir/tv/strcalc.c b/ir/tv/strcalc.c index fd3a3b65c..b012b7479 100644 --- a/ir/tv/strcalc.c +++ b/ir/tv/strcalc.c @@ -520,6 +520,7 @@ static void _add(const char *val1, const char *val2, char *buffer) buffer[counter] = add2[0]; carry = add_table[_val(add1[1])][_val(add2[1])][0]; } + carry_flag = carry != SC_0; } static void _mul(const char *val1, const char *val2, char *buffer) @@ -1509,7 +1510,7 @@ void init_strcalc(int precision) if (precision <= 0) precision = SC_DEFAULT_PRECISION; /* round up to multiple of 4 */ - if (precision & 0x3) precision += 4 - (precision&0x3); + precision = (precision + 3) & ~3; BIT_PATTERN_SIZE = (precision); CALC_BUFFER_SIZE = (precision / 2); @@ -1518,8 +1519,7 @@ void init_strcalc(int precision) calc_buffer = malloc(CALC_BUFFER_SIZE+1 * sizeof(char)); output_buffer = malloc(BIT_PATTERN_SIZE+1 * sizeof(char)); - if (calc_buffer == NULL || output_buffer == NULL) - { + if (calc_buffer == NULL || output_buffer == NULL) { assert(0 && "malloc failed"); exit(-1); } @@ -1533,6 +1533,7 @@ void finish_strcalc() { free(calc_buffer); calc_buffer = NULL; free(output_buffer); output_buffer = NULL; } + int sc_get_precision(void) { return BIT_PATTERN_SIZE;