On Wed, Jun 27, 2012 at 9:00 PM, Richard Henderson <r...@redhat.com> wrote: > On 06/27/2012 09:07 AM, Igor Zamyatin wrote: >> May I ask about the purpose of the following piece of change? Doesn't >> it affect non-sse cases either? > > Err, no, it doesn't affect non-sse cases. All MODE_VECTOR_INT > cases will be implemented in the xmm registers (ignoring the > deprecated and largely ignored mmx case).
Probably I misunderstand something... This condition - GET_MODE_SIZE (mode) < UNITS_PER_WORD - is outside the check for MODE_VECTOR_INT. > > >> >> @@ -32038,7 +32042,15 @@ ix86_rtx_costs (rtx x, int code, int >> outer_code_i, int opno, int *total, >> case ASHIFTRT: >> case LSHIFTRT: >> case ROTATERT: >> - if (!TARGET_64BIT && GET_MODE (XEXP (x, 0)) == DImode) >> + if (GET_MODE_CLASS (mode) == MODE_VECTOR_INT) >> + { >> + /* ??? Should be SSE vector operation cost. */ >> + /* At least for published AMD latencies, this really is the same >> + as the latency for a simple fpu operation like fabs. */ >> + *total = cost->fabs; >> + return false; >> + } >> + if (GET_MODE_SIZE (mode) < UNITS_PER_WORD) >> { >> if (CONST_INT_P (XEXP (x, 1))) >> { >> >> It also seems that we reversed the condition for the code that is now >> under if (GET_MODE_SIZE (mode) < UNITS_PER_WORD). Why do we need this? > > I'm not sure what you're suggesting. But we certainly don't use > the xmm registers to implement DImode operations in 32-bit, so... > > > r~