http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55829



--- Comment #6 from Uros Bizjak <ubizjak at gmail dot com> 2013-01-09 16:33:02 
UTC ---

(In reply to comment #3)

> BTW, there is a slight inconsistency between the two patterns, the first

> pattern uses sselog1 type for both the unpckldp %0, %0 and %vmovddup %1, %0 
> and

> V2DFmode mode attribute, while the second pattern uses sselog type for both of

> those and DFmode mode attribute for the movddup case.



Actually, the sselog/sselog1 difference is OK, it makes difference only in the

calculation of "memory" attribute. By default, sselog looks at operand[2],

which is missing when the pattern has only two operands. So, sselog1 (and all

_1 types) looks at operand[1].



Regarding mode: length calculation depends on it, so for V2DF non-avx sse insns

prefix_data16 is added, and for DF non-avx sse insn prefix_rep is added. While

for sselog insns, V2DF vs. DF makes no difference in length, movddup uses

prefix_rex, so the correct mode for movddup is DF. I will submit a trivial

patch to change this inconsistency.

Reply via email to