------- Comment #27 from ubizjak at gmail dot com 2008-03-19 23:46 ------- (In reply to comment #25) > Actually the first generates- > subl $12, %esp > movq _w, %mm0 > paddw %mm0, %mm0 > movq %mm0, _w > movq _w, %mm0 > movq %mm0, _dw > addl $12, %esp > ret > > which is better than the code in the original report but still has a useless > store/reload.
The store is not useless. Reload from "_w" is how gcc handles double stores nowadays and is not mmx specific. It looks that some pass forgot to check where the value came from. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14552