Take at look at AVR target which is very similar.

Here onluy "d" constrained register accept constants (they are call used registers too)

The AVR move pattern (*reloadinqi) has multiple constrain options "d" against "i" being relevant. So check you have all the combinations defined. You omitted "i" constraint but I dont know if that is relevant.

When "costing " is done, it walks thru constraints. You don't seem to have many constrain combinations (since costs are lower than I typically see for AVR). It will score on both EVEN and EIGHT and likely pick EVEN because its bigger class. So I think that is perhaps reason. I think order of classes maybe need to be changed or something else to prevent problem with overlap (LOWER_EVEN? UPPER_EVEN)

But I could be completely wrong!

Andy




Reply via email to