]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
pa-hpux10.h (NEW_HP_ASSEMBLER): Define.
authorJeffrey A Law <law@cygnus.com>
Sun, 23 Nov 1997 01:57:15 +0000 (01:57 +0000)
committerJeff Law <law@gcc.gnu.org>
Sun, 23 Nov 1997 01:57:15 +0000 (18:57 -0700)
        * pa-hpux10.h (NEW_HP_ASSEMBLER): Define.
        * pa.h (LEGITIMATE_CONSTANT_P): Reject LABEL_REFs if not using
        gas and not using the new HP assembler.

Also remove unwanted pa.md change accidentally committed.

From-SVN: r16684

gcc/ChangeLog
gcc/config/pa/pa-hpux10.h
gcc/config/pa/pa.h
gcc/config/pa/pa.md

index 58bd3429fa0a8d645ff0c4eb8571a87c24c4bd86..d270f339d55a1bd64c31c2b27759d05a594443ec 100644 (file)
@@ -1,3 +1,9 @@
+Sat Nov 22 18:58:20 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * pa-hpux10.h (NEW_HP_ASSEMBLER): Define.
+       * pa.h (LEGITIMATE_CONSTANT_P): Reject LABEL_REFs if not using
+       gas and not using the new HP assembler.
+
 Fri Nov 21 15:20:05 1997  Jeffrey A Law  (law@cygnus.com)
 
        * Makefile.in (program_transform_cross_name): Clean up "-e" confusion.
index 1c57d5ee6ea70cc1a2b3386aae7917b02ff9feb3..c4b8ddd36dcce60606cf387bf463655dc5aa11a6 100644 (file)
@@ -69,3 +69,6 @@ do {  \
 #define MD_STARTFILE_PREFIX "/usr/ccs/lib/"
 #endif
 
+/* hpux10 has the new HP assembler.  It's still lousy, but it's a whole lot
+   better than the assembler shipped with older versions of hpux.  */
+#define NEW_HP_ASSEMBLER
index 7d6c826a594eab94520aa40cc5090bc294776186..5944448a849c02eb1ea944076db76c53a6c10a06 100644 (file)
@@ -1396,12 +1396,21 @@ extern struct rtx_def *hppa_builtin_saveregs ();
    && (reload_in_progress || reload_completed || ! symbolic_expression_p (X)))
 
 /* Include all constant integers and constant doubles, but not
-   floating-point, except for floating-point zero.  */
+   floating-point, except for floating-point zero.
 
+   Reject LABEL_REFs if we're not using gas or the new HP assembler.  */
+#ifdef NEW_HP_ASSEMBLER
 #define LEGITIMATE_CONSTANT_P(X)               \
   ((GET_MODE_CLASS (GET_MODE (X)) != MODE_FLOAT        \
     || (X) == CONST0_RTX (GET_MODE (X)))       \
    && !function_label_operand (X, VOIDmode))
+#else
+#define LEGITIMATE_CONSTANT_P(X)               \
+  ((GET_MODE_CLASS (GET_MODE (X)) != MODE_FLOAT        \
+    || (X) == CONST0_RTX (GET_MODE (X)))       \
+   && (GET_CODE (X) != LABEL_REF || TARGET_GAS)\
+   && !function_label_operand (X, VOIDmode))
+#endif
 
 /* Subroutine for EXTRA_CONSTRAINT.
 
index d1e89a1ddf19ebda1e244126daea406cd5f1a64e..a13a06ee79503938ef5092ceb173de86741ce3e2 100644 (file)
 ;; that anything generated as this insn will be recognized as one
 ;; and that it will not successfully combine with anything.
 (define_expand "movstrsi"
-  [(parallel [(set (match_operand:BLK 0 "" "")
-                  (match_operand:BLK 1 "" ""))
-             (clobber (match_dup 7))
-             (clobber (match_dup 8))
+  [(parallel [(set (mem:BLK (match_operand:BLK 0 "" ""))
+                  (mem:BLK (match_operand:BLK 1 "" "")))
+             (clobber (match_dup 0))
+             (clobber (match_dup 1))
              (clobber (match_dup 4))
              (clobber (match_dup 5))
-             (clobber (match_dup 6))
              (use (match_operand:SI 2 "arith_operand" ""))
              (use (match_operand:SI 3 "const_int_operand" ""))])]
   ""
   "
 {
   int size, align;
-
   /* HP provides very fast block move library routine for the PA;
      this routine includes:
 
 
   /* If size/alignment > 8 (eg size is large in respect to alignment),
      then use the library routines.  */
-  if (size / align > 16)
+  if (size/align > 16)
     FAIL;
 
   /* This does happen, but not often enough to worry much about.  */
-  if (size / align < MOVE_RATIO)
+  if (size/align < MOVE_RATIO)
     FAIL;
   
   /* Fall through means we're going to use our block move pattern.  */
-  operands[0]
-    = change_address (operands[0], VOIDmode,
-                     copy_to_mode_reg (SImode, XEXP (operands[0], 0)));
-  operands[1]
-    = change_address (operands[1], VOIDmode,
-                     copy_to_mode_reg (SImode, XEXP (operands[1], 0)));
+  operands[0] = copy_to_mode_reg (SImode, XEXP (operands[0], 0));
+  operands[1] = copy_to_mode_reg (SImode, XEXP (operands[1], 0));
   operands[4] = gen_reg_rtx (SImode);
   operands[5] = gen_reg_rtx (SImode);
-  operands[6] = gen_reg_rtx (SImode);
-  operands[7] = XEXP (operands[0], 0);
-  operands[8] = XEXP (operands[1], 0);
+  emit_insn (gen_movstrsi_internal (operands[0], operands[1], operands[4],
+                                    operands[5], operands[2], operands[3],
+                                    gen_reg_rtx (SImode)));
+  DONE;
 }")
 
 ;; The operand constraints are written like this to support both compile-time