From 93a77848075d53362d57c21736c8baa141afe468 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Sat, 11 Nov 2000 05:54:02 +0000 Subject: [PATCH] sh.h (MODES_TIEABLE_P): Don't tie SFmode to other FP modes. * config/sh/sh.h (MODES_TIEABLE_P): Don't tie SFmode to other FP modes. From-SVN: r37380 --- gcc/ChangeLog | 5 +++++ gcc/config/sh/sh.h | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b94b70eb8f0d..0b2e121efded 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-11-11 Alexandre Oliva + + * config/sh/sh.h (MODES_TIEABLE_P): Don't tie SFmode to other FP + modes. + 2000-11-10 Joseph S. Myers * gcc.texi, gcov.texi: Update dates and version numbers. diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index 330fe2db0b0a..0e7105295c29 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -537,10 +537,15 @@ do { \ /* Value is 1 if it is a good idea to tie two pseudo registers when one has mode MODE1 and one has mode MODE2. If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2, - for any hard reg, then this must be 0 for correct output. */ + for any hard reg, then this must be 0 for correct output. + That's the case for xd registers: we don't hold SFmode values in + them, so we can't tie an SFmode pseudos with one in another + floating-point mode. */ #define MODES_TIEABLE_P(MODE1, MODE2) \ - ((MODE1) == (MODE2) || GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2)) + ((MODE1) == (MODE2) \ + || (GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2) \ + && (MODE1) != SFmode && (MODE2) != SFmode)) /* Specify the registers used for certain standard purposes. The values of these macros are register numbers. */