aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJames Van Artsdalen <jrv@gnu.org>1993-03-22 07:42:38 +0000
committerJames Van Artsdalen <jrv@gnu.org>1993-03-22 07:42:38 +0000
commitd398b3b1338cccbc2861959d2eef8515af9cf6c3 (patch)
treeebe9ea91e048736441872250eac04c8560120954 /gcc
parent5e82e7bddbb58ea12883ecbe66f74137b076d676 (diff)
downloadgcc-d398b3b1338cccbc2861959d2eef8515af9cf6c3.zip
gcc-d398b3b1338cccbc2861959d2eef8515af9cf6c3.tar.gz
gcc-d398b3b1338cccbc2861959d2eef8515af9cf6c3.tar.bz2
(PREFERRED_RELOAD_CLASS): Only narrow MODE_FLOAT reloads from ALL_REGS to GENERAL_REGS.
(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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/i386/i386.h22
1 files changed, 12 insertions, 10 deletions
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index fff1aab..f6d2bee 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -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 ()
/* Specify the machine mode that this machine uses
for the index in the tablejump instruction. */