fixed svn properties
[libfirm] / include / libfirm / ircons.h
index 2c2e71f..fad4db2 100644 (file)
  *    ir_node *new_Sub    (ir_node *op1, ir_node *op2, ir_mode *mode);
  *    ir_node *new_Minus  (ir_node *op,  ir_mode *mode);
  *    ir_node *new_Mul    (ir_node *op1, ir_node *op2, ir_mode *mode);
- *    ir_node *new_Quot   (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
- *    ir_node *new_DivMod (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
- *    ir_node *new_Div    (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
- *    ir_node *new_Mod    (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+ *    ir_node *new_Mulh   (ir_node *op1, ir_node *op2, ir_mode *mode);
+ *    ir_node *new_Quot   (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+ *    ir_node *new_DivMod (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+ *    ir_node *new_Div    (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+ *    ir_node *new_Mod    (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state;
  *    ir_node *new_Abs    (ir_node *op,                ir_mode *mode);
  *    ir_node *new_And    (ir_node *op1, ir_node *op2, ir_mode *mode);
  *    ir_node *new_Or     (ir_node *op1, ir_node *op2, ir_mode *mode);
  *
  *    Trivial.
  *
- *    ir_node *new_Quot (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode)
- *    -----------------------------------------------------------------------------
+ *    ir_node *new_Mulh (ir_node *op1, ir_node *op2, ir_mode *mode)
+ *    ------------------------------------------------------------
+ *
+ *    Returns the high order bits of a n*n=2n multiplication.
+ *
+ *    ir_node *new_Quot (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state)
+ *    -------------------------------------------------------------------------------------------------
  *
  *    Quot performs exact division of floating point numbers.  It's mode
  *    is Tuple, the mode of the result must match the Proj mode
  *      A tuple containing a memory and a execution for modeling exceptions
  *      and the result of the arithmetic operation.
  *
- *    ir_node *new_DivMod (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode)
- *    -------------------------------------------------------------------------------
+ *    ir_node *new_DivMod (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state)
+ *    ---------------------------------------------------------------------------------------------------
  *
  *    Performs Div and Mod on integer values.
  *
  *      A tuple containing a memory and a execution for modeling exceptions
  *      and the two result of the arithmetic operations.
  *
- *    ir_node *new_Div (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode)
- *    ----------------------------------------------------------------------------
+ *    ir_node *new_Div (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state)
+ *    ------------------------------------------------------------------------------------------------
  *
  *    Trivial.
  *
- *    ir_node *new_Mod (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode)
- *    ----------------------------------------------------------------------------
+ *    ir_node *new_Mod (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state)
+ *    ------------------------------------------------------------------------------------------------
  *
  *    Trivial.
  *
 #include "firm_common.h"
 #include "irnode.h"
 #include "irgraph.h"
-#include "dbginfo.h"
 
 /*-------------------------------------------------------------------------*/
 /* The raw interface                                                       */
@@ -1443,6 +1448,18 @@ ir_node *new_rd_Minus  (dbg_info *db, ir_graph *irg, ir_node *block,
 ir_node *new_rd_Mul    (dbg_info *db, ir_graph *irg, ir_node *block,
                ir_node *op1, ir_node *op2, ir_mode *mode);
 
+/** Constructor for a Mulh node.
+ *
+ * @param   *db    A pointer for debug information.
+ * @param   *irg   The ir graph the node  belongs to.
+ * @param   *block The ir block the node belongs to.
+ * @param   *op1   The first operand.
+ * @param   *op2   The second operand.
+ * @param   *mode  The mode of the operands and the result.
+ */
+ir_node *new_rd_Mulh   (dbg_info *db, ir_graph *irg, ir_node *block,
+               ir_node *op1, ir_node *op2, ir_mode *mode);
+
 /** Constructor for a Quot node.
  *
  * @param   *db    A pointer for debug information.
@@ -1452,9 +1469,10 @@ ir_node *new_rd_Mul    (dbg_info *db, ir_graph *irg, ir_node *block,
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
  */
 ir_node *new_rd_Quot   (dbg_info *db, ir_graph *irg, ir_node *block,
-               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a DivMod node.
  *
@@ -1465,9 +1483,10 @@ ir_node *new_rd_Quot   (dbg_info *db, ir_graph *irg, ir_node *block,
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the results.
+ * @param   state  The pinned state.
  */
 ir_node *new_rd_DivMod (dbg_info *db, ir_graph *irg, ir_node *block,
-               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Div node.
  *
@@ -1478,9 +1497,10 @@ ir_node *new_rd_DivMod (dbg_info *db, ir_graph *irg, ir_node *block,
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
  */
 ir_node *new_rd_Div    (dbg_info *db, ir_graph *irg, ir_node *block,
-               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Mod node.
  *
@@ -1491,9 +1511,10 @@ ir_node *new_rd_Div    (dbg_info *db, ir_graph *irg, ir_node *block,
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
  */
 ir_node *new_rd_Mod    (dbg_info *db, ir_graph *irg, ir_node *block,
-                       ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+                       ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Abs node.
  *
@@ -2252,6 +2273,7 @@ ir_node *new_r_Sub    (ir_graph *irg, ir_node *block,
  */
 ir_node *new_r_Minus  (ir_graph *irg, ir_node *block,
                ir_node *op,  ir_mode *mode);
+
 /** Constructor for a Mul node.
  *
  * @param   *irg   The ir graph the node  belongs to.
@@ -2263,6 +2285,17 @@ ir_node *new_r_Minus  (ir_graph *irg, ir_node *block,
 ir_node *new_r_Mul    (ir_graph *irg, ir_node *block,
                ir_node *op1, ir_node *op2, ir_mode *mode);
 
+/** Constructor for a Mulh node.
+ *
+ * @param   *irg   The ir graph the node  belongs to.
+ * @param   *block The ir block the node belongs to.
+ * @param   *op1   The first operand.
+ * @param   *op2   The second operand.
+ * @param   *mode  The mode of the operands and the result.
+ */
+ir_node *new_r_Mulh   (ir_graph *irg, ir_node *block,
+               ir_node *op1, ir_node *op2, ir_mode *mode);
+
 /** Constructor for a Quot node.
  *
  * @param   *irg   The ir graph the node  belongs to.
@@ -2271,9 +2304,10 @@ ir_node *new_r_Mul    (ir_graph *irg, ir_node *block,
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
  */
 ir_node *new_r_Quot   (ir_graph *irg, ir_node *block,
-               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a DivMod node.
  *
@@ -2283,9 +2317,10 @@ ir_node *new_r_Quot   (ir_graph *irg, ir_node *block,
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the results.
+ * @param   state  The pinned state.
  */
 ir_node *new_r_DivMod (ir_graph *irg, ir_node *block,
-               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Div node.
  *
@@ -2295,9 +2330,10 @@ ir_node *new_r_DivMod (ir_graph *irg, ir_node *block,
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
  */
 ir_node *new_r_Div    (ir_graph *irg, ir_node *block,
-               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Mod node.
  *
@@ -2307,9 +2343,10 @@ ir_node *new_r_Div    (ir_graph *irg, ir_node *block,
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
  */
 ir_node *new_r_Mod    (ir_graph *irg, ir_node *block,
-               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+               ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Abs node.
  *
@@ -3062,6 +3099,17 @@ ir_node *new_d_Minus  (dbg_info *db, ir_node *op,  ir_mode *mode);
  */
 ir_node *new_d_Mul    (dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
 
+/** Constructor for a Mulh node.
+ *
+ * Adds the node to the block in current_ir_block.
+ *
+ * @param   *db    A pointer for debug information.
+ * @param   *op1   The first operand.
+ * @param   *op2   The second operand.
+ * @param   *mode  The mode of the operands and the result.
+ */
+ir_node *new_d_Mulh   (dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
+
 /** Constructor for a Quot node.
  *
  * Adds the node to the block in current_ir_block.
@@ -3071,8 +3119,9 @@ ir_node *new_d_Mul    (dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
  */
-ir_node *new_d_Quot   (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+ir_node *new_d_Quot   (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a DivMod node.
  *
@@ -3083,8 +3132,9 @@ ir_node *new_d_Quot   (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2,
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the results.
+ * @param   state  The pinned state.
  */
-ir_node *new_d_DivMod (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+ir_node *new_d_DivMod (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Div node.
  *
@@ -3095,8 +3145,9 @@ ir_node *new_d_DivMod (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2,
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
  */
-ir_node *new_d_Div    (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+ir_node *new_d_Div    (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Mod node.
  *
@@ -3107,8 +3158,9 @@ ir_node *new_d_Div    (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2,
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
  */
-ir_node *new_d_Mod    (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+ir_node *new_d_Mod    (dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Abs node.
  *
@@ -3872,6 +3924,15 @@ ir_node *new_Minus  (ir_node *op,  ir_mode *mode);
  */
 ir_node *new_Mul    (ir_node *op1, ir_node *op2, ir_mode *mode);
 
+/**
+ * Constructor for a Mulh node. Adds the node to the block in current_ir_block.
+ *
+ * @param   *op1   The first operand.
+ * @param   *op2   The second operand.
+ * @param   *mode  The mode of the operands and the result.
+ */
+ir_node *new_Mulh   (ir_node *op1, ir_node *op2, ir_mode *mode);
+
 /** Constructor for a Quot node.
  *
  * Adds the node to the block in current_ir_block.
@@ -3880,8 +3941,9 @@ ir_node *new_Mul    (ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
  */
-ir_node *new_Quot   (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+ir_node *new_Quot   (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a DivMod node.
  *
@@ -3891,8 +3953,9 @@ ir_node *new_Quot   (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the results.
+ * @param   state  The pinned state.
  */
-ir_node *new_DivMod (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+ir_node *new_DivMod (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Div node.
  *
@@ -3902,8 +3965,9 @@ ir_node *new_DivMod (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
  */
-ir_node *new_Div    (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+ir_node *new_Div    (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Mod node.
  *
@@ -3913,8 +3977,9 @@ ir_node *new_Div    (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the result.
+ * @param   state  The pinned state.
  */
-ir_node *new_Mod    (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode);
+ir_node *new_Mod    (ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Abs node.
  *