+Thu Mar 23 11:34:39 2000 Jim Wilson <wilson@cygnus.com>
+
+ * config/ia64/ia64.c (rtx_needs_barrier, case UNSPEC): Move case 6...
+ (rtx_needs_barrier, case UNSPEC_VOLATILE): to here.
+ * config/ia64/ia64.md (pr_restore): Change UNSPEC to UNSPEC_VOLATILE.
+
Thu Mar 23 16:04:40 2000 Andrew Haley <aph@cygnus.com>
* config/mips/mips.md (movdf_internal1a): Delete (set 'f', 'F')
need_barrier |= rws_access_reg (i, flags, pred);
break;
- case 6: /* mov pr= */
- /* This writes all predicate registers. */
- new_flags.is_write = 1;
- /* We need to skip by two, because rws_access_reg always writes
- to two predicate registers at a time. */
- /* ??? Strictly speaking, we shouldn't be counting writes to pr0. */
- for (i = PR_REG (0); i < PR_REG (64); i += 2)
- need_barrier |= rws_access_reg (i, new_flags, pred);
- break;
-
+ case 6:
case 7:
abort ();
need_barrier = rws_access_reg (REG_AR_PFS, new_flags, pred);
break;
+ case 6: /* mov pr= */
+ /* This writes all predicate registers. */
+ new_flags.is_write = 1;
+ /* We need to skip by two, because rws_access_reg always writes
+ to two predicate registers at a time. */
+ /* ??? Strictly speaking, we shouldn't be counting writes to pr0. */
+ for (i = PR_REG (0); i < PR_REG (64); i += 2)
+ need_barrier |= rws_access_reg (i, new_flags, pred);
+ break;
+
default:
abort ();
}
"mov %0 = pr"
[(set_attr "type" "I")])
+;; ??? This is volatile to prevent it from being moved before a conditional
+;; expression that calculates the return value.
+
(define_insn "pr_restore"
- [(unspec [(const_int 0)] 6)
+ [(unspec_volatile [(const_int 0)] 6)
(use (match_operand:DI 0 "register_operand" "r"))]
""
"mov pr = %0, -1"