小编Thi*_*awn的帖子

我是否违反了严格的别名规则?

我想知道我是否正在使用此代码段破坏严格的别名规则.(我想是这样的,因为它取消引用了一个惩罚指针,但它只在一个表达式中完成而/ 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撰写的文章.

c++ sse strict-aliasing c++11

12
推荐指数
1
解决办法
508
查看次数

标签 统计

c++ ×1

c++11 ×1

sse ×1

strict-aliasing ×1