problems with gcc inline assembly using xmm registers

Nathan Sidwell nathan@codesourcery.com
Fri Dec 3 17:23:00 GMT 2004


David Palao wrote:
irst, thanks for the reply.
> 
> What do you mean with "use the mmx builtins directly"?
> (remember I'm learning this stuff right now...)
> If I understand correctly, it is possible to say to the compiler that it has 
> to use ONLY xmm registers (you mean xmm, right?) in doing certain part(s) of 
> the code (and only this part(s) ) and it will be done in the most efficient 
> way, is it true???

see xmmintrin.h, I'm not sure what other documentation is
available, or for that matter what version of GCC it was added to.
it allows you to write stuff like,

/* great big comment snipped */
{
               /* all 8 get live here. */
               __m128 fd = _mm_loadl_pi (invert, (__m64 *)forward);
               __m128 rd = _mm_loadl_pi (invert, (__m64 *)reverse);
               __m128 fd2 = _mm_shuffle_ps (fd, fd, _MM_SHUFFLE (0,1,1,0));
               __m128 rd2 = _mm_shuffle_ps (rd, rd, _MM_SHUFFLE (0,1,1,0));
               __m128 h = _mm_add_ps (fd2, _mm_mul_ps (rd2, invert));
               __m128 h1 = _mm_shuffle_ps (h, h, _MM_SHUFFLE (1,0,1,0));
               __m128 h2r = _mm_shuffle_ps (h, h, _MM_SHUFFLE (3,2,3,2));
               __m128 h2i = _mm_shuffle_ps (h, h, _MM_SHUFFLE (2,3,2,3));
               __m128 r = _mm_add_ps (_mm_mul_ps (h2r, wr),
                                      _mm_mul_ps (_mm_mul_ps (h2i, wi),
                                                  invert));

               r = _mm_add_ps (r, _mm_mul_ps (h1, half1));

               _mm_storel_pi ((__m64 *)forward, r);
               _mm_storeh_pi ((__m64 *)reverse,r);


nathan

-- 
Nathan Sidwell    ::   http://www.codesourcery.com   ::     CodeSourcery LLC
nathan@codesourcery.com    ::     http://www.planetfall.pwp.blueyonder.co.uk



More information about the Gcc-help mailing list