On 10/15/2009 08:56 AM, Richard Henderson wrote: > On 10/15/2009 07:41 AM, Markus L wrote: >> However the IS is designed so that it is beneficial to to store 16bit >> values in the high part of the registers (rNh) and also the calling >> conventions that we want follow require 16bit values to be passed and >> returned in rNh. >> >> What would be the "proper way" make the compiler use the upper parts >> of these registers for the 16bit operands? > > This feature is going to be difficult, but not impossible, and unless > your ISA has some really odd features I won't vouch for the code quality. > > You say you want to canonically represent HImode in the high-part of the > register. Additionally, you'll have to represent QImode in the > high-part (if not further in the high byte). > > You'll need to follow the mips port and define TRULY_NOOP_TRUNCATION and > the associated truncMN2 patterns. > > If you do all this, you won't have to do anything with FUNCTION_VALUE > etc at all. >
Sorry for a *way* *late* reply to this, but wouldn't it also work to model the register file as a set of 16-bit registers (since that's what you really have -- individually addressable 16-bit registers) and exclude SImode values from register pairs which are not aligned. Then one can simply prefer the high 16-bit registers to the low 16-bit registers in the register priority sequence. I'm assuming there is something wrong with this, but I'm kind of curious as to what it would be. -hpa