X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftv%2Ftv.h;h=8ed8a5490db577e0b03207b57c7b289fbf715dce;hb=2d09549421b49587d4680a94dab277646e9fef44;hp=977896777874334e7caa5791a50cf2a357240319;hpb=1af86cc6ff073d75851d6a56b8115ec62a75fd8f;p=libfirm diff --git a/ir/tv/tv.h b/ir/tv/tv.h index 977896777..8ed8a5490 100644 --- a/ir/tv/tv.h +++ b/ir/tv/tv.h @@ -21,7 +21,7 @@ #define _TV_H_ # include "irmode.h" -# include "entity.h" +/* # include "entity.h" */ # include "irnode.h" /* for pnc_number enum */ @@ -151,15 +151,17 @@ tarval *new_tarval_from_str(const char *str, size_t len, ir_mode *mode); */ tarval *new_tarval_from_long(long l, ir_mode *mode); -/** +/** Return value as long if possible. + * * This returns a long int with the value represented value, or * gibberish, depending on the size of long int and the size of the * stored value. It works for e.g. 1 as mode_Ls, but might not work for * get_mode_max(mode_Ls). * This will overflow silently, so use only if you know what * you are doing! (better check with tarval_is_long()...) + * Works only for int modes, even not for character modes! */ -long tarval_to_long(tarval *tv); +long get_tarval_long(tarval *tv); /** * This validates if tarval_to_long() will return a satisfying @@ -204,7 +206,7 @@ tarval *new_tarval_from_double(long double d, ir_mode *mode); * This will overflow silently, so use only if you know what * you are doing! (better check with tarval_is_long...) */ -long double tarval_to_double(tarval *tv); +long double get_tarval_double(tarval *tv); /** * This validates if tarval_to_double() will return a satisfying @@ -213,24 +215,6 @@ long double tarval_to_double(tarval *tv); */ int tarval_is_double(tarval *tv); -/** - * Construct a tarval that represents the address of the entity. - * - * The address must be constant, the entity must have as owner the global type. - */ -tarval *new_tarval_from_entity (entity *ent, ir_mode *mode); - -/** - * Returns the associated entity of a tarval. Asserts if tarval does not - * contain an entity. - */ -#define get_tarval_entity tarval_to_entity -entity *tarval_to_entity(tarval *tv); - -/** - * Returns non-zero if a the given tarval represents an entity. - */ -int tarval_is_entity(tarval *tv); /** ********** Access routines for tarval fields ********** **/ @@ -334,6 +318,22 @@ tarval *get_tarval_inf(ir_mode *mode); /* ******************** Arithmethic operations on tarvals ******************** */ +typedef enum _tarval_int_overflow_mode_t { + TV_OVERFLOW_BAD, /**< tarval module will return tarval_bad if a overflow occurs */ + TV_OVERFLOW_WRAP, /**< tarval module will overflow will be ignored, wrap around occurs */ + TV_OVERFLOW_SATURATE /**< tarval module will saturate the overflow */ +} tarval_int_overflow_mode_t; + +/** + * Sets the overflow mode for integer operations. + */ +void tarval_set_integer_overflow_mode(tarval_int_overflow_mode_t ov_mode); + +/** + * Get the overflow mode for integer operations. + */ +tarval_int_overflow_mode_t tarval_get_integer_overflow_mode(void); + /** * Compares two tarvals * @@ -452,6 +452,9 @@ tarval *tarval_shrs(tarval *a, tarval *b); /** Rotation. */ tarval *tarval_rot(tarval *a, tarval *b); +/** Carry flag of the last operation */ +int tarval_carry(void); + /* *********** Output of tarvals *********** */ /** @@ -494,7 +497,7 @@ typedef struct tarval_mode_info { * * @return zero on success. */ -int tarval_set_mode_output_option(ir_mode *mode, const tarval_mode_info *modeinfo); +int set_tarval_mode_output_option(ir_mode *mode, const tarval_mode_info *modeinfo); /** * Returns the output options of one mode. @@ -505,7 +508,7 @@ int tarval_set_mode_output_option(ir_mode *mode, const tarval_mode_info *modeinf * * @return the output option */ -const tarval_mode_info *tarval_get_mode_output_option(ir_mode *mode); +const tarval_mode_info *get_tarval_mode_output_option(ir_mode *mode); /** * Returns Bit representation of a tarval value, as string of '0' and '1' @@ -530,7 +533,7 @@ const tarval_mode_info *tarval_get_mode_output_option(ir_mode *mode); * irmode.h for the definition of the ir_mode struct * the size member of aforementioned struct */ -char *tarval_bitpattern(tarval *tv); +char *get_tarval_bitpattern(tarval *tv); /** * Returns the bitpattern of the bytes_ofs byte. @@ -557,7 +560,7 @@ char *tarval_bitpattern(tarval *tv); * @note * The result of this funcion is undefined if the mode is neither integer nor float. */ -unsigned char tarval_sub_bits(tarval *tv, unsigned byte_ofs); +unsigned char get_tarval_sub_bits(tarval *tv, unsigned byte_ofs); /** * Return values of tarval classify @@ -566,7 +569,7 @@ typedef enum _tarval_classification_t { TV_CLASSIFY_NULL = 0, /**< the tarval represents the additive neutral element */ TV_CLASSIFY_ONE = +1, /**< the tarval represents the multiplicative neutral element */ TV_CLASSIFY_ALL_ONE = -1, /**< the tarval represents the bitwise-and neutral element */ - TV_CLASSIFY_OTHER = 2, /*<< all other tarvals */ + TV_CLASSIFY_OTHER = 2 /**< all other tarvals */ } tarval_classification_t; /** @@ -578,21 +581,9 @@ typedef enum _tarval_classification_t { * - TV_CLASSIFY_ALL_ONE for bitwise-and neutral * - TV_CLASSIFY_OTHER else */ -tarval_classification_t tarval_classify(tarval *tv); +tarval_classification_t classify_tarval(tarval *tv); -/** - * Initialization of the tarval module. - * - * Call before init_mode(). - */ -void init_tarval_1(void); -/** - * Initialization of the tarval module. - * - * Call after init_mode(). - */ -void init_tarval_2(void); /** * Output of tarvals to a buffer.