initaler checkin SPARC backend
[libfirm] / ir / be / sparc / gen_sparc_emitter.c
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 libfirm/ir/be/sparc/sparc_spec.pl instead.
6  *            created by: libfirm/ir/be/scripts/generate_emitter.pl libfirm/ir/be/sparc/sparc_spec.pl libfirm/ir/be/sparc
7  * @date      Tue Dec 15 15:19:15 2009
8  */
9 #include "config.h"
10
11 #include <stdio.h>
12
13 #include "irnode.h"
14 #include "irop_t.h"
15 #include "irprog_t.h"
16
17 #include "gen_sparc_emitter.h"
18 #include "sparc_new_nodes.h"
19 #include "sparc_emitter.h"
20
21 static void emit_sparc_SubSP(const ir_node *node) {
22         be_emit_cstring("\tadd ");
23         sparc_emit_source_register(node, 0);
24         be_emit_cstring(", ");
25         sparc_emit_source_register(node, 1);
26         be_emit_cstring(", ");
27         sparc_emit_dest_register(node, 0);
28         be_emit_finish_line_gas(node);
29 }
30
31 static void emit_sparc_Add(const ir_node *node) {
32         be_emit_cstring("\tadd ");
33         sparc_emit_source_register(node, 0);
34         be_emit_cstring(", ");
35         sparc_emit_reg_or_imm(node, 1);
36         be_emit_cstring(", ");
37         sparc_emit_dest_register(node, 0);
38         be_emit_finish_line_gas(node);
39 }
40
41 static void emit_sparc_Store(const ir_node *node) {
42         be_emit_cstring("\tst");
43         sparc_emit_store_mode(node);
44         be_emit_char(' ');
45         sparc_emit_source_register(node, 0);
46         be_emit_cstring(", [");
47         sparc_emit_dest_register(node, 0);
48         sparc_emit_offset(node);
49         be_emit_char(']');
50         be_emit_finish_line_gas(node);
51 }
52
53 static void emit_sparc_Mov(const ir_node *node) {
54         be_emit_cstring("\tmov ");
55         sparc_emit_reg_or_imm(node, 0);
56         be_emit_cstring(", ");
57         sparc_emit_dest_register(node, 0);
58         be_emit_finish_line_gas(node);
59 }
60
61 static void emit_sparc_Tst(const ir_node *node) {
62         be_emit_cstring("\ttst ");
63         sparc_emit_source_register(node, 0);
64         be_emit_finish_line_gas(node);
65 }
66
67 static void emit_sparc_Cmp(const ir_node *node) {
68         be_emit_cstring("\tcmp ");
69         sparc_emit_source_register(node, 0);
70         be_emit_cstring(", ");
71         sparc_emit_reg_or_imm(node, 1);
72         be_emit_finish_line_gas(node);
73 }
74
75 static void emit_sparc_Sub(const ir_node *node) {
76         be_emit_cstring("\tsub ");
77         sparc_emit_source_register(node, 0);
78         be_emit_cstring(", ");
79         sparc_emit_reg_or_imm(node, 1);
80         be_emit_cstring(", ");
81         sparc_emit_dest_register(node, 0);
82         be_emit_finish_line_gas(node);
83 }
84
85 static void emit_sparc_Load(const ir_node *node) {
86         be_emit_cstring("\tld");
87         sparc_emit_load_mode(node);
88         be_emit_cstring(" [");
89         sparc_emit_source_register(node, 0);
90         sparc_emit_offset(node);
91         be_emit_cstring("], ");
92         sparc_emit_dest_register(node, 0);
93         be_emit_finish_line_gas(node);
94 }
95
96 static void emit_sparc_AddSP(const ir_node *node) {
97         be_emit_cstring("\tsub ");
98         sparc_emit_source_register(node, 0);
99         be_emit_cstring(", ");
100         sparc_emit_source_register(node, 1);
101         be_emit_cstring(", ");
102         sparc_emit_dest_register(node, 0);
103         be_emit_finish_line_gas(node);
104 }
105
106 /**
107  * Enters the emitter functions for handled nodes into the generic
108  * pointer of an opcode.
109  */
110 void sparc_register_spec_emitters(void) {
111
112 #define BE_EMIT(a) op_sparc_##a->ops.generic = (op_func)emit_sparc_##a
113
114   /* generated emitter functions */
115   BE_EMIT(SubSP);
116   BE_EMIT(Add);
117   BE_EMIT(Store);
118   BE_EMIT(Mov);
119   BE_EMIT(Tst);
120   BE_EMIT(Cmp);
121   BE_EMIT(Sub);
122   BE_EMIT(Load);
123   BE_EMIT(AddSP);
124
125 #undef BE_EMIT
126 }