bescripts: Copy all common node attributes into the constructor variants.
[libfirm] / ir / be / amd64 / amd64_emitter.c
index b10b785..232e70a 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <limits.h>
 
+#include "be_t.h"
 #include "error.h"
 #include "xmalloc.h"
 #include "tv.h"
@@ -192,14 +193,6 @@ unknown:
  *
  ***********************************************************************************/
 
-/**
- * Default emitter for anything that we don't want to generate code for.
- */
-static void emit_nothing(const ir_node *node)
-{
-       (void) node;
-}
-
 /**
  * Emit a SymConst.
  */
@@ -460,19 +453,6 @@ static void emit_amd64_binop(const ir_node *irn)
        emit_amd64_binop_op(irn, second_op);
 }
 
-/**
- * The type of a emitter function.
- */
-typedef void (emit_func)(const ir_node *irn);
-
-/**
- * Set a node emitter. Make it a bit more type safe.
- */
-static inline void set_emitter(ir_op *op, emit_func arm_emit_node)
-{
-       op->ops.generic = (op_func)arm_emit_node;
-}
-
 /**
  * Enters the emitter functions for handled nodes into the generic
  * pointer of an opcode.
@@ -485,40 +465,22 @@ static void amd64_register_emitters(void)
        /* register all emitter functions defined in spec */
        amd64_register_spec_emitters();
 
-       set_emitter(op_amd64_SymConst,   emit_amd64_SymConst);
-       set_emitter(op_amd64_Jmp,        emit_amd64_Jmp);
-       set_emitter(op_amd64_Jcc,        emit_amd64_Jcc);
-       set_emitter(op_amd64_Conv,       emit_amd64_Conv);
-       set_emitter(op_amd64_FrameAddr,  emit_amd64_FrameAddr);
-       set_emitter(op_be_Return,        emit_be_Return);
-       set_emitter(op_be_Call,          emit_be_Call);
-       set_emitter(op_be_Copy,          emit_be_Copy);
-       set_emitter(op_be_IncSP,         emit_be_IncSP);
-       set_emitter(op_be_Perm,          emit_be_Perm);
-
-       set_emitter(op_amd64_Add,        emit_amd64_binop);
-       set_emitter(op_amd64_Sub,        emit_amd64_binop);
-
-       set_emitter(op_be_Start,         emit_nothing);
-       set_emitter(op_be_Keep,          emit_nothing);
-       set_emitter(op_Phi,              emit_nothing);
-}
-
-typedef void (*emit_func_ptr) (const ir_node *);
-
-/**
- * Emits code for a node.
- */
-static void amd64_emit_node(const ir_node *node)
-{
-       ir_op               *op       = get_irn_op(node);
-
-       if (op->ops.generic) {
-               emit_func_ptr func = (emit_func_ptr) op->ops.generic;
-               (*func) (node);
-       } else {
-               ir_fprintf(stderr, "No emitter for node %+F\n", node);
-       }
+       be_set_emitter(op_amd64_Add,        emit_amd64_binop);
+       be_set_emitter(op_amd64_Conv,       emit_amd64_Conv);
+       be_set_emitter(op_amd64_FrameAddr,  emit_amd64_FrameAddr);
+       be_set_emitter(op_amd64_Jcc,        emit_amd64_Jcc);
+       be_set_emitter(op_amd64_Jmp,        emit_amd64_Jmp);
+       be_set_emitter(op_amd64_Sub,        emit_amd64_binop);
+       be_set_emitter(op_amd64_SymConst,   emit_amd64_SymConst);
+       be_set_emitter(op_be_Call,          emit_be_Call);
+       be_set_emitter(op_be_Copy,          emit_be_Copy);
+       be_set_emitter(op_be_IncSP,         emit_be_IncSP);
+       be_set_emitter(op_be_Perm,          emit_be_Perm);
+       be_set_emitter(op_be_Return,        emit_be_Return);
+
+       be_set_emitter(op_Phi,      be_emit_nothing);
+       be_set_emitter(op_be_Keep,  be_emit_nothing);
+       be_set_emitter(op_be_Start, be_emit_nothing);
 }
 
 /**
@@ -535,7 +497,7 @@ static void amd64_gen_block(ir_node *block, void *data)
        be_gas_begin_block(block, true);
 
        sched_foreach(block, node) {
-               amd64_emit_node(node);
+               be_emit_node(node);
        }
 }