+2012-10-29 Andrew Pinski <apinski@cavium.com>
+
+ * config/aarch64/aarch64-protos.h (aarch64_load_tp): New proto.
+ * config/aarch64/aarch64.c (aarch64_load_tp): Export.
+ (aarch64_init_builtins): Don't add __builtin_thread_pointer builtin.
+ * config/aarch64/aarch64.h (aarch64_builtins): Delete
+
+AARCH64_BUILTIN_THREAD_POINTER.
+ * config/aarch64/aarch64.md (get_thread_pointerdi): New pattern.
+
2012-10-29 Marc Glisse <marc.glisse@inria.fr>
PR middle-end/55027
bool aarch64_legitimate_address_p (enum machine_mode, rtx, RTX_CODE, bool);
enum machine_mode aarch64_select_cc_mode (RTX_CODE, rtx, rtx);
rtx aarch64_gen_compare_reg (RTX_CODE, rtx, rtx);
+rtx aarch64_load_tp (rtx);
#endif /* RTX_CODE */
bool *);
static void aarch64_elf_asm_constructor (rtx, int) ATTRIBUTE_UNUSED;
static void aarch64_elf_asm_destructor (rtx, int) ATTRIBUTE_UNUSED;
-static rtx aarch64_load_tp (rtx);
static void aarch64_override_options_after_change (void);
static int aarch64_simd_valid_immediate (rtx, enum machine_mode, int, rtx *,
int *, unsigned char *, int *, int *);
static void
aarch64_init_builtins (void)
{
- tree ftype, decl = NULL;
-
- ftype = build_function_type (ptr_type_node, void_list_node);
- decl = add_builtin_function ("__builtin_thread_pointer", ftype,
- AARCH64_BUILTIN_THREAD_POINTER, BUILT_IN_MD,
- NULL, NULL_TREE);
- TREE_NOTHROW (decl) = 1;
- TREE_READONLY (decl) = 1;
-
if (TARGET_SIMD)
init_aarch64_simd_builtins ();
}
-static rtx
+rtx
aarch64_load_tp (rtx target)
{
if (!target
tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
int fcode = DECL_FUNCTION_CODE (fndecl);
- if (fcode == AARCH64_BUILTIN_THREAD_POINTER)
- return aarch64_load_tp (target);
-
if (fcode >= AARCH64_SIMD_BUILTIN_BASE)
return aarch64_simd_expand_builtin (fcode, exp, target);
[(set_attr "length" "0")]
)
+;; Named pattern for expanding thread pointer reference.
+(define_expand "get_thread_pointerdi"
+ [(match_operand:DI 0 "register_operand" "=r")]
+ ""
+{
+ rtx tmp = aarch64_load_tp (operands[0]);
+ if (tmp != operands[0])
+ emit_move_insn (operands[0], tmp);
+ DONE;
+})
+
;; AdvSIMD Stuff
(include "aarch64-simd.md")