Skip to content

Commit 75df395

Browse files
Maxim KuvyrkovMaxim Kuvyrkov
Maxim Kuvyrkov
authored and
Maxim Kuvyrkov
committed
M68K TLS support.
* configure.ac (m68k-*-*): Check if binutils support TLS. * configure: Regenerate. * config/m68k/predicates.md (symbolic_operand): Extend comment. * config/m68k/constraints.md (Cu): New constraint. * config/m68k/m68k.md (UNSPEC_GOTOFF): Remove. (UNSPEC_RELOC16, UNSPEC_RELOC32): New constants. (movsi): Handle TLS symbols. (addsi3_5200): Handle XTLS symbols, indent. * config/m68k/m68k-protos.h (m68k_legitimize_tls_address): Declare. (m68k_tls_reference_p): Declare. (m68k_legitimize_address): Declare. (m68k_unwrap_symbol): Declare. * config/m68k/m68k.opt (mxtls): New option. * config/m68k/m68k.c (ggc.h): Include. (m68k_output_dwarf_dtprel): Implement hook. (TARGET_HAVE_TLS, TARGET_ASM_OUTPUT_DWARF_DTPREL): Define. (m68k_expand_prologue): Load GOT pointer when function needs it. (m68k_illegitimate_symbolic_constant_p): Handle TLS symbols. (m68k_legitimate_constant_address_p): Same. (m68k_decompose_address): Handle TLS references. (m68k_get_gp): New static function. (enum m68k_reloc): New contants. (TLS_RELOC_P): New macro. (m68k_wrap_symbol): New static function. (m68k_unwrap_symbol): New function. (m68k_final_prescan_insn_1): New static function. (m68k_final_prescan_insn): New function. (m68k_move_to_reg, m68k_wrap_symbol_into_got_ref): New static functions. (legitimize_pic_address): Handle TLS references.. (m68k_tls_get_addr, m68k_get_tls_get_addr) (m68k_libcall_value_in_a0_p) (m68k_call_tls_get_addr, m68k_read_tp, m68k_get_m68k_read_tp) (m68k_call_m68k_read_tp): Helper variables and functions for ... (m68k_legitimize_tls_address): Handle TLS references. (m68k_tls_symbol_p, m68k_tls_reference_p_1, m68k_tls_reference_p): New functions. (m68k_legitimize_address): Handle TLS symbols. (m68k_get_reloc_decoration): New static function. (m68k_output_addr_const_extra): Handle UNSPEC_RELOC16 and UNSPEC_RELOC32. (m68k_output_dwarf_dtprel): Implement hook. (print_operand_address): Handle UNSPEC_RELOC16 adn UNSPEC_RELOC32. (m68k_libcall_value): Return result in A0 instead of D0 when asked by m68k_call_* routines. (sched_attr_op_type): Handle TLS symbols. (gt-m68k.h): Include. * config/m68k/m68k.h (FINAL_PRESCAN_INSN): Define. (LEGITIMATE_PIC_OPERAND_P): Support TLS. * gcc.target/m68k/tls-ie.c: New test. * gcc.target/m68k/tls-le.c: New test. * gcc.target/m68k/tls-gd.c: New test. * gcc.target/m68k/tls-ld.c: New test. * gcc.target/m68k/tls-ie-xgot.c: New test. * gcc.target/m68k/tls-le-xtls.c: New test. * gcc.target/m68k/tls-gd-xgot.c: New test. * gcc.target/m68k/tls-ld-xgot.c: New test. * gcc.target/m68k/tls-ld-xtls.c: New test. * gcc.target/m68k/tls-ld-xgot-xtls.c: New test. From-SVN: r147654
1 parent 676fd52 commit 75df395

21 files changed

+902
-87
lines changed

gcc/ChangeLog

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,56 @@
1+
2009-05-18 Maxim Kuvyrkov <[email protected]>
2+
3+
M68K TLS support.
4+
* configure.ac (m68k-*-*): Check if binutils support TLS.
5+
* configure: Regenerate.
6+
* config/m68k/predicates.md (symbolic_operand): Extend comment.
7+
* config/m68k/constraints.md (Cu): New constraint.
8+
* config/m68k/m68k.md (UNSPEC_GOTOFF): Remove.
9+
(UNSPEC_RELOC16, UNSPEC_RELOC32): New constants.
10+
(movsi): Handle TLS symbols.
11+
(addsi3_5200): Handle XTLS symbols, indent.
12+
* config/m68k/m68k-protos.h (m68k_legitimize_tls_address): Declare.
13+
(m68k_tls_reference_p): Declare.
14+
(m68k_legitimize_address): Declare.
15+
(m68k_unwrap_symbol): Declare.
16+
* config/m68k/m68k.opt (mxtls): New option.
17+
* config/m68k/m68k.c (ggc.h): Include.
18+
(m68k_output_dwarf_dtprel): Implement hook.
19+
(TARGET_HAVE_TLS, TARGET_ASM_OUTPUT_DWARF_DTPREL): Define.
20+
(m68k_expand_prologue): Load GOT pointer when function needs it.
21+
(m68k_illegitimate_symbolic_constant_p): Handle TLS symbols.
22+
(m68k_legitimate_constant_address_p): Same.
23+
(m68k_decompose_address): Handle TLS references.
24+
(m68k_get_gp): New static function.
25+
(enum m68k_reloc): New contants.
26+
(TLS_RELOC_P): New macro.
27+
(m68k_wrap_symbol): New static function.
28+
(m68k_unwrap_symbol): New function.
29+
(m68k_final_prescan_insn_1): New static function.
30+
(m68k_final_prescan_insn): New function.
31+
(m68k_move_to_reg, m68k_wrap_symbol_into_got_ref): New static
32+
functions.
33+
(legitimize_pic_address): Handle TLS references..
34+
(m68k_tls_get_addr, m68k_get_tls_get_addr)
35+
(m68k_libcall_value_in_a0_p)
36+
(m68k_call_tls_get_addr, m68k_read_tp, m68k_get_m68k_read_tp)
37+
(m68k_call_m68k_read_tp): Helper variables and functions for ...
38+
(m68k_legitimize_tls_address): Handle TLS references.
39+
(m68k_tls_symbol_p, m68k_tls_reference_p_1, m68k_tls_reference_p):
40+
New functions.
41+
(m68k_legitimize_address): Handle TLS symbols.
42+
(m68k_get_reloc_decoration): New static function.
43+
(m68k_output_addr_const_extra): Handle UNSPEC_RELOC16 and
44+
UNSPEC_RELOC32.
45+
(m68k_output_dwarf_dtprel): Implement hook.
46+
(print_operand_address): Handle UNSPEC_RELOC16 adn UNSPEC_RELOC32.
47+
(m68k_libcall_value): Return result in A0 instead of D0 when asked by
48+
m68k_call_* routines.
49+
(sched_attr_op_type): Handle TLS symbols.
50+
(gt-m68k.h): Include.
51+
* config/m68k/m68k.h (FINAL_PRESCAN_INSN): Define.
52+
(LEGITIMATE_PIC_OPERAND_P): Support TLS.
53+
154
2009-05-18 Martin Jambor <[email protected]>
255

356
* ipa-prop.c (ipa_check_stmt_modifications): Removed.

gcc/config/m68k/constraints.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@
129129
(and (match_code "const_int")
130130
(match_test "ival < -0x8000 || ival > 0x7FFF")))
131131

132+
(define_constraint "Cu"
133+
"16-bit offset for wrapped symbols"
134+
(and (match_code "const")
135+
(match_test "m68k_unwrap_symbol (op, false) != op")))
136+
132137
(define_constraint "CQ"
133138
"Integers valid for mvq."
134139
(and (match_code "const_int")

gcc/config/m68k/m68k-protos.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,20 @@ extern bool m68k_illegitimate_symbolic_constant_p (rtx);
5959
extern bool m68k_matches_q_p (rtx);
6060
extern bool m68k_matches_u_p (rtx);
6161
extern rtx legitimize_pic_address (rtx, enum machine_mode, rtx);
62+
extern rtx m68k_legitimize_tls_address (rtx);
63+
extern bool m68k_tls_reference_p (rtx, bool);
6264
extern int valid_dbcc_comparison_p_2 (rtx, enum machine_mode);
6365
extern rtx m68k_libcall_value (enum machine_mode);
6466
extern rtx m68k_function_value (const_tree, const_tree);
6567
extern int emit_move_sequence (rtx *, enum machine_mode, rtx);
6668
extern bool m68k_movem_pattern_p (rtx, rtx, HOST_WIDE_INT, bool);
6769
extern const char *m68k_output_movem (rtx *, rtx, HOST_WIDE_INT, bool);
70+
extern void m68k_final_prescan_insn (rtx, rtx *, int);
6871

72+
/* Functions from m68k.c used in constraints.md. */
73+
extern rtx m68k_unwrap_symbol (rtx, bool);
74+
75+
/* Functions from m68k.c used in genattrtab. */
6976
#ifdef HAVE_ATTR_cpu
7077
extern enum attr_cpu m68k_sched_cpu;
7178
extern enum attr_mac m68k_sched_mac;

0 commit comments

Comments
 (0)