aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2000-11-06 11:36:33 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2000-11-06 11:36:33 +0100
commita0115140d05f5dd8b2206a3c9ab1f930730fba3e (patch)
tree853b212764d7c98fd5c44b16845cf7cb361b5e6a /gcc
parent9ea2bda9ab92ebc604af6f37642162961eaff1dc (diff)
downloadgcc-a0115140d05f5dd8b2206a3c9ab1f930730fba3e.zip
gcc-a0115140d05f5dd8b2206a3c9ab1f930730fba3e.tar.gz
gcc-a0115140d05f5dd8b2206a3c9ab1f930730fba3e.tar.bz2
sparc.h (ASM_OUTPUT_MI_THUNK): On sparc64 we need to adjust %o1, not %o0 if the return type is large structure.
* config/sparc/sparc.h (ASM_OUTPUT_MI_THUNK): On sparc64 we need to adjust %o1, not %o0 if the return type is large structure. From-SVN: r37273
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/sparc/sparc.h10
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c728088..e7d8a0e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2000-11-06 Jakub Jelinek <jakub@redhat.com>
+ * config/sparc/sparc.h (ASM_OUTPUT_MI_THUNK): On sparc64 we need to
+ adjust %o1, not %o0 if the return type is large structure.
+
+2000-11-06 Jakub Jelinek <jakub@redhat.com>
+
* config/sparc/sparc.md (smulsi3_highpart_v8plus, ashldi3_v8plus+1,
update_return, flush, flushdi, ffssi2, ffsdi2): Fix output formatting.
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index ee3660f..3fa2a6d 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -3231,10 +3231,16 @@ do { \
Used for C++ multiple inheritance. */
#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
do { \
+ int reg = 0; \
+ \
+ if (TARGET_ARCH64 \
+ && aggregate_value_p (TREE_TYPE (TREE_TYPE (FUNCTION)))) \
+ reg = 1; \
if ((DELTA) >= 4096 || (DELTA) < -4096) \
- fprintf (FILE, "\tset\t%d, %%g1\n\tadd\t%%o0, %%g1, %%o0\n", (DELTA));\
+ fprintf (FILE, "\tset\t%d, %%g1\n\tadd\t%%o%d, %%g1, %%o%d\n", \
+ (DELTA), reg, reg); \
else \
- fprintf (FILE, "\tadd\t%%o0, %d, %%o0\n", DELTA); \
+ fprintf (FILE, "\tadd\t%%o%d, %d, %%o%d\n", reg, (DELTA), reg); \
fprintf (FILE, "\tor\t%%o7, %%g0, %%g1\n"); \
fprintf (FILE, "\tcall\t"); \
assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \