X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbearch.c;h=f262c350c2d904ad5b77d2f5ce36e798a6bec2ad;hb=89dc24503c04139bb05504059b291d6d89f99661;hp=b5c1fdddb14db8c4477ad8b927eaa03b4bfca2ba;hpb=7fe8c98054a008313ec4da9227b1e10dd7932f5e;p=libfirm diff --git a/ir/be/bearch.c b/ir/be/bearch.c index b5c1fdddb..f262c350c 100644 --- a/ir/be/bearch.c +++ b/ir/be/bearch.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. * @@ -36,7 +36,6 @@ #include "bitset.h" #include "pset.h" -#include "entity.h" #include "raw_bitset.h" #include "irprintf.h" @@ -206,9 +205,11 @@ int arch_get_allocatable_regs(const arch_env_t *env, const ir_node *irn, int pos return req->cls->n_regs; } -void arch_put_non_ignore_regs(const arch_env_t *env, const arch_register_class_t *cls, bitset_t *bs) +void arch_put_non_ignore_regs(const arch_env_t *env, + const arch_register_class_t *cls, bitset_t *bs) { - int i; + unsigned i; + (void) env; for(i = 0; i < cls->n_regs; ++i) { if(!arch_register_type_is(&cls->regs[i], ignore)) @@ -216,10 +217,12 @@ void arch_put_non_ignore_regs(const arch_env_t *env, const arch_register_class_t } } -int arch_count_non_ignore_regs(const arch_env_t *env, const arch_register_class_t *cls) +int arch_count_non_ignore_regs(const arch_env_t *env, + const arch_register_class_t *cls) { - int i; + unsigned i; int result = 0; + (void) env; for(i = 0; i < cls->n_regs; ++i) { if(!arch_register_type_is(&cls->regs[i], ignore)) @@ -301,6 +304,7 @@ extern const char *arch_irn_flag_str(arch_irn_flags_t fl) XXX(ignore); XXX(rematerializable); XXX(modify_sp); + XXX(modify_flags); XXX(none); #undef XXX } @@ -329,15 +333,29 @@ extern char *arch_register_req_format(char *buf, size_t len, } if(arch_register_req_is(req, should_be_same)) { - const ir_node *same = get_irn_n(node, req->other_same); - ir_snprintf(tmp, sizeof(tmp), " same to: %+F", same); - strncat(buf, tmp, len); + const unsigned other = req->other_same; + int i; + + ir_snprintf(tmp, sizeof(tmp), " same to:"); + for (i = 0; 1U << i <= other; ++i) { + if (other & (1U << i)) { + ir_snprintf(tmp, sizeof(tmp), " %+F", get_irn_n(skip_Proj_const(node), i)); + strncat(buf, tmp, len); + } + } } if(arch_register_req_is(req, should_be_different)) { - const ir_node *different = get_irn_n(node, req->other_different); - ir_snprintf(tmp, sizeof(tmp), " different to: %+F", different); - strncat(buf, tmp, len); + const unsigned other = req->other_different; + int i; + + ir_snprintf(tmp, sizeof(tmp), " different from:"); + for (i = 0; 1U << i <= other; ++i) { + if (other & (1U << i)) { + ir_snprintf(tmp, sizeof(tmp), " %+F", get_irn_n(skip_Proj_const(node), i)); + strncat(buf, tmp, len); + } + } } return buf; @@ -347,7 +365,7 @@ static const arch_register_req_t no_requirement = { arch_register_req_type_none, NULL, NULL, - -1, - -1 + 0, + 0 }; const arch_register_req_t *arch_no_register_req = &no_requirement;