aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2000-10-17 23:45:23 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2000-10-17 23:45:23 +0200
commit4c646291f167d209103586e621a35590ffcff6d0 (patch)
tree045ad0da6c2e13cd7a4e9e374bcfe2927c41b5cc /gcc
parent07e0fe3dae72cd27b073ea0fe857826b5e14475b (diff)
downloadgcc-4c646291f167d209103586e621a35590ffcff6d0.zip
gcc-4c646291f167d209103586e621a35590ffcff6d0.tar.gz
gcc-4c646291f167d209103586e621a35590ffcff6d0.tar.bz2
alpha.h (ASM_OUTPUT_MI_THUNK): Reload gp if needed.
* config/alpha/alpha.h (ASM_OUTPUT_MI_THUNK): Reload gp if needed. * config/sparc/sparc.h (ASM_OUTPUT_MI_THUNK): Always use call, make sure linker can relax even the delay slot mov %g1,%o7, fix output formating. From-SVN: r36912
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/alpha/alpha.h3
-rw-r--r--gcc/config/sparc/sparc.h43
3 files changed, 19 insertions, 35 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f542b85..ed52370 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2000-10-17 Jakub Jelinek <jakub@redhat.com>
+
+ * config/alpha/alpha.h (ASM_OUTPUT_MI_THUNK): Reload gp if needed.
+
+ * config/sparc/sparc.h (ASM_OUTPUT_MI_THUNK): Always use call, make
+ sure linker can relax even the delay slot mov %g1,%o7, fix output
+ formating.
+
2000-10-17 Kazu Hirata <kazu@hxi.com>
* config/h8300/h8300.md: Remove an unnecessary zero_extend
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h
index 21d23bb..4d5729e 100644
--- a/gcc/config/alpha/alpha.h
+++ b/gcc/config/alpha/alpha.h
@@ -2240,6 +2240,9 @@ do { \
const char *fn_name = XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0); \
int reg; \
\
+ if (! TARGET_OPEN_VMS && ! TARGET_WINDOWS_NT) \
+ fprintf (FILE, "\tldgp $29,0($27)\n"); \
+ \
/* Mark end of prologue. */ \
output_end_prologue (FILE); \
\
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index 93b8aac..89adebf 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -3231,42 +3231,15 @@ do { \
Used for C++ multiple inheritance. */
#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
do { \
- int big_delta = (DELTA) >= 4096 || (DELTA) < -4096; \
- if (big_delta) \
- fprintf (FILE, "\tset %d,%%g1\n\tadd %%o0,%%g1,%%o0\n", (DELTA)); \
- /* Don't use the jmp solution unless we know the target is local to \
- the application or shared object. \
- XXX: Wimp out and don't actually check anything except if this is \
- an embedded target where we assume there are no shared libs. */ \
- if (!TARGET_CM_EMBMEDANY || flag_pic) \
- { \
- if (! big_delta) \
- fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \
- fprintf (FILE, "\tmov %%o7,%%g1\n"); \
- fprintf (FILE, "\tcall "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, ",0\n"); \
- } \
- else if (TARGET_CM_EMBMEDANY) \
- { \
- fprintf (FILE, "\tsetx "); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, ",%%g5,%%g1\n\tjmp %%g1\n"); \
- } \
- else \
- { \
- fprintf (FILE, "\tsethi %%hi("); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, "),%%g1\n\tjmp %%g1+%%lo("); \
- assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
- fprintf (FILE, ")\n"); \
- } \
- if (!TARGET_CM_EMBMEDANY || flag_pic) \
- fprintf (FILE, "\tmov %%g1,%%o7\n"); \
- else if (big_delta) \
- fprintf (FILE, "\tnop\n"); \
+ if ((DELTA) >= 4096 || (DELTA) < -4096) \
+ fprintf (FILE, "\tset\t%d, %%g1\n\tadd\t%%o0, %%g1, %%o0\n", (DELTA));\
else \
- fprintf (FILE, "\tadd %%o0,%d,%%o0\n", DELTA); \
+ fprintf (FILE, "\tadd\t%%o0, %d, %%o0\n", DELTA); \
+ fprintf (FILE, "\tor\t%%o7, %%g0, %%g1\n"); \
+ fprintf (FILE, "\tcall\t"); \
+ assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0)); \
+ fprintf (FILE, ", 0\n"); \
+ fprintf (FILE, "\t or\t%%g1, %%g0, %%o7\n"); \
} while (0)
/* Define the parentheses used to group arithmetic operations