WEB开发网
开发学院软件开发C++ Pentium III处理器的单指令多数据流扩展指令(3)... 阅读

Pentium III处理器的单指令多数据流扩展指令(3)

 2010-10-15 09:08:09 来源:Web开发网   
核心提示:4.1.3 C++F32vec4 f1, f2, f3;for ( int i = 0; i < ARRSIZE; i +=4 ){loadu(f1, a+i);loadu(f2, b+i);f3 = f1 * f2;storeu(c+i, f3);}4.2 矢量3D下面的例子介绍3D矢量.矢量被封装在一个类中.

4.1.3 C++

F32vec4 f1, f2, f3;
for ( int i = 0; i < ARRSIZE; i +=4 )
{

loadu(f1, a+i);

loadu(f2, b+i);

f3 = f1 * f2;

storeu(c+i, f3);
}

4.2 矢量3D

下面的例子介绍3D矢量.矢量被封装在一个类中.在下面类的函数里面调用了intrinsics库.

类声明.

union sse4 {
  __m128 m;
  float f[4];
};
class sVector3 {
protected:
  sse4 val;
public:
  sVector3(float, float, float);
  float& operator [](int);
  sVector3& operator +=(const sVector3&);
  float length() const;
friend float dot(const sVector3&, const sVector3&);
};

类实现.

sVector3::sVector3(float x, float y, float z) {
  val.m = _mm_set_ps(0, z, y, x);
}
float& sgmVector3::operator [](int i) {
  return val.f[i];
}
sVector3& sVector3::operator +=(const sVector3& v) {
  val.m = _mm_add_ps(val.m, v.val.m);
  return *this;
}
float sVector3::length() const {
  sse4 m1;
  m1.m = _mm_sqrt_ps(_mm_mul_ps(val.m, val.m));
  return m1.f[0] + m1.f[1] + m1.f[2];
}
float dot(const sVector3& v1, const sVector3& v2) {
  sVector3 v(v1);
  v.val.m = _mm_mul_ps(v.val.m, v2.val.m);
  return v.val.f[0] + v.val.f[1] + v.val.f[2];
}

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Pentium III 处理器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接