X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Famd64%2Fbearch_amd64.c;h=4cf0f40f620fa29d7deb4ef5b1500c9d234d9441;hb=0a8dac2b5fb9e59ea2add322baf61237b607bea5;hp=0930aa1d9844e3e6d6cc4f6b4fca7f8b164ce7a0;hpb=64fe0a138b8ebab4633fb47ed7e8b20d41f41491;p=libfirm diff --git a/ir/be/amd64/bearch_amd64.c b/ir/be/amd64/bearch_amd64.c index 0930aa1d9..4cf0f40f6 100644 --- a/ir/be/amd64/bearch_amd64.c +++ b/ir/be/amd64/bearch_amd64.c @@ -33,9 +33,11 @@ #include "bitset.h" #include "debug.h" +#include "error.h" -#include "be.h" +#include "be_t.h" #include "bearch.h" +#include "beirg.h" #include "benode.h" #include "belower.h" #include "besched.h" @@ -110,7 +112,6 @@ static const arch_irn_ops_t amd64_irn_ops = { amd64_get_frame_entity, amd64_set_frame_offset, amd64_get_sp_bias, - NULL, /* get_inverse */ NULL, /* get_op_estimated_cost */ NULL, /* possible_memory_operand */ NULL, /* perform_memory_operand */ @@ -124,10 +125,9 @@ static const arch_irn_ops_t amd64_irn_ops = { */ static void amd64_prepare_graph(ir_graph *irg) { - amd64_irg_data_t *irg_data = amd64_get_irg_data(irg); amd64_transform_graph(irg); - if (irg_data->dump) + if (be_options.dump_flags & DUMP_BE) dump_ir_graph(irg, "transformed"); } @@ -241,41 +241,6 @@ static void amd64_finish_irg(ir_graph *irg) be_abi_fix_stack_bias(irg); } -/** - * Initializes the code generator. - */ -static void amd64_init_graph(ir_graph *irg) -{ - struct obstack *obst = be_get_be_obst(irg); - amd64_irg_data_t *irg_data = OALLOCZ(obst, amd64_irg_data_t); - irg_data->dump = (be_options.dump_flags & DUMP_BE) ? 1 : 0; - - be_birg_from_irg(irg)->isa_link = irg_data; -} - - -typedef ir_node *(*create_const_node_func) (dbg_info *dbg, ir_node *block); - -/** - * Used to create per-graph unique pseudo nodes. - */ -static inline ir_node *create_const(ir_graph *irg, ir_node **place, - create_const_node_func func, - const arch_register_t* reg) -{ - ir_node *block, *res; - - if (*place != NULL) - return *place; - - block = get_irg_start_block(irg); - res = func(NULL, block); - arch_set_irn_register(res, reg); - *place = res; - - return res; -} - extern const arch_isa_if_t amd64_isa_if; static amd64_isa_t amd64_isa_template = { { @@ -284,14 +249,13 @@ static amd64_isa_t amd64_isa_template = { amd64_registers, N_AMD64_CLASSES, amd64_reg_classes, - &amd64_registers[REG_RSP], /* stack pointer register */ - &amd64_registers[REG_RBP], /* base pointer register */ - &amd64_reg_classes[CLASS_amd64_gp], /* link pointer register class */ - 3, /* power of two stack alignment for calls, 2^2 == 4 */ - NULL, /* main environment */ - 7, /* costs for a spill instruction */ - 5, /* costs for a reload instruction */ - false, /* no custom abi handling */ + &amd64_registers[REG_RSP], /* stack pointer register */ + &amd64_registers[REG_RBP], /* base pointer register */ + 3, /* power of two stack alignment for calls, 2^2 == 4 */ + NULL, /* main environment */ + 7, /* costs for a spill instruction */ + 5, /* costs for a reload instruction */ + false, /* no custom abi handling */ }, }; @@ -389,13 +353,11 @@ static void amd64_get_call_abi(ir_type *method_type, be_abi_call_t *abi) ir_type *tp; ir_mode *mode; int i, n = get_method_n_params(method_type); - be_abi_call_flags_t call_flags; int no_reg = 0; /* set abi flags for calls */ - call_flags.bits.call_has_imm = true; - - /* set stack parameter passing style */ + be_abi_call_flags_t call_flags = be_abi_call_get_flags(abi); + call_flags.call_has_imm = true; be_abi_call_set_flags(abi, call_flags, &amd64_abi_callbacks); for (i = 0; i < n; i++) { @@ -540,7 +502,7 @@ const arch_isa_if_t amd64_isa_if = { amd64_begin_codegeneration, amd64_end_codegeneration, - amd64_init_graph, + NULL, amd64_get_call_abi, NULL, /* mark remat */ NULL, /* get_pic_base */