On Sep 30, 2005, at 4:17 PM, Jan Hubicka wrote:
The C constraint on x86 is defined, in both the doc and the comments,
as
"constant that can be easily constructed in SSE register without
loading
from memory". Currently the only one handled is 0, but there is at
least
one more, all 1 bits, which is constructed by
pcmpeqd %xmm, %xmm
Unfortunately there are quite a few places in the patterns that
assume
C
means zero, and generate pxor or something like that. What would be
the preferred way to fix this, new constraint or change the existing
patterns?
My original plan was to add pcmpeqd by extending the 'C' constraint and
the patterns where pxor/xorp? is currently generated unconditionally.
This is pretty similar to what we do to i387 constants as well. I
never
actually got to realizing this (for the scalar FP work I was mostly
interested in that time it was not at all that interesting), but I
think
there is nothing in md file preventing it (or I just missed it when it
was added :)...
No, there isn't, but it might be a smaller change to add a new
constraint....
having constraints tied to specific constants is pretty ugly, and so is
having (if (constant value==0)) in a lot of patterns..,,