expr.c: (set_storage_via_setmem): Convert opchar to mode defined by back-end.
authorAdrian Straetling <straetling@de.ibm.com>
Thu, 7 Jul 2005 10:21:05 +0000 (10:21 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Thu, 7 Jul 2005 10:21:05 +0000 (10:21 +0000)
2005-07-07  Adrian Straetling  <straetling@de.ibm.com>

* expr.c: (set_storage_via_setmem): Convert opchar to mode
defined by back-end.

From-SVN: r101703

gcc/ChangeLog
gcc/expr.c

index e13a1fa6e735164315c85c54c1f330d7bca5e66c..c54bf1b254b128dfe339b628eb4745270d94af9b 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-07  Adrian Straetling  <straetling@de.ibm.com>
+
+       * expr.c: (set_storage_via_setmem): Convert opchar to mode
+       defined by back-end.
+
 2005-07-07  Jakub Jelinek  <jakub@redhat.com>
 
        * config/sparc/sparc.md (stack_protect_testsi): Put clobbers after
index 2a1ecab51e8612ba4b000361f023d11cba83cdee..d778b59c95d7004e97b880120eb448d03a795512 100644 (file)
@@ -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)