+static void write_Anchor(write_env_t *env, const ir_node *node)
+{
+ write_symbol(env, "Anchor");
+ write_node_nr(env, node);
+ write_pred_refs(env, node, 0);
+}
+
+static void write_SymConst(write_env_t *env, const ir_node *node)
+{
+ /* TODO: only symconst_addr_ent implemented yet */
+ if (get_SymConst_kind(node) != symconst_addr_ent)
+ panic("Can't export %+F (only symconst_addr_ent supported)", node);
+
+ write_symbol(env, "SymConst");
+ write_node_nr(env, node);
+ write_mode_ref(env, get_irn_mode(node));
+ write_entity_ref(env, get_SymConst_entity(node));
+}
+
+typedef void (*write_node_func)(write_env_t *env, const ir_node *node);
+
+static void register_node_writer(ir_op *op, write_node_func func)
+{
+ set_generic_function_ptr(op, (op_func)func);
+}
+
+static void writers_init(void)
+{
+ clear_irp_opcodes_generic_func();
+ register_node_writer(op_Anchor, write_Anchor);
+ register_node_writer(op_ASM, write_ASM);
+ register_node_writer(op_Block, write_Block);
+ register_node_writer(op_Phi, write_Phi);
+ register_node_writer(op_SymConst, write_SymConst);
+ register_generated_node_writers();
+}
+
+static void write_node(const ir_node *node, write_env_t *env)
+{
+ ir_op *op = get_irn_op(node);
+ write_node_func func = (write_node_func) get_generic_function_ptr(op);
+
+ fputc('\t', env->file);
+ if (func == NULL)
+ panic("No write_node_func for %+F", node);
+ func(env, node);
+ fputc('\n', env->file);
+}
+
+static void write_node_recursive(ir_node *node, write_env_t *env);
+
+static void write_preds(ir_node *node, write_env_t *env)
+{
+ int arity = get_irn_arity(node);
+ int i;
+ for (i = 0; i < arity; ++i) {
+ ir_node *pred = get_irn_n(node, i);
+ write_node_recursive(pred, env);