aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1997-03-19 17:10:39 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1997-03-19 17:10:39 -0500
commit3cb32ea3fd1172a9573c407655a93b8b81980ba2 (patch)
tree09f3b02c4ac58176e768988c4c993142f2346544 /gcc
parent641d44433f4955c33001258c070f96599b8694c9 (diff)
downloadgcc-3cb32ea3fd1172a9573c407655a93b8b81980ba2.zip
gcc-3cb32ea3fd1172a9573c407655a93b8b81980ba2.tar.gz
gcc-3cb32ea3fd1172a9573c407655a93b8b81980ba2.tar.bz2
(ASM_OUTPUT_MI_THUNK): Define.
From-SVN: r13750
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/m68k/linux.h29
1 files changed, 28 insertions, 1 deletions
diff --git a/gcc/config/m68k/linux.h b/gcc/config/m68k/linux.h
index 5a53db1..5807597 100644
--- a/gcc/config/m68k/linux.h
+++ b/gcc/config/m68k/linux.h
@@ -1,5 +1,5 @@
/* Definitions for Motorola 68k running Linux with ELF format.
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -354,3 +354,30 @@ do { \
: "d" (_beg), "d" (_len) \
: "%d0", "%d2", "%d3"); \
}
+
+/* Output code to add DELTA to the first argument, and then jump to FUNCTION.
+ Used for C++ multiple inheritance. */
+#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
+do { \
+ if (DELTA > 0 && DELTA <= 8) \
+ asm_fprintf (FILE, "\taddq.l %I%d,4(%Rsp)\n", DELTA); \
+ else if (DELTA < 0 && DELTA >= -8) \
+ asm_fprintf (FILE, "\tsubq.l %I%d,4(%Rsp)\n", -DELTA); \
+ else \
+ asm_fprintf (FILE, "\tadd.l %I%d,4(%Rsp)\n", DELTA); \
+ \
+ if (flag_pic) \
+ { \
+ fprintf (FILE, "\tbra.l "); \
+ assemble_name \
+ (FILE, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \
+ fprintf (FILE, "@PLTPC\n"); \
+ } \
+ else \
+ { \
+ fprintf (FILE, "\tjmp "); \
+ assemble_name \
+ (FILE, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (FUNCTION))); \
+ fprintf (FILE, "\n"); \
+ } \
+} while (0)