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
}
}
查看全文
相关阅读:
怎样使用七牛云CDN加速并绑定阿里云域名
mac系统Docker安装Redis教程
使用Java Executor框架实现多线程
我是怎样测试Java类的线程安全性的
Java8 Stream终端操作使用详解
Java8 Stream中间操作使用详解
Java 8创建Stream流的5种方法
JVM源码分析之Metaspace解密
全链路压测体系建设方案的思考与实践
JVM源码分析之Object.wait/notify(All)完全解读
原文地址:https://www.cnblogs.com/len3d/p/818165.html
最新文章
DevExpress gridcontrol gridView主从表折叠/展开显示
excel数据表透视操作
EasyUI设置选中复选框
EasyUI DataGrid自适应高度
EasyUI tabs指定要显示的tab
Oracle调用Java方法(下)复杂Jar包封装成Oracle方法以及ORA-29521错误
Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法
[computer vision]高斯金字塔与拉普拉斯金字塔
[computer vision]下采样与走样问题
[cpp]NULL,nullptr,空指针
热门文章
[cpp]C++中的析构函数
[computer graphics]透明颜色混合(Color Blending)
[computer graphics]消隐算法Z-Buffer深度测试
[cpp]C++中类和结构体的区别
[cpp]Friend关键字的作用
[data structure]树的一些基本概念
[Computer Vision]Harris角点检测的详细推导
使用IDEA+Gradle构建Spring5源码并调试(手把手教程全图解)
Java设计模式十九——责任链模式
Java高频面试题
Copyright © 2011-2022 走看看