diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8322f5436110..2f699a4352e1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Sep 16 15:24:54 1998 Richard Henderson + + * i386.h (PREFERRED_RELOAD_CLASS): Respect an existing class + narrower than FLOAT_REGS. + Wed Sep 16 17:51:00 1998 Alexandre Oliva * cpplib.c: removed OLD_GPLUSPLUS_INCLUDE_DIR diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index ec0bf89fa2ba..cce3a0bd2ec6 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -931,9 +931,11 @@ enum reg_class 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 \ - ? (standard_80387_constant_p (X) ? FLOAT_REGS : NO_REGS) \ +#define PREFERRED_RELOAD_CLASS(X,CLASS) \ + (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != VOIDmode \ + ? (standard_80387_constant_p (X) \ + ? reg_class_subset_p (CLASS, FLOAT_REGS) ? CLASS : FLOAT_REGS \ + : NO_REGS) \ : GET_MODE (X) == QImode && ! reg_class_subset_p (CLASS, Q_REGS) ? Q_REGS \ : ((CLASS) == ALL_REGS \ && GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT) ? GENERAL_REGS \