Commit 7b6e506e by Richard Henderson Committed by Richard Henderson

configure.in (HAVE_AS_TLS): Add ia64 test.

	* configure.in (HAVE_AS_TLS): Add ia64 test.
	* configure: Rebuild.
	* config/ia64/ia64.c (ia64_tls_size_string, ia64_tls_size): New.
	(override_options): Set it.
	(TARGET_HAVE_TLS): New.
	(sdata_symbolic_operand): Look for 's'.
	(tls_symbolic_operand): New.
	(ia64_expand_load_address): Abort for tls symbols.
	(gen_tls_get_addr): New.
	(gen_thread_pointer): New.
	(ia64_expand_move): Split out from movdi.  Handle tls symbols.
	(rtx_needs_barrier): Add new unspecs.
	(ia64_encode_section_info): Handle tls symbols.
	(ia64_strip_name_encoding): Strip two encoding chars.
	* config/ia64/ia64.h (ia64_tls_size, ia64_tls_size_string): New.
	(TARGET_TLS14, TARGET_TLS22, TARGET_TLS64): New.
	(TARGET_OPTIONS): Add tls-size.
	(ENCODE_SECTION_INFO_CHAR): Rename from SDATA_NAME_FLAG_CHAR.
	* config/ia64/ia64.md (UNSPEC_LTOFF_DTPMOD, UNSPEC_LTOFF_DTPREL,
	UNSPEC_DTPREL, UNSPEC_LTOFF_TPREL, UNSPEC_TPREL, UNSPEC_LD_BASE): New.
	(movqi, movhi, movsi, movdi, movti): Use ia64_expand_move.
	(movsf, movdf): Likewise.
	(movdi_symbolic): Use match_scratch.  Don't split if we won't
	have a scratch availiable.
	(load_ltoff_dtpmod, load_dtprel, load_dtprel64, load_dtprel22,
	add_dtprel, add_dtprel14, add_dtprel22, load_ltoff_tprel, load_tprel,
	load_tprel64, load_tprel22, add_tprel, add_tprel14, add_tprel22): New.
	* config/ia64/ia64-protos.h: Update.
	* config/ia64/sysv4.h (ASM_OUTPUT_ALIGNED_DECL_LOCAL): Use
	sdata_symbolic_operand.
	(ASM_OUTPUT_LABELREF): Strip two characters.

From-SVN: r53874
parent 8c1d52a3
2002-05-25 Richard Henderson <rth@redhat.com>
* configure.in (HAVE_AS_TLS): Add ia64 test.
* configure: Rebuild.
* config/ia64/ia64.c (ia64_tls_size_string, ia64_tls_size): New.
(override_options): Set it.
(TARGET_HAVE_TLS): New.
(sdata_symbolic_operand): Look for 's'.
(tls_symbolic_operand): New.
(ia64_expand_load_address): Abort for tls symbols.
(gen_tls_get_addr): New.
(gen_thread_pointer): New.
(ia64_expand_move): Split out from movdi. Handle tls symbols.
(rtx_needs_barrier): Add new unspecs.
(ia64_encode_section_info): Handle tls symbols.
(ia64_strip_name_encoding): Strip two encoding chars.
* config/ia64/ia64.h (ia64_tls_size, ia64_tls_size_string): New.
(TARGET_TLS14, TARGET_TLS22, TARGET_TLS64): New.
(TARGET_OPTIONS): Add tls-size.
(ENCODE_SECTION_INFO_CHAR): Rename from SDATA_NAME_FLAG_CHAR.
* config/ia64/ia64.md (UNSPEC_LTOFF_DTPMOD, UNSPEC_LTOFF_DTPREL,
UNSPEC_DTPREL, UNSPEC_LTOFF_TPREL, UNSPEC_TPREL, UNSPEC_LD_BASE): New.
(movqi, movhi, movsi, movdi, movti): Use ia64_expand_move.
(movsf, movdf): Likewise.
(movdi_symbolic): Use match_scratch. Don't split if we won't
have a scratch availiable.
(load_ltoff_dtpmod, load_dtprel, load_dtprel64, load_dtprel22,
add_dtprel, add_dtprel14, add_dtprel22, load_ltoff_tprel, load_tprel,
load_tprel64, load_tprel22, add_tprel, add_tprel14, add_tprel22): New.
* config/ia64/ia64-protos.h: Update.
* config/ia64/sysv4.h (ASM_OUTPUT_ALIGNED_DECL_LOCAL): Use
sdata_symbolic_operand.
(ASM_OUTPUT_LABELREF): Strip two characters.
2002-05-25 Kazu Hirata <kazu@cs.umass.edu> 2002-05-25 Kazu Hirata <kazu@cs.umass.edu>
* combine.c (simplify_set): Remove an unnecessary subreg. * combine.c (simplify_set): Remove an unnecessary subreg.
......
...@@ -31,6 +31,7 @@ extern int call_operand PARAMS((rtx, enum machine_mode)); ...@@ -31,6 +31,7 @@ extern int call_operand PARAMS((rtx, enum machine_mode));
extern int sdata_symbolic_operand PARAMS((rtx, enum machine_mode)); extern int sdata_symbolic_operand PARAMS((rtx, enum machine_mode));
extern int got_symbolic_operand PARAMS((rtx, enum machine_mode)); extern int got_symbolic_operand PARAMS((rtx, enum machine_mode));
extern int symbolic_operand PARAMS((rtx, enum machine_mode)); extern int symbolic_operand PARAMS((rtx, enum machine_mode));
extern int tls_symbolic_operand PARAMS((rtx, enum machine_mode));
extern int function_operand PARAMS((rtx, enum machine_mode)); extern int function_operand PARAMS((rtx, enum machine_mode));
extern int setjmp_operand PARAMS((rtx, enum machine_mode)); extern int setjmp_operand PARAMS((rtx, enum machine_mode));
extern int move_operand PARAMS((rtx, enum machine_mode)); extern int move_operand PARAMS((rtx, enum machine_mode));
...@@ -68,6 +69,7 @@ extern int destination_tfmode_operand PARAMS((rtx, enum machine_mode)); ...@@ -68,6 +69,7 @@ extern int destination_tfmode_operand PARAMS((rtx, enum machine_mode));
extern int tfreg_or_fp01_operand PARAMS((rtx, enum machine_mode)); extern int tfreg_or_fp01_operand PARAMS((rtx, enum machine_mode));
extern int basereg_operand PARAMS((rtx, enum machine_mode)); extern int basereg_operand PARAMS((rtx, enum machine_mode));
extern rtx ia64_expand_move PARAMS ((rtx, rtx));
extern int ia64_move_ok PARAMS((rtx, rtx)); extern int ia64_move_ok PARAMS((rtx, rtx));
extern int ia64_depz_field_mask PARAMS((rtx, rtx)); extern int ia64_depz_field_mask PARAMS((rtx, rtx));
extern rtx ia64_gp_save_reg PARAMS((int)); extern rtx ia64_gp_save_reg PARAMS((int));
......
...@@ -109,6 +109,11 @@ extern int target_flags; ...@@ -109,6 +109,11 @@ extern int target_flags;
#define TARGET_DWARF2_ASM (target_flags & MASK_DWARF2_ASM) #define TARGET_DWARF2_ASM (target_flags & MASK_DWARF2_ASM)
extern int ia64_tls_size;
#define TARGET_TLS14 (ia64_tls_size == 14)
#define TARGET_TLS22 (ia64_tls_size == 22)
#define TARGET_TLS64 (ia64_tls_size == 64)
/* This macro defines names of command options to set and clear bits in /* This macro defines names of command options to set and clear bits in
`target_flags'. Its definition is an initializer with a subgrouping for `target_flags'. Its definition is an initializer with a subgrouping for
each command option. */ each command option. */
...@@ -177,10 +182,13 @@ extern int target_flags; ...@@ -177,10 +182,13 @@ extern int target_flags;
subgrouping for each command option. */ subgrouping for each command option. */
extern const char *ia64_fixed_range_string; extern const char *ia64_fixed_range_string;
extern const char *ia64_tls_size_string;
#define TARGET_OPTIONS \ #define TARGET_OPTIONS \
{ \ { \
{ "fixed-range=", &ia64_fixed_range_string, \ { "fixed-range=", &ia64_fixed_range_string, \
N_("Specify range of registers to make fixed")}, \ N_("Specify range of registers to make fixed")}, \
{ "tls-size=", &ia64_tls_size_string, \
N_("Specify bit size of immediate TLS offsets")}, \
} }
/* Sometimes certain combinations of command options do not make sense on a /* Sometimes certain combinations of command options do not make sense on a
...@@ -1774,7 +1782,7 @@ do { \ ...@@ -1774,7 +1782,7 @@ do { \
#define BSS_SECTION_ASM_OP "\t.bss" #define BSS_SECTION_ASM_OP "\t.bss"
#define SDATA_NAME_FLAG_CHAR '@' #define ENCODE_SECTION_INFO_CHAR '@'
#define IA64_DEFAULT_GVALUE 8 #define IA64_DEFAULT_GVALUE 8
......
...@@ -42,8 +42,7 @@ extern int size_directive_output; ...@@ -42,8 +42,7 @@ extern int size_directive_output;
#undef ASM_OUTPUT_ALIGNED_LOCAL #undef ASM_OUTPUT_ALIGNED_LOCAL
#define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \ #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \
do { \ do { \
if ((DECL) \ if ((DECL) && sdata_symbolic_operand (XEXP (DECL_RTL (DECL), 0), Pmode)) \
&& XSTR (XEXP (DECL_RTL (DECL), 0), 0)[0] == SDATA_NAME_FLAG_CHAR) \
sbss_section (); \ sbss_section (); \
else \ else \
bss_section (); \ bss_section (); \
...@@ -62,8 +61,8 @@ do { \ ...@@ -62,8 +61,8 @@ do { \
#define ASM_OUTPUT_LABELREF(STREAM, NAME) \ #define ASM_OUTPUT_LABELREF(STREAM, NAME) \
do { \ do { \
const char *name_ = NAME; \ const char *name_ = NAME; \
if (*name_ == SDATA_NAME_FLAG_CHAR) \ if (*name_ == ENCODE_SECTION_INFO_CHAR) \
name_++; \ name_ += 2; \
if (*name_ == '*') \ if (*name_ == '*') \
name_++; \ name_++; \
else \ else \
......
...@@ -7416,6 +7416,23 @@ foo: .long 25 ...@@ -7416,6 +7416,23 @@ foo: .long 25
tls_first_major=2 tls_first_major=2
tls_first_minor=13 tls_first_minor=13
;; ;;
ia64-*-*)
conftest_s='
.section ".tdata","awT",@progbits
foo: data8 25
.text
addl r16 = @ltoff(@dtpmod(foo#)), gp
addl r17 = @ltoff(@dtprel(foo#)), gp
addl r18 = @ltoff(@tprel(foo#)), gp
addl r19 = @dtprel(foo#), gp
adds r21 = @dtprel(foo#), r13
movl r23 = @dtprel(foo#)
addl r20 = @tprel(foo#), gp
adds r22 = @tprel(foo#), r13
movl r24 = @tprel(foo#)'
tls_first_major=2
tls_first_minor=13
;;
esac esac
if test -z "$tls_first_major"; then if test -z "$tls_first_major"; then
: :
...@@ -7446,7 +7463,7 @@ case "$target" in ...@@ -7446,7 +7463,7 @@ case "$target" in
# All TARGET_ABI_OSF targets. # All TARGET_ABI_OSF targets.
alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*) alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)
echo $ac_n "checking assembler supports explicit relocations""... $ac_c" 1>&6 echo $ac_n "checking assembler supports explicit relocations""... $ac_c" 1>&6
echo "configure:7450: checking assembler supports explicit relocations" >&5 echo "configure:7467: checking assembler supports explicit relocations" >&5
if eval "test \"`echo '$''{'gcc_cv_as_explicit_relocs'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_as_explicit_relocs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
...@@ -7496,7 +7513,7 @@ EOF ...@@ -7496,7 +7513,7 @@ EOF
;; ;;
sparc*-*-*) sparc*-*-*)
echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6 echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6
echo "configure:7500: checking assembler .register pseudo-op support" >&5 echo "configure:7517: checking assembler .register pseudo-op support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_register_pseudo_op'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_as_register_pseudo_op'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
...@@ -7524,7 +7541,7 @@ EOF ...@@ -7524,7 +7541,7 @@ EOF
fi fi
echo $ac_n "checking assembler supports -relax""... $ac_c" 1>&6 echo $ac_n "checking assembler supports -relax""... $ac_c" 1>&6
echo "configure:7528: checking assembler supports -relax" >&5 echo "configure:7545: checking assembler supports -relax" >&5
if eval "test \"`echo '$''{'gcc_cv_as_relax_opt'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_as_relax_opt'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
...@@ -7552,7 +7569,7 @@ EOF ...@@ -7552,7 +7569,7 @@ EOF
fi fi
echo $ac_n "checking assembler and linker support unaligned pc related relocs""... $ac_c" 1>&6 echo $ac_n "checking assembler and linker support unaligned pc related relocs""... $ac_c" 1>&6
echo "configure:7556: checking assembler and linker support unaligned pc related relocs" >&5 echo "configure:7573: checking assembler and linker support unaligned pc related relocs" >&5
if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
...@@ -7579,7 +7596,7 @@ EOF ...@@ -7579,7 +7596,7 @@ EOF
fi fi
echo $ac_n "checking assembler and linker support unaligned pc related relocs against hidden symbols""... $ac_c" 1>&6 echo $ac_n "checking assembler and linker support unaligned pc related relocs against hidden symbols""... $ac_c" 1>&6
echo "configure:7583: checking assembler and linker support unaligned pc related relocs against hidden symbols" >&5 echo "configure:7600: checking assembler and linker support unaligned pc related relocs against hidden symbols" >&5
if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel_hidden'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel_hidden'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
...@@ -7620,7 +7637,7 @@ EOF ...@@ -7620,7 +7637,7 @@ EOF
if test "x$gcc_cv_as_flags64" != xno; then if test "x$gcc_cv_as_flags64" != xno; then
echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6 echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6
echo "configure:7624: checking for assembler offsetable %lo() support" >&5 echo "configure:7641: checking for assembler offsetable %lo() support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
...@@ -7660,7 +7677,7 @@ EOF ...@@ -7660,7 +7677,7 @@ EOF
i[34567]86-*-* | x86_64-*-*) i[34567]86-*-* | x86_64-*-*)
echo $ac_n "checking assembler instructions""... $ac_c" 1>&6 echo $ac_n "checking assembler instructions""... $ac_c" 1>&6
echo "configure:7664: checking assembler instructions" >&5 echo "configure:7681: checking assembler instructions" >&5
gcc_cv_as_instructions= gcc_cv_as_instructions=
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then
...@@ -7687,7 +7704,7 @@ EOF ...@@ -7687,7 +7704,7 @@ EOF
echo "$ac_t""$gcc_cv_as_instructions" 1>&6 echo "$ac_t""$gcc_cv_as_instructions" 1>&6
echo $ac_n "checking assembler GOTOFF in data directives""... $ac_c" 1>&6 echo $ac_n "checking assembler GOTOFF in data directives""... $ac_c" 1>&6
echo "configure:7691: checking assembler GOTOFF in data directives" >&5 echo "configure:7708: checking assembler GOTOFF in data directives" >&5
gcc_cv_as_gotoff_in_data=no gcc_cv_as_gotoff_in_data=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x
then then
...@@ -7717,7 +7734,7 @@ EOF ...@@ -7717,7 +7734,7 @@ EOF
esac esac
echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6 echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6
echo "configure:7721: checking assembler dwarf2 debug_line support" >&5 echo "configure:7738: checking assembler dwarf2 debug_line support" >&5
gcc_cv_as_dwarf2_debug_line=no gcc_cv_as_dwarf2_debug_line=no
# ??? Not all targets support dwarf2 debug_line, even within a version # ??? Not all targets support dwarf2 debug_line, even within a version
# of gas. Moreover, we need to emit a valid instruction to trigger any # of gas. Moreover, we need to emit a valid instruction to trigger any
...@@ -7773,7 +7790,7 @@ fi ...@@ -7773,7 +7790,7 @@ fi
echo "$ac_t""$gcc_cv_as_dwarf2_debug_line" 1>&6 echo "$ac_t""$gcc_cv_as_dwarf2_debug_line" 1>&6
echo $ac_n "checking assembler --gdwarf2 support""... $ac_c" 1>&6 echo $ac_n "checking assembler --gdwarf2 support""... $ac_c" 1>&6
echo "configure:7777: checking assembler --gdwarf2 support" >&5 echo "configure:7794: checking assembler --gdwarf2 support" >&5
gcc_cv_as_gdwarf2_flag=no gcc_cv_as_gdwarf2_flag=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
then then
...@@ -7802,7 +7819,7 @@ fi ...@@ -7802,7 +7819,7 @@ fi
echo "$ac_t""$gcc_cv_as_gdwarf2_flag" 1>&6 echo "$ac_t""$gcc_cv_as_gdwarf2_flag" 1>&6
echo $ac_n "checking assembler --gstabs support""... $ac_c" 1>&6 echo $ac_n "checking assembler --gstabs support""... $ac_c" 1>&6
echo "configure:7806: checking assembler --gstabs support" >&5 echo "configure:7823: checking assembler --gstabs support" >&5
gcc_cv_as_gstabs_flag=no gcc_cv_as_gstabs_flag=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
then then
...@@ -7830,7 +7847,7 @@ fi ...@@ -7830,7 +7847,7 @@ fi
echo "$ac_t""$gcc_cv_as_gstabs_flag" 1>&6 echo "$ac_t""$gcc_cv_as_gstabs_flag" 1>&6
echo $ac_n "checking linker PT_GNU_EH_FRAME support""... $ac_c" 1>&6 echo $ac_n "checking linker PT_GNU_EH_FRAME support""... $ac_c" 1>&6
echo "configure:7834: checking linker PT_GNU_EH_FRAME support" >&5 echo "configure:7851: checking linker PT_GNU_EH_FRAME support" >&5
gcc_cv_ld_eh_frame_hdr=no gcc_cv_ld_eh_frame_hdr=no
if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then
...@@ -7993,7 +8010,7 @@ fi ...@@ -7993,7 +8010,7 @@ fi
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
echo "configure:7997: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo "configure:8014: checking whether to enable maintainer-specific portions of Makefiles" >&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode" enableval="$enable_maintainer_mode"
......
...@@ -1743,6 +1743,23 @@ foo: .long 25 ...@@ -1743,6 +1743,23 @@ foo: .long 25
tls_first_major=2 tls_first_major=2
tls_first_minor=13 tls_first_minor=13
;; ;;
ia64-*-*)
conftest_s='
.section ".tdata","awT",@progbits
foo: data8 25
.text
addl r16 = @ltoff(@dtpmod(foo#)), gp
addl r17 = @ltoff(@dtprel(foo#)), gp
addl r18 = @ltoff(@tprel(foo#)), gp
addl r19 = @dtprel(foo#), gp
adds r21 = @dtprel(foo#), r13
movl r23 = @dtprel(foo#)
addl r20 = @tprel(foo#), gp
adds r22 = @tprel(foo#), r13
movl r24 = @tprel(foo#)'
tls_first_major=2
tls_first_minor=13
;;
esac esac
if test -z "$tls_first_major"; then if test -z "$tls_first_major"; then
: :
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment