首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

SSE指令集的一个有关问题

2012-06-03 
SSE指令集的一个问题F32vec4 a(1.001,1.22,1.33,1.000)要求得到其小数位-(0.01,0.22,0.33,0.0),有好的办

SSE指令集的一个问题
F32vec4 a(1.001,1.22,1.33,1.000);

要求得到其小数位->(0.01,0.22,0.33,0.0),有好的办法吗?

[解决办法]
如果使用汇编的话,需要用到以下指令 SSE/SSE2指令

MOVAPS
 把4个对准的打包单精度值传送到XMM寄存器或者内存
 
MOVUPS
 把4个不对准的打包单精度值传送到XMM寄存器或者内存
 

CVTDQ2PS 
转化打包的double-word 整数 到 打包的单精度浮点值
CVTPS2DQ 
转化打包的单精度浮点值到打包的double-word整数
 
如果使用函数的话,需要用到在3楼头文件中定义的函数 
 比如,可检查文件 C:\Program Files\Microsoft Visual Studio 9.0\VC\include\emmintrin.h 来获得这些函数的用法。

另外,可从msdn中获得帮助。下面是我查到的一些函数的说明:


Converts the four signed 32-bit integer values of a to single-precision, floating-point values.

Copy
 __m128 _mm_cvtepi32_ps (__m128i a);
CVTDQ2PS
Return Value
--------------------------------------------
r0 := (float) a0
r1 := (float) a1
r2 := (float) a2
r3 := (float) a3



Converts the four single-precision, floating-point values of a to signed 32-bit integer values.

Copy
 __m128i _mm_cvtps_epi32 (__m128 a);
CVTPS2DQ
Return Value
--------------------------------------------

r0 := (int) a0
r1 := (int) a1
r2 := (int) a2
r3 := (int) a3

[解决办法]
参考
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\fvec.h
300..306:

C/C++ code
/* Convert first element of F32vec4 to int with truncation */inline int F32vec4ToInt(const F32vec4 &a){        return _mm_cvtt_ss2si(a);} 

热点排行