aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2005-06-01 01:19:44 -0700
committerRichard Henderson <rth@gcc.gnu.org>2005-06-01 01:19:44 -0700
commitd006f5eb56135d6130498994fd6e82c1198eb5e1 (patch)
treef8aebf03584606e2ae131329608a12381249b1d5 /gcc
parent13a9737c1920fd99fc6116111cd60b7db0d5590c (diff)
downloadgcc-d006f5eb56135d6130498994fd6e82c1198eb5e1.zip
gcc-d006f5eb56135d6130498994fd6e82c1198eb5e1.tar.gz
gcc-d006f5eb56135d6130498994fd6e82c1198eb5e1.tar.bz2
configure.ac (HAVE_AS_JSRDIRECT_RELOCS): New.
* configure.ac (HAVE_AS_JSRDIRECT_RELOCS): New. * config.in, configure: Rebuild. * config/alpha/alpha.c (print_operand): Add 'j'. * alpha.md (divmodsi_internal_er_1): Use it. (divmoddi_internal_er_1): Likewise. From-SVN: r100435
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config.in6
-rw-r--r--gcc/config/alpha/alpha.c14
-rw-r--r--gcc/config/alpha/alpha.md8
-rwxr-xr-xgcc/configure39
-rw-r--r--gcc/configure.ac8
6 files changed, 79 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0d59ffe..b706552 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2005-06-01 Richard Henderson <rth@redhat.com>
+
+ * configure.ac (HAVE_AS_JSRDIRECT_RELOCS): New.
+ * config.in, configure: Rebuild.
+ * config/alpha/alpha.c (print_operand): Add 'j'.
+ * alpha.md (divmodsi_internal_er_1): Use it.
+ (divmoddi_internal_er_1): Likewise.
+
2005-06-01 Richard Sandiford <rsandifo@redhat.com>
* system.h (TARGET_OPTIONS, TARGET_SWITCHES): Poison.
diff --git a/gcc/config.in b/gcc/config.in
index 33cb974..6221762 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -185,6 +185,12 @@
#endif
+/* Define if your assembler supports the lituse_jsrdirect relocation. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_AS_JSRDIRECT_RELOCS
+#endif
+
+
/* Define if your assembler supports .sleb128 and .uleb128. */
#ifndef USED_FOR_TARGET
#undef HAVE_AS_LEB128
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index b02175e..908165a 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -4921,6 +4921,20 @@ print_operand (FILE *file, rtx x, int code)
}
break;
+ case 'j':
+ {
+ const char *lituse;
+
+#ifdef HAVE_AS_JSRDIRECT_RELOCS
+ lituse = "lituse_jsrdirect";
+#else
+ lituse = "lituse_jsr";
+#endif
+
+ gcc_assert (INTVAL (x) != 0);
+ fprintf (file, "\t\t!%s!%d", lituse, (int) INTVAL (x));
+ }
+ break;
case 'r':
/* If this operand is the constant zero, write it as "$31". */
if (GET_CODE (x) == REG)
diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md
index def77b4..efb6d02 100644
--- a/gcc/config/alpha/alpha.md
+++ b/gcc/config/alpha/alpha.md
@@ -978,7 +978,7 @@
(clobber (reg:DI 23))
(clobber (reg:DI 28))]
"TARGET_EXPLICIT_RELOCS && ! TARGET_ABI_OPEN_VMS"
- "ldq $27,__%E3($29)\t\t!literal!%#\;jsr $23,($27),__%E3\t\t!lituse_jsr!%#"
+ "#"
"&& reload_completed"
[(parallel [(set (match_dup 0)
(sign_extend:DI (match_dup 3)))
@@ -1023,7 +1023,7 @@
(clobber (reg:DI 23))
(clobber (reg:DI 28))]
"TARGET_EXPLICIT_RELOCS && ! TARGET_ABI_OPEN_VMS"
- "jsr $23,($27),__%E3%J5"
+ "jsr $23,($27),__%E3%j5"
[(set_attr "type" "jsr")
(set_attr "length" "4")])
@@ -1047,7 +1047,7 @@
(clobber (reg:DI 23))
(clobber (reg:DI 28))]
"TARGET_EXPLICIT_RELOCS && ! TARGET_ABI_OPEN_VMS"
- "ldq $27,__%E3($29)\t\t!literal!%#\;jsr $23,($27),__%E3\t\t!lituse_jsr!%#"
+ "#"
"&& reload_completed"
[(parallel [(set (match_dup 0) (match_dup 3))
(use (match_dup 0))
@@ -1091,7 +1091,7 @@
(clobber (reg:DI 23))
(clobber (reg:DI 28))]
"TARGET_EXPLICIT_RELOCS && ! TARGET_ABI_OPEN_VMS"
- "jsr $23,($27),__%E3%J5"
+ "jsr $23,($27),__%E3%j5"
[(set_attr "type" "jsr")
(set_attr "length" "4")])
diff --git a/gcc/configure b/gcc/configure
index 17b9c8a..b4b41b9 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -14159,6 +14159,45 @@ cat >>confdefs.h <<\_ACEOF
_ACEOF
fi
+ echo "$as_me:$LINENO: checking assembler for jsrdirect relocation support" >&5
+echo $ECHO_N "checking assembler for jsrdirect relocation support... $ECHO_C" >&6
+if test "${gcc_cv_as_alpha_jsrdirect_relocs+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ gcc_cv_as_alpha_jsrdirect_relocs=no
+ if test $in_tree_gas = yes; then
+ if test $gcc_cv_gas_vers -ge `expr \( \( 2 \* 1000 \) + 16 \) \* 1000 + 90`
+ then gcc_cv_as_alpha_jsrdirect_relocs=yes
+fi
+ elif test x$gcc_cv_as != x; then
+ echo ' .set nomacro
+ .text
+ ldq $27, a($29) !literal!1
+ jsr $26, ($27), a !lituse_jsrdirect!1' > conftest.s
+ if { ac_try='$gcc_cv_as -o conftest.o conftest.s >&5'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }
+ then
+ gcc_cv_as_alpha_jsrdirect_relocs=yes
+ else
+ echo "configure: failed program was" >&5
+ cat conftest.s >&5
+ fi
+ rm -f conftest.o conftest.s
+ fi
+fi
+echo "$as_me:$LINENO: result: $gcc_cv_as_alpha_jsrdirect_relocs" >&5
+echo "${ECHO_T}$gcc_cv_as_alpha_jsrdirect_relocs" >&6
+if test $gcc_cv_as_alpha_jsrdirect_relocs = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_AS_JSRDIRECT_RELOCS 1
+_ACEOF
+
+fi
;;
cris-*-*)
diff --git a/gcc/configure.ac b/gcc/configure.ac
index fd1476c..7c6bfce 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -2641,6 +2641,14 @@ case "$target" in
lda $29, 0($29) !gpdisp!3],,
[AC_DEFINE(HAVE_AS_EXPLICIT_RELOCS, 1,
[Define if your assembler supports explicit relocations.])])
+ gcc_GAS_CHECK_FEATURE([jsrdirect relocation support],
+ gcc_cv_as_alpha_jsrdirect_relocs, [2,16,90],,
+[ .set nomacro
+ .text
+ ldq $27, a($29) !literal!1
+ jsr $26, ($27), a !lituse_jsrdirect!1],,
+ [AC_DEFINE(HAVE_AS_JSRDIRECT_RELOCS, 1,
+ [Define if your assembler supports the lituse_jsrdirect relocation.])])
;;
cris-*-*)