This is the mail archive of the
mailing list for the GCC project.
Re: Puzzle about macro MIPS_PROLOGUE_TEMP_REGNUM
> It's not "starting from $3". ?It's $3 and nothing else ;-) ?It's not
> intended to be used as (MIPS_PROLOGUE_TEMP_REGNUM + N).
> $3 was chosen because it's a MIPS16 register, and can therefore
> be used for both MIPS16 and normal-mode code. ?$2 used to be the
> static chain register, which left $3 as the only free call-clobbered
Thank all of you for explanation.
> MIPS16 register. ?I changed the static chain register to $15 to avoid
> a clash with the MIPS16 gp-load sequence:
> ? ?http://gcc.gnu.org/ml/gcc-patches/2008-08/msg00622.html
> so $2 is probably free now too.
Seems $2 is used for gp load in MIPS16 defined by MIPS16_PIC_TEMP_REGNUM,
which should not conflict with MIPS_PROLOGUE_TEMP_REGNUM either.
Mips target uses mips_split_doubleword_move in mips_save_reg
to implement double float reg saving.
Seems I have to provide a special pattern using exactly
the only (MIPS_PROLOGUE_TEMP_REGNUM) register,
rather than paired registers starting from it.
But, more patterns might result in consuming more memory, time.
Since my application is some kinda very unique(o32 abi and no MIPS16),
maybe I could use some paired temporary register in this purpose,
like $8-$15, $24-$25.