我想知道我是否正在使用此代码段破坏严格的别名规则.(我想是这样的,因为它取消引用了一个惩罚指针,但它只在一个表达式中完成而/ Wall不会哭.)
inline double plop() const // member function
{
__m128d x = _mm_load_pd(v);
... // some stuff
return *(reinterpret_cast<double*>(&x)); // return the lower double in xmm reg referred to by x.
}
Run Code Online (Sandbox Code Playgroud)
如果是,那么解决方法是什么?一旦您想要遵守规范,同时使用不同的表示将成为核心.
谢谢你的回答,我正试图找到一个解决方案.
不接受的答案以及原因:
"use mm_store" - >如果以下指令需要xmm寄存器,则优化器无法将其删除,因此它会在其后生成一个负载.存储+加载什么都没有.
如果对同一对象使用两种类型,则"使用联合" - >别名规则违规.如果我理解Thiago Macieira撰写的文章.