CANNOT_CHANGE_MODE_CLASS (was Re: CLASS_CANNOT_CHANGE_MODE* redesign)

Michael Matz matz@suse.de
Mon Nov 4 02:19:00 GMT 2002


Hi Aldy,

On Sun, 3 Nov 2002, Aldy Hernandez wrote:

> I do hope everyone is not only thrilled and excited about the new
> interface, but anxious to approve it.

No.  Because: ...


Ok, just kidding ;-)  I am thrilled and excited, but have no power ;)
OTOH one minor gnit:

ia64.h:
! /* If defined, gives a class of registers that cannot be used as the
!    operand of a SUBREG that changes the mode of the object illegally.  */
!
! #define CLASS_CANNOT_CHANGE_MODE        FR_REGS
!
! /* Defines illegal mode changes for CLASS_CANNOT_CHANGE_MODE.
!    In FP regs, we can't change FP values to integer values and vice
     versa, but we can change e.g. DImode to SImode.  */

! #define CLASS_CANNOT_CHANGE_MODE_P(FROM,TO) \
!   (GET_MODE_CLASS (FROM) != GET_MODE_CLASS (TO))

  /* A C expression that defines the machine-dependent operand constraint
     letters (`I', `J', `K', .. 'P') that specify particular ranges of
--- 993,1003 ----
     : ((CLASS) == FR_REGS && (MODE) == TFmode) ? 1             \
     : (GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)

! /* In FP regs, we can't change FP values to integer values and vice
     versa, but we can change e.g. DImode to SImode.  */

! #define CANNOT_CHANGE_MODE_CLASS(FROM, TO)    \
!   (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) ? FR_REGS : NO_REGS)

The original version used GET_MODE_CLASS, not GET_MODE_SIZE.  Generally
that's not the same, although I don't know for sure on ia64.


Ciao,
Michael.



More information about the Gcc-patches mailing list