aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1994-08-21 21:15:12 -0600
committerJeff Law <law@gcc.gnu.org>1994-08-21 21:15:12 -0600
commit667f6759471ec04b8911389b717fbc5829cd5a38 (patch)
tree2380458515d53483c76c231e6ef9f8fec48a0888
parent208dc1d8f12bb98e05359a56dde0a3c7f05a1cf3 (diff)
downloadgcc-667f6759471ec04b8911389b717fbc5829cd5a38.zip
gcc-667f6759471ec04b8911389b717fbc5829cd5a38.tar.gz
gcc-667f6759471ec04b8911389b717fbc5829cd5a38.tar.bz2
pa.h (FUNCTION_ARG): Use indirect calling conventions when TARGET_LONG_CALLS is in effect.
* pa.h (FUNCTION_ARG): Use indirect calling conventions when TARGET_LONG_CALLS is in effect. From-SVN: r7957
-rw-r--r--gcc/config/pa/pa.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index 8fa04c2..bc7624d 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -826,7 +826,9 @@ struct hppa_args {int words, nargs_prototype; };
The caller must make a distinction between calls to explicitly named
functions and calls through pointers to functions -- the conventions
are different! Calls through pointers to functions only use general
- registers for the first four argument words.
+ registers for the first four argument words. Note the indirect function
+ calling conventions are in effect during TARGET_LONG_CALLS, but
+ current_call_is_indirect will not be set in such situations.
Of course all this is different for the portable runtime model
HP wants everyone to use for ELF. Ugh. Here's a quick description
@@ -861,11 +863,13 @@ struct hppa_args {int words, nargs_prototype; };
|| !FLOAT_MODE_P (MODE) || (CUM).nargs_prototype > 0) \
? gen_rtx (REG, (MODE), \
(FUNCTION_ARG_SIZE ((MODE), (TYPE)) > 1 \
- ? (((!current_call_is_indirect || TARGET_PORTABLE_RUNTIME) \
+ ? (((!(current_call_is_indirect || TARGET_LONG_CALLS) \
+ || TARGET_PORTABLE_RUNTIME) \
&& (MODE) == DFmode) \
? ((CUM).words ? 38 : 34) \
: ((CUM).words ? 23 : 25)) \
- : (((!current_call_is_indirect || TARGET_PORTABLE_RUNTIME) \
+ : (((!(current_call_is_indirect || TARGET_LONG_CALLS) \
+ || TARGET_PORTABLE_RUNTIME) \
&& (MODE) == SFmode) \
? (32 + 2 * (CUM).words) \
: (27 - (CUM).words - FUNCTION_ARG_SIZE ((MODE), \