From e4e663b2b4cd33c72f4a1d4e184158f15415181b Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Tue, 27 Feb 2007 16:59:50 +0000 Subject: [PATCH] SSE consts for xorps need to be 128bit --- ir/be/ia32/ia32_emitter.c | 6 +++--- ir/be/ia32/ia32_gen_decls.c | 18 ++++++++++++++++++ ir/be/ia32/ia32_transform.c | 7 ++++--- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/ir/be/ia32/ia32_emitter.c b/ir/be/ia32/ia32_emitter.c index 182b74729..e813caae7 100644 --- a/ir/be/ia32/ia32_emitter.c +++ b/ir/be/ia32/ia32_emitter.c @@ -1706,19 +1706,19 @@ static void emit_be_Perm(ia32_emit_env_t *env, const ir_node *node) { } #endif } else if (cls1 == &ia32_reg_classes[CLASS_ia32_xmm]) { - ia32_emit_cstring(env, "\tpxorq "); + ia32_emit_cstring(env, "\txorpd "); ia32_emit_source_register(env, node, 1); ia32_emit_cstring(env, ", "); ia32_emit_source_register(env, node, 0); ia32_emit_finish_line(env, NULL); - ia32_emit_cstring(env, "\tpxorq "); + ia32_emit_cstring(env, "\txorpd "); ia32_emit_source_register(env, node, 0); ia32_emit_cstring(env, ", "); ia32_emit_source_register(env, node, 1); ia32_emit_finish_line(env, NULL); - ia32_emit_cstring(env, "\tpxorq "); + ia32_emit_cstring(env, "\txorpd "); ia32_emit_source_register(env, node, 1); ia32_emit_cstring(env, ", "); ia32_emit_source_register(env, node, 0); diff --git a/ir/be/ia32/ia32_gen_decls.c b/ir/be/ia32/ia32_gen_decls.c index b00745db6..6f0da990d 100644 --- a/ir/be/ia32/ia32_gen_decls.c +++ b/ir/be/ia32/ia32_gen_decls.c @@ -68,6 +68,20 @@ static void dump_arith_tarval(obstack_t *obst, tarval *tv, int bytes) case 12: break; + case 16: + obstack_printf(obst, "0x%02x%02x%02x%02x%02x%02x%02x%02x" + "%02x%02x%02x%02x%02x%02x%02x%02x", + get_tarval_sub_bits(tv, 15), get_tarval_sub_bits(tv, 16), + get_tarval_sub_bits(tv, 13), get_tarval_sub_bits(tv, 12), + get_tarval_sub_bits(tv, 11), get_tarval_sub_bits(tv, 10), + get_tarval_sub_bits(tv, 9), get_tarval_sub_bits(tv, 8), + get_tarval_sub_bits(tv, 7), get_tarval_sub_bits(tv, 6), + get_tarval_sub_bits(tv, 5), get_tarval_sub_bits(tv, 4), + get_tarval_sub_bits(tv, 3), get_tarval_sub_bits(tv, 2), + get_tarval_sub_bits(tv, 1), get_tarval_sub_bits(tv, 0)); + break; + + default: fprintf(stderr, "Try to dump an tarval with %d bytes\n", bytes); assert(0); @@ -227,6 +241,10 @@ static void dump_size_type(obstack_t *obst, int size) { /* handled in arith */ break; + case 16: + obstack_printf(obst, "\t.octa\t"); + break; + default: fprintf(stderr, "Try to dump a type with %d bytes\n", size); assert(0); diff --git a/ir/be/ia32/ia32_transform.c b/ir/be/ia32/ia32_transform.c index be2b26234..0f0d3e5f5 100644 --- a/ir/be/ia32/ia32_transform.c +++ b/ir/be/ia32/ia32_transform.c @@ -421,7 +421,8 @@ ident *ia32_gen_fp_known_const(ia32_known_const_t kct) { tp_name = names[kct].tp_name; cnst_str = names[kct].cnst_str; - mode = kct == ia32_SSIGN || kct == ia32_SABS ? mode_Iu : mode_Lu; + //mode = kct == ia32_SSIGN || kct == ia32_SABS ? mode_Iu : mode_Lu; + mode = mode_LLu; tv = new_tarval_from_str(cnst_str, strlen(cnst_str), mode); tp = new_type_primitive(new_id_from_str(tp_name), mode); ent = new_entity(get_glob_type(), new_id_from_str(ent_name), tp); @@ -3495,10 +3496,10 @@ static ir_node *gen_Proj_Quot(ia32_transform_env_t *env, ir_node *node) break; case pn_Quot_res: if(is_ia32_xDiv(new_pred)) { - return new_rd_Proj(dbg, irg, block, new_pred, mode, + return new_rd_Proj(dbg, irg, block, new_pred, mode_E, pn_ia32_xDiv_res); } else if(is_ia32_vfdiv(new_pred)) { - return new_rd_Proj(dbg, irg, block, new_pred, mode, + return new_rd_Proj(dbg, irg, block, new_pred, mode_E, pn_ia32_vfdiv_res); } break; -- 2.20.1