1 /**
2  * @file
3  * @brief     Generated functions to emit code for assembler ir nodes.
4  * @note      DO NOT EDIT THIS FILE, your changes will be lost.
5  *            Edit ir/be/amd64/amd64_spec.pl instead.
6  *            created by: ir/be/scripts/generate_emitter.pl ir/be/amd64/amd64_spec.pl ir/be/amd64
7  * @date      Mon Nov 19 18:12:23 2012
8  */
9 #include "config.h"
10 
11 #include <stdio.h>
12 #include <assert.h>
13 
14 #include "irnode.h"
15 #include "irop_t.h"
16 #include "irprog_t.h"
17 #include "beemitter.h"
18 
19 #include "gen_amd64_emitter.h"
20 #include "amd64_new_nodes.h"
21 #include "amd64_emitter.h"
22 
emit_amd64_Store(const ir_node * node)23 static void emit_amd64_Store(const ir_node *node)
24 {
25 	amd64_emitf(node, "mov %S1, %O(%S0)");
26 }
27 
emit_amd64_Immediate(const ir_node * node)28 static void emit_amd64_Immediate(const ir_node *node)
29 {
30 	amd64_emitf(node, "mov %C, %D0");
31 }
32 
emit_amd64_Push(const ir_node * node)33 static void emit_amd64_Push(const ir_node *node)
34 {
35 	amd64_emitf(node, "push %S0");
36 }
37 
emit_amd64_Neg(const ir_node * node)38 static void emit_amd64_Neg(const ir_node *node)
39 {
40 	amd64_emitf(node, "neg %S0");
41 }
42 
emit_amd64_Cmp(const ir_node * node)43 static void emit_amd64_Cmp(const ir_node *node)
44 {
45 	amd64_emitf(node, "cmp %S0, %S1");
46 }
47 
emit_amd64_Load(const ir_node * node)48 static void emit_amd64_Load(const ir_node *node)
49 {
50 	amd64_emitf(node, "mov %O(%S0), %D0");
51 }
52 
emit_amd64_Mul(const ir_node * node)53 static void emit_amd64_Mul(const ir_node *node)
54 {
55 	amd64_emitf(node, "mul %S1");
56 }
57 
58 
59 typedef void (*emit_func)(const ir_node *node);
60 
amd64_register_emitter(ir_op * op,emit_func func)61 static void amd64_register_emitter(ir_op *op, emit_func func)
62 {
63 	assert(op->ops.generic == NULL);
64 	op->ops.generic = (op_func)func;
65 }
66 
67 /**
68  * Enters the emitter functions for handled nodes into the generic
69  * pointer of an opcode.
70  */
amd64_register_spec_emitters(void)71 void amd64_register_spec_emitters(void)
72 {
73   amd64_register_emitter(op_amd64_Store, emit_amd64_Store);
74   amd64_register_emitter(op_amd64_Immediate, emit_amd64_Immediate);
75   amd64_register_emitter(op_amd64_Push, emit_amd64_Push);
76   amd64_register_emitter(op_amd64_Neg, emit_amd64_Neg);
77   amd64_register_emitter(op_amd64_Cmp, emit_amd64_Cmp);
78   amd64_register_emitter(op_amd64_Load, emit_amd64_Load);
79   amd64_register_emitter(op_amd64_Mul, emit_amd64_Mul);
80 }
81 
82