Alpha parts. Note that now the machine-independent
__builtin_thread_pointer() is now marked as const/readonly, slightly
different from the original alpha backend code.

Thanks,
Chung-Lin

        * config/alpha/alpha.c (alpha_builtin): Remove
        ALPHA_BUILTIN_THREAD_POINTER, ALPHA_BUILTIN_SET_THREAD_POINTER.
        (code_for_builtin): Remove CODE_FOR_load_tp, CODE_FOR_set_tp.
        (alpha_init_builtins): Remove __builtin_thread_pointer,
        __builtin_set_thread_pointer machine-specific builtins.
        (alpha_expand_builtin_thread_pointer): Add hook function for
        TARGET_EXPAND_BUILTIN_THREAD_POINTER.
        (alpha_expand_builtin_set_thread_pointer): Add hook function for
        TARGET_EXPAND_BUILTIN_SET_THREAD_POINTER.
        (alpha_fold_builtin): Remove ALPHA_BUILTIN_THREAD_POINTER,
        ALPHA_BUILTIN_SET_THREAD_POINTER cases.
Index: config/alpha/alpha.c
===================================================================
--- config/alpha/alpha.c        (revision 189431)
+++ config/alpha/alpha.c        (working copy)
@@ -6317,8 +6317,6 @@ enum alpha_builtin
   ALPHA_BUILTIN_AMASK,
   ALPHA_BUILTIN_IMPLVER,
   ALPHA_BUILTIN_RPCC,
-  ALPHA_BUILTIN_THREAD_POINTER,
-  ALPHA_BUILTIN_SET_THREAD_POINTER,
   ALPHA_BUILTIN_ESTABLISH_VMS_CONDITION_HANDLER,
   ALPHA_BUILTIN_REVERT_VMS_CONDITION_HANDLER,
 
@@ -6374,8 +6372,6 @@ static enum insn_code const code_for_builtin[ALPHA
   CODE_FOR_builtin_amask,
   CODE_FOR_builtin_implver,
   CODE_FOR_builtin_rpcc,
-  CODE_FOR_load_tp,
-  CODE_FOR_set_tp,
   CODE_FOR_builtin_establish_vms_condition_handler,
   CODE_FOR_builtin_revert_vms_condition_handler,
 
@@ -6533,14 +6529,6 @@ alpha_init_builtins (void)
                                    alpha_dimode_u, NULL_TREE);
   alpha_add_builtins (two_arg_builtins, ARRAY_SIZE (two_arg_builtins), ftype);
 
-  ftype = build_function_type_list (ptr_type_node, NULL_TREE);
-  alpha_builtin_function ("__builtin_thread_pointer", ftype,
-                         ALPHA_BUILTIN_THREAD_POINTER, ECF_NOTHROW);
-
-  ftype = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE);
-  alpha_builtin_function ("__builtin_set_thread_pointer", ftype,
-                         ALPHA_BUILTIN_SET_THREAD_POINTER, ECF_NOTHROW);
-
   if (TARGET_ABI_OPEN_VMS)
     {
       ftype = build_function_type_list (ptr_type_node, ptr_type_node,
@@ -6645,7 +6633,20 @@ alpha_expand_builtin (tree exp, rtx target,
     return const0_rtx;
 }
 
+static rtx
+alpha_expand_builtin_thread_pointer (rtx target)
+{
+  emit_insn (gen_load_tp (target));
+  return target;
+}
 
+static void
+alpha_expand_builtin_set_thread_pointer (rtx val)
+{
+  emit_insn (gen_set_tp (val));
+}
+
+
 /* Several bits below assume HWI >= 64 bits.  This should be enforced
    by config.gcc.  */
 #if HOST_BITS_PER_WIDE_INT < 64
@@ -7077,8 +7078,6 @@ alpha_fold_builtin (tree fndecl, int n_args, tree
     case ALPHA_BUILTIN_AMASK:
     case ALPHA_BUILTIN_IMPLVER:
     case ALPHA_BUILTIN_RPCC:
-    case ALPHA_BUILTIN_THREAD_POINTER:
-    case ALPHA_BUILTIN_SET_THREAD_POINTER:
       /* None of these are foldable at compile-time.  */
     default:
       return NULL;
@@ -9811,6 +9810,11 @@ alpha_conditional_register_usage (void)
 #undef TARGET_EXPAND_BUILTIN_VA_START
 #define TARGET_EXPAND_BUILTIN_VA_START alpha_va_start
 
+#undef TARGET_EXPAND_BUILTIN_THREAD_POINTER
+#define TARGET_EXPAND_BUILTIN_THREAD_POINTER 
alpha_expand_builtin_thread_pointer
+#undef TARGET_EXPAND_BUILTIN_SET_THREAD_POINTER
+#define TARGET_EXPAND_BUILTIN_SET_THREAD_POINTER 
alpha_expand_builtin_set_thread_pointer
+
 /* The Alpha architecture does not require sequential consistency.  See
    http://www.cs.umd.edu/~pugh/java/memoryModel/AlphaReordering.html
    for an example of how it can be violated in practice.  */

Reply via email to