Fixed Win32 DLL support.
[libfirm] / include / libfirm / ircons.h
index 2d59dc7..2f35b09 100644 (file)
 #define FIRM_IR_IRCONS_H
 
 #include "firm_types.h"
+#include "begin.h"
 
 /**
  * constrained flags for memory operations.
@@ -1160,7 +1161,7 @@ typedef enum ir_cons_flags {
  * @param in[]   An array of control predecessors.  The length of
  *               the array must be 'arity'.  The constructor copies this array.
  */
-ir_node *new_rd_Block(dbg_info *db, ir_graph *irg, int arity, ir_node *in[]);
+FIRM_API ir_node *new_rd_Block(dbg_info *db, ir_graph *irg, int arity, ir_node *in[]);
 
 /** Constructor for a Start node.
  *
@@ -1168,7 +1169,7 @@ ir_node *new_rd_Block(dbg_info *db, ir_graph *irg, int arity, ir_node *in[]);
  * @param *irg   The IR graph the node belongs to.
  * @param *block The IR block the node belongs to.
  */
-ir_node *new_rd_Start(dbg_info *db, ir_graph *irg, ir_node *block);
+FIRM_API ir_node *new_rd_Start(dbg_info *db, ir_graph *irg, ir_node *block);
 
 /** Constructor for a End node.
  *
@@ -1176,7 +1177,7 @@ ir_node *new_rd_Start(dbg_info *db, ir_graph *irg, ir_node *block);
  * @param *irg   The IR graph the node  belongs to.
  * @param *block The IR block the node belongs to.
  */
-ir_node *new_rd_End(dbg_info *db, ir_graph *irg, ir_node *block);
+FIRM_API ir_node *new_rd_End(dbg_info *db, ir_graph *irg, ir_node *block);
 
 /** Constructor for a Jmp node.
  *
@@ -1185,7 +1186,7 @@ ir_node *new_rd_End(dbg_info *db, ir_graph *irg, ir_node *block);
  * @param *db     A pointer for debug information.
  * @param *block  The IR block the node belongs to.
  */
-ir_node *new_rd_Jmp(dbg_info *db, ir_node *block);
+FIRM_API ir_node *new_rd_Jmp(dbg_info *db, ir_node *block);
 
 /** Constructor for an IJmp node.
  *
@@ -1196,7 +1197,7 @@ ir_node *new_rd_Jmp(dbg_info *db, ir_node *block);
  * @param *block  The IR block the node belongs to.
  * @param *tgt    The IR node representing the target address.
  */
-ir_node *new_rd_IJmp(dbg_info *db, ir_node *block, ir_node *tgt);
+FIRM_API ir_node *new_rd_IJmp(dbg_info *db, ir_node *block, ir_node *tgt);
 
 /** Constructor for a Break node.
  *
@@ -1208,7 +1209,7 @@ ir_node *new_rd_IJmp(dbg_info *db, ir_node *block, ir_node *tgt);
  * @param *db     A pointer for debug information.
  * @param *block  The block the node belong to.
  */
-ir_node *new_rd_Break(dbg_info *db, ir_node *block);
+FIRM_API ir_node *new_rd_Break(dbg_info *db, ir_node *block);
 
 /** Constructor for a Cond node.
  *
@@ -1223,7 +1224,7 @@ ir_node *new_rd_Break(dbg_info *db, ir_node *block);
  * @param *block The IR block the node belongs to.
  * @param *c     The conditions parameter. Can be of mode b or I_u.
  */
-ir_node *new_rd_Cond(dbg_info *db, ir_node *block, ir_node *c);
+FIRM_API ir_node *new_rd_Cond(dbg_info *db, ir_node *block, ir_node *c);
 
 /** Constructor for a Return node.
  *
@@ -1236,8 +1237,8 @@ ir_node *new_rd_Cond(dbg_info *db, ir_node *block, ir_node *c);
  * @param arity  Number of return values.
  * @param *in    Array of length arity with return values.  The constructor copies this array.
  */
-ir_node *new_rd_Return(dbg_info *db, ir_node *block,
-                       ir_node *store, int arity, ir_node *in[]);
+FIRM_API ir_node *new_rd_Return(dbg_info *db, ir_node *block,
+                                ir_node *store, int arity, ir_node *in[]);
 
 /** Constructor for a Const_type node.
  *
@@ -1252,8 +1253,8 @@ ir_node *new_rd_Return(dbg_info *db, ir_node *block,
  * @param *con   Points to an entry in the constant table.
  * @param *tp    The type of the constant.
  */
-ir_node *new_rd_Const_type(dbg_info *db, ir_graph *irg,
-                            tarval *con, ir_type *tp);
+FIRM_API ir_node *new_rd_Const_type(dbg_info *db, ir_graph *irg,
+                                    tarval *con, ir_type *tp);
 
 /** Constructor for a Const node.
  *
@@ -1268,9 +1269,10 @@ ir_node *new_rd_Const_type(dbg_info *db, ir_graph *irg,
  * @param *irg   The IR graph the node  belongs to.
  * @param *con   Points to an entry in the constant table.
  */
-ir_node *new_rd_Const(dbg_info *db, ir_graph *irg, tarval *con);
+FIRM_API ir_node *new_rd_Const(dbg_info *db, ir_graph *irg, tarval *con);
 
-/** Constructor for a Const node.
+/**
+ * Constructor for a Const node.
  *
  * Adds the node to the start block.
  *
@@ -1283,8 +1285,8 @@ ir_node *new_rd_Const(dbg_info *db, ir_graph *irg, tarval *con);
  * @param *mode  The mode of the operands and results.
  * @param value  A value from which the tarval is made.
  */
-ir_node *new_rd_Const_long(dbg_info *db, ir_graph *irg,
-                                  ir_mode *mode, long value);
+FIRM_API ir_node *new_rd_Const_long(dbg_info *db, ir_graph *irg,
+                                    ir_mode *mode, long value);
 
 /** Constructor for a SymConst_type node.
  *
@@ -1317,29 +1319,31 @@ ir_node *new_rd_Const_long(dbg_info *db, ir_graph *irg,
  * @param *db     A pointer for debug information.
  * @param *irg    The IR graph the node  belongs to.
  * @param mode    The mode for the SymConst.
- * @param value   A type, ident, entity or enum constant depending on the
+ * @param val     A type, ident, entity or enum constant depending on the
  *                SymConst kind.
  * @param kind    The kind of the symbolic constant, see the list above
  * @param tp      The source type of the constant.
  */
-ir_node *new_rd_SymConst_type(dbg_info *db, ir_graph *irg, ir_mode *mode,
-                              union symconst_symbol value, symconst_kind kind,
-                              ir_type *tp);
+FIRM_API ir_node *new_rd_SymConst_type(dbg_info *db, ir_graph *irg,
+                                       ir_mode *mode, union symconst_symbol val,
+                                       symconst_kind kind, ir_type *tp);
 
 /** Constructor for a SymConst node.
  *
  *  Same as new_rd_SymConst_type, except that it sets the type to type_unknown.
  */
-ir_node *new_rd_SymConst(dbg_info *db, ir_graph *irg, ir_mode *mode,
-                         union symconst_symbol value, symconst_kind kind);
+FIRM_API ir_node *new_rd_SymConst(dbg_info *db, ir_graph *irg, ir_mode *mode,
+                                  union symconst_symbol value,
+                                  symconst_kind kind);
 
 /** Constructor for a SymConst addr_ent node.
  *
  * Same as new_rd_SymConst_type, except that the constructor is tailored for
  * symconst_addr_ent.
  * Adds the SymConst to the start block of irg. */
-ir_node *new_rd_SymConst_addr_ent(dbg_info *db, ir_graph *irg, ir_mode *mode,
-                                  ir_entity *symbol, ir_type *tp);
+FIRM_API ir_node *new_rd_SymConst_addr_ent(dbg_info *db, ir_graph *irg,
+                                           ir_mode *mode, ir_entity *symbol,
+                                           ir_type *tp);
 
 /** Constructor for a SymConst ofs_ent node.
  *
@@ -1347,8 +1351,9 @@ ir_node *new_rd_SymConst_addr_ent(dbg_info *db, ir_graph *irg, ir_mode *mode,
  * symconst_ofs_ent.
  * Adds the SymConst to the start block of irg.
  */
-ir_node *new_rd_SymConst_ofs_ent(dbg_info *db, ir_graph *irg, ir_mode *mode,
-                                 ir_entity *symbol, ir_type *tp);
+FIRM_API ir_node *new_rd_SymConst_ofs_ent(dbg_info *db, ir_graph *irg,
+                                          ir_mode *mode, ir_entity *symbol,
+                                          ir_type *tp);
 
 /** Constructor for a SymConst type_tag node.
  *
@@ -1356,16 +1361,18 @@ ir_node *new_rd_SymConst_ofs_ent(dbg_info *db, ir_graph *irg, ir_mode *mode,
  * symconst_type_tag.
  * Adds the SymConst to the start block of irg.
  */
-ir_node *new_rd_SymConst_type_tag(dbg_info *db, ir_graph *irg, ir_mode *mode,
-                                  ir_type *symbol, ir_type *tp);
+FIRM_API ir_node *new_rd_SymConst_type_tag(dbg_info *db, ir_graph *irg,
+                                           ir_mode *mode, ir_type *symbol,
+                                           ir_type *tp);
 
 /** Constructor for a SymConst size node.
  *
  * Same as new_rd_SymConst_type, except that the constructor is tailored for
  * symconst_type_size.
  * Adds the SymConst to the start block of irg. */
-ir_node *new_rd_SymConst_size(dbg_info *db, ir_graph *irg, ir_mode *mode,
-                              ir_type *symbol, ir_type *tp);
+FIRM_API ir_node *new_rd_SymConst_size(dbg_info *db, ir_graph *irg,
+                                       ir_mode *mode, ir_type *symbol,
+                                       ir_type *tp);
 
 /** Constructor for a SymConst size node.
  *
@@ -1373,8 +1380,9 @@ ir_node *new_rd_SymConst_size(dbg_info *db, ir_graph *irg, ir_mode *mode,
  * symconst_type_align.
  * Adds the SymConst to the start block of irg.
  */
-ir_node *new_rd_SymConst_align(dbg_info *db, ir_graph *irg, ir_mode *mode,
-                               ir_type *symbol, ir_type *tp);
+FIRM_API ir_node *new_rd_SymConst_align(dbg_info *db, ir_graph *irg,
+                                        ir_mode *mode, ir_type *symbol,
+                                        ir_type *tp);
 
 /** Constructor for a simpleSel node.
  *
@@ -1390,8 +1398,8 @@ ir_node *new_rd_SymConst_align(dbg_info *db, ir_graph *irg, ir_mode *mode,
  *                     single attribute out.
  * @param   *ent       The entity to select.
  */
-ir_node *new_rd_simpleSel(dbg_info *db, ir_node *block,
-                          ir_node *store, ir_node *objptr, ir_entity *ent);
+FIRM_API ir_node *new_rd_simpleSel(dbg_info *db, ir_node *block, ir_node *store,
+                                   ir_node *objptr, ir_entity *ent);
 
 /** Constructor for a Sel node.
  *
@@ -1412,8 +1420,9 @@ ir_node *new_rd_simpleSel(dbg_info *db, ir_node *block,
  *                     element entity.  The constructor copies this array.
  * @param   *ent       The entity to select.
  */
-ir_node *new_rd_Sel(dbg_info *db, ir_node *block, ir_node *store,
-                    ir_node *objptr, int n_index, ir_node *index[], ir_entity *ent);
+FIRM_API ir_node *new_rd_Sel(dbg_info *db, ir_node *block, ir_node *store,
+                             ir_node *objptr, int n_index, ir_node *index[],
+                             ir_entity *ent);
 
 /** Constructor for a Call node.
  *
@@ -1427,8 +1436,9 @@ ir_node *new_rd_Sel(dbg_info *db, ir_node *block, ir_node *store,
  * @param   *in[]   An array with the procedure parameters. The constructor copies this array.
  * @param   *tp     Type information of the procedure called.
  */
-ir_node *new_rd_Call(dbg_info *db, ir_node *block, ir_node *store,
-                     ir_node *callee, int arity, ir_node *in[], ir_type *tp);
+FIRM_API ir_node *new_rd_Call(dbg_info *db, ir_node *block, ir_node *store,
+                              ir_node *callee, int arity, ir_node *in[],
+                              ir_type *tp);
 
 /** Constructor for a Builtin node.
  *
@@ -1442,8 +1452,9 @@ ir_node *new_rd_Call(dbg_info *db, ir_node *block, ir_node *store,
  * @param   kind    The kind of the called builtin.
  * @param   *tp     Type information of the procedure called.
  */
-ir_node *new_rd_Builtin(dbg_info *db, ir_node *block, ir_node *store,
-                        int arity, ir_node *in[], ir_builtin_kind kind, ir_type *tp);
+FIRM_API ir_node *new_rd_Builtin(dbg_info *db, ir_node *block, ir_node *store,
+                                 int arity, ir_node *in[], ir_builtin_kind kind,
+                                 ir_type *tp);
 
 /** Constructor for a Add node.
  *
@@ -1453,8 +1464,8 @@ ir_node *new_rd_Builtin(dbg_info *db, ir_node *block, ir_node *store,
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_rd_Add(dbg_info *db, ir_node *block,
-                    ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_rd_Add(dbg_info *db, ir_node *block, ir_node *op1,
+                             ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Sub node.
  *
@@ -1464,8 +1475,8 @@ ir_node *new_rd_Add(dbg_info *db, ir_node *block,
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_rd_Sub(dbg_info *db, ir_node *block,
-                    ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_rd_Sub(dbg_info *db, ir_node *block,
+                             ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Minus node.
  *
@@ -1474,8 +1485,8 @@ ir_node *new_rd_Sub(dbg_info *db, ir_node *block,
  * @param   *op    The operand .
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_rd_Minus(dbg_info *db, ir_node *block,
-                      ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_rd_Minus(dbg_info *db, ir_node *block,
+                               ir_node *op, ir_mode *mode);
 
 /** Constructor for a Mul node.
  *
@@ -1485,8 +1496,8 @@ ir_node *new_rd_Minus(dbg_info *db, ir_node *block,
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_rd_Mul(dbg_info *db, ir_node *block,
-                    ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_rd_Mul(dbg_info *db, ir_node *block,
+                             ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Mulh node.
  *
@@ -1496,8 +1507,8 @@ ir_node *new_rd_Mul(dbg_info *db, ir_node *block,
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_rd_Mulh(dbg_info *db, ir_node *block,
-                     ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_rd_Mulh(dbg_info *db, ir_node *block,
+                              ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Quot node.
  *
@@ -1509,8 +1520,9 @@ ir_node *new_rd_Mulh(dbg_info *db, ir_node *block,
  * @param   *mode  The mode of the result.
  * @param   state  The pinned state.
  */
-ir_node *new_rd_Quot(dbg_info *db, ir_node *block, ir_node *memop,
-                     ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+FIRM_API ir_node *new_rd_Quot(dbg_info *db, ir_node *block, ir_node *memop,
+                              ir_node *op1, ir_node *op2, ir_mode *mode,
+                              op_pin_state state);
 
 /** Constructor for a DivMod node.
  *
@@ -1522,8 +1534,9 @@ ir_node *new_rd_Quot(dbg_info *db, ir_node *block, ir_node *memop,
  * @param   *mode  The mode of the results.
  * @param   state  The pinned state.
  */
-ir_node *new_rd_DivMod(dbg_info *db, ir_node *block, ir_node *memop,
-                       ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+FIRM_API ir_node *new_rd_DivMod(dbg_info *db, ir_node *block, ir_node *memop,
+                                ir_node *op1, ir_node *op2, ir_mode *mode,
+                                op_pin_state state);
 
 /** Constructor for a Div node.
  *
@@ -1535,8 +1548,9 @@ ir_node *new_rd_DivMod(dbg_info *db, ir_node *block, ir_node *memop,
  * @param   *mode  The mode of the result.
  * @param   state  The pinned state.
  */
-ir_node *new_rd_Div(dbg_info *db, ir_node *block, ir_node *memop,
-                    ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+FIRM_API ir_node *new_rd_Div(dbg_info *db, ir_node *block, ir_node *memop,
+                             ir_node *op1, ir_node *op2, ir_mode *mode,
+                             op_pin_state state);
 
 /** Constructor for a remainderless Div node.
  *
@@ -1548,8 +1562,9 @@ ir_node *new_rd_Div(dbg_info *db, ir_node *block, ir_node *memop,
  * @param   *mode  The mode of the result.
  * @param   state  The pinned state.
  */
-ir_node *new_rd_DivRL(dbg_info *db, ir_node *block, ir_node *memop,
-                      ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+FIRM_API ir_node *new_rd_DivRL(dbg_info *db, ir_node *block, ir_node *memop,
+                               ir_node *op1, ir_node *op2, ir_mode *mode,
+                               op_pin_state state);
 
 /** Constructor for a Mod node.
  *
@@ -1561,8 +1576,9 @@ ir_node *new_rd_DivRL(dbg_info *db, ir_node *block, ir_node *memop,
  * @param   *mode  The mode of the result.
  * @param   state  The pinned state.
  */
-ir_node *new_rd_Mod(dbg_info *db, ir_node *block, ir_node *memop,
-                    ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+FIRM_API ir_node *new_rd_Mod(dbg_info *db, ir_node *block, ir_node *memop,
+                             ir_node *op1, ir_node *op2, ir_mode *mode,
+                             op_pin_state state);
 
 /** Constructor for a Abs node.
  *
@@ -1571,7 +1587,8 @@ ir_node *new_rd_Mod(dbg_info *db, ir_node *block, ir_node *memop,
  * @param   *op    The operand
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_rd_Abs(dbg_info *db, ir_node *block, ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_rd_Abs(dbg_info *db, ir_node *block, ir_node *op,
+                             ir_mode *mode);
 
 /** Constructor for a And node.
  *
@@ -1581,8 +1598,8 @@ ir_node *new_rd_Abs(dbg_info *db, ir_node *block, ir_node *op, ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_rd_And(dbg_info *db, ir_node *block,
-                    ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_rd_And(dbg_info *db, ir_node *block,
+                             ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Or node.
  *
@@ -1592,8 +1609,8 @@ ir_node *new_rd_And(dbg_info *db, ir_node *block,
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_rd_Or(dbg_info *db, ir_node *block,
-                   ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_rd_Or(dbg_info *db, ir_node *block,
+                            ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Eor node.
  *
@@ -1603,8 +1620,8 @@ ir_node *new_rd_Or(dbg_info *db, ir_node *block,
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the results.
  */
-ir_node *new_rd_Eor(dbg_info *db, ir_node *block,
-                    ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_rd_Eor(dbg_info *db, ir_node *block,
+                             ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Not node.
  *
@@ -1613,7 +1630,8 @@ ir_node *new_rd_Eor(dbg_info *db, ir_node *block,
  * @param   *op    The operand.
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_rd_Not(dbg_info *db, ir_node *block, ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_rd_Not(dbg_info *db, ir_node *block, ir_node *op,
+                             ir_mode *mode);
 
 /** Constructor for a Cmp node.
  *
@@ -1622,7 +1640,8 @@ ir_node *new_rd_Not(dbg_info *db, ir_node *block, ir_node *op, ir_mode *mode);
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  */
-ir_node *new_rd_Cmp(dbg_info *db, ir_node *block, ir_node *op1, ir_node *op2);
+FIRM_API ir_node *new_rd_Cmp(dbg_info *db, ir_node *block,
+                             ir_node *op1, ir_node *op2);
 
 /** Constructor for a Shl node.
  *
@@ -1632,8 +1651,8 @@ ir_node *new_rd_Cmp(dbg_info *db, ir_node *block, ir_node *op1, ir_node *op2);
  * @param   *k     The number of bits to  shift the operand .
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_rd_Shl(dbg_info *db, ir_node *block,
-                    ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_rd_Shl(dbg_info *db, ir_node *block,
+                             ir_node *op, ir_node *k, ir_mode *mode);
 
 /** Constructor for a Shr node.
  *
@@ -1643,8 +1662,8 @@ ir_node *new_rd_Shl(dbg_info *db, ir_node *block,
  * @param   *k     The number of bits to shift the operand .
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_rd_Shr(dbg_info *db, ir_node *block,
-                    ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_rd_Shr(dbg_info *db, ir_node *block,
+                             ir_node *op, ir_node *k, ir_mode *mode);
 
 /** Constructor for a Shrs node.
  *
@@ -1654,8 +1673,8 @@ ir_node *new_rd_Shr(dbg_info *db, ir_node *block,
  * @param   *k     The number of bits to shift the operand.
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_rd_Shrs(dbg_info *db, ir_node *block,
-                     ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_rd_Shrs(dbg_info *db, ir_node *block,
+                              ir_node *op, ir_node *k, ir_mode *mode);
 
 /** Constructor for a Rotl node.
  *
@@ -1665,8 +1684,8 @@ ir_node *new_rd_Shrs(dbg_info *db, ir_node *block,
  * @param   *k     The number of bits to rotate the operand.
  * @param   *mode  The mode of the operand.
  */
-ir_node *new_rd_Rotl(dbg_info *db, ir_node *block,
-                     ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_rd_Rotl(dbg_info *db, ir_node *block,
+                              ir_node *op, ir_node *k, ir_mode *mode);
 
 
 /** Constructor for a Conv node.
@@ -1676,7 +1695,8 @@ ir_node *new_rd_Rotl(dbg_info *db, ir_node *block,
  * @param   *op    The operand.
  * @param   *mode  The mode of this the operand muss be converted .
  */
-ir_node *new_rd_Conv(dbg_info *db, ir_node *block, ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_rd_Conv(dbg_info *db, ir_node *block, ir_node *op,
+                              ir_mode *mode);
 
 /** Constructor for a strictConv node.
  *
@@ -1685,8 +1705,8 @@ ir_node *new_rd_Conv(dbg_info *db, ir_node *block, ir_node *op, ir_mode *mode);
  * @param   *op    The operand.
  * @param   *mode  The mode of this the operand muss be converted .
  */
-ir_node *new_rd_strictConv(dbg_info *db, ir_node *block,
-                           ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_rd_strictConv(dbg_info *db, ir_node *block,
+                                    ir_node *op, ir_mode *mode);
 
 /** Constructor for a Cast node.
  *
@@ -1697,8 +1717,8 @@ ir_node *new_rd_strictConv(dbg_info *db, ir_node *block,
  * @param   *op    The operand.
  * @param   *to_tp The type of this the operand muss be casted .
  */
-ir_node *new_rd_Cast(dbg_info *db, ir_node *block,
-                     ir_node *op, ir_type *to_tp);
+FIRM_API ir_node *new_rd_Cast(dbg_info *db, ir_node *block,
+                              ir_node *op, ir_type *to_tp);
 
 /** Constructor for a Carry node.
  *
@@ -1708,8 +1728,8 @@ ir_node *new_rd_Cast(dbg_info *db, ir_node *block,
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_rd_Carry(dbg_info *db, ir_node *block,
-                      ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_rd_Carry(dbg_info *db, ir_node *block,
+                               ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Borrow node.
  *
@@ -1719,8 +1739,8 @@ ir_node *new_rd_Carry(dbg_info *db, ir_node *block,
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_rd_Borrow(dbg_info *db, ir_node *block,
-                       ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_rd_Borrow(dbg_info *db, ir_node *block,
+                                ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Phi node.
  *
@@ -1730,8 +1750,8 @@ ir_node *new_rd_Borrow(dbg_info *db, ir_node *block,
  * @param *in[]  Array with predecessors.  The constructor copies this array.
  * @param *mode  The mode of it's inputs and output.
  */
-ir_node *new_rd_Phi(dbg_info *db, ir_node *block, int arity,
-                    ir_node *in[], ir_mode *mode);
+FIRM_API ir_node *new_rd_Phi(dbg_info *db, ir_node *block, int arity,
+                             ir_node *in[], ir_mode *mode);
 
 /** Constructor for a Load node.
  *
@@ -1742,8 +1762,8 @@ ir_node *new_rd_Phi(dbg_info *db, ir_node *block, int arity,
  * @param *mode  The mode of the value to be loaded.
  * @param  flags Additional flags for alignment, volatility and pin state.
  */
-ir_node *new_rd_Load(dbg_info *db, ir_node *block, ir_node *store,
-                     ir_node *adr, ir_mode *mode, ir_cons_flags flags);
+FIRM_API ir_node *new_rd_Load(dbg_info *db, ir_node *block, ir_node *store,
+                              ir_node *adr, ir_mode *mode, ir_cons_flags flags);
 
 /** Constructor for a Store node.
  *
@@ -1754,8 +1774,8 @@ ir_node *new_rd_Load(dbg_info *db, ir_node *block, ir_node *store,
  * @param *val   The value to write to this variable.
  * @param  flags Additional flags for alignment, volatility and pin state.
  */
-ir_node *new_rd_Store(dbg_info *db, ir_node *block, ir_node *store,
-                      ir_node *adr, ir_node *val, ir_cons_flags flags);
+FIRM_API ir_node *new_rd_Store(dbg_info *db, ir_node *block, ir_node *store,
+                               ir_node *adr, ir_node *val, ir_cons_flags flags);
 
 /** Constructor for a Alloc node.
  *
@@ -1768,8 +1788,9 @@ ir_node *new_rd_Store(dbg_info *db, ir_node *block, ir_node *store,
  * @param *alloc_type The type of the allocated variable.
  * @param where       Where to allocate the variable, either heap_alloc or stack_alloc.
  */
-ir_node *new_rd_Alloc(dbg_info *db, ir_node *block, ir_node *store,
-                      ir_node *count, ir_type *alloc_type, ir_where_alloc where);
+FIRM_API ir_node *new_rd_Alloc(dbg_info *db, ir_node *block, ir_node *store,
+                               ir_node *count, ir_type *alloc_type,
+                               ir_where_alloc where);
 
 /** Constructor for a Free node.
  *
@@ -1784,8 +1805,9 @@ ir_node *new_rd_Alloc(dbg_info *db, ir_node *block, ir_node *store,
  * @param *free_type  The type of the freed variable.
  * @param where       Where the variable was allocated, either heap_alloc or stack_alloc.
  */
-ir_node *new_rd_Free(dbg_info *db, ir_node *block, ir_node *store,
-                     ir_node *ptr, ir_node *size, ir_type *free_type, ir_where_alloc where);
+FIRM_API ir_node *new_rd_Free(dbg_info *db, ir_node *block, ir_node *store,
+                              ir_node *ptr, ir_node *size, ir_type *free_type,
+                              ir_where_alloc where);
 
 /** Constructor for a Sync node.
  *
@@ -1799,7 +1821,8 @@ ir_node *new_rd_Free(dbg_info *db, ir_node *block, ir_node *store,
  * @param  *in[]    An array of pointers to nodes that produce an output of type
  *                  memory.  The constructor copies this array.
  */
-ir_node *new_rd_Sync(dbg_info *db, ir_node *block, int arity, ir_node *in[]);
+FIRM_API ir_node *new_rd_Sync(dbg_info *db, ir_node *block, int arity,
+                              ir_node *in[]);
 
 /** Constructor for a Proj node.
  *
@@ -1807,25 +1830,22 @@ ir_node *new_rd_Sync(dbg_info *db, ir_node *block, int arity, ir_node *in[]);
  * position of the value within the tuple.
  *
  * @param *db    A pointer for debug information.
- * @param *block The IR block the node belongs to.
  * @param arg    A node producing a tuple.  The node must have mode_T.
  * @param *mode  The mode of the value to project.
  * @param proj   The position of the value in the tuple.
  */
-ir_node *new_rd_Proj(dbg_info *db, ir_node *block, ir_node *arg,
-                     ir_mode *mode, long proj);
+FIRM_API ir_node *new_rd_Proj(dbg_info *db, ir_node *arg, ir_mode *mode,
+                              long proj);
 
 /** Constructor for a defaultProj node.
  *
  * Represents the default control flow of a Switch-Cond node.
  *
  * @param *db       A pointer for debug information.
- * @param *block    The IR block the node belongs to.
  * @param arg       A node producing a tuple.
  * @param max_proj  The end position of the value in the tuple.
  */
-ir_node *new_rd_defaultProj(dbg_info *db, ir_node *block,
-                            ir_node *arg, long max_proj);
+FIRM_API ir_node *new_rd_defaultProj(dbg_info *db, ir_node *arg, long max_proj);
 
 /** Constructor for a Tuple node.
  *
@@ -1838,8 +1858,8 @@ ir_node *new_rd_defaultProj(dbg_info *db, ir_node *block,
  * @param *in[]   An array containing pointers to the nodes producing the tuple
  *                elements. The constructor copies this array.
  */
-ir_node *new_rd_Tuple(dbg_info *db, ir_node *block,
-                      int arity, ir_node *in[]);
+FIRM_API ir_node *new_rd_Tuple(dbg_info *db, ir_node *block,
+                               int arity, ir_node *in[]);
 
 /** Constructor for a Id node.
  *
@@ -1851,8 +1871,8 @@ ir_node *new_rd_Tuple(dbg_info *db, ir_node *block,
  * @param *val    The value
  * @param *mode   The mode of *val.
  */
-ir_node *new_rd_Id(dbg_info *db, ir_node *block,
-                   ir_node *val, ir_mode *mode);
+FIRM_API ir_node *new_rd_Id(dbg_info *db, ir_node *block,
+                            ir_node *val, ir_mode *mode);
 
 /** Constructor for a Confirm node.
  *
@@ -1867,8 +1887,8 @@ ir_node *new_rd_Id(dbg_info *db, ir_node *block,
  * @param *bound  The value to compare against. Must be a firm node, typically a constant.
  * @param cmp     The compare operation.
  */
-ir_node *new_rd_Confirm(dbg_info *db, ir_node *block,
-                        ir_node *val, ir_node *bound, pn_Cmp cmp);
+FIRM_API ir_node *new_rd_Confirm(dbg_info *db, ir_node *block,
+                                 ir_node *val, ir_node *bound, pn_Cmp cmp);
 
 /** Constructor for an Unknown node.
  *
@@ -1878,7 +1898,7 @@ ir_node *new_rd_Confirm(dbg_info *db, ir_node *block,
  * @param *irg    The IR graph the node  belongs to.
  * @param *m      The mode of the unknown value.
  */
-ir_node *new_rd_Unknown(dbg_info *db, ir_graph *irg, ir_mode *m);
+FIRM_API ir_node *new_rd_Unknown(dbg_info *db, ir_graph *irg, ir_mode *m);
 
 /** Constructor for a CallBegin node.
  *
@@ -1889,9 +1909,11 @@ ir_node *new_rd_Unknown(dbg_info *db, ir_graph *irg, ir_mode *m);
  *
  * @param *db     A pointer for debug information.
  * @param *block  The block the node belong to.
- * @param *callee The call node visible in the intra procedural view.
+ * @param *ptr    pointer to the called function
+ * @param *call   associated call operation
  */
-ir_node *new_rd_CallBegin(dbg_info *db, ir_node *block, ir_node *ptr, ir_node *call);
+FIRM_API ir_node *new_rd_CallBegin(dbg_info *db, ir_node *block, ir_node *ptr,
+                                   ir_node *call);
 
 /** Constructor for a EndReg node.
  *
@@ -1901,7 +1923,7 @@ ir_node *new_rd_CallBegin(dbg_info *db, ir_node *block, ir_node *ptr, ir_node *c
  * @param *irg    The IR graph the node belong to.
  * @param *block  The block the node belong to.
  */
-ir_node *new_rd_EndReg(dbg_info *db, ir_graph *irg, ir_node *block);
+FIRM_API ir_node *new_rd_EndReg(dbg_info *db, ir_graph *irg, ir_node *block);
 
 /** Constructor for a EndExcept node.
  *
@@ -1911,7 +1933,7 @@ ir_node *new_rd_EndReg(dbg_info *db, ir_graph *irg, ir_node *block);
  * @param *irg    The IR graph the node belong to.
  * @param *block  The block the node belong to.
  */
-ir_node *new_rd_EndExcept(dbg_info *db, ir_graph *irg, ir_node *block);
+FIRM_API ir_node *new_rd_EndExcept(dbg_info *db, ir_graph *irg, ir_node *block);
 
 /** Constructor for a Filter node.
  *
@@ -1930,8 +1952,8 @@ ir_node *new_rd_EndExcept(dbg_info *db, ir_graph *irg, ir_node *block);
  * @param *mode The mode of the projected value.
  * @param proj  The position in the tuple to project from.
  */
-ir_node *new_rd_Filter(dbg_info *db,ir_node *block, ir_node *arg,
-                       ir_mode *mode, long proj);
+FIRM_API ir_node *new_rd_Filter(dbg_info *db,ir_node *block, ir_node *arg,
+                                ir_mode *mode, long proj);
 
 /** Constructor for a Mux node.
  *
@@ -1942,8 +1964,9 @@ ir_node *new_rd_Filter(dbg_info *db,ir_node *block, ir_node *arg,
  * @param *ir_false The ir_node that calculates the false result.
  * @param *mode     The mode of the node (and it_true and ir_false).
  */
-ir_node *new_rd_Mux(dbg_info *db, ir_node *block, ir_node *sel,
-                    ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+FIRM_API ir_node *new_rd_Mux(dbg_info *db, ir_node *block, ir_node *sel,
+                             ir_node *ir_false, ir_node *ir_true,
+                             ir_mode *mode);
 
 /** Constructor for a CopyB node.
  *
@@ -1954,8 +1977,8 @@ ir_node *new_rd_Mux(dbg_info *db, ir_node *block, ir_node *sel,
  * @param *src        The ir_node that represents the source address.
  * @param *data_type  The type of the copied data
  */
-ir_node *new_rd_CopyB(dbg_info *db, ir_node *block, ir_node *store,
-                      ir_node *dst, ir_node *src, ir_type *data_type);
+FIRM_API ir_node *new_rd_CopyB(dbg_info *db, ir_node *block, ir_node *store,
+                               ir_node *dst, ir_node *src, ir_type *data_type);
 
 /** Constructor for a InstOf node.
  *
@@ -1968,8 +1991,8 @@ ir_node *new_rd_CopyB(dbg_info *db, ir_node *block, ir_node *store,
  * @param   *objptr    A pointer to a object of a class type.
  * @param   *type      The type of which objptr must be.
  */
-ir_node *new_rd_InstOf(dbg_info *db, ir_node *block, ir_node *store,
-                       ir_node *objptr, ir_type *type);
+FIRM_API ir_node *new_rd_InstOf(dbg_info *db, ir_node *block, ir_node *store,
+                                ir_node *objptr, ir_type *type);
 
 /** Constructor for a Raise node.
  *
@@ -1980,7 +2003,8 @@ ir_node *new_rd_InstOf(dbg_info *db, ir_node *block, ir_node *store,
  * @param *store The current memory.
  * @param *obj   A pointer to the Except variable.
  */
-ir_node *new_rd_Raise(dbg_info *db, ir_node *block, ir_node *store, ir_node *obj);
+FIRM_API ir_node *new_rd_Raise(dbg_info *db, ir_node *block, ir_node *store,
+                               ir_node *obj);
 
 /** Constructor for a Bound node.
  *
@@ -1993,8 +2017,9 @@ ir_node *new_rd_Raise(dbg_info *db, ir_node *block, ir_node *store, ir_node *obj
  * @param *lower      The ir_node that represents the lower bound for the index.
  * @param *upper      The ir_node that represents the upper bound for the index.
  */
-ir_node *new_rd_Bound(dbg_info *db, ir_node *block,
-                      ir_node *store, ir_node *idx, ir_node *lower, ir_node *upper);
+FIRM_API ir_node *new_rd_Bound(dbg_info *db, ir_node *block,
+                               ir_node *store, ir_node *idx, ir_node *lower,
+                               ir_node *upper);
 
 /** Constructor for a Pin node.
  *
@@ -2002,7 +2027,7 @@ ir_node *new_rd_Bound(dbg_info *db, ir_node *block,
  * @param *block      The block the node belong to.
  * @param *node       The node which value should be pinned.
  */
-ir_node *new_rd_Pin(dbg_info *db, ir_node *block, ir_node *node);
+FIRM_API ir_node *new_rd_Pin(dbg_info *db, ir_node *block, ir_node *node);
 
 /** Constructor for an ASM pseudo node.
  *
@@ -2017,10 +2042,10 @@ ir_node *new_rd_Pin(dbg_info *db, ir_node *block, ir_node *node);
  * @param *clobber    The array of length n_clobber of clobbered registers.
  * @param *asm_text   The assembler text.
  */
-ir_node *new_rd_ASM(dbg_info *db, ir_node *block,
-                    int arity, ir_node *in[], ir_asm_constraint *inputs,
-                    int n_outs, ir_asm_constraint *outputs,
-                    int n_clobber, ident *clobber[], ident *asm_text);
+FIRM_API ir_node *new_rd_ASM(dbg_info *db, ir_node *block,
+                            int arity, ir_node *in[], ir_asm_constraint *inputs,
+                            int n_outs, ir_asm_constraint *outputs,
+                            int n_clobber, ident *clobber[], ident *asm_text);
 
 /*-------------------------------------------------------------------------*/
 /* The raw interface without debug support                                 */
@@ -2040,21 +2065,21 @@ ir_node *new_rd_ASM(dbg_info *db, ir_node *block,
  * @param in[]   An array of control predecessors.  The length of
  *               the array must be 'arity'. The constructor copies this array.
  */
-ir_node *new_r_Block(ir_graph *irg, int arity, ir_node *in[]);
+FIRM_API ir_node *new_r_Block(ir_graph *irg, int arity, ir_node *in[]);
 
 /** Constructor for a Start node.
  *
  * @param *irg   The IR graph the node belongs to.
  * @param *block The IR block the node belongs to.
  */
-ir_node *new_r_Start(ir_graph *irg, ir_node *block);
+FIRM_API ir_node *new_r_Start(ir_graph *irg, ir_node *block);
 
 /** Constructor for a End node.
  *
  * @param *irg   The IR graph the node  belongs to.
  * @param *block The IR block the node belongs to.
  */
-ir_node *new_r_End(ir_graph *irg, ir_node *block);
+FIRM_API ir_node *new_r_End(ir_graph *irg, ir_node *block);
 
 /** Constructor for a Jmp node.
  *
@@ -2062,7 +2087,7 @@ ir_node *new_r_End(ir_graph *irg, ir_node *block);
  *
  * @param *block  The IR block the node belongs to.
  */
-ir_node *new_r_Jmp(ir_node *block);
+FIRM_API ir_node *new_r_Jmp(ir_node *block);
 
 /** Constructor for an IJmp node.
  *
@@ -2072,7 +2097,7 @@ ir_node *new_r_Jmp(ir_node *block);
  * @param *block  The IR block the node belongs to.
  * @param *tgt    The IR node representing the target address.
  */
-ir_node *new_r_IJmp(ir_node *block, ir_node *tgt);
+FIRM_API ir_node *new_r_IJmp(ir_node *block, ir_node *tgt);
 
 /** Constructor for a Cond node.
  *
@@ -2086,7 +2111,7 @@ ir_node *new_r_IJmp(ir_node *block, ir_node *tgt);
  * @param *block The IR block the node belongs to.
  * @param *c     The conditions parameter.Can be of mode b or I_u.
  */
-ir_node *new_r_Cond(ir_node *block, ir_node *c);
+FIRM_API ir_node *new_r_Cond(ir_node *block, ir_node *c);
 
 /** Constructor for a Return node.
  *
@@ -2098,7 +2123,8 @@ ir_node *new_r_Cond(ir_node *block, ir_node *c);
  * @param arity  Number of array indices.
  * @param *in[]   Array with index inputs to the node. The constructor copies this array.
  */
-ir_node *new_r_Return(ir_node *block, ir_node *store, int arity, ir_node *in[]);
+FIRM_API ir_node *new_r_Return(ir_node *block, ir_node *store,
+                               int arity, ir_node *in[]);
 
 /** Constructor for a Const node.
  *
@@ -2112,7 +2138,7 @@ ir_node *new_r_Return(ir_node *block, ir_node *store, int arity, ir_node *in[]);
  * @param *irg   The IR graph the node  belongs to.
  * @param *con   Points to an entry in the constant table.
  */
-ir_node *new_r_Const(ir_graph *irg, tarval *con);
+FIRM_API ir_node *new_r_Const(ir_graph *irg, tarval *con);
 
 /** Constructor for a Const node.
  *
@@ -2126,7 +2152,7 @@ ir_node *new_r_Const(ir_graph *irg, tarval *con);
  * @param *mode  The mode of the operands and the results.
  * @param value  A value from which the tarval is made.
  */
-ir_node *new_r_Const_long(ir_graph *irg, ir_mode *mode, long value);
+FIRM_API ir_node *new_r_Const_long(ir_graph *irg, ir_mode *mode, long value);
 
 /** Constructor for a Const_type node.
  *
@@ -2140,7 +2166,7 @@ ir_node *new_r_Const_long(ir_graph *irg, ir_mode *mode, long value);
  * @param *con   Points to an entry in the constant table.
  * @param *tp    The type of the constant.
  */
-ir_node *new_r_Const_type(ir_graph *irg, tarval *con, ir_type *tp);
+FIRM_API ir_node *new_r_Const_type(ir_graph *irg, tarval *con, ir_type *tp);
 
 /** Constructor for a SymConst node.
  *
@@ -2176,8 +2202,9 @@ ir_node *new_r_Const_type(ir_graph *irg, tarval *con, ir_type *tp);
  *                SymConst kind.
  * @param kind    The kind of the symbolic constant, see the list above
  */
-ir_node *new_r_SymConst(ir_graph *irg, ir_mode *mode,
-                        union symconst_symbol value, symconst_kind kind);
+FIRM_API ir_node *new_r_SymConst(ir_graph *irg, ir_mode *mode,
+                                 union symconst_symbol value,
+                                 symconst_kind kind);
 
 /** Constructor for a simpleSel node.
  *
@@ -2192,8 +2219,8 @@ ir_node *new_r_SymConst(ir_graph *irg, ir_mode *mode,
  *                   single attribute out.
  * @param *ent       The entity to select.
  */
-ir_node *new_r_simpleSel(ir_node *block, ir_node *store,
-                         ir_node *objptr, ir_entity *ent);
+FIRM_API ir_node *new_r_simpleSel(ir_node *block, ir_node *store,
+                                  ir_node *objptr, ir_entity *ent);
 
 /** Constructor for a Sel node.
  *
@@ -2213,9 +2240,9 @@ ir_node *new_r_simpleSel(ir_node *block, ir_node *store,
  *                   element entity.  The constructor copies this array.
  * @param *ent       The entity to select.
  */
-ir_node *new_r_Sel(ir_node *block, ir_node *store,
-                   ir_node *objptr, int n_index, ir_node *index[],
-                   ir_entity *ent);
+FIRM_API ir_node *new_r_Sel(ir_node *block, ir_node *store,
+                            ir_node *objptr, int n_index, ir_node *index[],
+                            ir_entity *ent);
 
 /** Constructor for a Call node.
  *
@@ -2228,8 +2255,9 @@ ir_node *new_r_Sel(ir_node *block, ir_node *store,
  * @param *in[]   An array with the pointers to the parameters. The constructor copies this array.
  * @param *tp     Type information of the procedure called.
  */
-ir_node *new_r_Call(ir_node *block, ir_node *store,
-                    ir_node *callee, int arity, ir_node *in[], ir_type *tp);
+FIRM_API ir_node *new_r_Call(ir_node *block, ir_node *store,
+                             ir_node *callee, int arity, ir_node *in[],
+                             ir_type *tp);
 
 /** Constructor for a Builtin node.
  *
@@ -2242,8 +2270,9 @@ ir_node *new_r_Call(ir_node *block, ir_node *store,
  * @param kind    The kind of the called builtin.
  * @param *tp     Type information of the procedure called.
  */
-ir_node *new_r_Builtin(ir_node *block, ir_node *store,
-                       int arity, ir_node *in[], ir_builtin_kind kind, ir_type *tp);
+FIRM_API ir_node *new_r_Builtin(ir_node *block, ir_node *store,
+                                int arity, ir_node *in[], ir_builtin_kind kind,
+                                ir_type *tp);
 
 /** Constructor for a Add node.
  *
@@ -2252,7 +2281,8 @@ ir_node *new_r_Builtin(ir_node *block, ir_node *store,
  * @param *op2   The second operand.
  * @param *mode  The mode of the operands and the result.
  */
-ir_node *new_r_Add(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_r_Add(ir_node *block, ir_node *op1, ir_node *op2,
+                            ir_mode *mode);
 
 /**
  * Constructor for a Sub node.
@@ -2262,7 +2292,8 @@ ir_node *new_r_Add(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param *op2   The second operand.
  * @param *mode  The mode of the operands and the results.
  */
-ir_node *new_r_Sub(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_r_Sub(ir_node *block, ir_node *op1, ir_node *op2,
+                            ir_mode *mode);
 
 /** Constructor for a Minus node.
  *
@@ -2270,7 +2301,7 @@ ir_node *new_r_Sub(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param *op    The operand.
  * @param *mode  The mode of the operand and the result.
  */
-ir_node *new_r_Minus(ir_node *block, ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_r_Minus(ir_node *block, ir_node *op, ir_mode *mode);
 
 /** Constructor for a Mul node.
  *
@@ -2279,7 +2310,8 @@ ir_node *new_r_Minus(ir_node *block, ir_node *op, ir_mode *mode);
  * @param *op2   The second operand.
  * @param *mode  The mode of the operands and the result.
  */
-ir_node *new_r_Mul(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_r_Mul(ir_node *block, ir_node *op1, ir_node *op2,
+                            ir_mode *mode);
 
 /** Constructor for a Mulh node.
  *
@@ -2288,7 +2320,8 @@ ir_node *new_r_Mul(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param *op2   The second operand.
  * @param *mode  The mode of the operands and the result.
  */
-ir_node *new_r_Mulh(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_r_Mulh(ir_node *block, ir_node *op1, ir_node *op2,
+                             ir_mode *mode);
 
 /** Constructor for a Quot node.
  *
@@ -2299,8 +2332,9 @@ ir_node *new_r_Mulh(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param *mode  The mode of the result.
  * @param state  The pinned state.
  */
-ir_node *new_r_Quot(ir_node *block, ir_node *memop, ir_node *op1, ir_node *op2,
-                    ir_mode *mode, op_pin_state state);
+FIRM_API ir_node *new_r_Quot(ir_node *block, ir_node *memop,
+                             ir_node *op1, ir_node *op2, ir_mode *mode,
+                             op_pin_state state);
 
 /** Constructor for a DivMod node.
  *
@@ -2311,8 +2345,9 @@ ir_node *new_r_Quot(ir_node *block, ir_node *memop, ir_node *op1, ir_node *op2,
  * @param *mode  The mode of the results.
  * @param state  The pinned state.
  */
-ir_node *new_r_DivMod(ir_node *block, ir_node *memop, ir_node *op1, ir_node *op2,
-                      ir_mode *mode, op_pin_state state);
+FIRM_API ir_node *new_r_DivMod(ir_node *block, ir_node *memop,
+                               ir_node *op1, ir_node *op2, ir_mode *mode,
+                               op_pin_state state);
 
 /** Constructor for a Div node.
  *
@@ -2323,8 +2358,9 @@ ir_node *new_r_DivMod(ir_node *block, ir_node *memop, ir_node *op1, ir_node *op2
  * @param *mode  The mode of the result.
  * @param state  The pinned state.
  */
-ir_node *new_r_Div(ir_node *block, ir_node *memop, ir_node *op1, ir_node *op2,
-                   ir_mode *mode, op_pin_state state);
+FIRM_API ir_node *new_r_Div(ir_node *block, ir_node *memop,
+                            ir_node *op1, ir_node *op2, ir_mode *mode,
+                            op_pin_state state);
 
 /** Constructor for a remainderless Div node.
  *
@@ -2335,8 +2371,9 @@ ir_node *new_r_Div(ir_node *block, ir_node *memop, ir_node *op1, ir_node *op2,
  * @param *mode  The mode of the result.
  * @param state  The pinned state.
  */
-ir_node *new_r_DivRL(ir_node *block, ir_node *memop, ir_node *op1, ir_node *op2,
-                     ir_mode *mode, op_pin_state state);
+FIRM_API ir_node *new_r_DivRL(ir_node *block, ir_node *memop,
+                              ir_node *op1, ir_node *op2, ir_mode *mode,
+                              op_pin_state state);
 
 /** Constructor for a Mod node.
  *
@@ -2347,8 +2384,9 @@ ir_node *new_r_DivRL(ir_node *block, ir_node *memop, ir_node *op1, ir_node *op2,
  * @param *mode  The mode of the result.
  * @param state  The pinned state.
  */
-ir_node *new_r_Mod(ir_node *block, ir_node *memop, ir_node *op1, ir_node *op2,
-                   ir_mode *mode, op_pin_state state);
+FIRM_API ir_node *new_r_Mod(ir_node *block, ir_node *memop,
+                            ir_node *op1, ir_node *op2, ir_mode *mode,
+                            op_pin_state state);
 
 /** Constructor for a Abs node.
  *
@@ -2356,7 +2394,7 @@ ir_node *new_r_Mod(ir_node *block, ir_node *memop, ir_node *op1, ir_node *op2,
  * @param *op    The operand
  * @param *mode  The mode of the operands and the result.
  */
-ir_node *new_r_Abs(ir_node *block, ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_r_Abs(ir_node *block, ir_node *op, ir_mode *mode);
 
 /** Constructor for a And node.
  *
@@ -2365,7 +2403,8 @@ ir_node *new_r_Abs(ir_node *block, ir_node *op, ir_mode *mode);
  * @param *op2   The second operand.
  * @param *mode  The mode of the operands and the result.
  */
-ir_node *new_r_And(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_r_And(ir_node *block, ir_node *op1, ir_node *op2,
+                            ir_mode *mode);
 
 /** Constructor for a Or node.
  *
@@ -2374,7 +2413,8 @@ ir_node *new_r_And(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param *op2   The second operand.
  * @param *mode  The mode of the operands and the result.
  */
-ir_node *new_r_Or(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_r_Or(ir_node *block, ir_node *op1, ir_node *op2,
+                           ir_mode *mode);
 
 /** Constructor for a Eor node.
  *
@@ -2383,7 +2423,8 @@ ir_node *new_r_Or(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param *op2   The second operand.
  * @param *mode  The mode of the operands and the results.
  */
-ir_node *new_r_Eor(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_r_Eor(ir_node *block, ir_node *op1, ir_node *op2,
+                            ir_mode *mode);
 
 /** Constructor for a Not node.
  *
@@ -2391,7 +2432,7 @@ ir_node *new_r_Eor(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param *op    The operand.
  * @param *mode  The mode of the operand and the result.
  */
-ir_node *new_r_Not(ir_node *block, ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_r_Not(ir_node *block, ir_node *op, ir_mode *mode);
 
 /** Constructor for a Cmp node.
  *
@@ -2399,7 +2440,7 @@ ir_node *new_r_Not(ir_node *block, ir_node *op, ir_mode *mode);
  * @param *op1   The first operand.
  * @param *op2   The second operand.
  */
-ir_node *new_r_Cmp(ir_node *block, ir_node *op1, ir_node *op2);
+FIRM_API ir_node *new_r_Cmp(ir_node *block, ir_node *op1, ir_node *op2);
 
 /** Constructor for a Shl node.
  *
@@ -2408,7 +2449,8 @@ ir_node *new_r_Cmp(ir_node *block, ir_node *op1, ir_node *op2);
  * @param   *k     The number of bits to  shift the operand .
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_r_Shl(ir_node *block, ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_r_Shl(ir_node *block, ir_node *op, ir_node *k,
+                            ir_mode *mode);
 
 /** Constructor for a Shr node.
  *
@@ -2417,7 +2459,8 @@ ir_node *new_r_Shl(ir_node *block, ir_node *op, ir_node *k, ir_mode *mode);
  * @param *k     The number of bits to shift the operand .
  * @param *mode  The mode of the operand and the result.
  */
-ir_node *new_r_Shr(ir_node *block, ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_r_Shr(ir_node *block, ir_node *op, ir_node *k,
+                            ir_mode *mode);
 
 /**
  * Constructor for a Shrs node.
@@ -2427,7 +2470,8 @@ ir_node *new_r_Shr(ir_node *block, ir_node *op, ir_node *k, ir_mode *mode);
  * @param  *k     The number of bits to shift the operand.
  * @param  *mode  The mode of the operand and the result.
  */
-ir_node *new_r_Shrs(ir_node *block, ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_r_Shrs(ir_node *block, ir_node *op, ir_node *k,
+                             ir_mode *mode);
 
 /** Constructor for a Rotl node.
  *
@@ -2436,7 +2480,8 @@ ir_node *new_r_Shrs(ir_node *block, ir_node *op, ir_node *k, ir_mode *mode);
  * @param *k     The number of bits to rotate the operand.
  * @param *mode  The mode of the operand.
  */
-ir_node *new_r_Rotl(ir_node *block, ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_r_Rotl(ir_node *block, ir_node *op, ir_node *k,
+                             ir_mode *mode);
 
 /** Constructor for a Conv node.
  *
@@ -2444,7 +2489,7 @@ ir_node *new_r_Rotl(ir_node *block, ir_node *op, ir_node *k, ir_mode *mode);
  * @param *op    The operand.
  * @param *mode  The mode of this the operand muss be converted .
  */
-ir_node *new_r_Conv(ir_node *block, ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_r_Conv(ir_node *block, ir_node *op, ir_mode *mode);
 
 /** Constructor for a strict Conv node.
  *
@@ -2452,7 +2497,7 @@ ir_node *new_r_Conv(ir_node *block, ir_node *op, ir_mode *mode);
  * @param *op    The operand.
  * @param *mode  The mode of this the operand muss be converted .
  */
-ir_node *new_r_strictConv(ir_node *block, ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_r_strictConv(ir_node *block, ir_node *op, ir_mode *mode);
 
 /** Constructor for a Cast node.
  *
@@ -2462,7 +2507,7 @@ ir_node *new_r_strictConv(ir_node *block, ir_node *op, ir_mode *mode);
  * @param *op    The operand.
  * @param *to_tp The type of this the operand muss be casted .
  */
-ir_node *new_r_Cast(ir_node *block, ir_node *op, ir_type *to_tp);
+FIRM_API ir_node *new_r_Cast(ir_node *block, ir_node *op, ir_type *to_tp);
 
 /** Constructor for a Carry node.
  *
@@ -2471,7 +2516,8 @@ ir_node *new_r_Cast(ir_node *block, ir_node *op, ir_type *to_tp);
  * @param *op2   The second operand.
  * @param *mode  The mode of the operands and the result.
  */
-ir_node *new_r_Carry(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_r_Carry(ir_node *block, ir_node *op1, ir_node *op2,
+                              ir_mode *mode);
 
 /**
  * Constructor for a Borrow node.
@@ -2481,7 +2527,8 @@ ir_node *new_r_Carry(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param *op2   The second operand.
  * @param *mode  The mode of the operands and the results.
  */
-ir_node *new_r_Borrow(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_r_Borrow(ir_node *block, ir_node *op1, ir_node *op2,
+                               ir_mode *mode);
 
 /** Constructor for a Phi node.
  *
@@ -2490,7 +2537,8 @@ ir_node *new_r_Borrow(ir_node *block, ir_node *op1, ir_node *op2, ir_mode *mode)
  * @param *in[]  Array with predecessors. The constructor copies this array.
  * @param *mode  The mode of it's inputs and output.
  */
-ir_node *new_r_Phi(ir_node *block, int arity, ir_node *in[], ir_mode *mode);
+FIRM_API ir_node *new_r_Phi(ir_node *block, int arity, ir_node *in[],
+                            ir_mode *mode);
 
 /** Constructor for a Load node.
  *
@@ -2500,8 +2548,8 @@ ir_node *new_r_Phi(ir_node *block, int arity, ir_node *in[], ir_mode *mode);
  * @param *mode  The mode of the value to be loaded.
  * @param  flags Additional flags for alignment, volatility and pin state.
  */
-ir_node *new_r_Load(ir_node *block, ir_node *store,
-                    ir_node *adr, ir_mode *mode, ir_cons_flags flags);
+FIRM_API ir_node *new_r_Load(ir_node *block, ir_node *store,
+                             ir_node *adr, ir_mode *mode, ir_cons_flags flags);
 
 /** Constructor for a Store node.
  *
@@ -2511,8 +2559,8 @@ ir_node *new_r_Load(ir_node *block, ir_node *store,
  * @param *val   The value to write to this variable.
  * @param  flags Additional flags for alignment, volatility and pin state.
  */
-ir_node *new_r_Store(ir_node *block, ir_node *store,
-                     ir_node *adr, ir_node *val, ir_cons_flags flags);
+FIRM_API ir_node *new_r_Store(ir_node *block, ir_node *store,
+                              ir_node *adr, ir_node *val, ir_cons_flags flags);
 
 /** Constructor for a Alloc node.
  *
@@ -2524,8 +2572,9 @@ ir_node *new_r_Store(ir_node *block, ir_node *store,
  * @param *alloc_type The type of the allocated variable.
  * @param where       Where to allocate the variable, either heap_alloc or stack_alloc.
  */
-ir_node *new_r_Alloc(ir_node *block, ir_node *store,
-                     ir_node *count, ir_type *alloc_type, ir_where_alloc where);
+FIRM_API ir_node *new_r_Alloc(ir_node *block, ir_node *store,
+                              ir_node *count, ir_type *alloc_type,
+                              ir_where_alloc where);
 
 /** Constructor for a Free node.
  *
@@ -2539,8 +2588,9 @@ ir_node *new_r_Alloc(ir_node *block, ir_node *store,
  * @param *free_type  The type of the freed variable.
  * @param where       Where the variable was allocated, either heap_alloc or stack_alloc.
  */
-ir_node *new_r_Free(ir_node *block, ir_node *store,
-                    ir_node *ptr, ir_node *size, ir_type *free_type, ir_where_alloc where);
+FIRM_API ir_node *new_r_Free(ir_node *block, ir_node *store, ir_node *ptr,
+                             ir_node *size, ir_type *free_type,
+                             ir_where_alloc where);
 
 /** Constructor for a Sync node.
  *
@@ -2553,30 +2603,27 @@ ir_node *new_r_Free(ir_node *block, ir_node *store,
  * @param *in[]    An array of pointers to nodes that produce an output of  type memory.
  *                 The constructor copies this array.
  */
-ir_node *new_r_Sync(ir_node *block, int arity, ir_node *in[]);
+FIRM_API ir_node *new_r_Sync(ir_node *block, int arity, ir_node *in[]);
 
 /** Constructor for a Proj node.
  *
  * Projects a single value out of a tuple.  The parameter proj gives the
  * position of the value within the tuple.
  *
- * @param *block The IR block the node belongs to.
  * @param arg    A node producing a tuple.
- * @param *mode  The mode of the value to project.
+ * @param mode   The mode of the value to project.
  * @param proj   The position of the value in the tuple.
  */
-ir_node *new_r_Proj(ir_node *block, ir_node *arg,
-                    ir_mode *mode, long proj);
+FIRM_API ir_node *new_r_Proj(ir_node *arg, ir_mode *mode, long proj);
 
 /** Constructor for a defaultProj node.
  *
  * Represents the default control flow of a Switch-Cond node.
  *
- * @param *block    The IR block the node belongs to.
  * @param arg       A node producing a tuple.
  * @param max_proj  The end  position of the value in the tuple.
  */
-ir_node *new_r_defaultProj(ir_node *block, ir_node *arg, long max_proj);
+FIRM_API ir_node *new_r_defaultProj(ir_node *arg, long max_proj);
 
 
 /** Constructor for a Tuple node.
@@ -2589,7 +2636,7 @@ ir_node *new_r_defaultProj(ir_node *block, ir_node *arg, long max_proj);
  * @param *in[]   An array containing pointers to the nodes producing the tuple elements.
  *                The constructor copies this array.
  */
-ir_node *new_r_Tuple(ir_node *block, int arity, ir_node *in[]);
+FIRM_API ir_node *new_r_Tuple(ir_node *block, int arity, ir_node *in[]);
 
 /** Constructor for a Id node.
  *
@@ -2600,7 +2647,7 @@ ir_node *new_r_Tuple(ir_node *block, int arity, ir_node *in[]);
  * @param *val    The operand to Id.
  * @param *mode   The mode of *val.
  */
-ir_node *new_r_Id(ir_node *block, ir_node *val, ir_mode *mode);
+FIRM_API ir_node *new_r_Id(ir_node *block, ir_node *val, ir_mode *mode);
 
 /** Constructor for a Bad node.
  *
@@ -2609,7 +2656,7 @@ ir_node *new_r_Id(ir_node *block, ir_node *val, ir_mode *mode);
  *
  * @param *irg    The IR graph the node  belongs to.
  */
-ir_node *new_r_Bad(ir_graph *irg);
+FIRM_API ir_node *new_r_Bad(ir_graph *irg);
 
 /** Constructor for a Confirm node.
  *
@@ -2623,7 +2670,8 @@ ir_node *new_r_Bad(ir_graph *irg);
  * @param *bound  The value to compare against. Must be a firm node, typically a constant.
  * @param cmp     The compare operation.
  */
-ir_node *new_r_Confirm(ir_node *block, ir_node *val, ir_node *bound, pn_Cmp cmp);
+FIRM_API ir_node *new_r_Confirm(ir_node *block, ir_node *val, ir_node *bound,
+                                pn_Cmp cmp);
 
 /** Constructor for a Unknown node.
  *
@@ -2633,7 +2681,7 @@ ir_node *new_r_Confirm(ir_node *block, ir_node *val, ir_node *bound, pn_Cmp cmp)
  * @param *irg    The IR graph the node  belongs to.
  * @param *m      The mode of the unknown value.
  */
-ir_node *new_r_Unknown(ir_graph *irg, ir_mode *m);
+FIRM_API ir_node *new_r_Unknown(ir_graph *irg, ir_mode *m);
 
 /** Constructor for a CallBegin node.
  *
@@ -2643,9 +2691,10 @@ ir_node *new_r_Unknown(ir_graph *irg, ir_mode *m);
  * node.
  *
  * @param *block  The block the node belong to.
- * @param *callee The call node visible in the  intra procedural view.
+ * @param *ptr    pointer to the called function
+ * @param *call   associated call operation
  */
-ir_node *new_r_CallBegin(ir_node *block, ir_node *ptr, ir_node *call);
+FIRM_API ir_node *new_r_CallBegin(ir_node *block, ir_node *ptr, ir_node *call);
 
 /** Constructor for a EndReg node.
  *
@@ -2654,7 +2703,7 @@ ir_node *new_r_CallBegin(ir_node *block, ir_node *ptr, ir_node *call);
  * @param *irg    The IR graph the node belong to.
  * @param *block  The block the node belong to.
  */
-ir_node *new_r_EndReg(ir_graph *irg, ir_node *block);
+FIRM_API ir_node *new_r_EndReg(ir_graph *irg, ir_node *block);
 
 /** Constructor for a EndExcept node.
  *
@@ -2663,7 +2712,7 @@ ir_node *new_r_EndReg(ir_graph *irg, ir_node *block);
  * @param *irg    The IR graph the node belong to.
  * @param *block  The block the node belong to.
  */
-ir_node *new_r_EndExcept(ir_graph *irg, ir_node *block);
+FIRM_API ir_node *new_r_EndExcept(ir_graph *irg, ir_node *block);
 
 /** Constructor for a Break node.
  *
@@ -2674,7 +2723,7 @@ ir_node *new_r_EndExcept(ir_graph *irg, ir_node *block);
  *
  * @param *block  The block the node belong to.
  */
-ir_node *new_r_Break(ir_node *block);
+FIRM_API ir_node *new_r_Break(ir_node *block);
 
 /** Constructor for a Filter node.
  *
@@ -2692,7 +2741,8 @@ ir_node *new_r_Break(ir_node *block);
  * @param *mode   The mode of the projected value.
  * @param proj    The position in the tuple to project from.
  */
-ir_node *new_r_Filter(ir_node *block, ir_node *arg, ir_mode *mode, long proj);
+FIRM_API ir_node *new_r_Filter(ir_node *block, ir_node *arg, ir_mode *mode,
+                               long proj);
 
 /** Constructor for a NoMem node.
  *
@@ -2701,7 +2751,7 @@ ir_node *new_r_Filter(ir_node *block, ir_node *arg, ir_mode *mode, long proj);
  *
  * @param *irg    The IR graph the node belongs to.
  */
-ir_node *new_r_NoMem(ir_graph *irg);
+FIRM_API ir_node *new_r_NoMem(ir_graph *irg);
 
 /** Constructor for a Mux node.
  *
@@ -2711,8 +2761,8 @@ ir_node *new_r_NoMem(ir_graph *irg);
  * @param *ir_false The ir_node that calculates the false result.
  * @param *mode     The mode of the node (and it_true and ir_false).
  */
-ir_node *new_r_Mux(ir_node *block, ir_node *sel,
-                   ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+FIRM_API ir_node *new_r_Mux(ir_node *block, ir_node *sel,
+                            ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
 
 /** Constructor for a CopyB node.
  *
@@ -2722,8 +2772,8 @@ ir_node *new_r_Mux(ir_node *block, ir_node *sel,
  * @param *src        The ir_node that represents the source address.
  * @param *data_type  The type of the copied data
  */
-ir_node *new_r_CopyB(ir_node *block, ir_node *store,
-                     ir_node *dst, ir_node *src, ir_type *data_type);
+FIRM_API ir_node *new_r_CopyB(ir_node *block, ir_node *store,
+                              ir_node *dst, ir_node *src, ir_type *data_type);
 
 /** Constructor for a InstOf node.
  *
@@ -2735,8 +2785,8 @@ ir_node *new_r_CopyB(ir_node *block, ir_node *store,
  * @param *objptr    A pointer to a object of a class type.
  * @param *type      The type of which objptr must be.
  */
-ir_node *new_r_InstOf(ir_node *block, ir_node *store,
-                      ir_node *objptr, ir_type *type);
+FIRM_API ir_node *new_r_InstOf(ir_node *block, ir_node *store,
+                               ir_node *objptr, ir_type *type);
 
 /** Constructor for a Raise node.
  *
@@ -2746,7 +2796,7 @@ ir_node *new_r_InstOf(ir_node *block, ir_node *store,
  * @param *store The current memory.
  * @param *obj   A pointer to the Except variable.
  */
-ir_node *new_r_Raise(ir_node *block, ir_node *store, ir_node *obj);
+FIRM_API ir_node *new_r_Raise(ir_node *block, ir_node *store, ir_node *obj);
 
 /** Constructor for a Bound node.
  *
@@ -2758,15 +2808,15 @@ ir_node *new_r_Raise(ir_node *block, ir_node *store, ir_node *obj);
  * @param *lower      The ir_node that represents the lower bound for the index.
  * @param *upper      The ir_node that represents the upper bound for the index.
  */
-ir_node *new_r_Bound(ir_node *block, ir_node *store,
-                     ir_node *idx, ir_node *lower, ir_node *upper);
+FIRM_API ir_node *new_r_Bound(ir_node *block, ir_node *store,
+                              ir_node *idx, ir_node *lower, ir_node *upper);
 
 /** Constructor for a Pin node.
  *
  * @param *block      The block the node belong to.
  * @param *node       The node which value should be pinned.
  */
-ir_node *new_r_Pin(ir_node *block, ir_node *node);
+FIRM_API ir_node *new_r_Pin(ir_node *block, ir_node *node);
 
 /** Constructor for an ASM pseudo node.
  *
@@ -2780,10 +2830,10 @@ ir_node *new_r_Pin(ir_node *block, ir_node *node);
  * @param *clobber    The array of length n_clobber of clobbered registers.
  * @param *asm_text   The assembler text.
  */
-ir_node *new_r_ASM(ir_node *block,
-                   int arity, ir_node *in[], ir_asm_constraint *inputs,
-                   int n_outs, ir_asm_constraint *outputs,
-                   int n_clobber, ident *clobber[], ident *asm_text);
+FIRM_API ir_node *new_r_ASM(ir_node *block,
+                            int arity, ir_node *in[], ir_asm_constraint *inputs,
+                            int n_outs, ir_asm_constraint *outputs,
+                            int n_clobber, ident *clobber[], ident *asm_text);
 
 /*-----------------------------------------------------------------------*/
 /* The block oriented interface                                          */
@@ -2794,10 +2844,10 @@ ir_node *new_r_ASM(ir_node *block,
  *
  *  @param target  The new current block.
  */
-void     set_cur_block(ir_node *target);
+FIRM_API void set_cur_block(ir_node *target);
 
 /** Returns the current block of the current graph. */
-ir_node *get_cur_block(void);
+FIRM_API ir_node *get_cur_block(void);
 
 /** Constructor for a Block node.
  *
@@ -2809,7 +2859,7 @@ ir_node *get_cur_block(void);
  * @param in[]   An array of control predecessors.  The length of
  *               the array must be 'arity'.
  */
-ir_node *new_d_Block(dbg_info *db, int arity, ir_node *in[]);
+FIRM_API ir_node *new_d_Block(dbg_info *db, int arity, ir_node *in[]);
 
 /** Constructor for a Start node.
  *
@@ -2817,7 +2867,7 @@ ir_node *new_d_Block(dbg_info *db, int arity, ir_node *in[]);
  *
  * @param *db    A pointer for debug information.
  */
-ir_node *new_d_Start(dbg_info *db);
+FIRM_API ir_node *new_d_Start(dbg_info *db);
 
 /** Constructor for a End node.
  *
@@ -2825,7 +2875,7 @@ ir_node *new_d_Start(dbg_info *db);
  *
  * @param *db     A pointer for debug information.
  */
-ir_node *new_d_End(dbg_info *db);
+FIRM_API ir_node *new_d_End(dbg_info *db);
 
 /** Constructor for a Jmp node.
  *
@@ -2835,7 +2885,7 @@ ir_node *new_d_End(dbg_info *db);
  *
  * @param *db     A pointer for debug information.
  */
-ir_node *new_d_Jmp(dbg_info *db);
+FIRM_API ir_node *new_d_Jmp(dbg_info *db);
 
 /** Constructor for an IJmp node.
  *
@@ -2845,7 +2895,7 @@ ir_node *new_d_Jmp(dbg_info *db);
  * @param *db     A pointer for debug information.
  * @param *tgt    The IR node representing the target address.
  */
-ir_node *new_d_IJmp(dbg_info *db, ir_node *tgt);
+FIRM_API ir_node *new_d_IJmp(dbg_info *db, ir_node *tgt);
 
 /** Constructor for a Cond node.
  *
@@ -2861,7 +2911,7 @@ ir_node *new_d_IJmp(dbg_info *db, ir_node *tgt);
  * @param *db    A pointer for debug information.
  * @param *c     The conditions parameter.Can be of mode b or I_u.
  */
-ir_node *new_d_Cond(dbg_info *db, ir_node *c);
+FIRM_API ir_node *new_d_Cond(dbg_info *db, ir_node *c);
 
 /** Constructor for a Return node.
  *
@@ -2875,7 +2925,8 @@ ir_node *new_d_Cond(dbg_info *db, ir_node *c);
  * @param arity  Number of array indices.
  * @param *in    Array with index inputs to the node.
  */
-ir_node *new_d_Return(dbg_info *db, ir_node *store, int arity, ir_node *in[]);
+FIRM_API ir_node *new_d_Return(dbg_info *db, ir_node *store,
+                               int arity, ir_node *in[]);
 
 /** Constructor for a Const_type node.
  *
@@ -2890,7 +2941,7 @@ ir_node *new_d_Return(dbg_info *db, ir_node *store, int arity, ir_node *in[]);
                  added to the attributes of the node.
  * @param *tp    The type of the constant.
  */
-ir_node *new_d_Const_type(dbg_info *db, tarval *con, ir_type *tp);
+FIRM_API ir_node *new_d_Const_type(dbg_info *db, tarval *con, ir_type *tp);
 
 /** Constructor for a Const node.
  *
@@ -2905,7 +2956,16 @@ ir_node *new_d_Const_type(dbg_info *db, tarval *con, ir_type *tp);
  * @param *con   Points to an entry in the constant table. This pointer is added
  *               to the attributes of the node.
  */
-ir_node *new_d_Const(dbg_info *db, tarval *con);
+FIRM_API ir_node *new_d_Const(dbg_info *db, tarval *con);
+
+/**
+ * @see new_rd_Const_long()
+ *
+ * @param *db    A pointer for debug information.
+ * @param *mode  The mode of the operands and results.
+ * @param value  A value from which the tarval is made.
+ */
+FIRM_API ir_node *new_d_Const_long(dbg_info *db, ir_mode *mode, long value);
 
 /** Constructor for a SymConst_type node.
  *
@@ -2942,15 +3002,17 @@ ir_node *new_d_Const(dbg_info *db, tarval *con);
  * @param kind    The kind of the symbolic constant, see the list above
  * @param tp      The source type of the constant.
  */
-ir_node *new_d_SymConst_type(dbg_info *db, ir_mode *mode,
-                             union symconst_symbol value, symconst_kind kind, ir_type *tp);
+FIRM_API ir_node *new_d_SymConst_type(dbg_info *db, ir_mode *mode,
+                                      union symconst_symbol value,
+                                      symconst_kind kind, ir_type *tp);
 
 /** Constructor for a SymConst node.
  *
  *  Same as new_d_SymConst_type, except that it sets the type to type_unknown.
  */
-ir_node *new_d_SymConst(dbg_info *db, ir_mode *mode,
-                        union symconst_symbol value, symconst_kind kind);
+FIRM_API ir_node *new_d_SymConst(dbg_info *db, ir_mode *mode,
+                                 union symconst_symbol value,
+                                 symconst_kind kind);
 
 /** Constructor for a simpleSel node.
  *
@@ -2965,7 +3027,8 @@ ir_node *new_d_SymConst(dbg_info *db, ir_mode *mode,
  *                     single attribute out.
  * @param   *ent       The entity to select.
  */
-ir_node *new_d_simpleSel(dbg_info *db, ir_node *store, ir_node *objptr, ir_entity *ent);
+FIRM_API ir_node *new_d_simpleSel(dbg_info *db, ir_node *store, ir_node *objptr,
+                                  ir_entity *ent);
 
 /** Constructor for a Sel node.
  *
@@ -2986,8 +3049,8 @@ ir_node *new_d_simpleSel(dbg_info *db, ir_node *store, ir_node *objptr, ir_entit
  *                     element entity.  The constructor copies this array.
  * @param   *ent       The entity to select.
  */
-ir_node *new_d_Sel(dbg_info *db, ir_node *store, ir_node *objptr, int arity, ir_node *in[],
-                   ir_entity *ent);
+FIRM_API ir_node *new_d_Sel(dbg_info *db, ir_node *store, ir_node *objptr,
+                            int arity, ir_node *in[], ir_entity *ent);
 
 /** Constructor for a Call node.
  *
@@ -3001,8 +3064,8 @@ ir_node *new_d_Sel(dbg_info *db, ir_node *store, ir_node *objptr, int arity, ir_
  * @param   *in[]   An array with the pointers to the parameters. The constructor copies this array.
  * @param   *tp     Type information of the procedure called.
  */
-ir_node *new_d_Call(dbg_info *db, ir_node *store, ir_node *callee, int arity, ir_node *in[],
-                    ir_type *tp);
+FIRM_API ir_node *new_d_Call(dbg_info *db, ir_node *store, ir_node *callee,
+                             int arity, ir_node *in[], ir_type *tp);
 
 /** Constructor for a Builtin node.
  *
@@ -3016,7 +3079,9 @@ ir_node *new_d_Call(dbg_info *db, ir_node *store, ir_node *callee, int arity, ir
  * @param   kind    The kind of the called builtin.
  * @param   *tp     Type information of the procedure called.
  */
-ir_node *new_d_Builtin(dbg_info *db, ir_node *store, int arity, ir_node *in[], ir_builtin_kind kind, ir_type *tp);
+FIRM_API ir_node *new_d_Builtin(dbg_info *db, ir_node *store,
+                                int arity, ir_node *in[],
+                                ir_builtin_kind kind, ir_type *tp);
 
 /** Constructor for a Add node.
  *
@@ -3027,7 +3092,8 @@ ir_node *new_d_Builtin(dbg_info *db, ir_node *store, int arity, ir_node *in[], i
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_d_Add(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_d_Add(dbg_info *db, ir_node *op1, ir_node *op2,
+                            ir_mode *mode);
 
 /** Constructor for a Sub node.
  *
@@ -3038,7 +3104,8 @@ ir_node *new_d_Add(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_d_Sub(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_d_Sub(dbg_info *db, ir_node *op1, ir_node *op2,
+                            ir_mode *mode);
 
 /** Constructor for a Minus node.
  *
@@ -3048,7 +3115,7 @@ ir_node *new_d_Sub(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op    The operand .
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_d_Minus(dbg_info *db, ir_node *op,  ir_mode *mode);
+FIRM_API ir_node *new_d_Minus(dbg_info *db, ir_node *op,  ir_mode *mode);
 
 /** Constructor for a Mul node.
  *
@@ -3059,7 +3126,8 @@ ir_node *new_d_Minus(dbg_info *db, ir_node *op,  ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_d_Mul(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_d_Mul(dbg_info *db, ir_node *op1, ir_node *op2,
+                            ir_mode *mode);
 
 /** Constructor for a Mulh node.
  *
@@ -3070,7 +3138,8 @@ ir_node *new_d_Mul(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @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);
+FIRM_API ir_node *new_d_Mulh(dbg_info *db, ir_node *op1, ir_node *op2,
+                             ir_mode *mode);
 
 /** Constructor for a Quot node.
  *
@@ -3083,7 +3152,9 @@ ir_node *new_d_Mulh(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @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, op_pin_state state);
+FIRM_API 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.
  *
@@ -3096,7 +3167,8 @@ ir_node *new_d_Quot(dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir
  * @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, op_pin_state state);
+FIRM_API 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.
  *
@@ -3109,7 +3181,8 @@ ir_node *new_d_DivMod(dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2,
  * @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, op_pin_state state);
+FIRM_API 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 remainderless Div node.
  *
@@ -3122,7 +3195,9 @@ ir_node *new_d_Div(dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_
  * @param   *mode  The mode of the result.
  * @param   state  The pinned state.
  */
-ir_node *new_d_DivRL(dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+FIRM_API ir_node *new_d_DivRL(dbg_info *db, ir_node *memop,
+                              ir_node *op1, ir_node *op2, ir_mode *mode,
+                              op_pin_state state);
 
 /** Constructor for a Mod node.
  *
@@ -3135,7 +3210,9 @@ ir_node *new_d_DivRL(dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, i
  * @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, op_pin_state state);
+FIRM_API 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.
  *
@@ -3145,7 +3222,7 @@ ir_node *new_d_Mod(dbg_info *db, ir_node *memop, ir_node *op1, ir_node *op2, ir_
  * @param   *op    The operand
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_d_Abs(dbg_info *db, ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_d_Abs(dbg_info *db, ir_node *op, ir_mode *mode);
 
 /** Constructor for a And node.
  *
@@ -3156,7 +3233,8 @@ ir_node *new_d_Abs(dbg_info *db, ir_node *op, ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_d_And(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_d_And(dbg_info *db, ir_node *op1, ir_node *op2,
+                            ir_mode *mode);
 
 /** Constructor for a Or node.
  *
@@ -3167,7 +3245,8 @@ ir_node *new_d_And(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_d_Or(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_d_Or(dbg_info *db, ir_node *op1, ir_node *op2,
+                           ir_mode *mode);
 
 /** Constructor for a Eor node.
  *
@@ -3178,7 +3257,8 @@ ir_node *new_d_Or(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the results.
  */
-ir_node *new_d_Eor(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_d_Eor(dbg_info *db, ir_node *op1, ir_node *op2,
+                            ir_mode *mode);
 
 /** Constructor for a Not node.
  *
@@ -3188,7 +3268,7 @@ ir_node *new_d_Eor(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op    The operand.
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_d_Not(dbg_info *db, ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_d_Not(dbg_info *db, ir_node *op, ir_mode *mode);
 
 /** Constructor for a Shl node.
  *
@@ -3199,7 +3279,8 @@ ir_node *new_d_Not(dbg_info *db, ir_node *op, ir_mode *mode);
  * @param   *k     The number of bits to  shift the operand .
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_d_Shl(dbg_info *db, ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_d_Shl(dbg_info *db, ir_node *op, ir_node *k,
+                            ir_mode *mode);
 
 /** Constructor for a Shr node.
  *
@@ -3210,7 +3291,8 @@ ir_node *new_d_Shl(dbg_info *db, ir_node *op, ir_node *k, ir_mode *mode);
  * @param   *k     The number of bits to  shift the operand .
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_d_Shr(dbg_info *db, ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_d_Shr(dbg_info *db, ir_node *op, ir_node *k,
+                            ir_mode *mode);
 
 /** Constructor for a Shrs node.
  *
@@ -3221,7 +3303,8 @@ ir_node *new_d_Shr(dbg_info *db, ir_node *op, ir_node *k, ir_mode *mode);
  * @param   *k     The number of bits to  shift the operand .
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_d_Shrs(dbg_info *db, ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_d_Shrs(dbg_info *db, ir_node *op, ir_node *k,
+                             ir_mode *mode);
 
 /** Constructor for a Rotl node.
  *
@@ -3232,7 +3315,8 @@ ir_node *new_d_Shrs(dbg_info *db, ir_node *op, ir_node *k, ir_mode *mode);
  * @param   *k     The number of bits to rotate the operand.
  * @param   *mode  The mode of the operand.
  */
-ir_node *new_d_Rotl(dbg_info *db, ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_d_Rotl(dbg_info *db, ir_node *op, ir_node *k,
+                             ir_mode *mode);
 
 /** Constructor for a Cmp node.
  *
@@ -3242,7 +3326,7 @@ ir_node *new_d_Rotl(dbg_info *db, ir_node *op, ir_node *k, ir_mode *mode);
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  */
-ir_node *new_d_Cmp(dbg_info *db, ir_node *op1, ir_node *op2);
+FIRM_API ir_node *new_d_Cmp(dbg_info *db, ir_node *op1, ir_node *op2);
 
 /** Constructor for a Conv node.
  *
@@ -3252,7 +3336,7 @@ ir_node *new_d_Cmp(dbg_info *db, ir_node *op1, ir_node *op2);
  * @param   *op    The operand.
  * @param   *mode  The mode of this the operand muss be converted .
  */
-ir_node *new_d_Conv(dbg_info *db, ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_d_Conv(dbg_info *db, ir_node *op, ir_mode *mode);
 
 /** Constructor for a strict Conv node.
  *
@@ -3262,7 +3346,7 @@ ir_node *new_d_Conv(dbg_info *db, ir_node *op, ir_mode *mode);
  * @param   *op    The operand.
  * @param   *mode  The mode of this the operand muss be converted .
  */
-ir_node *new_d_strictConv(dbg_info *db, ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_d_strictConv(dbg_info *db, ir_node *op, ir_mode *mode);
 
 /** Constructor for a Cast node.
  *
@@ -3273,7 +3357,7 @@ ir_node *new_d_strictConv(dbg_info *db, ir_node *op, ir_mode *mode);
  * @param   *op    The operand.
  * @param   *to_tp The type of this the operand muss be casted .
  */
-ir_node *new_d_Cast(dbg_info *db, ir_node *op, ir_type *to_tp);
+FIRM_API ir_node *new_d_Cast(dbg_info *db, ir_node *op, ir_type *to_tp);
 
 /** Constructor for a Carry node.
  *
@@ -3284,7 +3368,8 @@ ir_node *new_d_Cast(dbg_info *db, ir_node *op, ir_type *to_tp);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_d_Carry(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_d_Carry(dbg_info *db, ir_node *op1, ir_node *op2,
+                              ir_mode *mode);
 
 /** Constructor for a Borrow node.
  *
@@ -3295,7 +3380,8 @@ ir_node *new_d_Carry(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_d_Borrow(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_d_Borrow(dbg_info *db, ir_node *op1, ir_node *op2,
+                               ir_mode *mode);
 
 /** Constructor for a Phi node.
  *
@@ -3306,7 +3392,8 @@ ir_node *new_d_Borrow(dbg_info *db, ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param *in    Array with predecessors
  * @param *mode  The mode of it's inputs and output.
  */
-ir_node *new_d_Phi(dbg_info *db, int arity, ir_node *in[], ir_mode *mode);
+FIRM_API ir_node *new_d_Phi(dbg_info *db, int arity, ir_node *in[],
+                            ir_mode *mode);
 
 /** Constructor for a Load node.
  *
@@ -3318,7 +3405,8 @@ ir_node *new_d_Phi(dbg_info *db, int arity, ir_node *in[], ir_mode *mode);
  * @param *mode  The mode of the value to be loaded.
  * @param  flags Additional flags for alignment, volatility and pin state.
  */
-ir_node *new_d_Load(dbg_info *db, ir_node *store, ir_node *addr, ir_mode *mode, ir_cons_flags flags);
+FIRM_API ir_node *new_d_Load(dbg_info *db, ir_node *store, ir_node *addr,
+                             ir_mode *mode, ir_cons_flags flags);
 
 /** Constructor for a Store node.
  *
@@ -3330,7 +3418,8 @@ ir_node *new_d_Load(dbg_info *db, ir_node *store, ir_node *addr, ir_mode *mode,
  * @param *val   The value to write to this variable.
  * @param  flags Additional flags for alignment, volatility and pin state.
  */
-ir_node *new_d_Store(dbg_info *db, ir_node *store, ir_node *addr, ir_node *val, ir_cons_flags flags);
+FIRM_API ir_node *new_d_Store(dbg_info *db, ir_node *store, ir_node *addr,
+                              ir_node *val, ir_cons_flags flags);
 
 /** Constructor for a Alloc node.
  *
@@ -3343,8 +3432,8 @@ ir_node *new_d_Store(dbg_info *db, ir_node *store, ir_node *addr, ir_node *val,
  * @param *alloc_type The type of the allocated variable.
  * @param where       Where to allocate the variable, either heap_alloc or stack_alloc.
  */
-ir_node *new_d_Alloc(dbg_info *db, ir_node *store, ir_node *count, ir_type *alloc_type,
-                     ir_where_alloc where);
+FIRM_API ir_node *new_d_Alloc(dbg_info *db, ir_node *store, ir_node *count,
+                              ir_type *alloc_type, ir_where_alloc where);
 
  /** Constructor for a Free node.
  *
@@ -3359,8 +3448,9 @@ ir_node *new_d_Alloc(dbg_info *db, ir_node *store, ir_node *count, ir_type *allo
  * @param *free_type  The type of the freed variable.
  * @param where       Where the variable was allocated, either heap_alloc or stack_alloc.
  */
-ir_node *new_d_Free(dbg_info *db, ir_node *store, ir_node *ptr, ir_node *size,
-                    ir_type *free_type, ir_where_alloc where);
+FIRM_API ir_node *new_d_Free(dbg_info *db, ir_node *store, ir_node *ptr,
+                             ir_node *size, ir_type *free_type,
+                             ir_where_alloc where);
 
 /** Constructor for a Sync node.
  *
@@ -3374,7 +3464,7 @@ ir_node *new_d_Free(dbg_info *db, ir_node *store, ir_node *ptr, ir_node *size,
  * @param  **in     An array of pointers to nodes that produce an output of type
  *                  memory.  The constructor copies this array.
  */
-ir_node *new_d_Sync(dbg_info *db, int arity, ir_node *in[]);
+FIRM_API ir_node *new_d_Sync(dbg_info *db, int arity, ir_node *in[]);
 
 /** Constructor for a Proj node.
  *
@@ -3387,7 +3477,8 @@ ir_node *new_d_Sync(dbg_info *db, int arity, ir_node *in[]);
  * @param *mode  The mode of the value to project.
  * @param proj   The position of the value in the tuple.
  */
-ir_node *new_d_Proj(dbg_info *db, ir_node *arg, ir_mode *mode, long proj);
+FIRM_API ir_node *new_d_Proj(dbg_info *db, ir_node *arg, ir_mode *mode,
+                             long proj);
 
 /** Constructor for a defaultProj node.
  *
@@ -3398,7 +3489,7 @@ ir_node *new_d_Proj(dbg_info *db, ir_node *arg, ir_mode *mode, long proj);
  * @param arg       A node producing a tuple.
  * @param max_proj  The end  position of the value in the tuple.
  */
-ir_node *new_d_defaultProj(dbg_info *db, ir_node *arg, long max_proj);
+FIRM_API ir_node *new_d_defaultProj(dbg_info *db, ir_node *arg, long max_proj);
 
 /** Constructor for a Tuple node.
  *
@@ -3410,7 +3501,7 @@ ir_node *new_d_defaultProj(dbg_info *db, ir_node *arg, long max_proj);
  * @param arity   The number of tuple elements.
  * @param **in    An array containing pointers to the nodes producing the tuple elements.
  */
-ir_node *new_d_Tuple(dbg_info *db, int arity, ir_node *in[]);
+FIRM_API ir_node *new_d_Tuple(dbg_info *db, int arity, ir_node *in[]);
 
 /** Constructor for a Id node.
  *
@@ -3421,7 +3512,7 @@ ir_node *new_d_Tuple(dbg_info *db, int arity, ir_node *in[]);
  * @param *val    The operand to Id.
  * @param *mode   The mode of *val.
  */
-ir_node *new_d_Id(dbg_info *db, ir_node *val, ir_mode *mode);
+FIRM_API ir_node *new_d_Id(dbg_info *db, ir_node *val, ir_mode *mode);
 
 /** Constructor for a Confirm node.
  *
@@ -3436,7 +3527,8 @@ ir_node *new_d_Id(dbg_info *db, ir_node *val, ir_mode *mode);
  * @param *bound  The value to compare against. Must be a firm node, typically a constant.
  * @param cmp     The compare operation.
  */
-ir_node *new_d_Confirm(dbg_info *db, ir_node *val, ir_node *bound, pn_Cmp cmp);
+FIRM_API ir_node *new_d_Confirm(dbg_info *db, ir_node *val, ir_node *bound,
+                                pn_Cmp cmp);
 
 /** Constructor for an Unknown node.
  *
@@ -3446,7 +3538,7 @@ ir_node *new_d_Confirm(dbg_info *db, ir_node *val, ir_node *bound, pn_Cmp cmp);
  * @param *db     A pointer for debug information.
  * @param *m      The mode of the unknown value.
  */
-ir_node *new_d_Unknown(dbg_info *db, ir_mode *m);
+FIRM_API ir_node *new_d_Unknown(dbg_info *db, ir_mode *m);
 
 /** Constructor for a CallBegin node.
  *
@@ -3456,9 +3548,10 @@ ir_node *new_d_Unknown(dbg_info *db, ir_mode *m);
  * node.Adds the node to the block in current_ir_block.
  *
  * @param *db     A pointer for debug information.
- * @param *callee The call node visible in the  intra procedural view.
+ * @param *ptr    pointer to the called function
+ * @param *call   associated call operation
  */
-ir_node *new_d_CallBegin(dbg_info *db, ir_node *ptr, ir_node *call);
+FIRM_API ir_node *new_d_CallBegin(dbg_info *db, ir_node *ptr, ir_node *call);
 
 /** Constructor for an EndReg node.
  *
@@ -3466,7 +3559,7 @@ ir_node *new_d_CallBegin(dbg_info *db, ir_node *ptr, ir_node *call);
  *
  * @param *db     A pointer for debug information.
  */
-ir_node *new_d_EndReg(dbg_info *db);
+FIRM_API ir_node *new_d_EndReg(dbg_info *db);
 
 /** Constructor for an EndExcept node.
  *
@@ -3475,7 +3568,7 @@ ir_node *new_d_EndReg(dbg_info *db);
  *
  * @param *db     A pointer for debug information.
  */
-ir_node *new_d_EndExcept(dbg_info *db);
+FIRM_API ir_node *new_d_EndExcept(dbg_info *db);
 
 /** Constructor for a Break node.
  *
@@ -3489,7 +3582,7 @@ ir_node *new_d_EndExcept(dbg_info *db);
  *
  * @param *db     A pointer for debug information.
  */
-ir_node *new_d_Break(dbg_info *db);
+FIRM_API ir_node *new_d_Break(dbg_info *db);
 
 /** Constructor for a Filter node.
  *
@@ -3508,7 +3601,8 @@ ir_node *new_d_Break(dbg_info *db);
  * @param *mode The mode of the projected value.
  * @param proj  The position in the tuple to project from.
  */
-ir_node *new_d_Filter(dbg_info *db, ir_node *arg, ir_mode *mode, long proj);
+FIRM_API ir_node *new_d_Filter(dbg_info *db, ir_node *arg, ir_mode *mode,
+                               long proj);
 
 /** Constructor for a Mux node.
  *
@@ -3518,8 +3612,8 @@ ir_node *new_d_Filter(dbg_info *db, ir_node *arg, ir_mode *mode, long proj);
  * @param *ir_false The ir_node that calculates the false result.
  * @param *mode     The mode of the node (and it_true and ir_false).
  */
-ir_node *new_d_Mux(dbg_info *db, ir_node *sel,
-                   ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+FIRM_API ir_node *new_d_Mux(dbg_info *db, ir_node *sel,
+                            ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
 
 /** Constructor for a CopyB node.
  *
@@ -3529,7 +3623,8 @@ ir_node *new_d_Mux(dbg_info *db, ir_node *sel,
  * @param *src        The ir_node that represents the source address.
  * @param *data_type  The type of the copied data
  */
-ir_node *new_d_CopyB(dbg_info *db, ir_node *store, ir_node *dst, ir_node *src, ir_type *data_type);
+FIRM_API ir_node *new_d_CopyB(dbg_info *db, ir_node *store, ir_node *dst,
+                              ir_node *src, ir_type *data_type);
 
 /** Constructor for a InstOf node.
  *
@@ -3541,7 +3636,8 @@ ir_node *new_d_CopyB(dbg_info *db, ir_node *store, ir_node *dst, ir_node *src, i
  * @param   *objptr    A pointer to a object of a class type.
  * @param   *type      The type of which objptr must be.
  */
-ir_node *new_d_InstOf(dbg_info *db, ir_node *store, ir_node *objptr, ir_type *type);
+FIRM_API ir_node *new_d_InstOf(dbg_info *db, ir_node *store, ir_node *objptr,
+                               ir_type *type);
 
 /** Constructor for a Raise node.
  *
@@ -3551,7 +3647,7 @@ ir_node *new_d_InstOf(dbg_info *db, ir_node *store, ir_node *objptr, ir_type *ty
  * @param *store The current memory.
  * @param *obj   A pointer to the Except variable.
  */
-ir_node *new_d_Raise(dbg_info *db, ir_node *store, ir_node *obj);
+FIRM_API ir_node *new_d_Raise(dbg_info *db, ir_node *store, ir_node *obj);
 
 /** Constructor for a Bound node.
  *
@@ -3563,14 +3659,15 @@ ir_node *new_d_Raise(dbg_info *db, ir_node *store, ir_node *obj);
  * @param *lower      The ir_node that represents the lower bound for the index.
  * @param *upper      The ir_node that represents the upper bound for the index.
  */
-ir_node *new_d_Bound(dbg_info *db, ir_node *store, ir_node *idx, ir_node *lower, ir_node *upper);
+FIRM_API ir_node *new_d_Bound(dbg_info *db, ir_node *store, ir_node *idx,
+                              ir_node *lower, ir_node *upper);
 
 /** Constructor for a Pin node.
  *
  * @param *db         A pointer for debug information.
  * @param *node       The node which value should be pinned.
  */
-ir_node *new_d_Pin(dbg_info *db, ir_node *node);
+FIRM_API ir_node *new_d_Pin(dbg_info *db, ir_node *node);
 
 /** Constructor for an ASM pseudo node.
  *
@@ -3584,9 +3681,10 @@ ir_node *new_d_Pin(dbg_info *db, ir_node *node);
  * @param *clobber    The array of length n_clobber of clobbered registers.
  * @param *asm_text   The assembler text.
  */
-ir_node *new_d_ASM(dbg_info *db, int arity, ir_node *in[], ir_asm_constraint *inputs,
-                   int n_outs, ir_asm_constraint *outputs,
-                   int n_clobber, ident *clobber[], ident *asm_text);
+FIRM_API ir_node *new_d_ASM(dbg_info *db, int arity, ir_node *in[],
+                            ir_asm_constraint *inputs,
+                            int n_outs, ir_asm_constraint *outputs,
+                            int n_clobber, ident *clobber[], ident *asm_text);
 
 /*-----------------------------------------------------------------------*/
 /* The block oriented interface without debug support                    */
@@ -3601,34 +3699,34 @@ ir_node *new_d_ASM(dbg_info *db, int arity, ir_node *in[], ir_asm_constraint *in
  * @param in     An array of control predecessors.  The length of
  *               the array must be 'arity'.
  */
-ir_node *new_Block(int arity, ir_node *in[]);
+FIRM_API ir_node *new_Block(int arity, ir_node *in[]);
 
 /** Constructor for a Start node.
  *
  * Adds the node to the block in current_ir_block.
  *
  */
-ir_node *new_Start(void);
+FIRM_API ir_node *new_Start(void);
 
 /** Constructor for an End node.
  *
  * Adds the node to the block in current_ir_block.
  */
-ir_node *new_End(void);
+FIRM_API ir_node *new_End(void);
 
 /** Constructor for an EndReg node.
  *
  * Used to represent regular procedure end in interprocedual view.
  * Adds the node to the block in current_ir_block.
  */
-ir_node *new_EndReg(void);
+FIRM_API ir_node *new_EndReg(void);
 
 /** Constructor for an EndExpcept node.
  *
  *  Used to represent exceptional procedure end in interprocedural view.
  *  Adds the node to the block in current_ir_block.
  */
-ir_node *new_EndExcept(void);
+FIRM_API ir_node *new_EndExcept(void);
 
 /** Constructor for a Jump node.
  *
@@ -3636,7 +3734,7 @@ ir_node *new_EndExcept(void);
  *
  * Jmp represents control flow to a single control successor.
  */
-ir_node *new_Jmp(void);
+FIRM_API ir_node *new_Jmp(void);
 
 /** Constructor for an IJmp node.
  *
@@ -3645,7 +3743,7 @@ ir_node *new_Jmp(void);
  *
  * @param *tgt    The IR node representing the target address.
  */
-ir_node *new_IJmp(ir_node *tgt);
+FIRM_API ir_node *new_IJmp(ir_node *tgt);
 
 /** Constructor for a Break node.
  * Break represents control flow to a single control successor just as Jmp.
@@ -3654,7 +3752,7 @@ ir_node *new_IJmp(ir_node *tgt);
  * behind Call nodes to represent the control flow to called procedures.
  * Adds the node to the block in current_ir_block.
  */
-ir_node *new_Break(void);
+FIRM_API ir_node *new_Break(void);
 
 /** Constructor for a Cond node.
  *
@@ -3668,7 +3766,7 @@ ir_node *new_Break(void);
  *
  * @param *c     The conditions parameter.Can be of mode b or I_u.
  */
-ir_node *new_Cond(ir_node *c);
+FIRM_API ir_node *new_Cond(ir_node *c);
 
 /** Constructor for a Return node.
  *
@@ -3679,7 +3777,7 @@ ir_node *new_Cond(ir_node *c);
  * @param arity  Number of array indices.
  * @param *in    Array with index inputs to the node.
  */
-ir_node *new_Return(ir_node *store, int arity, ir_node *in[]);
+FIRM_API ir_node *new_Return(ir_node *store, int arity, ir_node *in[]);
 
 /** Constructor for a Const node.
  *
@@ -3692,7 +3790,7 @@ ir_node *new_Return(ir_node *store, int arity, ir_node *in[]);
  * @param *con   Points to an entry in the constant table. This pointer is
  *               added to the attributes of  the node.
  */
-ir_node *new_Const(tarval *con);
+FIRM_API ir_node *new_Const(tarval *con);
 
 /**
  * Make a const from a long.
@@ -3705,12 +3803,12 @@ ir_node *new_Const(tarval *con);
  * @param value The value of the constant.
  * @return A new const node.
  */
-ir_node *new_Const_long(ir_mode *mode, long value);
+FIRM_API ir_node *new_Const_long(ir_mode *mode, long value);
 
 /** Constructor for a Const node.
  *
  * Derives mode from passed tarval. */
-ir_node *new_Const_type(tarval *con, ir_type *tp);
+FIRM_API ir_node *new_Const_type(tarval *con, ir_type *tp);
 
 /** Constructor for a SymConst_type node.
  *
@@ -3746,7 +3844,8 @@ ir_node *new_Const_type(tarval *con, ir_type *tp);
  * @param kind    The kind of the symbolic constant, see the list above
  * @param tp      The source type of the constant.
  */
-ir_node *new_SymConst_type(ir_mode *mode, union symconst_symbol value, symconst_kind kind, ir_type *tp);
+FIRM_API ir_node *new_SymConst_type(ir_mode *mode, union symconst_symbol value,
+                                    symconst_kind kind, ir_type *tp);
 
 /** Constructor for a SymConst node.
  *
@@ -3781,7 +3880,8 @@ ir_node *new_SymConst_type(ir_mode *mode, union symconst_symbol value, symconst_
  *                SymConst kind.
  * @param kind    The kind of the symbolic constant, see the list above
  */
-ir_node *new_SymConst(ir_mode *mode, union symconst_symbol value, symconst_kind kind);
+FIRM_API ir_node *new_SymConst(ir_mode *mode, union symconst_symbol value,
+                               symconst_kind kind);
 
 /** Constructor for a simpelSel node.
  *
@@ -3793,7 +3893,8 @@ ir_node *new_SymConst(ir_mode *mode, union symconst_symbol value, symconst_kind
  * @param   *objptr    The object from that the Sel operation selects a single attribute out.
  * @param   *ent       The entity to select.
  */
-ir_node *new_simpleSel(ir_node *store, ir_node *objptr, ir_entity *ent);
+FIRM_API ir_node *new_simpleSel(ir_node *store, ir_node *objptr,
+                                ir_entity *ent);
 
 /** Constructor for a Sel node.
  *
@@ -3813,8 +3914,8 @@ ir_node *new_simpleSel(ir_node *store, ir_node *objptr, ir_entity *ent);
  *                     element entity.  The constructor copies this array.
  * @param   *ent       The entity to select.
  */
-ir_node *new_Sel(ir_node *store, ir_node *objptr, int arity, ir_node *in[],
-                 ir_entity *ent);
+FIRM_API ir_node *new_Sel(ir_node *store, ir_node *objptr,
+                          int arity, ir_node *in[], ir_entity *ent);
 
 /** Constructor for a Call node.
  *
@@ -3827,8 +3928,8 @@ ir_node *new_Sel(ir_node *store, ir_node *objptr, int arity, ir_node *in[],
  * @param   *in[]   An array with the pointers to the parameters. The constructor copies this array.
  * @param   *tp     Type information of the procedure called.
  */
-ir_node *new_Call(ir_node *store, ir_node *callee, int arity, ir_node *in[],
-                  ir_type *tp);
+FIRM_API ir_node *new_Call(ir_node *store, ir_node *callee,
+                           int arity, ir_node *in[], ir_type *tp);
 
 /** Constructor for a Builtin node.
  *
@@ -3841,8 +3942,8 @@ ir_node *new_Call(ir_node *store, ir_node *callee, int arity, ir_node *in[],
  * @param   *in[]   An array with the pointers to the parameters. The constructor copies this array.
  * @param   *tp     Type information of the procedure called.
  */
-ir_node *new_Builtin(ir_node *store, int arity, ir_node *in[],
-                     ir_builtin_kind kind, ir_type *tp);
+FIRM_API ir_node *new_Builtin(ir_node *store, int arity, ir_node *in[],
+                              ir_builtin_kind kind, ir_type *tp);
 
 /** Constructor for a CallBegin node.
  *
@@ -3851,9 +3952,10 @@ ir_node *new_Builtin(ir_node *store, int arity, ir_node *in[],
  * constructor copies the method pointer input from the passed Call
  * node. Adds the node to the block in current_ir_block.
  *
- * @param   *callee A pointer to the called procedure.
+ * @param *ptr    pointer to the called function
+ * @param *call   associated call operation
  */
-ir_node *new_CallBegin(ir_node *ptr, ir_node *call);
+FIRM_API ir_node *new_CallBegin(ir_node *ptr, ir_node *call);
 
 /** Constructor for a Add node.
  *
@@ -3863,7 +3965,7 @@ ir_node *new_CallBegin(ir_node *ptr, ir_node *call);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_Add(ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_Add(ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Sub node.
  *
@@ -3873,7 +3975,7 @@ ir_node *new_Add(ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_Sub(ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_Sub(ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Minus node.
  *
@@ -3882,7 +3984,7 @@ ir_node *new_Sub(ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op    The operand .
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_Minus(ir_node *op,  ir_mode *mode);
+FIRM_API ir_node *new_Minus(ir_node *op,  ir_mode *mode);
 
 /**
  * Constructor for a Mul node. Adds the node to the block in current_ir_block.
@@ -3891,7 +3993,7 @@ ir_node *new_Minus(ir_node *op,  ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_Mul(ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API 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.
@@ -3900,7 +4002,7 @@ ir_node *new_Mul(ir_node *op1, ir_node *op2, ir_mode *mode);
  * @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);
+FIRM_API ir_node *new_Mulh(ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Quot node.
  *
@@ -3912,7 +4014,8 @@ ir_node *new_Mulh(ir_node *op1, ir_node *op2, ir_mode *mode);
  * @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, op_pin_state state);
+FIRM_API 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.
  *
@@ -3924,7 +4027,8 @@ ir_node *new_Quot(ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_
  * @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, op_pin_state state);
+FIRM_API 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.
  *
@@ -3936,7 +4040,8 @@ ir_node *new_DivMod(ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, o
  * @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, op_pin_state state);
+FIRM_API ir_node *new_Div(ir_node *memop, ir_node *op1, ir_node *op2,
+                          ir_mode *mode, op_pin_state state);
 
 /** Constructor for a remainderless Div node.
  *
@@ -3948,7 +4053,8 @@ ir_node *new_Div(ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_p
  * @param   *mode  The mode of the result.
  * @param   state  The pinned state.
  */
-ir_node *new_DivRL(ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_pin_state state);
+FIRM_API ir_node *new_DivRL(ir_node *memop, ir_node *op1, ir_node *op2,
+                            ir_mode *mode, op_pin_state state);
 
 /** Constructor for a Mod node.
  *
@@ -3960,7 +4066,8 @@ ir_node *new_DivRL(ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op
  * @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, op_pin_state state);
+FIRM_API 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.
  *
@@ -3969,7 +4076,7 @@ ir_node *new_Mod(ir_node *memop, ir_node *op1, ir_node *op2, ir_mode *mode, op_p
  * @param   *op    The operand
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_Abs(ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_Abs(ir_node *op, ir_mode *mode);
 
 /** Constructor for a And node.
  *
@@ -3979,7 +4086,7 @@ ir_node *new_Abs(ir_node *op, ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_And(ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_And(ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /**
  * Constructor for a Or node. Adds the node to the block in current_ir_block.
@@ -3988,7 +4095,7 @@ ir_node *new_And(ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_Or(ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_Or(ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /**
  * Constructor for a Eor node. Adds the node to the block in current_ir_block.
@@ -3997,7 +4104,7 @@ ir_node *new_Or(ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the results.
  */
-ir_node *new_Eor(ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_Eor(ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Not node.
  *
@@ -4006,7 +4113,7 @@ ir_node *new_Eor(ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op    The operand.
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_Not(ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_Not(ir_node *op, ir_mode *mode);
 
 /** Constructor for a Shl node.
  *
@@ -4016,7 +4123,7 @@ ir_node *new_Not(ir_node *op, ir_mode *mode);
  * @param   *k     The number of bits to  shift the operand .
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_Shl(ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_Shl(ir_node *op, ir_node *k, ir_mode *mode);
 
 /**
  * Constructor for a Shr node. Adds the node to the block in current_ir_block.
@@ -4025,7 +4132,7 @@ ir_node *new_Shl(ir_node *op, ir_node *k, ir_mode *mode);
  * @param   *k     The number of bits to  shift the operand .
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_Shr(ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_Shr(ir_node *op, ir_node *k, ir_mode *mode);
 
 /** Constructor for a Shrs node.
  *
@@ -4035,7 +4142,7 @@ ir_node *new_Shr(ir_node *op, ir_node *k, ir_mode *mode);
  * @param   *k     The number of bits to  shift the operand .
  * @param   *mode  The mode of the operand and the result.
  */
-ir_node *new_Shrs(ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_Shrs(ir_node *op, ir_node *k, ir_mode *mode);
 
 /** Constructor for a Rotl node.
  *
@@ -4045,7 +4152,7 @@ ir_node *new_Shrs(ir_node *op, ir_node *k, ir_mode *mode);
  * @param   *k     The number of bits to rotate the operand.
  * @param   *mode  The mode of the operand.
  */
-ir_node *new_Rotl(ir_node *op, ir_node *k, ir_mode *mode);
+FIRM_API ir_node *new_Rotl(ir_node *op, ir_node *k, ir_mode *mode);
 
 /** Constructor for a Cmp node.
  *
@@ -4054,7 +4161,7 @@ ir_node *new_Rotl(ir_node *op, ir_node *k, ir_mode *mode);
  * @param   *op1   The first operand.
  * @param   *op2   The second operand.
  */
-ir_node *new_Cmp(ir_node *op1, ir_node *op2);
+FIRM_API ir_node *new_Cmp(ir_node *op1, ir_node *op2);
 
 /** Constructor for a Conv node.
  *
@@ -4063,7 +4170,7 @@ ir_node *new_Cmp(ir_node *op1, ir_node *op2);
  * @param   *op          The operand.
  * @param   *mode        The mode of this the operand muss be converted.
  */
-ir_node *new_Conv(ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_Conv(ir_node *op, ir_mode *mode);
 
 /** Constructor for a strict Conv node.
  *
@@ -4072,7 +4179,7 @@ ir_node *new_Conv(ir_node *op, ir_mode *mode);
  * @param   *op          The operand.
  * @param   *mode        The mode of this the operand muss be converted.
  */
-ir_node *new_strictConv(ir_node *op, ir_mode *mode);
+FIRM_API ir_node *new_strictConv(ir_node *op, ir_mode *mode);
 
 /** Constructor for a Cast node.
  *
@@ -4082,7 +4189,7 @@ ir_node *new_strictConv(ir_node *op, ir_mode *mode);
  * @param   *op    The operand.
  * @param   *to_tp The type of this the operand muss be casted .
  */
-ir_node *new_Cast(ir_node *op, ir_type *to_tp);
+FIRM_API ir_node *new_Cast(ir_node *op, ir_type *to_tp);
 
 /** Constructor for a Carry node.
  *
@@ -4092,7 +4199,7 @@ ir_node *new_Cast(ir_node *op, ir_type *to_tp);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_Carry(ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_Carry(ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Borrow node.
  *
@@ -4102,7 +4209,7 @@ ir_node *new_Carry(ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param   *op2   The second operand.
  * @param   *mode  The mode of the operands and the result.
  */
-ir_node *new_Borrow(ir_node *op1, ir_node *op2, ir_mode *mode);
+FIRM_API ir_node *new_Borrow(ir_node *op1, ir_node *op2, ir_mode *mode);
 
 /** Constructor for a Phi node.
  *
@@ -4112,7 +4219,7 @@ ir_node *new_Borrow(ir_node *op1, ir_node *op2, ir_mode *mode);
  * @param *in    Array with predecessors.
  * @param *mode  The mode of it's inputs and output.
  */
-ir_node *new_Phi(int arity, ir_node *in[], ir_mode *mode);
+FIRM_API ir_node *new_Phi(int arity, ir_node *in[], ir_mode *mode);
 
 /** Constructor for a Load node.
  *
@@ -4121,7 +4228,8 @@ ir_node *new_Phi(int arity, ir_node *in[], ir_mode *mode);
  * @param *mode   The mode of the value to be loaded.
  * @param  flags  Additional flags for alignment, volatility and pin state.
  */
-ir_node *new_Load(ir_node *store, ir_node *addr, ir_mode *mode, ir_cons_flags flags);
+FIRM_API ir_node *new_Load(ir_node *store, ir_node *addr, ir_mode *mode,
+                           ir_cons_flags flags);
 
 /** Constructor for a Store node.
  *
@@ -4130,7 +4238,8 @@ ir_node *new_Load(ir_node *store, ir_node *addr, ir_mode *mode, ir_cons_flags fl
  * @param *val    The value to write to this variable.
  * @param  flags  Additional flags for alignment, volatility and pin state.
  */
-ir_node *new_Store(ir_node *store, ir_node *addr, ir_node *val, ir_cons_flags flags);
+FIRM_API ir_node *new_Store(ir_node *store, ir_node *addr, ir_node *val,
+                            ir_cons_flags flags);
 
 /** Constructor for a Alloc node.
  *
@@ -4142,8 +4251,8 @@ ir_node *new_Store(ir_node *store, ir_node *addr, ir_node *val, ir_cons_flags fl
  * @param *alloc_type The type of the allocated variable.
  * @param where       Where to allocate the variable, either heap_alloc or stack_alloc.
  */
-ir_node *new_Alloc(ir_node *store, ir_node *count, ir_type *alloc_type,
-                   ir_where_alloc where);
+FIRM_API ir_node *new_Alloc(ir_node *store, ir_node *count, ir_type *alloc_type,
+                            ir_where_alloc where);
 
 /** Constructor for a Free node.
  *
@@ -4157,8 +4266,8 @@ ir_node *new_Alloc(ir_node *store, ir_node *count, ir_type *alloc_type,
  * @param *free_type  The type of the freed variable.
  * @param where       Where the variable was allocated, either heap_alloc or stack_alloc.
  */
-ir_node *new_Free(ir_node *store, ir_node *ptr, ir_node *size,
-                  ir_type *free_type, ir_where_alloc where);
+FIRM_API ir_node *new_Free(ir_node *store, ir_node *ptr, ir_node *size,
+                           ir_type *free_type, ir_where_alloc where);
 
 /** Constructor for a Sync node.
  *
@@ -4171,7 +4280,7 @@ ir_node *new_Free(ir_node *store, ir_node *ptr, ir_node *size,
  * @param  **in     An array of pointers to nodes that produce an output of type
  *                  memory.  The constructor copies this array.
  */
-ir_node *new_Sync(int arity, ir_node *in[]);
+FIRM_API ir_node *new_Sync(int arity, ir_node *in[]);
 
 /** Constructor for a Proj node.
  *
@@ -4183,7 +4292,7 @@ ir_node *new_Sync(int arity, ir_node *in[]);
  * @param *mode  The mode of the value to project.
  * @param proj   The position of the value in the tuple.
  */
-ir_node *new_Proj(ir_node *arg, ir_mode *mode, long proj);
+FIRM_API ir_node *new_Proj(ir_node *arg, ir_mode *mode, long proj);
 
 /** Constructor for a Filter node.
  *
@@ -4200,7 +4309,7 @@ ir_node *new_Proj(ir_node *arg, ir_mode *mode, long proj);
  * @param *mode The mode of the projected value.
  * @param proj  The position in the tuple to project from.
  */
-ir_node *new_Filter(ir_node *arg, ir_mode *mode, long proj);
+FIRM_API ir_node *new_Filter(ir_node *arg, ir_mode *mode, long proj);
 
 /** Constructor for a defaultProj node.
  *
@@ -4210,7 +4319,7 @@ ir_node *new_Filter(ir_node *arg, ir_mode *mode, long proj);
  * @param arg       A node producing a tuple.
  * @param max_proj  The end  position of the value in the tuple.
  */
-ir_node *new_defaultProj(ir_node *arg, long max_proj);
+FIRM_API ir_node *new_defaultProj(ir_node *arg, long max_proj);
 
 /** Constructor for a Tuple node.
  *
@@ -4221,7 +4330,7 @@ ir_node *new_defaultProj(ir_node *arg, long max_proj);
  * @param arity   The number of tuple elements.
  * @param **in    An array containing pointers to the nodes producing the tuple elements.
  */
-ir_node *new_Tuple(int arity, ir_node *in[]);
+FIRM_API ir_node *new_Tuple(int arity, ir_node *in[]);
 
 /** Constructor for an Id node.
  *
@@ -4231,14 +4340,14 @@ ir_node *new_Tuple(int arity, ir_node *in[]);
  * @param *val    The operand to Id.
  * @param *mode   The mode of *val.
  */
-ir_node *new_Id(ir_node *val, ir_mode *mode);
+FIRM_API ir_node *new_Id(ir_node *val, ir_mode *mode);
 
 /** Constructor for a Bad node.
  *
  * Returns the unique Bad node of the graph.  The same as
  * get_irg_bad().
  */
-ir_node *new_Bad(void);
+FIRM_API ir_node *new_Bad(void);
 
 /** Constructor for a Confirm node.
  *
@@ -4252,7 +4361,7 @@ ir_node *new_Bad(void);
  * @param *bound  The value to compare against. Must be a firm node, typically a constant.
  * @param cmp     The compare operation.
  */
-ir_node *new_Confirm(ir_node *val, ir_node *bound, pn_Cmp cmp);
+FIRM_API ir_node *new_Confirm(ir_node *val, ir_node *bound, pn_Cmp cmp);
 
 /** Constructor for an Unknown node.
  *
@@ -4261,14 +4370,14 @@ ir_node *new_Confirm(ir_node *val, ir_node *bound, pn_Cmp cmp);
  *
  * @param *m      The mode of the unknown value.
  */
-ir_node *new_Unknown(ir_mode *m);
+FIRM_API ir_node *new_Unknown(ir_mode *m);
 
 /** Constructor for a NoMem node.
  *
  * Returns the unique NoMem node of the graph.  The same as
  * get_irg_no_mem().
  */
-ir_node *new_NoMem(void);
+FIRM_API ir_node *new_NoMem(void);
 
 /** Constructor for a Mux node.
  *
@@ -4279,7 +4388,8 @@ ir_node *new_NoMem(void);
  * @param *ir_false The ir_node that calculates the false result.
  * @param *mode     The mode of the node (and it_true and ir_false).
  */
-ir_node *new_Mux(ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mode);
+FIRM_API ir_node *new_Mux(ir_node *sel, ir_node *ir_false, ir_node *ir_true,
+                          ir_mode *mode);
 
 /** Constructor for a CopyB node.
  *
@@ -4290,7 +4400,8 @@ ir_node *new_Mux(ir_node *sel, ir_node *ir_false, ir_node *ir_true, ir_mode *mod
  * @param *src        The ir_node that represents the source address.
  * @param *data_type  The type of the copied data
  */
-ir_node *new_CopyB(ir_node *store, ir_node *dst, ir_node *src, ir_type *data_type);
+FIRM_API ir_node *new_CopyB(ir_node *store, ir_node *dst, ir_node *src,
+                            ir_type *data_type);
 
 /** Constructor for a InstOf node.
  *
@@ -4301,7 +4412,7 @@ ir_node *new_CopyB(ir_node *store, ir_node *dst, ir_node *src, ir_type *data_typ
  * @param   *objptr    A pointer to a object of a class type.
  * @param   *type      The type of which objptr must be.
  */
-ir_node *new_InstOf(ir_node *store, ir_node *objptr, ir_type *type);
+FIRM_API ir_node *new_InstOf(ir_node *store, ir_node *objptr, ir_type *type);
 
 /**Constructor for a Raise node.
  *
@@ -4310,7 +4421,7 @@ ir_node *new_InstOf(ir_node *store, ir_node *objptr, ir_type *type);
  * @param *store The current memory.
  * @param *obj   A pointer to the Except variable.
  */
-ir_node *new_Raise(ir_node *store, ir_node *obj);
+FIRM_API ir_node *new_Raise(ir_node *store, ir_node *obj);
 
 /** Constructor for a Bound node.
  *
@@ -4323,13 +4434,14 @@ ir_node *new_Raise(ir_node *store, ir_node *obj);
  * @param *lower      The ir_node that represents the lower bound for the index.
  * @param *upper      The ir_node that represents the upper bound for the index.
  */
-ir_node *new_Bound(ir_node *store, ir_node *idx, ir_node *lower, ir_node *upper);
+FIRM_API ir_node *new_Bound(ir_node *store, ir_node *idx, ir_node *lower,
+                            ir_node *upper);
 
 /** Constructor for a Pin node.
  *
  * @param *node       The node which value should be pinned.
  */
-ir_node *new_Pin(ir_node *node);
+FIRM_API ir_node *new_Pin(ir_node *node);
 
 /** Constructor for an ASM pseudo node.
  *
@@ -4342,19 +4454,45 @@ ir_node *new_Pin(ir_node *node);
  * @param *clobber    The array of length n_clobber of clobbered registers.
  * @param *asm_text   The assembler text.
  */
-ir_node *new_ASM(int arity, ir_node *in[], ir_asm_constraint *inputs,
-                 int n_outs, ir_asm_constraint *outputs,
-                 int n_clobber, ident *clobber[], ident *asm_text);
+FIRM_API ir_node *new_ASM(int arity, ir_node *in[], ir_asm_constraint *inputs,
+                          int n_outs, ir_asm_constraint *outputs,
+                          int n_clobber, ident *clobber[], ident *asm_text);
 
-/** Constructor for a Dummy node.
+/**
+ * @brief Constructor for a Dummy node.
  *
+ * @param *db       debug info for the node
  * @param *mode     The mode of the node.
+ * @param *irg      the graph to put the node into
+ * @returns         the newly created note
  */
-ir_node *new_Dummy(ir_mode *mode);
+FIRM_API ir_node *new_rd_Dummy(dbg_info *db, ir_graph *irg, ir_mode *mode);
 
-ir_node *new_r_Dummy(ir_graph *irg, ir_mode *mode);
+/**
+ * @copybrief new_rd_Dummy()
+ *
+ * @param *mode     The mode of the node.
+ * @param *irg      the graph to put the node into
+ * @returns         the newly created note
+ */
+FIRM_API ir_node *new_r_Dummy(ir_graph *irg, ir_mode *mode);
+
+/**
+ * @copybrief new_rd_Dummy()
+ *
+ * @param *db       debug info for the node
+ * @param *mode     The mode of the node.
+ * @returns         the newly created note
+ */
+FIRM_API ir_node *new_d_Dummy(dbg_info *db, ir_mode *mode);
 
-ir_node *new_rd_Dummy(dbg_info *db, ir_graph *irg, ir_mode *mode);
+/**
+ * @copybrief new_rd_Dummy()
+ *
+ * @param *mode     The mode of the node.
+ * @returns         the newly created note
+ */
+FIRM_API ir_node *new_Dummy(ir_mode *mode);
 
 /*---------------------------------------------------------------------*/
 /* The comfortable interface.                                          */
@@ -4373,8 +4511,8 @@ ir_node *new_rd_Dummy(dbg_info *db, ir_graph *irg, ir_mode *mode);
  * Phi node construction.
  * This constructor can only be used if the graph is in state_building.
  */
-ir_node *new_d_immBlock(dbg_info *db);
-ir_node *new_immBlock(void);
+FIRM_API ir_node *new_d_immBlock(dbg_info *db);
+FIRM_API ir_node *new_immBlock(void);
 
 /** Create an immature PartBlock.
  *
@@ -4387,14 +4525,14 @@ ir_node *new_immBlock(void);
  * This constructor can only be used if the graph is in
  * state_building.
  */
-ir_node *new_d_immPartBlock(dbg_info *db, ir_node *pred_jmp);
-ir_node *new_immPartBlock(ir_node *pred_jmp);
+FIRM_API ir_node *new_d_immPartBlock(dbg_info *db, ir_node *pred_jmp);
+FIRM_API ir_node *new_immPartBlock(ir_node *pred_jmp);
 
 /** Add a control flow edge to an immature block. */
-void add_immBlock_pred(ir_node *immblock, ir_node *jmp);
+FIRM_API void add_immBlock_pred(ir_node *immblock, ir_node *jmp);
 
 /** Finalize a Block node, when all control flows are known. */
-void mature_immBlock(ir_node *block);
+FIRM_API void mature_immBlock(ir_node *block);
 #define mature_cur_block() mature_immBlock(get_cur_block());
 
 
@@ -4408,8 +4546,8 @@ void mature_immBlock(ir_node *block);
  * @param  pos   The position/id of the local variable.
  * @param *mode  The mode of the value to get.
  */
-ir_node *get_d_value(dbg_info *db, int pos, ir_mode *mode);
-ir_node *get_value(int pos, ir_mode *mode);
+FIRM_API ir_node *get_d_value(dbg_info *db, int pos, ir_mode *mode);
+FIRM_API ir_node *get_value(int pos, ir_mode *mode);
 
 /** Remark a new definition of a variable.
  *
@@ -4421,7 +4559,17 @@ ir_node *get_value(int pos, ir_mode *mode);
  * @param  pos   The position/id of the local variable.
  * @param *value The new value written to the local variable.
  */
-void set_value(int pos, ir_node *value);
+FIRM_API void set_value(int pos, ir_node *value);
+
+/**
+ * Find the value number for a node in the current block.
+ *
+ * @param value  the searched value
+ *
+ * @return the value number of the value or -1 if this value has
+ * no value number in the current block.
+ */
+FIRM_API int find_value(ir_node *value);
 
 /** Get the current memory state.
  *
@@ -4429,7 +4577,7 @@ void set_value(int pos, ir_node *value);
  * state.  This call automatically inserts Phi nodes for the memory
  * state value.
  */
-ir_node *get_store(void);
+FIRM_API ir_node *get_store(void);
 
 /** Remark a new definition of the memory state.
  *
@@ -4438,16 +4586,16 @@ ir_node *get_store(void);
  *
  * @param *store The new memory state.
  */
-void set_store(ir_node *store);
+FIRM_API void set_store(ir_node *store);
 
 /** keep this node alive even if End is not control-reachable from it
  *
  * @param ka The node to keep alive.
  */
-void keep_alive(ir_node *ka);
+FIRM_API void keep_alive(ir_node *ka);
 
 /** Returns the frame type of the current graph */
-ir_type *get_cur_frame_type(void);
+FIRM_API ir_type *get_cur_frame_type(void);
 
 
 /* --- initialize and finalize IR construction --- */
@@ -4459,8 +4607,8 @@ ir_type *get_cur_frame_type(void);
  *
  * This also remarks, the construction of types is finished,
  * e.g., that no more subtypes will be added.  */
-void irp_finalize_cons(void);
+FIRM_API void irp_finalize_cons(void);
 
-/* --- Initialization --- */
+#include "end.h"
 
 #endif