X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_emitter.c;h=ca08ba6de430e02c48b5c30450c0d360c2cd070c;hb=3a17d433225f46418db86ab1edbfea1cc25b9d22;hp=47160f898a922046a067f60a2a477e6daeabc7f1;hpb=4682c56dfcddf63198405587968006735ddecae4;p=libfirm diff --git a/ir/be/ia32/ia32_emitter.c b/ir/be/ia32/ia32_emitter.c index 47160f898..ca08ba6de 100644 --- a/ir/be/ia32/ia32_emitter.c +++ b/ir/be/ia32/ia32_emitter.c @@ -86,8 +86,11 @@ const arch_register_t *get_in_reg(ia32_emit_env_t *env, const ir_node *irn, assert(reg && "no in register found"); - /* in case of a joker register: just return a valid register */ - if (arch_register_type_is(reg, joker)) { + if(reg == &ia32_gp_regs[REG_GP_NOREG]) + panic("trying to emit noreg"); + + /* in case of unknown register: just return a valid register */ + if (reg == &ia32_gp_regs[REG_GP_UKNWN]) { const arch_register_req_t *req; /* ask for the requirements */ @@ -176,12 +179,14 @@ char get_mode_suffix(const ir_mode *mode) { static int produces_result(const ir_node *node) { - return !(is_ia32_St(node) || - is_ia32_CondJmp(node) || - is_ia32_xCondJmp(node) || - is_ia32_CmpSet(node) || - is_ia32_xCmpSet(node) || - is_ia32_SwitchJmp(node)); + return + !is_ia32_CmpSet(node) && + !is_ia32_CondJmp(node) && + !is_ia32_St(node) && + !is_ia32_SwitchJmp(node) && + !is_ia32_TestJmp(node) && + !is_ia32_xCmpSet(node) && + !is_ia32_xCondJmp(node); } static @@ -836,19 +841,10 @@ void emit_ia32_CondJmp(ia32_emit_env_t *env, const ir_node *node) { */ static void TestJmp_emitter(ia32_emit_env_t *env, const ir_node *node) { - if(is_ia32_ImmSymConst(node) || is_ia32_ImmConst(node)) { - be_emit_cstring(env, "\ttest "); - ia32_emit_immediate(env, node); - be_emit_cstring(env, ", "); - ia32_emit_source_register(env, node, 0); - be_emit_finish_line_gas(env, node); - } else { - be_emit_cstring(env, "\ttest "); - ia32_emit_source_register(env, node, 1); - be_emit_cstring(env, ", "); - ia32_emit_source_register(env, node, 0); - be_emit_finish_line_gas(env, node); - } + be_emit_cstring(env, "\ttest "); + ia32_emit_binop(env, node); + be_emit_finish_line_gas(env, node); + finish_CondJmp(env, node, mode_Iu, get_ia32_pncode(node)); }