diff options
author | Jakub Jelinek <jakub@redhat.com> | 2000-11-06 11:36:33 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2000-11-06 11:36:33 +0100 |
commit | a0115140d05f5dd8b2206a3c9ab1f930730fba3e (patch) | |
tree | 853b212764d7c98fd5c44b16845cf7cb361b5e6a | |
parent | 9ea2bda9ab92ebc604af6f37642162961eaff1dc (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.h | 10 |
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)); \ |