]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
m68k.c (const_uint32_operand): Abort if mode is <= 32 bits.
authorRichard Henderson <rth@gcc.gnu.org>
Mon, 23 Jul 2001 04:46:53 +0000 (21:46 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Mon, 23 Jul 2001 04:46:53 +0000 (21:46 -0700)
        * m68k.c (const_uint32_operand): Abort if mode is <= 32 bits.
        (const_sint32_operand): Likewise.
        * m68k.md (anon mulsi pattern): Use const_int_operand not
        const_sint32_operand.
        (umulsi3_highpart): Zero extend a constant input.
        (smulsi3_highpart): Don't bother checking SImode constant.
        (const_umulsi3_highpart): Give op3 DImode.
        (const_smulsi3_highpart): Likewise.

From-SVN: r44252

gcc/ChangeLog
gcc/config/m68k/m68k.c
gcc/config/m68k/m68k.md

index 0b69aa3f8b499205608fcdb89d3068b571d18af0..e066b60b9bf2fa5eeb84353ac70b24dd90281cdf 100644 (file)
@@ -1,3 +1,14 @@
+2001-07-22  Richard Henderson  <rth@redhat.com>
+
+       * m68k.c (const_uint32_operand): Abort if mode is <= 32 bits.
+       (const_sint32_operand): Likewise.
+       * m68k.md (anon mulsi pattern): Use const_int_operand not
+       const_sint32_operand.
+       (umulsi3_highpart): Zero extend a constant input.
+       (smulsi3_highpart): Don't bother checking SImode constant.
+       (const_umulsi3_highpart): Give op3 DImode.
+       (const_smulsi3_highpart): Likewise.
+
 2001-07-22  Richard Henderson  <rth@redhat.com>
 
        * flow.c (split_block): Make sure bb_note is included in the
@@ -208,8 +219,8 @@ Fri Jul 20 21:59:42 CEST 2001  Jan Hubicka  <jh@suse.cz>
 
 2001-07-20  Catherine Moore  <clm@redhat.com>
 
-        * config/v850/v850.md (casesi): Generate LABEL_REF
-        with Pmode.
+       * config/v850/v850.md (casesi): Generate LABEL_REF
+       with Pmode.
 
 Fri Jul 20 14:12:57 CEST 2001  Jan Hubicka  <jh@suse.cz>
 
@@ -231,7 +242,7 @@ Fri Jul 20 13:24:16 CEST 2001  Jan Hubicka  <jh@suse.cz>
 
 2001-07-20  Aldy Hernandez  <aldyh@redhat.com>
 
-        * config/mips/mips.h (ISA_HAS_NMADD_NMSUB): New macro.
+       * config/mips/mips.h (ISA_HAS_NMADD_NMSUB): New macro.
 
        * config/mips/mips.md (nmadd/nmsub): Use macro.
 
@@ -320,7 +331,7 @@ Fri Jul 20 13:24:16 CEST 2001  Jan Hubicka  <jh@suse.cz>
 
 2001-07-19  Catherine Moore  <clm@cygnus.com>
 
-        * config/v850/v850.h (ASM_OUTPUT_LABELREF): Restore. 
+       * config/v850/v850.h (ASM_OUTPUT_LABELREF): Restore. 
 
 2001-07-19  Geoffrey Keating  <geoffk@redhat.com>
 
index 54e4d376ed3f528e88fa727c871e76c44d4f6f7b..493e770768bf740567454c71691499435cd157e4 100644 (file)
@@ -3937,8 +3937,13 @@ strict_low_part_peephole_ok (mode, first_insn, target)
 int
 const_uint32_operand (op, mode)
      rtx op;
-     enum machine_mode mode ATTRIBUTE_UNUSED;
+     enum machine_mode mode;
 {
+  /* It doesn't make sense to ask this question with a mode that is
+     not larger than 32 bits.  */
+  if (GET_MODE_BITSIZE (mode) <= 32)
+    abort ();
+
 #if HOST_BITS_PER_WIDE_INT > 32
   /* All allowed constants will fit a CONST_INT.  */
   return (GET_CODE (op) == CONST_INT
@@ -3956,8 +3961,13 @@ const_uint32_operand (op, mode)
 int
 const_sint32_operand (op, mode)
      rtx op;
-     enum machine_mode mode ATTRIBUTE_UNUSED;
+     enum machine_mode mode;
 {
+  /* It doesn't make sense to ask this question with a mode that is
+     not larger than 32 bits.  */
+  if (GET_MODE_BITSIZE (mode) <= 32)
+    abort ();
+
   /* All allowed constants will fit a CONST_INT.  */
   return (GET_CODE (op) == CONST_INT
          && (INTVAL (op) >= (-0x7fffffff - 1) && INTVAL (op) <= 0x7fffffff));
index f81138e9af5d3eb65a10db54f90dfe987ce7a3e7..f56e3546374ec95f4e75dd4939202280327df6eb 100644 (file)
 (define_insn ""
   [(set (match_operand:SI 0 "register_operand" "=d")
        (mult:SI (match_operand:SI 1 "register_operand" "%0")
-                (match_operand:SI 2 "const_sint32_operand" "")))
+                (match_operand:SI 2 "const_int_operand" "n")))
    (set (match_operand:SI 3 "register_operand" "=d")
        (truncate:SI (lshiftrt:DI (mult:DI (sign_extend:DI (match_dup 1))
                                           (match_dup 2))
   "
 {
   operands[3] = gen_reg_rtx (SImode);
-  if (GET_CODE (operands[2]) == CONST_INT
-      || GET_CODE (operands[2]) == CONST_DOUBLE)
+
+  if (GET_CODE (operands[2]) == CONST_INT)
     {
-      if (! const_uint32_operand (operands[2], VOIDmode))
-       abort ();
+      operands[2] = immed_double_const (INTVAL (operands[2]) & 0xffffffff,
+                                       0, DImode);
+
       /* We have to adjust the operand order for the matching constraints.  */
       emit_insn (gen_const_umulsi3_highpart (operands[0], operands[3],
                                             operands[1], operands[2]));
        (truncate:SI
         (lshiftrt:DI
          (mult:DI (zero_extend:DI (match_operand:SI 2 "register_operand" "1"))
-                  (match_operand 3 "const_uint32_operand" ""))
+                  (match_operand:DI 3 "const_uint32_operand" "n"))
          (const_int 32))))
    (clobber (match_operand:SI 1 "register_operand" "=d"))]
   "TARGET_68020 && !TARGET_68060 && !TARGET_5200"
   "
 {
   operands[3] = gen_reg_rtx (SImode);
-  if (GET_CODE (operands[2]) == CONST_INT
-      || GET_CODE (operands[2]) == CONST_DOUBLE)
+  if (GET_CODE (operands[2]) == CONST_INT)
     {
-      if (! const_sint32_operand (operands[2], VOIDmode))
-       abort ();
       /* We have to adjust the operand order for the matching constraints.  */
       emit_insn (gen_const_smulsi3_highpart (operands[0], operands[3],
                                             operands[1], operands[2]));
        (truncate:SI
         (lshiftrt:DI
          (mult:DI (sign_extend:DI (match_operand:SI 2 "register_operand" "1"))
-                  (match_operand 3 "const_sint32_operand" ""))
+                  (match_operand:DI 3 "const_sint32_operand" "n"))
          (const_int 32))))
    (clobber (match_operand:SI 1 "register_operand" "=d"))]
   "TARGET_68020 && !TARGET_68060 && !TARGET_5200"