aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>2003-10-10 22:44:41 +0000
committerRichard Kenner <kenner@gcc.gnu.org>2003-10-10 18:44:41 -0400
commit738e7b39e0ee4224da0e63aa37f0d2502b143f45 (patch)
treeac5c2af90dcd22ff2194bf6aed5553db07cdf854
parent737749725f22606c78615b44ffece353cda2e4ad (diff)
downloadgcc-738e7b39e0ee4224da0e63aa37f0d2502b143f45.zip
gcc-738e7b39e0ee4224da0e63aa37f0d2502b143f45.tar.gz
gcc-738e7b39e0ee4224da0e63aa37f0d2502b143f45.tar.bz2
ia64.c (ia64_vms_init_libfuncs): New function.
* config/ia64/ia64.c (ia64_vms_init_libfuncs): New function. (ia64_output_function_prologue): Only write .prologue if --with-gnu-as. (ia64_initialize_trampoline): If not using GAS, declare trampoline as global. * config/ia64/ia64.h (ASM_APP_ON, ASM_APP_OFF): Add vers for not GAS. (ASM_OUTPUT_DEBUG_LABEL): Likewise. From-SVN: r72316
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/ia64/ia64.c33
-rw-r--r--gcc/config/ia64/ia64.h11
3 files changed, 43 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5cf9983..cf0a5f8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -46,7 +46,15 @@
* config/ip2k/ip2k.h, config/iq2000/iq2000.h:
No need to define BITS_PER_UNIT.
+2003-10-10 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+ * config/ia64/ia64.c (ia64_vms_init_libfuncs): New function.
+ (ia64_output_function_prologue): Only write .prologue if --with-gnu-as.
+ (ia64_initialize_trampoline): If not using GAS, declare trampoline
+ as global.
+ * config/ia64/ia64.h (ASM_APP_ON, ASM_APP_OFF): Add vers for not GAS.
+ (ASM_OUTPUT_DEBUG_LABEL): Likewise.
+
* stor-layout.c (compute_record_mode): Don't force BLKmode if
field is zero-length BLKmode.
* expr.c (expand_expr, case COMPONENT_REF): Handle case of BLKmode
@@ -54,8 +62,6 @@
* combine.c (distribute_links): Properly test for REG being set.
-2003-10-10 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
* config/alpha/alpha.c (alpha_expand_block_mode): Don't use
gen_lowpart and company except for REG.
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 75a2cb6..32e3c8b 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -255,6 +255,8 @@ static void ia64_hpux_file_end (void)
ATTRIBUTE_UNUSED;
static void ia64_hpux_init_libfuncs (void)
ATTRIBUTE_UNUSED;
+static void ia64_vms_init_libfuncs (void)
+ ATTRIBUTE_UNUSED;
static tree ia64_handle_model_attribute (tree *, tree, tree, int, bool *);
static void ia64_encode_section_info (tree, rtx, int);
@@ -3132,7 +3134,7 @@ ia64_output_function_prologue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED)
grsave = current_frame_info.reg_save_pr;
}
- if (mask)
+ if (mask && TARGET_GNU_AS)
fprintf (file, "\t.prologue %d, %d\n", mask,
ia64_dbx_register_number (grsave));
else
@@ -3215,6 +3217,19 @@ ia64_initialize_trampoline (rtx addr, rtx fnaddr, rtx static_chain)
{
rtx addr_reg, eight = GEN_INT (8);
+ /* The Intel assembler requires that the global __ia64_trampoline symbol
+ be declared explicitly */
+ if (!TARGET_GNU_AS)
+ {
+ static bool declared_ia64_trampoline = false;
+
+ if (!declared_ia64_trampoline)
+ {
+ declared_ia64_trampoline = true;
+ fputs ("\t.global\t__ia64_trampoline\n", asm_out_file);
+ }
+ }
+
/* Load up our iterator. */
addr_reg = gen_reg_rtx (Pmode);
emit_move_insn (addr_reg, addr);
@@ -8307,6 +8322,7 @@ ia64_hpux_file_end (void)
}
/* Rename all the TFmode libfuncs using the HPUX conventions. */
+
static void
ia64_hpux_init_libfuncs (void)
{
@@ -8339,6 +8355,21 @@ ia64_hpux_init_libfuncs (void)
set_conv_libfunc (sfloat_optab, TFmode, SImode, "_U_Qfcnvxf_sgl_to_quad");
set_conv_libfunc (sfloat_optab, TFmode, DImode, "_U_Qfcnvxf_dbl_to_quad");
}
+
+/* Rename the division and modulus functions in VMS. */
+
+static void
+ia64_vms_init_libfuncs (void)
+{
+ set_optab_libfunc (sdiv_optab, SImode, "OTS$DIV_I");
+ set_optab_libfunc (sdiv_optab, DImode, "OTS$DIV_L");
+ set_optab_libfunc (udiv_optab, SImode, "OTS$DIV_UI");
+ set_optab_libfunc (udiv_optab, DImode, "OTS$DIV_UL");
+ set_optab_libfunc (smod_optab, SImode, "OTS$REM_I");
+ set_optab_libfunc (smod_optab, DImode, "OTS$REM_L");
+ set_optab_libfunc (umod_optab, SImode, "OTS$REM_UI");
+ set_optab_libfunc (umod_optab, DImode, "OTS$REM_UL");
+}
/* Switch to the section to which we should output X. The only thing
special we do here is to honor small data. */
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index 8550eda..2cff151 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -1745,17 +1745,12 @@ do { \
/* A C string constant for text to be output before each `asm' statement or
group of consecutive ones. */
-/* ??? This won't work with the Intel assembler, because it does not accept
- # as a comment start character. However, //APP does not work in gas, so we
- can't use that either. Same problem for ASM_APP_OFF below. */
-
-#define ASM_APP_ON "#APP\n"
+#define ASM_APP_ON (TARGET_GNU_AS ? "#APP\n" : "//APP\n")
/* A C string constant for text to be output after each `asm' statement or
group of consecutive ones. */
-#define ASM_APP_OFF "#NO_APP\n"
-
+#define ASM_APP_OFF (TARGET_GNU_AS ? "#NO_APP\n" : "//NO_APP\n")
/* Output of Uninitialized Variables. */
@@ -2133,7 +2128,7 @@ do { \
add brackets around the label. */
#define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \
- fprintf (FILE, "[.%s%d:]\n", PREFIX, NUM)
+ fprintf (FILE, TARGET_GNU_AS ? "[.%s%d:]\n" : ".%s%d:\n", PREFIX, NUM)
/* Use section-relative relocations for debugging offsets. Unlike other
targets that fake this by putting the section VMA at 0, IA-64 has