This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, rs6000] Fix constraints issue in _mm_cvtss_si{32,64}


Hi!

On Thu, Nov 08, 2018 at 02:18:51PM -0600, Bill Schmidt wrote:
> We recently discovered that GCC is getting lucky with register allocation of
> some inline assembly code, despite invalid register constraints.  In these
> two functions, a "wi" constraint (VSX valid for direct moves) was used for a 

"wi" is not direct move only, that is "wj".  "wi" is for DImode in VSX.
It allows all VSX registers (or nothing at all).

> temporary that, as written, is further constrained to be an FPR.  This patch
> fixes the problem by introducing a separate temporary with an "f" constraint
> and breaking the lifetime of the existing temporary.  The existing temporary
> can now have a less onerous "wa" constraint as it is no longer used within a
> direct move instruction.

It could already use a "wa", and the "f" isn't needed at all?  But it
should use xsrdpic then, i.e. the VSX instruction instead of the FP insn.
Maybe that only works for 64 bit though (for the overflow behaviour).  Hrm.
Although it doesn't currently implement overflow behaviour correctly either!

Your code is not wrong though, so okay for trunk.  Thanks!


Segher


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]