- 注册时间
- 2014-6-29
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 812
- 在线时间
- 小时
|
楼主 |
发表于 2014-7-3 19:26:36
|
显示全部楼层
- __declspec(naked)
- DWORD __fastcall iSqrt_SSE41(DWORD n)
- {
- __asm
- {
- mov eax, ecx
- and eax, 0x80000000
- movd xmm0, eax
- psllq xmm0, 32
- mov eax, 0
- cvtsi2sd xmm1, eax
- movsd xmm2, qword ptr [b32]
- blendvpd xmm1, xmm2, xmm0
- cvtsi2sd xmm0, ecx
- addsd xmm0, xmm1
- sqrtsd xmm0, xmm0
- cvttsd2si eax, xmm0
- ret
- }
- }
复制代码- mov eax, ecx
- and eax, 0x80000000
- shr eax, 31
- movsd xmm1, qword ptr [b32 + eax * 8]
- cvtsi2sd xmm0, ecx
- addsd xmm0, xmm1
- sqrtsd xmm0, xmm0
- cvttsd2si eax, xmm0
- ret
复制代码- push ecx
- fld qword ptr [b32]
- fldz
- cmp ecx, 0x8000000
- fcmovnb st, st(1)
- fild dword ptr [esp]
- faddp st(1),st
- fsqrt
- fadd qword ptr [zero5]
- fistp dword ptr [esp]
- fstp st
- pop eax
- ret
复制代码
但为什么用2^53实测不行 |
|