[Mesa-dev] [PATCH] Add an accelerated version of F_TO_I for x86_64
mattst88 at gmail.com
Wed Jul 23 08:43:25 PDT 2014
On Tue, Jul 22, 2014 at 4:18 PM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> On Mon, Jul 21, 2014 at 5:29 PM, Matt Turner <mattst88 at gmail.com> wrote:
>> On Mon, Jul 21, 2014 at 5:16 PM, Jason Ekstrand <jason at jlekstrand.net>
>> > Signed-off-by: Jason Ekstrand <jason.ekstrand at intel.com>
>> > ---
>> > src/mesa/main/imports.h | 4 ++++
>> > 1 file changed, 4 insertions(+)
>> > diff --git a/src/mesa/main/imports.h b/src/mesa/main/imports.h
>> > index af780b2..5d6486b 100644
>> > --- a/src/mesa/main/imports.h
>> > +++ b/src/mesa/main/imports.h
>> > @@ -285,6 +285,10 @@ static inline int F_TO_I(float f)
>> > int r;
>> > __asm__ ("fistpl %0" : "=m" (r) : "t" (f) : "st");
>> > return r;
>> > +#elif defined(USE_X86_64_ASM) && defined(__GNUC__)
>> > + int r;
>> > + __asm__ ("cvtss2si %1, %0" : "=r" (r) : "xm" (f));
>> "xm"? I think you just want "x"
> No, this is needed because it uses an SSE register.
Right... "x" is SSE register. "m" is memory. Are you meaning to specify both?
>> Also "=&r" since it's written without ever being read.
> Reading the GCC docs, I don't see how earlyclobber is appropreate. Would
> you care to explain your reasoning further?
It's probably fine without it. The rule of thumb I've always seen is
use =& if the argument is written before it could have been read.
Both of these make me think that you should just use _mm_cvtss_si32()
and let the compiler sort this kind of thing out.
More information about the mesa-dev