On 12/7/12 5:47 PM, Ramana Radhakrishnan wrote:
> On 12 July 2012 07:52, Chung-Lin Tang <[email protected]> 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")