On 12/7/12 5:47 PM, Ramana Radhakrishnan wrote: > On 12 July 2012 07:52, Chung-Lin Tang <clt...@codesourcery.com> wrote: >> ARM parts, no further notes. >> > > ARM parts are ok, modulo approval for generic parts and no > regressions with testing on arm-linux-gnueabi.
ARM parts updated to use MD patterns. Thanks, Chung-Lin * config/arm/arm.md (get_thread_pointersi): New pattern. * config/arm/arm-protos.h (arm_load_tp): Add extern declaration. * config/arm/arm.c (arm_load_tp): Remove static. (arm_builtins): Remove ARM_BUILTIN_THREAD_POINTER. (arm_init_tls_builtins): Remove function. (arm_init_builtins): Remove call to arm_init_tls_builtins(). (arm_expand_builtin): Remove ARM_BUILTIN_THREAD_POINTER case.
Index: config/arm/arm.c =================================================================== --- config/arm/arm.c (revision 190742) +++ config/arm/arm.c (working copy) @@ -6275,7 +6275,7 @@ get_tls_get_addr (void) return tls_get_addr_libfunc; } -static rtx +rtx arm_load_tp (rtx target) { if (!target) @@ -19095,8 +19095,6 @@ enum arm_builtins ARM_BUILTIN_WMERGE, - ARM_BUILTIN_THREAD_POINTER, - ARM_BUILTIN_NEON_BASE, ARM_BUILTIN_MAX = ARM_BUILTIN_NEON_BASE + ARRAY_SIZE (neon_builtin_data) @@ -20136,20 +20134,6 @@ arm_init_iwmmxt_builtins (void) } static void -arm_init_tls_builtins (void) -{ - tree ftype, decl; - - ftype = build_function_type (ptr_type_node, void_list_node); - decl = add_builtin_function ("__builtin_thread_pointer", ftype, - ARM_BUILTIN_THREAD_POINTER, BUILT_IN_MD, - NULL, NULL_TREE); - TREE_NOTHROW (decl) = 1; - TREE_READONLY (decl) = 1; - arm_builtin_decls[ARM_BUILTIN_THREAD_POINTER] = decl; -} - -static void arm_init_fp16_builtins (void) { tree fp16_type = make_node (REAL_TYPE); @@ -20161,8 +20145,6 @@ arm_init_fp16_builtins (void) static void arm_init_builtins (void) { - arm_init_tls_builtins (); - if (TARGET_REALLY_IWMMXT) arm_init_iwmmxt_builtins (); @@ -21265,9 +21247,6 @@ arm_expand_builtin (tree exp, } return arm_expand_binop_builtin (icode, exp, target); - case ARM_BUILTIN_THREAD_POINTER: - return arm_load_tp (target); - default: break; } Index: config/arm/arm-protos.h =================================================================== --- config/arm/arm-protos.h (revision 190742) +++ config/arm/arm-protos.h (working copy) @@ -163,6 +163,7 @@ extern int arm_attr_length_push_multi(rtx, rtx); extern void arm_expand_compare_and_swap (rtx op[]); extern void arm_split_compare_and_swap (rtx op[]); extern void arm_split_atomic_op (enum rtx_code, rtx, rtx, rtx, rtx, rtx, rtx); +extern rtx arm_load_tp (rtx); #if defined TREE_CODE extern void arm_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree); Index: config/arm/arm.md =================================================================== --- config/arm/arm.md (revision 190742) +++ config/arm/arm.md (working copy) @@ -11473,6 +11473,15 @@ " ) +(define_expand "get_thread_pointersi" + [(match_operand:SI 0 "s_register_operand" "=r")] + "" + " + { + arm_load_tp (operands[0]); + DONE; + }") + ;; Load the load/store multiple patterns (include "ldmstm.md")