sparc: fix wrong mode on Div result
[libfirm] / ir / be / sparc / sparc_transform.c
index fffa4ce..310f575 100644 (file)
@@ -1371,7 +1371,7 @@ static ir_node *create_ftoi(dbg_info *dbgi, ir_node *block, ir_node *op,
        ir_graph *irg   = get_irn_irg(block);
        ir_node  *sp    = get_irg_frame(irg);
        ir_node  *nomem = get_irg_no_mem(irg);
-       ir_node  *stf   = create_stf(dbgi, block, ftoi, sp, nomem, src_mode,
+       ir_node  *stf   = create_stf(dbgi, block, ftoi, sp, nomem, mode_fp,
                                     NULL, 0, true);
        ir_node  *ld    = new_bd_sparc_Ld_imm(dbgi, block, sp, stf, mode_gp,
                                              NULL, 0, true);
@@ -1763,15 +1763,18 @@ static void bitcast_float_to_int(dbg_info *dbgi, ir_node *block,
                              (get_tarval_sub_bits(tv, 1) << 8)  |
                              (get_tarval_sub_bits(tv, 2) << 16) |
                              (get_tarval_sub_bits(tv, 3) << 24);
-               result[0] = create_int_const(block, val);
+               ir_node *valc = create_int_const(block, val);
                if (bits == 64) {
-                       int32_t val = get_tarval_sub_bits(tv, 4)         |
+                       int32_t val2 = get_tarval_sub_bits(tv, 4)         |
                                                  (get_tarval_sub_bits(tv, 5) << 8)  |
                                                  (get_tarval_sub_bits(tv, 6) << 16) |
                                                  (get_tarval_sub_bits(tv, 7) << 24);
-                       result[1] = create_int_const(block, val);
+                       ir_node *valc2 = create_int_const(block, val2);
+                       result[0] = valc2;
+                       result[1] = valc;
                } else {
                        assert(bits == 32);
+                       result[0] = valc;
                        result[1] = NULL;
                }
        } else {
@@ -2272,7 +2275,7 @@ static ir_node *gen_Proj_Div(ir_node *node)
        case pn_Div_res:
                return new_r_Proj(new_pred, res_mode, pn_sparc_SDiv_res);
        case pn_Div_M:
-               return new_r_Proj(new_pred, mode_gp, pn_sparc_SDiv_M);
+               return new_r_Proj(new_pred, mode_M, pn_sparc_SDiv_M);
        default:
                break;
        }