added firm_ycomp header include
[libfirm] / ir / tv / tv.h
index 64313a7..e4224e9 100644 (file)
@@ -161,7 +161,7 @@ tarval *new_tarval_from_long(long l, ir_mode *mode);
 long get_tarval_long(tarval *tv);
 
 /**
- * This validates if tarval_to_long() will return a satisfying
+ * This validates if get_tarval_long() will return a satisfying
  * result. I.e. if tv is an int_number and between min, max
  * of long int (signed!)
  */
@@ -239,7 +239,7 @@ int tarval_is_double(tarval *tv);
  */
 
 /** Returns the mode of the tarval. */
-ir_mode *get_tarval_mode (tarval *tv);
+ir_mode *get_tarval_mode (const tarval *tv);
 
 /** Returns the contents of the 'link' field of the tarval */
 /* void *get_tarval_link (tarval*); */
@@ -288,16 +288,11 @@ extern tarval *tarval_b_true;
 /** Returns the mode_b tarval 'true'. */
 tarval *get_tarval_b_true(void);
 
-/** The 'void' pointer tarval. */
-extern tarval *tarval_P_void;
-/** Returns the 'void' pointer tarval. */
-tarval *get_tarval_P_void(void);
-
 /* These functions calculate and return a tarval representing the requested
  * value.
  * The functions get_mode_{Max,Min,...} return tarvals retrieved from these
  * functions, but these are stored on initialization of the irmode module and
- * therefore the irmode functions should be prefered to the functions below. */
+ * therefore the irmode functions should be preferred to the functions below. */
 
 /** Returns the maximum value of a given mode. */
 tarval *get_tarval_max(ir_mode *mode);
@@ -305,12 +300,17 @@ tarval *get_tarval_max(ir_mode *mode);
 /** Returns the minimum value of a given mode. */
 tarval *get_tarval_min(ir_mode *mode);
 
-/** Returns the 0 value (additive neutral) of a given mode. */
+/** Returns the 0 value (additive neutral) of a given mode.
+    For reference modes, the NULL value is returned (old tarval_P_void) */
 tarval *get_tarval_null(ir_mode *mode);
 
 /** Returns the 1 value (multiplicative neutral) of a given mode. */
 tarval *get_tarval_one(ir_mode *mode);
 
+/** Returns the -1 value (multiplicative neutral) of a given mode.
+ *  Returns tarval bad for unsigned modes */
+tarval *get_tarval_minus_one(ir_mode *mode);
+
 /** Return quite nan for float_number modes. */
 tarval *get_tarval_nan(ir_mode *mode);
 
@@ -342,8 +342,8 @@ tarval_int_overflow_mode_t tarval_get_integer_overflow_mode(void);
  * Compares two tarvals
  *
  * Compare a with b and return a pn_Cmp describing the relation
- * between a and b.  This is either Uo, Lt, Eq, Gt, or False if a or b
- * are symbolic pointers which can not be compared at all.
+ * between a and b.  This is either pn_Cmp_Uo, pn_Cmp_Lt, pn_Cmp_Eq, pn_Cmp_Gt,
+ * or pn_Cmp_False if a or b are symbolic pointers which can not be compared at all.
  *
  * @param a   A tarval to be compared
  * @param b   A tarval to be compared
@@ -362,7 +362,7 @@ pn_Cmp tarval_cmp(tarval *a, tarval *b);
 /**
  * Converts a tarval to another mode.
  *
- * Convert tarval 'src' to mode 'mode', this will suceed if and only if mode
+ * Convert tarval 'src' to mode 'mode', this will succeed if and only if mode
  * 'mode' is wider than the mode of src, as defined in the firm documentation
  * and as returned by the function mode_is_smaller defined in irmode.h.
  *
@@ -381,7 +381,7 @@ pn_Cmp tarval_cmp(tarval *a, tarval *b);
  *    FIRM documentation for conversion rules
  *    mode_is_smaller defined in irmode.h
  */
-tarval *tarval_convert_to(tarval *src, ir_mode *m);
+tarval *tarval_convert_to(tarval *src, ir_mode *mode);
 
 /*
  * These function implement basic computations representable as opcodes
@@ -392,12 +392,12 @@ tarval *tarval_convert_to(tarval *src, ir_mode *m);
  *    traval_abs:
  *      a - the tarval to operate on
  *
- *    all oters:
+ *    all others:
  *      a - the first operand tarval
  *      b - the second operand tarval
  *
  * RESULT
- *    If neccessary a new tarval is constructed for the resulting value,
+ *    If necessary a new tarval is constructed for the resulting value,
  *   or the one already carrying the computation result is retrieved and
  *   returned as result.
  *
@@ -467,16 +467,16 @@ int tarval_carry(void);
  * Some modes allow more that one representation, for instance integers
  * can be represented hex or decimal. Of course it would be enough to have
  * one and let every backend convert it into the 'right' one.
- * However, we can do this in the tarval much simplier...
+ * However, we can do this in the tarval much simpler...
  */
 typedef enum {
-  TVO_NATIVE,           /**< the default output mode, depends on the mode */
+  TVO_NATIVE,       /**< the default output mode, depends on the mode */
   TVO_HEX,          /**< use hex representation, always possible */
-  TVO_DECIMAL,          /**< use decimal representation */
-  TVO_OCTAL,            /**< use octal representation */
-  TVO_BINARY,           /**< use binary representation */
-  TVO_FLOAT,            /**< use floating point representation (i.e 1.342e-2)*/
-  TVO_HEXFLOAT                  /**< use hexadecimal floating point representation (i.e 0x1.ea32p-12)*/
+  TVO_DECIMAL,      /**< use decimal representation */
+  TVO_OCTAL,        /**< use octal representation */
+  TVO_BINARY,       /**< use binary representation */
+  TVO_FLOAT,        /**< use floating point representation (i.e 1.342e-2)*/
+  TVO_HEXFLOAT      /**< use hexadecimal floating point representation (i.e 0x1.ea32p-12)*/
 } tv_output_mode;
 
 /**
@@ -484,17 +484,17 @@ typedef enum {
  * of a tarval of a mode.
  */
 typedef struct tarval_mode_info {
-    tv_output_mode mode_output;         /**< if != TVO_NATIVE select a special mode */
-    const char *mode_prefix;        /**< if set, this prefix will be printed
-                         before a value of this mode */
-    const char *mode_suffix;        /**< if set, this suffix will be printed
-                         after a value of this mode */
+  tv_output_mode mode_output;  /**< if != TVO_NATIVE select a special mode */
+  const char *mode_prefix;     /**< if set, this prefix will be printed
+                                    before a value of this mode */
+  const char *mode_suffix;     /**< if set, this suffix will be printed
+                                    after a value of this mode */
 } tarval_mode_info;
 
 /**
  * Specify the output options of one mode.
  *
- * This functions stores the modinfo, so DO NOT DESTROY it.
+ * This functions stores the modinfo, so DO NOT DESTROY it.
  *
  * @param mode      a ir_mode that should be associated
  * @param modeinfo  the output format info
@@ -506,7 +506,7 @@ int  set_tarval_mode_output_option(ir_mode *mode, const tarval_mode_info *modein
 /**
  * Returns the output options of one mode.
  *
- * This functions returns the modinfo of a given mode.
+ * This functions returns the modinfo of a given mode.
  *
  * @param mode      a ir_mode that should be associated
  *
@@ -530,7 +530,7 @@ const tarval_mode_info *get_tarval_mode_output_option(ir_mode *mode);
  * @note
  *   The string is allocated using malloc() and is free()ed on the next call
  *   of this function.
- *   The string consists of the ascii characters '0' and '1' and is
+ *   The string consists of the ASCII characters '0' and '1' and is
  *   null terminated
  *
  * @sa
@@ -555,14 +555,14 @@ char *get_tarval_bitpattern(tarval *tv);
  * Because this is the bit representation of the target machine, only the following
  * operations are legal on the result:
  *
- * - concatenation (endian dependance MUST be handled by the CALLER)
+ * - concatenation (endian dependence MUST be handled by the CALLER)
  * - bitwise logical operations to select/mask bits
  *
  * @param tv        the tarval
  * @param byte_ofs  the byte offset
  *
  * @note
- *   The result of this funcion is undefined if the mode is neither integer nor float.
+ *   The result of this function is undefined if the mode is neither integer nor float.
  */
 unsigned char get_tarval_sub_bits(tarval *tv, unsigned byte_ofs);
 
@@ -578,15 +578,23 @@ typedef enum _tarval_classification_t {
 
 /**
  * Identifying tarvals values for algebraic simplifications.
- * @param tv
+ *
+ * @param tv        the tarval
+ *
  * @return
- *   - TV_CLASSIFY_NULL    for additive neutral,
+ *   - TV_CLASSIFY_NULL    for additive neutral or the NULL tarval for reference modes,
  *   - TV_CLASSIFY_ONE     for multiplicative neutral,
  *   - TV_CLASSIFY_ALL_ONE for bitwise-and neutral
  *   - TV_CLASSIFY_OTHER   else
  */
 tarval_classification_t classify_tarval(tarval *tv);
 
+/**
+ * Returns non-zero if a given (integer) tarval has only one single bit
+ * set.
+ */
+int is_single_bit_tarval(tarval *tv);
+
 /**
  * Output of tarvals to a buffer.
  */