X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_new_nodes.c;h=c17d217949d8359e9369715f0252c33510cfeefc;hb=ded7d1acca9b4ec44bf5b0955f1247fef77f7541;hp=4645fcee992d8b8b7aa4e4ca6216234b0b845914;hpb=590df14827a8ff5a5b53c506ac654876107bd8c9;p=libfirm diff --git a/ir/be/ia32/ia32_new_nodes.c b/ir/be/ia32/ia32_new_nodes.c index 4645fcee9..c17d21794 100644 --- a/ir/be/ia32/ia32_new_nodes.c +++ b/ir/be/ia32/ia32_new_nodes.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -263,12 +263,6 @@ static int ia32_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { case ia32_am_Source: fprintf(F, "source only (Load)"); break; - case ia32_am_Dest: - fprintf(F, "dest only (Load+Store)"); - break; - case ia32_am_Full: - fprintf(F, "full"); - break; default: fprintf(F, "unknown (%d)", get_ia32_am_support(n)); break; @@ -295,7 +289,7 @@ static int ia32_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { fprintf(F, "pn_code = %ld\n", get_ia32_condcode(n)); } else if (is_ia32_CMov(n) || is_ia32_Set(n) || is_ia32_Jcc(n)) { long pnc = get_ia32_condcode(n); - fprintf(F, "pn_code = %ld (%s)\n", pnc, get_pnc_string(pnc)); + fprintf(F, "pn_code = 0x%X (%s)\n", pnc, get_pnc_string(pnc & pn_Cmp_True)); } else if (is_ia32_CopyB(n) || is_ia32_CopyB_i(n)) { fprintf(F, "size = %u\n", get_ia32_copyb_size(n)); @@ -335,6 +329,9 @@ static int ia32_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { if (flags & arch_irn_flags_modify_sp) { fprintf(F, " modify_sp"); } + if (flags & arch_irn_flags_modify_flags) { + fprintf(F, " modify_flags"); + } } fprintf(F, " (%d)\n", flags); @@ -420,6 +417,13 @@ const ia32_asm_attr_t *get_ia32_asm_attr_const(const ir_node *node) { return asm_attr; } +ia32_immediate_attr_t *get_ia32_immediate_attr(ir_node *node) { + ia32_attr_t *attr = get_ia32_attr(node); + ia32_immediate_attr_t *imm_attr = CAST_IA32_ATTR(ia32_immediate_attr_t, attr); + + return imm_attr; +} + const ia32_immediate_attr_t *get_ia32_immediate_attr_const(const ir_node *node) { const ia32_attr_t *attr = get_ia32_attr_const(node); @@ -784,6 +788,11 @@ void set_ia32_flags(ir_node *node, arch_irn_flags_t flags) { attr->data.flags = flags; } +void add_ia32_flags(ir_node *node, arch_irn_flags_t flags) { + ia32_attr_t *attr = get_ia32_attr(node); + attr->data.flags |= flags; +} + /** * Returns the result register slots of an ia32 node. */ @@ -858,7 +867,7 @@ const be_execution_unit_t ***get_ia32_exec_units(const ir_node *node) { */ unsigned get_ia32_exc_label(const ir_node *node) { const ia32_attr_t *attr = get_ia32_attr_const(node); - return attr->data.except_label; + return attr->data.has_except_label; } /** @@ -866,7 +875,27 @@ unsigned get_ia32_exc_label(const ir_node *node) { */ void set_ia32_exc_label(ir_node *node, unsigned flag) { ia32_attr_t *attr = get_ia32_attr(node); - attr->data.except_label = flag; + attr->data.has_except_label = flag; +} + +/** + * Return the exception label id. + */ +ir_label_t get_ia32_exc_label_id(const ir_node *node) { + const ia32_attr_t *attr = get_ia32_attr_const(node); + + assert(attr->data.has_except_label); + return attr->exc_label; +} + +/** + * Assign the exception label id. + */ +void set_ia32_exc_label_id(ir_node *node, ir_label_t id) { + ia32_attr_t *attr = get_ia32_attr(node); + + assert(attr->data.has_except_label); + attr->exc_label = id; } #ifndef NDEBUG @@ -1124,7 +1153,7 @@ int ia32_compare_attr(const ia32_attr_t *a, const ia32_attr_t *b) { if (a->data.tp != b->data.tp) return 1; - if (a->data.except_label != b->data.except_label) + if (a->data.has_except_label != b->data.has_except_label) return 1; if (a->data.ins_permuted != b->data.ins_permuted