aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/ia64/ia64.h9
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 493e1ea..fdc55f3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2000-06-29 Jim Wilson <wilson@cygnus.com>
+
+ * config/ia64/ia64.h (PREFERRED_RELOAD_CLASS): Return NO_REGS for
+ a volatile mem and FR_REGS.
+
2000-06-29 Mark Mitchell <mark@codesourcery.com>
* c-common.c: Include c-common.h, not c-lex.h or c-tree.h.
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index 88257b7..b2c80cd 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -983,7 +983,14 @@ enum reg_class
The value is a register class; perhaps CLASS, or perhaps another, smaller
class. */
-#define PREFERRED_RELOAD_CLASS(X, CLASS) CLASS
+/* Don't allow volatile mem reloads into floating point registers. This
+ is defined to force reload to choose the r/m case instead of the f/f case
+ when reloading (set (reg fX) (mem/v)). */
+
+#define PREFERRED_RELOAD_CLASS(X, CLASS) \
+ ((CLASS == FR_REGS && GET_CODE (X) == MEM && MEM_VOLATILE_P (X)) \
+ ? NO_REGS \
+ : CLASS)
/* You should define this macro to indicate to the reload phase that it may
need to allocate at least one register for a reload in addition to the