+#include "iroptimize.h"
+#include "begin.h"
+
+typedef enum {
+ ASM_CONSTRAINT_FLAG_NONE = 0,
+ ASM_CONSTRAINT_FLAG_SUPPORTS_REGISTER = 1u << 0,
+ ASM_CONSTRAINT_FLAG_SUPPORTS_MEMOP = 1u << 1,
+ ASM_CONSTRAINT_FLAG_SUPPORTS_IMMEDIATE = 1u << 2,
+ ASM_CONSTRAINT_FLAG_NO_SUPPORT = 1u << 3,
+ ASM_CONSTRAINT_FLAG_MODIFIER_WRITE = 1u << 4,
+ ASM_CONSTRAINT_FLAG_MODIFIER_NO_WRITE = 1u << 5,
+ ASM_CONSTRAINT_FLAG_MODIFIER_READ = 1u << 6,
+ ASM_CONSTRAINT_FLAG_MODIFIER_NO_READ = 1u << 7,
+ ASM_CONSTRAINT_FLAG_MODIFIER_EARLYCLOBBER = 1u << 8,
+ ASM_CONSTRAINT_FLAG_MODIFIER_COMMUTATIVE = 1u << 9,
+ ASM_CONSTRAINT_FLAG_INVALID = 1u << 10
+} asm_constraint_flags_t;
+ENUM_BITSET(asm_constraint_flags_t)
+
+/**
+ * Build a Trampoline for the closure.
+ * @param block the block where to build the trampoline
+ * @param mem memory
+ * @param trampoline address of a trampoline region
+ * @param env address of the environment
+ * @param callee address of the function to call
+ *
+ * @return modified memory
+ */
+typedef ir_node *(create_trampoline_fkt)(ir_node *block, ir_node *mem, ir_node *trampoline, ir_node *env, ir_node *callee);