* pa.h (ASM_OUTPUT_MI_THUNK): Move implementation into pa.c.
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 May 2002 22:51:37 +0000 (22:51 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 May 2002 22:51:37 +0000 (22:51 +0000)
        * pa.c (pa_asm_output_mi_thunk): New function.
        * pa-protos.h (pa_asm_output_mi_thunk): Declare.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@54026 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/pa/pa-protos.h
gcc/config/pa/pa.c
gcc/config/pa/pa.h

index 6ed0b6e..5199837 100644 (file)
@@ -1,3 +1,9 @@
+2002-05-29  Jeff Law <law@redhat.com>
+
+       * pa.h (ASM_OUTPUT_MI_THUNK): Move implementation into pa.c.
+       * pa.c (pa_asm_output_mi_thunk): New function.
+       * pa-protos.h (pa_asm_output_mi_thunk): Declare.
+
 2002-05-29  Neil Booth  <neil@daikokuya.demon.co.uk>
            Marek Michalkiewicz  <marekm@amelek.gda.pl>
 
index 57d9d41..b26b7b8 100644 (file)
@@ -162,4 +162,6 @@ extern rtx function_arg PARAMS ((CUMULATIVE_ARGS *, enum machine_mode,
 extern int function_arg_partial_nregs PARAMS ((CUMULATIVE_ARGS *,
                                               enum machine_mode,
                                               tree, int));
+
+extern void pa_asm_output_mi_thunk PARAMS ((FILE *, tree, int, tree));
 #endif /* TREE_CODE */
index 41e5dc0..6749601 100644 (file)
@@ -6496,6 +6496,89 @@ is_function_label_plus_const (op)
          && GET_CODE (XEXP (op, 1)) == CONST_INT);
 }
 
+/* Output assembly code for a thunk to FUNCTION.  */
+
+void
+pa_asm_output_mi_thunk (file, thunk_fndecl, delta, function)
+     FILE *file;
+     tree thunk_fndecl;
+     int delta;
+     tree function;
+{
+  const char *target_name = XSTR (XEXP (DECL_RTL (function), 0), 0);
+  static unsigned int current_thunk_number;
+  char label[16];
+  char *lab;
+  ASM_GENERATE_INTERNAL_LABEL (label, "LTHN", current_thunk_number);
+  lab = (*targetm.strip_name_encoding) (label);
+  target_name = (*targetm.strip_name_encoding) (target_name);
+  /* FIXME: total_code_bytes is not handled correctly in files with
+     mi thunks.  */
+  pa_output_function_prologue (file, 0);
+  if (VAL_14_BITS_P (delta))
+    {
+      if (! TARGET_64BIT && ! TARGET_PORTABLE_RUNTIME && flag_pic)
+       {
+         fprintf (file, "\taddil LT%%%s,%%r19\n", lab);
+         fprintf (file, "\tldw RT%%%s(%%r1),%%r22\n", lab);
+         fprintf (file, "\tldw 0(%%sr0,%%r22),%%r22\n");
+         fprintf (file, "\tbb,>=,n %%r22,30,.+16\n");
+         fprintf (file, "\tdepi 0,31,2,%%r22\n");
+         fprintf (file, "\tldw 4(%%sr0,%%r22),%%r19\n");
+         fprintf (file, "\tldw 0(%%sr0,%%r22),%%r22\n");
+         fprintf (file, "\tldsid (%%sr0,%%r22),%%r1\n\tmtsp %%r1,%%sr0\n");
+         fprintf (file, "\tbe 0(%%sr0,%%r22)\n\tldo ");
+         fprintf (file, HOST_WIDE_INT_PRINT_DEC, delta);
+         fprintf (file, "(%%r26),%%r26\n");
+       }
+      else
+       {
+         fprintf (file, "\tb %s\n\tldo ", target_name);
+         fprintf (file, HOST_WIDE_INT_PRINT_DEC, delta);
+         fprintf (file, "(%%r26),%%r26\n");
+       }
+    }
+  else
+    {
+      if (! TARGET_64BIT && ! TARGET_PORTABLE_RUNTIME && flag_pic)
+       {
+         fprintf (file, "\taddil L%%");
+         fprintf (file, HOST_WIDE_INT_PRINT_DEC, delta);
+         fprintf (file, ",%%r26\n\tldo R%%");
+         fprintf (file, HOST_WIDE_INT_PRINT_DEC, delta);
+         fprintf (file, "(%%r1),%%r26\n");
+         fprintf (file, "\taddil LT%%%s,%%r19\n", lab);
+         fprintf (file, "\tldw RT%%%s(%%r1),%%r22\n", lab);
+         fprintf (file, "\tldw 0(%%sr0,%%r22),%%r22\n");
+         fprintf (file, "\tbb,>=,n %%r22,30,.+16\n");
+         fprintf (file, "\tdepi 0,31,2,%%r22\n");
+         fprintf (file, "\tldw 4(%%sr0,%%r22),%%r19\n");
+         fprintf (file, "\tldw 0(%%sr0,%%r22),%%r22\n");
+         fprintf (file, "\tldsid (%%sr0,%%r22),%%r1\n\tmtsp %%r1,%%sr0\n");
+         fprintf (file, "\tbe,n 0(%%sr0,%%r22)\n");
+       }
+      else
+       {
+         fprintf (file, "\taddil L%%");
+         fprintf (file, HOST_WIDE_INT_PRINT_DEC, delta);
+         fprintf (file, ",%%r26\n\tb %s\n\tldo R%%", target_name);
+         fprintf (file, HOST_WIDE_INT_PRINT_DEC, delta);
+         fprintf (file, "(%%r1),%%r26\n");
+       }
+    }
+    
+  fprintf (file, "\t.EXIT\n\t.PROCEND\n");
+  if (! TARGET_64BIT && ! TARGET_PORTABLE_RUNTIME && flag_pic)
+    {
+      data_section ();
+      fprintf (file, "\t.align 4\n");
+      ASM_OUTPUT_INTERNAL_LABEL (file, "LTHN", current_thunk_number);
+      fprintf (file, "\t.word P%%%s\n", target_name);
+      function_section (thunk_fndecl);
+    }
+  current_thunk_number++;
+}
+
 /* Returns 1 if the 6 operands specified in OPERANDS are suitable for
    use in fmpyadd instructions.  */
 int
index 8f432c2..accc4c1 100644 (file)
@@ -864,80 +864,8 @@ struct hppa_args {int words, nargs_prototype, indirect; };
 extern struct rtx_def *hppa_compare_op0, *hppa_compare_op1;
 extern enum cmp_type hppa_branch_type;
 
-#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION)            \
-do {                                                                        \
-  const char *target_name = XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0);        \
-  static unsigned int current_thunk_number;                                 \
-  char label[16];                                                           \
-  char *lab;                                                                \
-  ASM_GENERATE_INTERNAL_LABEL (label, "LTHN", current_thunk_number);        \
-  lab = (*targetm.strip_name_encoding) (label);                                     \
-  target_name = (*targetm.strip_name_encoding) (target_name);               \
-  /* FIXME: total_code_bytes is not handled correctly in files with         \
-     mi thunks.  */                                                         \
-  pa_output_function_prologue (FILE, 0);                                    \
-  if (VAL_14_BITS_P (DELTA))                                                \
-    {                                                                       \
-      if (! TARGET_64BIT && ! TARGET_PORTABLE_RUNTIME && flag_pic)          \
-       {                                                                    \
-         fprintf (FILE, "\taddil LT%%%s,%%r19\n", lab);                     \
-         fprintf (FILE, "\tldw RT%%%s(%%r1),%%r22\n", lab);                 \
-         fprintf (FILE, "\tldw 0(%%sr0,%%r22),%%r22\n");                    \
-         fprintf (FILE, "\tbb,>=,n %%r22,30,.+16\n");                       \
-         fprintf (FILE, "\tdepi 0,31,2,%%r22\n");                           \
-         fprintf (FILE, "\tldw 4(%%sr0,%%r22),%%r19\n");                    \
-         fprintf (FILE, "\tldw 0(%%sr0,%%r22),%%r22\n");                    \
-         fprintf (FILE, "\tldsid (%%sr0,%%r22),%%r1\n\tmtsp %%r1,%%sr0\n"); \
-         fprintf (FILE, "\tbe 0(%%sr0,%%r22)\n\tldo ");                     \
-         fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, DELTA);                    \
-         fprintf (FILE, "(%%r26),%%r26\n");                                 \
-       }                                                                    \
-      else                                                                  \
-       {                                                                    \
-         fprintf (FILE, "\tb %s\n\tldo ", target_name);                     \
-         fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, DELTA);                    \
-         fprintf (FILE, "(%%r26),%%r26\n");                                 \
-       }                                                                    \
-    }                                                                       \
-  else                                                                      \
-    {                                                                       \
-      if (! TARGET_64BIT && ! TARGET_PORTABLE_RUNTIME && flag_pic)          \
-       {                                                                    \
-         fprintf (FILE, "\taddil L%%");                                     \
-         fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, DELTA);                    \
-         fprintf (FILE, ",%%r26\n\tldo R%%");                               \
-         fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, DELTA);                    \
-         fprintf (FILE, "(%%r1),%%r26\n");                                  \
-         fprintf (FILE, "\taddil LT%%%s,%%r19\n", lab);                     \
-         fprintf (FILE, "\tldw RT%%%s(%%r1),%%r22\n", lab);                 \
-         fprintf (FILE, "\tldw 0(%%sr0,%%r22),%%r22\n");                    \
-         fprintf (FILE, "\tbb,>=,n %%r22,30,.+16\n");                       \
-         fprintf (FILE, "\tdepi 0,31,2,%%r22\n");                           \
-         fprintf (FILE, "\tldw 4(%%sr0,%%r22),%%r19\n");                    \
-         fprintf (FILE, "\tldw 0(%%sr0,%%r22),%%r22\n");                    \
-         fprintf (FILE, "\tldsid (%%sr0,%%r22),%%r1\n\tmtsp %%r1,%%sr0\n"); \
-         fprintf (FILE, "\tbe,n 0(%%sr0,%%r22)\n");                         \
-       }                                                                    \
-      else                                                                  \
-       {                                                                    \
-         fprintf (FILE, "\taddil L%%");                                     \
-         fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, DELTA);                    \
-         fprintf (FILE, ",%%r26\n\tb %s\n\tldo R%%", target_name);          \
-         fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, DELTA);                    \
-         fprintf (FILE, "(%%r1),%%r26\n");                                  \
-       }                                                                    \
-    }                                                                       \
-  fprintf (FILE, "\t.EXIT\n\t.PROCEND\n");                                  \
-  if (! TARGET_64BIT && ! TARGET_PORTABLE_RUNTIME && flag_pic)              \
-    {                                                                       \
-      data_section ();                                                      \
-      fprintf (FILE, "\t.align 4\n");                                       \
-      ASM_OUTPUT_INTERNAL_LABEL (FILE, "LTHN", current_thunk_number);       \
-      fprintf (FILE, "\t.word P%%%s\n", target_name);                       \
-      function_section (THUNK_FNDECL);                                      \
-    }                                                                       \
-  current_thunk_number++;                                                   \
-} while (0)
+#define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION) \
+  pa_asm_output_mi_thunk (FILE, THUNK_FNDECL, DELTA, FUNCTION);
 
 /* On HPPA, we emit profiling code as rtl via PROFILE_HOOK rather than
    as assembly via FUNCTION_PROFILER.  Just output a local label.