2012-01-30 19 views

Respuesta

6

con gcc sólo puede utilizar _mm_set_pi64x:

#include <mmintrin.h> 

__int64 i = 0x123456LL; 
__m64 v = _mm_set_pi64x(i); 

Tenga en cuenta que no todos los compiladores tienen _mm_set_pi64x definido en mmintrin.h. Para gcc se define así:

extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 
_mm_set_pi64x (long long __i) 
{ 
    return (__m64) __i; 
} 

lo que sugiere que probablemente podría simplemente utilizar un molde, si lo prefiere, por ejemplo,

__int64 i = 0x123456LL; 
__m64 v = (__m64)i; 

De no ser así, si usted está atascado con un compilador demasiado exigente como Visual C/C++, como último recurso, sólo puede utilizar una unión e implementar su propia intrínseca:

#ifdef _MSC_VER // if Visual C/C++ 
__inline __m64 _mm_set_pi64x (const __int64 i) { 
    union { 
     __int64 i; 
     __m64 v; 
    } u; 

    u.i = i; 
    return u.v; 
} 
#endif 

Tenga en cuenta que estrictamente hablando esto es UB, ya que estamos escribiendo en una variante de una unión y leyendo de otra, pero debería funcionar en esta instancia.

+0

¿Huh? https://www.google.com/search?q=_mm_set_pi64 – Mehrdad

+0

Eche un vistazo a 'mmintrin.h' –

+0

http://pastebin.com/4bwAbbLZ? – Mehrdad