aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/ia64/ia64.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/ia64/ia64.h')
-rw-r--r--gcc/config/ia64/ia64.h82
1 files changed, 81 insertions, 1 deletions
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index dca7774..be921f9 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -2115,6 +2115,71 @@ do { \
fprintf (FILE, "\n"); \
} while (0)
+/* This is how to output an assembler line defining a `char' constant
+ to an xdata segment. */
+
+#define ASM_OUTPUT_XDATA_CHAR(FILE, SECTION, VALUE) \
+do { \
+ fprintf (FILE, "\t.xdata1\t\"%s\", ", SECTION); \
+ output_addr_const (FILE, (VALUE)); \
+ fprintf (FILE, "\n"); \
+} while (0)
+
+/* This is how to output an assembler line defining a `short' constant
+ to an xdata segment. */
+
+#define ASM_OUTPUT_XDATA_SHORT(FILE, SECTION, VALUE) \
+do { \
+ fprintf (FILE, "\t.xdata2\t\"%s\", ", SECTION); \
+ output_addr_const (FILE, (VALUE)); \
+ fprintf (FILE, "\n"); \
+} while (0)
+
+/* This is how to output an assembler line defining an `int' constant
+ to an xdata segment. We also handle symbol output here. */
+
+/* ??? For ILP32, also need to handle function addresses here. */
+
+#define ASM_OUTPUT_XDATA_INT(FILE, SECTION, VALUE) \
+do { \
+ fprintf (FILE, "\t.xdata4\t\"%s\", ", SECTION); \
+ output_addr_const (FILE, (VALUE)); \
+ fprintf (FILE, "\n"); \
+} while (0)
+
+/* This is how to output an assembler line defining a `long' constant
+ to an xdata segment. We also handle symbol output here. */
+
+#define ASM_OUTPUT_XDATA_DOUBLE_INT(FILE, SECTION, VALUE) \
+do { \
+ fprintf (FILE, "\t.xdata8\t\"%s\", ", SECTION); \
+ if (GET_CODE (VALUE) == SYMBOL_REF) \
+ { \
+ if (SYMBOL_REF_FLAG (VALUE)) \
+ fprintf (FILE, "@fptr("); \
+ else \
+ fprintf (FILE, "@segrel("); \
+ } \
+ output_addr_const (FILE, (VALUE)); \
+ if (GET_CODE (VALUE) == SYMBOL_REF) \
+ fprintf (FILE, ")"); \
+ fprintf (FILE, "\n"); \
+} while (0)
+
+
+/* Output EH data to the unwind segment. */
+#define ASM_OUTPUT_EH_CHAR(FILE, VALUE) \
+ ASM_OUTPUT_XDATA_CHAR(FILE, ".IA_64.unwind_info", VALUE)
+
+#define ASM_OUTPUT_EH_SHORT(FILE, VALUE) \
+ ASM_OUTPUT_XDATA_SHORT(FILE, ".IA_64.unwind_info", VALUE)
+
+#define ASM_OUTPUT_EH_INT(FILE, VALUE) \
+ ASM_OUTPUT_XDATA_INT(FILE, ".IA_64.unwind_info", VALUE)
+
+#define ASM_OUTPUT_EH_DOUBLE_INT(FILE, VALUE) \
+ ASM_OUTPUT_XDATA_DOUBLE_INT(FILE, ".IA_64.unwind_info", VALUE)
+
/* A C statement to output to the stdio stream STREAM an assembler instruction
to assemble a single byte containing the number VALUE. */
@@ -2453,7 +2518,7 @@ do { \
You should define this symbol if your target supports DWARF 2 frame unwind
information and the default definition does not work. */
-/* #define EH_FRAME_SECTION_ASM_OP */
+#define EH_FRAME_SECTION_ASM_OP ".section\t.IA_64.unwind,\"aw\""
/* A C expression that is nonzero if the normal exception table output should
be omitted.
@@ -2739,6 +2804,21 @@ do { \
#define ISSUE_RATE 3
+#define IA64_UNWIND_INFO 1
+#define HANDLER_SECTION fprintf (asm_out_file, "\t.personality\t__ia64_personality_v1\n\t.handlerdata\n");
+#define IA64_UNWIND_EMIT(f,i) process_for_unwind_directive (f,i)
+
+/* This function contains machine specific function data. */
+struct machine_function
+{
+ /* The new stack pointer when unwinding from EH. */
+ struct rtx_def* ia64_eh_epilogue_sp;
+
+ /* The new bsp value when unwinding from EH. */
+ struct rtx_def* ia64_eh_epilogue_bsp;
+};
+
+
enum ia64_builtins
{
IA64_BUILTIN_SYNCHRONIZE,