From 9ed929017c682714d2a81f840fbe97a8a56fbe96 Mon Sep 17 00:00:00 2001 From: Adrian Straetling Date: Thu, 7 Jul 2005 10:21:05 +0000 Subject: [PATCH] expr.c: (set_storage_via_setmem): Convert opchar to mode defined by back-end. 2005-07-07 Adrian Straetling * expr.c: (set_storage_via_setmem): Convert opchar to mode defined by back-end. From-SVN: r101703 --- gcc/ChangeLog | 5 +++++ gcc/expr.c | 16 +++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e13a1fa6e73..c54bf1b254b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-07-07 Adrian Straetling + + * expr.c: (set_storage_via_setmem): Convert opchar to mode + defined by back-end. + 2005-07-07 Jakub Jelinek * config/sparc/sparc.md (stack_protect_testsi): Put clobbers after diff --git a/gcc/expr.c b/gcc/expr.c index 2a1ecab51e8..d778b59c95d 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -2608,7 +2608,8 @@ set_storage_via_setmem (rtx object, rtx size, rtx val, unsigned int align) && ((pred = insn_data[(int) code].operand[3].predicate) == 0 || (*pred) (opalign, VOIDmode))) { - rtx opsize,opchar; + rtx opsize, opchar; + enum machine_mode char_mode; rtx last = get_last_insn (); rtx pat; @@ -2617,10 +2618,15 @@ set_storage_via_setmem (rtx object, rtx size, rtx val, unsigned int align) if (pred != 0 && ! (*pred) (opsize, mode)) opsize = copy_to_mode_reg (mode, opsize); - opchar = convert_to_mode (mode, val, 1); - pred = insn_data[(int) code].operand[2].predicate; - if (pred != 0 && ! (*pred) (opchar, mode)) - opchar = copy_to_mode_reg (mode, opchar); + opchar = val; + char_mode = insn_data[(int) code].operand[2].mode; + if (char_mode != VOIDmode) + { + opchar = convert_to_mode (char_mode, opchar, 1); + pred = insn_data[(int) code].operand[2].predicate; + if (pred != 0 && ! (*pred) (opchar, char_mode)) + opchar = copy_to_mode_reg (char_mode, opchar); + } pat = GEN_FCN ((int) code) (object, opsize, opchar, opalign); if (pat) -- 2.30.2