aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-06-14 22:15:08 +0000
committerRichard Stallman <rms@gnu.org>1992-06-14 22:15:08 +0000
commitf21d67da84985ebd2beaf1c8ca00db461eaa70a9 (patch)
treeedfe56d4691927310937f8f5dc5eb387251dcd33
parent96b5daff8d4667cf475ac0d749da20524a93a275 (diff)
downloadgcc-f21d67da84985ebd2beaf1c8ca00db461eaa70a9.zip
gcc-f21d67da84985ebd2beaf1c8ca00db461eaa70a9.tar.gz
gcc-f21d67da84985ebd2beaf1c8ca00db461eaa70a9.tar.bz2
(PREFERRED_RELOAD_CLASS): Avoid f regs for HI and QI if poss.
From-SVN: r1205
-rw-r--r--gcc/config/i860/i860.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/config/i860/i860.h b/gcc/config/i860/i860.h
index dd2c6a8..3ebcf70 100644
--- a/gcc/config/i860/i860.h
+++ b/gcc/config/i860/i860.h
@@ -350,10 +350,16 @@ enum reg_class { NO_REGS, GENERAL_REGS, FP_REGS, ALL_REGS, LIM_REG_CLASSES };
integer register to an FP register. If we are trying to put a
non-zero floating-point constant into some register, use an integer
register if the constant is SFmode and GENERAL_REGS is one of our options.
- Otherwise, put the constant into memory. */
+ Otherwise, put the constant into memory.
+
+ When reloading something smaller than a word, use a general reg
+ rather than an FP reg. */
#define PREFERRED_RELOAD_CLASS(X,CLASS) \
((CLASS) == ALL_REGS && GET_CODE (X) == CONST_INT ? GENERAL_REGS \
+ : ((GET_MODE (X) == HImode || GET_MODE (X) == QImode) \
+ && (CLASS) == ALL_REGS) \
+ ? GENERAL_REGS \
: (GET_CODE (X) == CONST_DOUBLE \
&& GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \
&& ! CONST_DOUBLE_OK_FOR_LETTER_P (X, 'G')) \