On 11 April 2007 16:48, Rohit Arul Raj wrote:

> Hi All,
> 
> I had a single movsf insn that accepts all alternatives for the reload to
> work. 
> 
> (define_insn "movsf"
>  [(set (match_operand:SF 0 "nonimmediate_operand" "=f,m,f,f,d,d")
>            (match_operand:SF 1 "general_operand"       "m,f,f,d,f,i"))
>            ]
> But for the alternative 3, i need a another data register.
> so i used
> (define_insn "movsf"
>  [(set (match_operand:SF 0 "nonimmediate_operand" "=f,m,f,f,d,d")
>            (match_operand:SF 1 "general_operand"       "m,f,f,d,f,i"))
> (clobber (match_scratch:SF 2 "=X,X,X,&d,X,X")) ]
> 
> But i am getting: error: insn does not satisfy its constraints:

  movsf is special.  In particular, it gets called after reload, when no new
pseudos can be allocated.  So the (clobber (match_scratch)) fails.  Re-read
the internals doco for 'movMM'; it goes into some depth about this.
Basically, movMM mustn't fail and can't allocate a temporary reg.

> Is there any other way to generate a temporary register other than
> using gen_reg_RTX in define expand and emitting the corresponding mov
> patterns?

  Yes.  This is what secondary reloads are for.  Grep 'SECONDARY_RELOAD' in
the internals doc.



    cheers,
      DaveK
-- 
Can't think of a witty .sigline today....

Reply via email to