X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftv%2Fstrcalc.c;h=6a6e61231bc3e69b54a120c980697a6b8b3cfb37;hb=26ebeab8deeff030a97924b66ea48373e893deca;hp=2562ceab834dc11e674bf0e6066dbc05234f7255;hpb=37e6a85a4f7157863a369ee443cef00f2f2b1e43;p=libfirm diff --git a/ir/tv/strcalc.c b/ir/tv/strcalc.c index 2562ceab8..6a6e61231 100644 --- a/ir/tv/strcalc.c +++ b/ir/tv/strcalc.c @@ -22,7 +22,6 @@ * @brief Provides basic mathematical operations on values represented as strings. * @date 2003 * @author Mathias Heil - * @version $Id$ */ #include "config.h" @@ -878,7 +877,7 @@ int sc_val_from_str(char sign, unsigned base, const char *str, /* get ready for the next letter */ str++; len--; - } /* while (len > 0 ) */ + } if (sign < 0) do_negate((const char*) buffer, (char*) buffer); @@ -1567,6 +1566,20 @@ void sc_shr(const void *val1, const void *val2, int bitsize, int sign, void *buf sc_shrI(val1, shift_cnt, bitsize, sign, buffer); } +void sc_shrsI(const void *val1, long shift_cnt, int bitsize, int sign, void *buffer) +{ + carry_flag = 0; + + DEBUGPRINTF_COMPUTATION(("%s >>s %ld ", sc_print_hex(value1), shift_cnt)); + do_shr((const char*) val1, calc_buffer, shift_cnt, bitsize, sign, 1); + + DEBUGPRINTF_COMPUTATION(("-> %s\n", sc_print_hex(calc_buffer))); + + if ((buffer != NULL) && (buffer != calc_buffer)) { + memmove(buffer, calc_buffer, calc_buffer_size); + } +} + void sc_shrs(const void *val1, const void *val2, int bitsize, int sign, void *buffer) { long offset = sc_val_to_long(val2);