aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-05-20 05:06:12 +0000
committerRichard Stallman <rms@gnu.org>1993-05-20 05:06:12 +0000
commitefd65a8b463eb9d7ef294cb005d603cac6f12f6d (patch)
treeeba855a75d58faae5e3831d0b5b480125dc0c655
parent6ad216adda81c7bab0d9f4cd4887178f892ef8a1 (diff)
downloadgcc-efd65a8b463eb9d7ef294cb005d603cac6f12f6d.zip
gcc-efd65a8b463eb9d7ef294cb005d603cac6f12f6d.tar.gz
gcc-efd65a8b463eb9d7ef294cb005d603cac6f12f6d.tar.bz2
(expand_call): Declare and set current_call_is_indirect.
(emit_library_call, emit_library_call_value): Likewise. From-SVN: r4515
-rw-r--r--gcc/calls.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index f1cbfc2..4e0e4e2 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -473,6 +473,8 @@ expand_call (exp, target, ignore)
CUMULATIVE_ARGS args_so_far;
/* Nonzero if a reg parm has been scanned. */
int reg_parm_seen;
+ /* Nonzero if this is an indirect function call. */
+ int current_call_is_indirect = 0;
/* Nonzero if we must avoid push-insns in the args for this call.
If stack space is allocated for register parameters, but not by the
@@ -732,6 +734,15 @@ expand_call (exp, target, ignore)
if (fndecl && DECL_NAME (fndecl))
name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
+ /* On some machines (such as the PA) indirect calls have a different
+ calling convention than normal calls. FUNCTION_ARG in the target
+ description can look at current_call_is_indirect to determine which
+ calling convention to use. */
+ current_call_is_indirect = (fndecl == 0);
+#if 0
+ = TREE_CODE (TREE_OPERAND (exp, 0)) == NON_LVALUE_EXPR ? 1 : 0;
+#endif
+
#if 0
/* Unless it's a call to a specific function that isn't alloca,
if it has one argument, we must assume it might be alloca. */
@@ -2007,6 +2018,8 @@ emit_library_call (va_alist)
int old_inhibit_defer_pop = inhibit_defer_pop;
int no_queue = 0;
rtx use_insns;
+ /* library calls are never indirect calls. */
+ int current_call_is_indirect = 0;
va_start (p);
orgfun = fun = va_arg (p, rtx);
@@ -2261,6 +2274,8 @@ emit_library_call_value (va_alist)
rtx use_insns;
rtx value;
rtx mem_value = 0;
+ /* library calls are never indirect calls. */
+ int current_call_is_indirect = 0;
va_start (p);
orgfun = fun = va_arg (p, rtx);