------- Additional Comments From belyshev at depni dot sinp dot msu dot ru
2005-09-27 05:49 -------
what happening here is:
xmm0 xmm1
movss _a, %xmm1 {?, ?, ?, ?} {a, 0, 0, 0}
movss _b, %xmm0 {b, 0, 0, 0} {a, 0, 0, 0}
unpcklps %xmm1, %xmm0 {b, a, 0, 0} {a, 0, 0, 0}
movaps %xmm0, %xmm1 {b, a, 0, 0} {b, a, 0, 0}
xorps %xmm0, %xmm0 {0, 0, 0, 0} {b, a, 0, 0}
movlhps %xmm1, %xmm0 {0, 0, b, a} {b, a, 0, 0}
ret
note we cannot substitute
movaps %xmm0, %xmm1
xorps %xmm0, %xmm0
movlhps %xmm1, %xmm0
with just
movlhps %xmm0, %xmm0
because low-order 64 bits of the destination register are not modified,
but instead we could:
xmm0 xmm1
movss _a, %xmm1 {?, ?, ?, ?} {a, 0, 0, 0}
movss _b, %xmm0 {b, 0, 0, 0} {a, 0, 0, 0}
unpcklps %xmm1, %xmm0 {b, a, 0, 0} {a, 0, 0, 0}
shufps 78 /*[1,0,3,2]*/, %xmm0, %xmm0 {0, 0, b, a} {a, 0, 0, 0}
ret
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Last reconfirmed|0000-00-00 00:00:00 |2005-09-27 05:49:27
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24074