2010-06-28 7 views
5

Estoy escribiendo un código SSE para convolución 2D pero la documentación de SSE es muy escasa. Estoy calculando el producto de punto con _mm_dp_ps y usando _mm_extract_ps para obtener el resultado del producto de punto, pero _mm_extract_ps devuelve un hex que representa un flotador y no puedo encontrar la manera de convertir este flotante de hexágono en un flotador normal. Podría usar __builtin_ia32_vec_ext_v4sf que devuelve un flotante pero quiero mantener la compatibilidad con otros compiladores.Cómo convertir un flotante hexadecimal a un flotador en C/C++ usando _mm_extract_ps SSE Función de inserción GCC

_mm_extract_ps (__m128 __X, const int __N) 
{ 
    union { int i; float f; } __tmp; 
    __tmp.f = __builtin_ia32_vec_ext_v4sf ((__v4sf)__X, __N); 
    return __tmp.i; 
} 

¿Qué punto me falta?

Se agradece un poco de ayuda, gracias.

OpenSUSE 11.2
GCC 4.4.1
C++
Opciones del compilador
-fopenmp -Wall -O3 -msse4.1 -march = core2
opciones del vinculador
-lgomp -Wall -O3 -msse4. 1 -march = core2

Respuesta

5

Debería poder usar _MM_EXTRACT_FLOAT.

Por cierto que me parece como si _mm_extract_ps_MM_EXTRACT_FLOAT y debería ser al revés, es decir _mm_extract_ps debería devolver un flotador y _MM_EXTRACT_FLOAT debería devolver la representación int, pero ¿qué sé yo.

+2

Pensé eso también. –

+0

Supongo que es la forma en que Intel describe las instrucciones en su documentación, lo que puede o no ser un error: los encabezados de gcc simplemente implementan lo que hay en la documentación. –

1

_mm_cvtss_f32(_mm_shuffle_ps(__X, __X, __N)) hará el trabajo.

0

extern void _mm_store_ss (float *, __m128);

Ver 'xmmintrin.h.'

Cuestiones relacionadas