Seeking suggestion

Georg-Johann Lay avr@gjlay.de
Sun May 24 10:23:00 GMT 2009


Jamie Prescott schrieb:

> Is there a reason why something like this would not work?
> 
> (define_insn "addsi3_nc"
>   [(set (match_operand:SI 0 "fullreg_operand" "=r")
>         (plus:SI (match_operand:SI 1 "fullreg_operand" "r")
>                  (match_operand:SI 2 "fullreg_or_imm_operand" "rn")))]
>   ""
>   "..."
> )
> 
> (define_expand "addsi3"
>   [(set (match_operand:SI 0 "fullreg_operand" "=r")
>         (plus:SI (match_operand:SI 1 "fullreg_operand" "r")
>                  (match_operand:SI 2 "fullreg_or_imm_operand" "rn")))]
>   ""
>   {
>     if (!TARGET_XXX2)
>       emit_clobber(gen_rtx_REG(CCmode, CC_REGNUM));
>     emit_insn(gen_addsi3_nc(operands[0], operands[1], operands[2]));
>     DONE;
>   }
> )
> 
> That would limit to two instructions per basic insns, instead of the current three.
> Thanks,
> 
> - Jamie

Maybe that works. But I would not include such stuff in one of my 
machine descriptions because addsi3_nc lies: Its effect on the machine 
differ from what it states algebraically in RTL. Therefore, you may get 
trouble in corner cases or when instructions are 
reordered/scheduled/combined/...

Georg-Johann



More information about the Gcc mailing list