From c4d69cc79c5d2039545890d580584eb707500b87 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20W=C3=BCrdig?= Date: Fri, 17 Mar 2006 17:00:59 +0000 Subject: [PATCH] fixed 8bit Store bugs --- ir/be/ia32/ia32_optimize.c | 4 ++-- ir/be/ia32/ia32_transform.c | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/ir/be/ia32/ia32_optimize.c b/ir/be/ia32/ia32_optimize.c index b03599fc9..e897c0f49 100644 --- a/ir/be/ia32/ia32_optimize.c +++ b/ir/be/ia32/ia32_optimize.c @@ -692,7 +692,7 @@ void ia32_optimize_am(ir_node *irn, void *env) { if ((res == irn) && (get_ia32_am_support(irn) != ia32_am_None) && !is_ia32_Lea(irn)) { /* 1st: check for Load/Store -> LEA */ - if (is_ia32_Ld(irn) || is_ia32_St(irn)) { + if (is_ia32_Ld(irn) || is_ia32_St(irn) || is_ia32_Store8Bit(irn)) { left = get_irn_n(irn, 0); if (is_ia32_Lea(left)) { @@ -703,7 +703,7 @@ void ia32_optimize_am(ir_node *irn, void *env) { set_ia32_am_scale(irn, get_ia32_am_scale(left)); set_ia32_am_flavour(irn, get_ia32_am_flavour(left)); - set_ia32_op_type(irn, is_ia32_St(irn) ? ia32_AddrModeD : ia32_AddrModeS); + set_ia32_op_type(irn, is_ia32_Ld(irn) ? ia32_AddrModeS : ia32_AddrModeD); /* set base and index */ set_irn_n(irn, 0, get_irn_n(left, 0)); diff --git a/ir/be/ia32/ia32_transform.c b/ir/be/ia32/ia32_transform.c index f3fea443a..c843f4206 100644 --- a/ir/be/ia32/ia32_transform.c +++ b/ir/be/ia32/ia32_transform.c @@ -1238,6 +1238,7 @@ static ir_node *gen_Store(ia32_transform_env_t *env) { ir_node *val = get_Store_value(node); ir_node *ptr = get_Store_ptr(node); ir_node *mem = get_Store_mem(node); + ir_node *mode = get_irn_mode(val); ir_node *sval = val; ir_node *new_op; @@ -1246,14 +1247,14 @@ static ir_node *gen_Store(ia32_transform_env_t *env) { sval = noreg; } - if (mode_is_float(env->mode)) { - new_op = new_rd_ia32_fStore(env->dbg, env->irg, env->block, ptr, noreg, sval, mem, env->mode); + if (mode_is_float(mode)) { + new_op = new_rd_ia32_fStore(env->dbg, env->irg, env->block, ptr, noreg, sval, mem, mode_T); } - else if (get_mode_size_bits(env->mode) == 8) { - new_op = new_rd_ia32_Store8Bit(env->dbg, env->irg, env->block, ptr, noreg, sval, mem, env->mode); + else if (get_mode_size_bits(mode) == 8) { + new_op = new_rd_ia32_Store8Bit(env->dbg, env->irg, env->block, ptr, noreg, sval, mem, mode_T); } else { - new_op = new_rd_ia32_Store(env->dbg, env->irg, env->block, ptr, noreg, sval, mem, env->mode); + new_op = new_rd_ia32_Store(env->dbg, env->irg, env->block, ptr, noreg, sval, mem, mode_T); } /* stored const is an attribute (saves a register) */ -- 2.20.1