From 0bda47a37afb63ee0162ea39ded62305469eed7d Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Wed, 18 May 2011 19:32:59 +0200 Subject: [PATCH] i386.md (*tls_global_dynamic_32_gnu): Split asm template. * config/i386/i386.md (*tls_global_dynamic_32_gnu): Split asm template. (*tls_global_dynamic_64): Ditto. (*tls_local_dynamic_base_32_gnu): Ditto. (*tls_local_dynamic_base_64): Ditto. (tls_initial_exec_64_sun): Ditto. From-SVN: r173870 --- gcc/ChangeLog | 23 ++++++++++++++--------- gcc/config/i386/i386.md | 33 ++++++++++++++++++++++++++++----- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 36ebe0c4b09..dc2495e9907 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2011-05-18 Uros Bizjak + + * config/i386/i386.md (*tls_global_dynamic_32_gnu): Split asm template. + (*tls_global_dynamic_64): Ditto. + (*tls_local_dynamic_base_32_gnu): Ditto. + (*tls_local_dynamic_base_64): Ditto. + (tls_initial_exec_64_sun): Ditto. + 2011-05-18 Stuart Henderson * doc/invoke.texi (Blackfin Options): -mcpu accepts bf592. @@ -7,23 +15,21 @@ * config/bfin/t-bfin-uclinux (MULTILIB_MATCHES): Likewise. * config/bfin/bfin.c (bfin_cpus): Add bf592. * config/bfin/bfin.h (TARGET_CPU_CPP_BUILTINS): Define - __ADSPBF592__ and __ADSPBF59x__ for BFIN_CPU_BF592. + __ADSPBF592__ and __ADSPBF59x__ for BFIN_CPU_BF592. * config/bfin/bfin-opts.h (bfin_cpu_type): Add BFIN_CPU_BF592. * config/bfin/elf.h (LIB_SPEC): Add bf592. 2011-05-18 Joseph Myers * config/arm/arm-opts.h (enum arm_fp16_format_type, enum - arm_abi_type, enum float_abi_type, enum arm_tp_type): Move from - arm.h. + arm_abi_type, enum float_abi_type, enum arm_tp_type): Move from arm.h. * config/arm/arm.c (arm_float_abi, arm_fp16_format, arm_abi, target_thread_pointer, arm_structure_size_boundary, struct float_abi, all_float_abis, struct fp16_format, all_fp16_formats, struct abi_name, arm_all_abis): Remove. - (arm_option_override) Don't process most enumerated option values - here. Don't process target_fpe_name here. Work with integer not - string for structure size boundary; use separate diagnostics for - each case. + (arm_option_override) Don't process most enumerated option values here. + Don't process target_fpe_name here. Work with integer not string for + structure size boundary; use separate diagnostics for each case. * config/arm/arm.h (enum float_abi_type, enum arm_fp16_format_type, enum arm_abi_type, enum arm_tp_type): Move to arm-opts.h. @@ -33,8 +39,7 @@ (arm_abi_type): New Enum and EnumValue entries. (mfloat-abi=): Use Enum and Init. (float_abi_type): New Enum and EnumValue entries. - (mfp=, mfpe=): Replace by separate Alias entries for each - argument. + (mfp=, mfpe=): Replace by separate Alias entries for each argument. (mfp16-format=): Use Enum and Init. (arm_fp16_format_type): New Enum and EnumValue entries. (mstructure-size-boundary=): Use UInteger and Init. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index d2bcd6b406b..551e25d623e 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -12364,7 +12364,11 @@ (clobber (match_scratch:SI 5 "=c")) (clobber (reg:CC FLAGS_REG))] "!TARGET_64BIT && TARGET_GNU_TLS" - "lea{l}\t{%a2@tlsgd(,%1,1), %0|%0, %a2@tlsgd[%1*1]}\;call\t%P3" +{ + output_asm_insn + ("lea{l}\t{%a2@tlsgd(,%1,1), %0|%0, %a2@tlsgd[%1*1]}", operands); + return "call\t%P3"; +} [(set_attr "type" "multi") (set_attr "length" "12")]) @@ -12387,7 +12391,14 @@ (unspec:DI [(match_operand:DI 1 "tls_symbolic_operand" "")] UNSPEC_TLS_GD)] "TARGET_64BIT" - { return ASM_BYTE "0x66\n\tlea{q}\t{%a1@tlsgd(%%rip), %%rdi|rdi, %a1@tlsgd[rip]}\n" ASM_SHORT "0x6666\n\trex64\n\tcall\t%P2"; } +{ + fputs (ASM_BYTE "0x66\n", asm_out_file); + output_asm_insn + ("lea{q}\t{%a1@tlsgd(%%rip), %%rdi|rdi, %a1@tlsgd[rip]}", operands); + fputs (ASM_SHORT "0x6666\n", asm_out_file); + fputs ("\trex64\n", asm_out_file); + return "call\t%P2"; +} [(set_attr "type" "multi") (set_attr "length" "16")]) @@ -12410,7 +12421,11 @@ (clobber (match_scratch:SI 4 "=c")) (clobber (reg:CC FLAGS_REG))] "!TARGET_64BIT && TARGET_GNU_TLS" - "lea{l}\t{%&@tlsldm(%1), %0|%0, %&@tlsldm[%1]}\;call\t%P2" +{ + output_asm_insn + ("lea{l}\t{%&@tlsldm(%1), %0|%0, %&@tlsldm[%1]}", operands); + return "call\t%P2"; +} [(set_attr "type" "multi") (set_attr "length" "11")]) @@ -12432,7 +12447,11 @@ (match_operand:DI 2 "" ""))) (unspec:DI [(const_int 0)] UNSPEC_TLS_LD_BASE)] "TARGET_64BIT" - "lea{q}\t{%&@tlsld(%%rip), %%rdi|rdi, %&@tlsld[rip]}\;call\t%P1" +{ + output_asm_insn + ("lea{q}\t{%&@tlsld(%%rip), %%rdi|rdi, %&@tlsld[rip]}", operands); + return "call\t%P1"; +} [(set_attr "type" "multi") (set_attr "length" "12")]) @@ -12507,7 +12526,11 @@ UNSPEC_TLS_IE_SUN)) (clobber (reg:CC FLAGS_REG))] "TARGET_64BIT && TARGET_SUN_TLS" - "mov{q}\t{%%fs:0, %0|%0, QWORD PTR fs:0}\n\tadd{q}\t{%a1@gottpoff(%%rip), %0|%0, %a1@gottpoff[rip]}" +{ + output_asm_insn + ("mov{q}\t{%%fs:0, %0|%0, QWORD PTR fs:0}", operands) + return "add{q}\t{%a1@gottpoff(%%rip), %0|%0, %a1@gottpoff[rip]}"; +} [(set_attr "type" "multi")]) ;; GNU2 TLS patterns can be split. -- 2.30.2