X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftv%2Fstrcalc.h;h=9e58958377d9a00e14bc64d8f34873573a09db23;hb=45ecc187cee7107c83c1f9618a1e1e586df73644;hp=dedcfbf8cc112aa5ceb558f93527419e98419b9b;hpb=8cc52245e109070a5e9094803f74cc6432a44b1a;p=libfirm diff --git a/ir/tv/strcalc.h b/ir/tv/strcalc.h index dedcfbf8c..9e5895837 100644 --- a/ir/tv/strcalc.h +++ b/ir/tv/strcalc.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -137,25 +137,46 @@ void sc_div(const void *value1, const void *value2, void *buffer); */ void sc_mod(const void *value1, const void *value2, void *buffer); +/** + * div_buffer = value1 / value2 + * mod_buffer = value1 % value2 + */ +void sc_divmod(const void *value1, const void *value2, void *div_buffer, void *mod_buffer); + +/** + * buffer = value1 << offset + */ +void sc_shlI(const void *val1, long shift_cnt, int bitsize, int sign, void *buffer); + /** * buffer = value1 << value2 */ -void sc_shl(const void *value1, const void *value2, int radius, int sign, void *buffer); +void sc_shl(const void *value1, const void *value2, int bitsize, int sign, void *buffer); + +/** + * buffer = value1 >>u offset + */ +void sc_shrI(const void *val1, long shift_cnt, int bitsize, int sign, void *buffer); /** * buffer = value1 >>u value2 */ -void sc_shr(const void *value1, const void *value2, int radius, int sign, void *buffer); +void sc_shr(const void *value1, const void *value2, int bitsize, int sign, void *buffer); /** * buffer = value1 >>s value2 */ -void sc_shrs(const void *value1, const void *value2, int radius, int sign, void *buffer); +void sc_shrs(const void *value1, const void *value2, int bitsize, int sign, void *buffer); /** - * buffer = value1 <<>> value2 + * buffer = value1 <> value2 */ -void sc_rot(const void *value1, const void *value2, int radius, int sign, void *buffer); +void sc_rotl(const void *value1, const void *value2, int bitsize, int sign, void *buffer); + +/** + * buffer = 0 + */ +void sc_zero(void *buffer); /* * function declarations @@ -163,7 +184,7 @@ void sc_rot(const void *value1, const void *value2, int radius, int sign, void * const void *sc_get_buffer(void); int sc_get_buffer_length(void); -void sign_extend(char *calc_buffer, ir_mode *mode); +void sign_extend(void *buffer, ir_mode *mode); /** create an value form a string representation */ void sc_val_from_str(const char *str, unsigned int len, void *buffer, ir_mode *mode); @@ -179,6 +200,9 @@ long sc_val_to_long(const void *val); void sc_min_from_bits(unsigned int num_bits, unsigned int sign, void *buffer); void sc_max_from_bits(unsigned int num_bits, unsigned int sign, void *buffer); +/** truncates a value to lowest @p num_bits bits */ +void sc_truncate(unsigned num_bits, void *buffer); + /** * Compares val1 and val2 */ @@ -189,6 +213,14 @@ int sc_get_lowest_set_bit(const void *value); int sc_is_zero(const void *value); int sc_is_negative(const void *value); int sc_had_carry(void); + +/** + * Return the bits of a tarval at a given byte-offset. + * + * @param value the value + * @param len number of valid bits in the value + * @param byte_ofs the byte offset + */ unsigned char sc_sub_bits(const void *value, int len, unsigned byte_ofs); /**