> > 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. Thanks. -- Best Regards.