(PREFERRED_RELOAD_CLASS): Only narrow MODE_FLOAT reloads from ALL_REGS to GENERAL_REGS.
authorJames Van Artsdalen <jrv@gnu.org>
Mon, 22 Mar 1993 07:42:38 +0000 (07:42 +0000)
committerJames Van Artsdalen <jrv@gnu.org>
Mon, 22 Mar 1993 07:42:38 +0000 (07:42 +0000)
(PREFERRED_RELOAD_CLASS): Only narrow MODE_FLOAT reloads from ALL_REGS to
GENERAL_REGS.
(PREFERRED_OUTPUT_RELOAD_CLASS): Deleted.
(INIT_EXPANDERS): New macro.

From-SVN: r3828

gcc/config/i386/i386.h

index fff1aab81eed15b88ade837de0202968b1a84ead..f6d2bee352bb7383804d607678f3a148106e0e52 100644 (file)
@@ -529,21 +529,16 @@ extern enum reg_class regclass_map[FIRST_PSEUDO_REGISTER];
    reloaded into floating registers (since no move-insn can do that)
    and we ensure that QImodes aren't reloaded into the esi or edi reg.  */
 
-/* Don't put float CONST_DOUBLE into fp regs.
+/* Put float CONST_DOUBLE in the constant pool instead of fp regs.
    QImode must go into class Q_REGS.
-   MODE_INT must not go into FLOAT_REGS. */
+   Narrow ALL_REGS to GENERAL_REGS.  This supports allowing movsf and
+   movdf to do mem-to-mem moves through integer regs. */
 
 #define PREFERRED_RELOAD_CLASS(X,CLASS)        \
   (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != VOIDmode ? NO_REGS  \
    : GET_MODE (X) == QImode && ! reg_class_subset_p (CLASS, Q_REGS) ? Q_REGS \
-   : (FLOAT_CLASS_P (CLASS)                                            \
-      && (GET_MODE (X) == VOIDmode                                     \
-         || GET_MODE_CLASS (GET_MODE (X)) == MODE_INT)) ? GENERAL_REGS \
-   : (CLASS) == ALL_REGS ? GENERAL_REGS                                        \
-   : (CLASS))
-
-#define PREFERRED_OUTPUT_RELOAD_CLASS(X,CLASS) \
-  ((CLASS) == ALL_REGS ? GENERAL_REGS          \
+   : ((CLASS) == ALL_REGS                                              \
+      && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) ? GENERAL_REGS   \
    : (CLASS))
 
 /* If we are copying between general and FP registers, we need a memory
@@ -1090,6 +1085,13 @@ do                                                                       \
       }                                                                        \
   }                                                                    \
 while (0)
+
+/* Initialize data used by insn expanders.  This is called from
+   init_emit, once for each function, before code is generated.
+   For 386, clear stack slot assignments remembered from previous
+   functions. */
+
+#define INIT_EXPANDERS clear_386_stack_locals ()
 \f
 /* Specify the machine mode that this machine uses
    for the index in the tablejump instruction.  */