diff options
author | Adrian Straetling <straetling@de.ibm.com> | 2005-07-07 10:21:05 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2005-07-07 10:21:05 +0000 |
commit | eba78cabfc2886989c237afe759b424d8871117e (patch) | |
tree | 4ae6d3184c3aa9f403df202e9e611d95966d8385 /gcc/expr.c | |
parent | f6d487d44beaf3a5f828ea0160fae8e94c9aff8e (diff) |
2005-07-07 Adrian Straetling <straetling@de.ibm.com>
* expr.c: (set_storage_via_setmem): Convert opchar to mode
defined by back-end.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@101703 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 16 |
1 files changed, 11 insertions, 5 deletions
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) |