aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-04-18 14:50:53 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-04-18 14:50:53 -0400
commit321e0bbad67fa1cb22575cac934d0e20a7fd74df (patch)
tree93e90b1255ab374af291d3f0505854ece75ed519
parent9ff6578970fce27e1f14cd3d47bb372150992d2c (diff)
downloadgcc-321e0bbad67fa1cb22575cac934d0e20a7fd74df.zip
gcc-321e0bbad67fa1cb22575cac934d0e20a7fd74df.tar.gz
gcc-321e0bbad67fa1cb22575cac934d0e20a7fd74df.tar.bz2
(expand_call): Use promote_mode.
From-SVN: r7067
-rw-r--r--gcc/calls.c36
1 files changed, 10 insertions, 26 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 285fb8f..06b2387 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -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;
}