zoukankan
html css js c++ java
用SSE汇编求向量的点积
class
__declspec(align(
16
)) vector4
{
public
:
union
{
struct
{
float
x, y, z, w; }
;
__m128 mm;
}
;
}
;
inline
void
dot3( vector4
&
r,
const
vector4
&
x,
const
vector4
&
y )
{
/**/
/*
register vector4 s;
s.mm = _mm_mul_ps( x.mm , y.mm );
r.mm = _mm_add_ss( s.mm , _mm_movehl_ps( s.mm , s.mm ) );
r.mm = _mm_add_ss( r.mm , _mm_shuffle_ps( r.mm , r.mm , 1 ) );
*/
__asm
{
mov ecx, y
mov edx, x
mov eax, r
movaps xmm0, xmmword ptr [ecx]
movaps xmm1, xmmword ptr [edx]
mulps xmm1, xmm0
//
xmm1 = s0, s1, s2, s3
movhlps xmm0, xmm1
//
xmm0 = s2, s3, *, *
addss xmm0, xmm1
//
xmm0 = s0+s2, s3, *, *
shufps xmm1, xmm1,
1
//
xmm1 = s1, s0, s0, s0
addss xmm0, xmm1
//
xmm0 = s0+s2+s1, s3, *, *
movaps xmmword ptr [eax], xmm0
}
}
inline
void
dot4( vector4
*
r,
const
vector4
*
x,
const
vector4
*
y )
{
/**/
/*
register vector4 s;
s.mm = _mm_mul_ps( x->mm , y->mm );
r->mm = _mm_add_ss( s.mm , _mm_movehl_ps( s.mm , s.mm ) );
r->mm = _mm_add_ss( r->mm , _mm_shuffle_ps( r->mm , r->mm , 1 ) );
r->mm = _mm_add_ss( r->mm , _mm_shuffle_ps( r->mm , r->mm , 3 ) );
*/
__asm
{
mov ecx, y
mov edx, x
mov eax, r
movaps xmm0, xmmword ptr [ecx]
movaps xmm1, xmmword ptr [edx]
mulps xmm1, xmm0
//
xmm1 = s0, s1, s2, s3
movhlps xmm0, xmm1
//
xmm0 = s2, s3, *, *
addss xmm0, xmm1
//
xmm0 = s0+s2, s3, *, *
shufps xmm1, xmm1,
253
//
xmm1 = s1, s3, s3, s3
addss xmm0, xmm1
//
xmm0 = s0+s2+s1, s3, *, *
movhlps xmm1, xmm1
//
xmm1 = s3, s3, s3, s3
addss xmm0, xmm1
//
xmm0 = s0+s2+s1+s3, s3, *, *
movaps xmmword ptr [eax], xmm0
}
}
查看全文
相关阅读:
luogu2253 好一个一中腰鼓!
luogu2948 滑雪课
luogu1556 幸福的路
luogu1900 自我数
luogu1632 点的移动
luogu1999 高维正方体
树状数组模板
杜教筛
[比赛|考试] 9月第一周的考试
历年NOIP真题总结
原文地址:https://www.cnblogs.com/len3d/p/818165.html
最新文章
Idea创建webservice服务和客户端调用的几种方式,打包测试方式
关于时序数据流经Kafka之后可能产生乱序的原因和解决方法
手动安装Maven依赖(oracle驱动包)
Flink流计算编程--Flink sink to Oracle
CentOS7:ifconfig command not found解决
Redis 命令参考
Intellij IDEA快捷键与使用小技巧
Oracle date timestamp 毫秒
Oracle to_date、to_timestamp、to_char、to_number 用法
sql,将一天所有记录按小时划分
热门文章
sql,去重
sql,用 ISNULL(), NVL(), IFNULL() and COALESCE() 函数替换空值
Spring AOP体系学习总结
mybatis缓存清除方法
为什么要使用AOP
IOC AOP
打印访问后台请求参数
java 百分比显示Double类型数值
java Date日期去掉时分秒
luogu2723 丑数
Copyright © 2011-2022 走看看