diff options
author | James Van Artsdalen <jrv@gnu.org> | 1993-01-20 06:45:28 +0000 |
---|---|---|
committer | James Van Artsdalen <jrv@gnu.org> | 1993-01-20 06:45:28 +0000 |
commit | 85ff473e569925cbf9858fcc45491dda25b7ae92 (patch) | |
tree | 00f32b9c341067c41c7a3f71b3a10c794acf726b | |
parent | eca315011760544a68bf639fed765e8ecb81f604 (diff) | |
download | gcc-85ff473e569925cbf9858fcc45491dda25b7ae92.zip gcc-85ff473e569925cbf9858fcc45491dda25b7ae92.tar.gz gcc-85ff473e569925cbf9858fcc45491dda25b7ae92.tar.bz2 |
(PREFERRED_RELOAD_CLASS): Narrow ALL_REGS to GENERAL_REGS.
(PREFERRED_OUTPUT_RELOAD_CLASS): New macro. Narrow ALL_REGS to GENERAL_REGS.
(SECONDARY_MEMORY_NEEDED): New macro.
From-SVN: r3295
-rw-r--r-- | gcc/config/i386/i386.h | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 73b6f25..c5383ac 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -524,19 +524,29 @@ 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 any regs. +/* Don't put float CONST_DOUBLE into fp regs. QImode must go into class Q_REGS. MODE_INT must not go into FLOAT_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 : (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 \ : ((CLASS) == FLOAT_REGS \ && (GET_MODE (X) == VOIDmode \ - || GET_MODE_CLASS (GET_MODE (X)) == MODE_INT) ? \ - GENERAL_REGS : (CLASS))) + || 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)) + +/* If we are copying between general and FP registers, we need a memory + location. */ + +#define SECONDARY_MEMORY_NEEDED(CLASS1,CLASS2,MODE) \ + (((CLASS1) == FLOAT_REGS && (CLASS2) != FLOAT_REGS) \ + || ((CLASS2) == FLOAT_REGS && (CLASS1) != FLOAT_REGS)) /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. */ |