On 2012-07-31 03:47, Nick Clifton wrote:
> /* We do this because the M32C has an HImode operand, but the
> M16C has an 8-bit operand. Since gcc looks at the match data
> and not the expanded rtl, we have to reset the optab so that
> the right modes are found. */
> if (TARGET_A24)
> {
> set_optab_handler (cstore_optab, QImode, CODE_FOR_cstoreqi4_24);
> set_optab_handler (cstore_optab, HImode, CODE_FOR_cstorehi4_24);
> set_optab_handler (cstore_optab, PSImode, CODE_FOR_cstorepsi4_24);
> }
> }
>
> But I could not see an obvious way to fix it. Should I be using
> swap_optab_handler as a replacement function ?
No, you need to use just one pattern for both subtargets.
It seems like you could standardize on QImode from the expander here,
but then for A24 add a zero_extend pattern or something to recover the
HImode?
r~