Working on IRA regressions I found a bug which occurs only on IRA branch. The reason of the bug is a wrong descriptions of SSSE3 pmaddubsw insn which permits to exchange operands by the reload. It is described as commutative operation but it is not. The insn is defined as [a0 a1 ...] pmaddubsw [b0 b1 ...] = [satsw(a0b0+a1b1) satsw(a2b2+a3b3) ...] where satsw is a saturation to sign value, ax is zero extended and bx is sign extended. If signed extension of ax gives a negative value and bx does not, the result will be different if a and b are exchanged. So a pmaddubsw b != b pmaddubsw a Here the patch fixing the bug. Is it ok to commit into the mainline? I failed create a test which exposes the bug on the mainline. It is only exposed on IRA branch (test gcc.target/i386/ssse3-pmaddubsw.c). 2008-03-10 Vladimir Makarov * config/i386/sse.md (ssse3_pmaddubswv8hi3, ssse3_pmaddubswv4hi3): Remove commutativity hint.