http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56866
--- Comment #17 from Winfried Magerl <winfried.mag...@t-online.de> 2013-04-29 16:08:09 UTC --- Hi Jakub, On Fri, Apr 26, 2013 at 09:00:42AM +0000, jakub at gcc dot gnu.org wrote: > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56866 > > --- Comment #14 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-04-26 > 09:00:42 UTC --- > Created attachment 29944 > --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29944 > gcc49-pr56866.patch > > The fix for gcc.c-torture/execute/pr51581* and pr53645.c etc. is quite > obvious, > we obviously can't use xop_pmacsdqh with unsigned highpart odd > multiplication, > say for the pr51581-1.c unsigned division by 3U, which is high part > multiplication by 0xaaaaaaabU, with the result shifted right by 1 at the end. > If we compute say 3ULL * 0xaaaaaaabULL, we can't use xop_pmacsdqh which > computes > 3LL * 0xffffffffaaaaaaabLL instead. > > That said, there are no vpmacsdqh insns in the sha512 code for -O3 > -march=bdver2, so it must be something else. I've verified that the problem with the sha512 code build with '-O3 -mxop' is also fixed. I've attached sha512.s.diff with the diff of the generated assembler-code (gcc-4_8-branch revision 198317 compared with gcc-4_8-branch revision 198422). Most lines looks like this: - vprotq $-45, %xmm0, %xmm4 - vprotq $-3, %xmm0, %xmm3 + vprotq $3, %xmm0, %xmm4 + vprotq $45, %xmm0, %xmm3 Many thanks for looking at this issue! I will run the complete gcc-test-suite to see the difference and later on I will check glibc-testsuite too. It might be a good idea to look at the other open bugs tagged with bdver or xop. regards winfried