]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
(expand_call): Use promote_mode.
authorRichard Kenner <kenner@gcc.gnu.org>
Mon, 18 Apr 1994 18:50:53 +0000 (14:50 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Mon, 18 Apr 1994 18:50:53 +0000 (14:50 -0400)
From-SVN: r7067

gcc/calls.c

index 285fb8f9b5870035c9ffd600560ac008cb22a758..06b23876fb994914b8b39b2f8f52fd0a0aaad93c 100644 (file)
@@ -944,6 +944,7 @@ expand_call (exp, target, ignore)
   for (p = actparms, argpos = 0; p; p = TREE_CHAIN (p), i += inc, argpos++)
     {
       tree type = TREE_TYPE (TREE_VALUE (p));
+      int unsignedp;
       enum machine_mode mode;
 
       args[i].tree_value = TREE_VALUE (p);
@@ -1036,20 +1037,13 @@ expand_call (exp, target, ignore)
        }
 
       mode = TYPE_MODE (type);
+      unsignedp = TREE_UNSIGNED (type);
 
 #ifdef PROMOTE_FUNCTION_ARGS
-      /* Compute the mode in which the arg is actually to be extended to.  */
-      if (TREE_CODE (type) == INTEGER_TYPE || TREE_CODE (type) == ENUMERAL_TYPE
-         || TREE_CODE (type) == BOOLEAN_TYPE || TREE_CODE (type) == CHAR_TYPE
-         || TREE_CODE (type) == REAL_TYPE || TREE_CODE (type) == POINTER_TYPE
-         || TREE_CODE (type) == OFFSET_TYPE)
-       {
-         int unsignedp = TREE_UNSIGNED (type);
-         PROMOTE_MODE (mode, unsignedp, type);
-         args[i].unsignedp = unsignedp;
-       }
+      mode = promote_mode (type, mode, &unsignedp, 1);
 #endif
 
+      args[i].unsignedp = unsignedp;
       args[i].mode = mode;
       args[i].reg = FUNCTION_ARG (args_so_far, mode, type,
                                  argpos < n_named_args);
@@ -1983,25 +1977,15 @@ expand_call (exp, target, ignore)
   if (GET_CODE (target) == REG
       && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
     {
-      enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
-      int unsignedp = TREE_UNSIGNED (TREE_TYPE (exp));
-
-      if (TREE_CODE (TREE_TYPE (exp)) == INTEGER_TYPE
-         || TREE_CODE (TREE_TYPE (exp)) == ENUMERAL_TYPE
-         || TREE_CODE (TREE_TYPE (exp)) == BOOLEAN_TYPE
-         || TREE_CODE (TREE_TYPE (exp)) == CHAR_TYPE
-         || TREE_CODE (TREE_TYPE (exp)) == REAL_TYPE
-         || TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE
-         || TREE_CODE (TREE_TYPE (exp)) == OFFSET_TYPE)
-       {
-         PROMOTE_MODE (mode, unsignedp, TREE_TYPE (exp));
-       }
+      tree type = TREE_TYPE (exp);
+      int unsignedp = TREE_UNSIGNED (type);
 
-      /* If we didn't promote as expected, something is wrong.  */
-      if (mode != GET_MODE (target))
+      /* If we don't promote as expected, something is wrong.  */
+      if (GET_MODE (target)
+         != promote_mode (type, TYPE_MODE (type), &unsignedp, 1))
        abort ();
 
-      target = gen_rtx (SUBREG, TYPE_MODE (TREE_TYPE (exp)), target, 0);
+      target = gen_rtx (SUBREG, TYPE_MODE (type), target, 0);
       SUBREG_PROMOTED_VAR_P (target) = 1;
       SUBREG_PROMOTED_UNSIGNED_P (target) = unsignedp;
     }