是否可以将__m128变量中的内部值作为C++类中的属性进行访问?

Gui*_*ume 3 c++ arrays attributes

我想用SSE内在函数实现一个Vector类(表示3个浮点数的向量)(所以我不会使用__m128类型的第4个元素).但我希望能够像属性一样轻松访问它们:所以myVector.x将访问vec中的0-31位,myVector.y将访问vec中的32-63位,但无需调用某些getX()方法.'x'属性将是'vec'的0-31位的一种别名.可能吗 ?

class Vector {  
public:  
  float x;  
  float y;  
  float z;  
private:  
  __m128 vec;  
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 7

不,因为这违反了强烈的别名规则.

当然你可以使用强制转换或联合假装__m128是一系列浮点数,但优化器不会保持对你的一致性,因为你违反了语言的规则.

请参阅什么是严格别名规则?

(根据规则,使用union进行访问是安全的,但这仅适用于命名联合.获取指向联合成员的指针或引用然后直接使用指针或引用是不安全的.)

  • @Guillaume:设计一些东西,这样你就不会经常转换到SSE和从SSE转换.实际上,SSE加载/存储指令是关于可用的最有效的存储器访问方法.尽管如此,SSE寄存器访问速度更快,因此尽可能长时间地将内容保存在SSE中. (4认同)