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
}
}
查看全文
相关阅读:
mybatis判断字符串是否相等采坑记
acm时加快cin和cout
算法竞赛中的无穷大和无穷小
Electron 安装、运行和项目搭建
在线更新ubuntu 服务器补丁
Cannot find module 'webpack/lib/RequestShortener'
npm install --registry=https://registry.npm.taobao.org
next InitializeSecurityContext failed
npm安装typescript
xmall
原文地址:https://www.cnblogs.com/len3d/p/818165.html
最新文章
难点教程:如何设置extent作为输出参数?
Idea 开发工具高级视图用法
Idea 自动提示忽略大小写
项目经理工具Project、建模工具Visio、原型设计工具Axure、流程图Edraw
Spark 从网课来看其方方面面
Docker Harbor搭建与使用(k8s有关)
Docker之Harbor私服的搭建及使用
JavaScript Ajax 取消请求防重处理(完美解决LBS轮询重复刷新问题)
Docker在本地搭建Hadoop分布式集群
Hadoop 结合Spark环境搭建
热门文章
前端表单帮助文档
springboot2.0 集成redis服务详解,以及 (Lettuce & Jedis)
Gitlab的用户、组、权限的分配与管理管理
使用maven命令安装jar包到本地仓库
Seata实战-分布式事务简介及demo上手
Mysql 什么时候需要创建索引
[MySQL高级](一) EXPLAIN用法和结果分析
面试了十个应届生九个都是秒杀系统,你确定你们那是秒杀?
Iphone的HEIC图片文件格式转换及相关开发工具
账号复活了
Copyright © 2011-2022 走看看