From a0115140d05f5dd8b2206a3c9ab1f930730fba3e Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 6 Nov 2000 11:36:33 +0100 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/config/sparc/sparc.h | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c728088bae3..e7d8a0e05ca 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-11-06 Jakub Jelinek + + * 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 * config/sparc/sparc.md (smulsi3_highpart_v8plus, ashldi3_v8plus+1, diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index ee3660f9dfe..3fa2a6db384 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)); \ -- 2.30.2