【问题标题】:SSE4.1 intrinsics compilation error on MacMac上的SSE4.1内在函数编译错误
【发布时间】:2011-04-14 20:18:32
【问题描述】:

我在(我认为)支持它的硬件上使用 SSE4.1 内在函数时遇到了一些麻烦。 如果我错过了什么,谁能告诉我?

在 MacBookPro5,4 (Penryn) 上构建以下代码:

>g++ -msse sse4.cpp -S -o sse4.asm

#include <stdio.h>
#include <smmintrin.h>

int main ()
{
    __m128 a, b;
    const int mask = 0x55;

    a.m128_f32[0] = 1.5;
    a.m128_f32[1] = 10.25;
    a.m128_f32[2] = -11.0625;
    a.m128_f32[3] = 81.0;
    b.m128_f32[0] = -1.5;
    b.m128_f32[1] = 3.125;
    b.m128_f32[2] = -50.5;
    b.m128_f32[3] = 100.0;

    __m128 res = _mm_dp_ps(a, b, mask);

    printf_s("Original a: %f\t%f\t%f\t%f\nOriginal b: %f\t%f\t%f\t%f\n",
                a.m128_f32[0], a.m128_f32[1], a.m128_f32[2], a.m128_f32[3],
                b.m128_f32[0], b.m128_f32[1], b.m128_f32[2], b.m128_f32[3]);
    printf_s("Result res: %f\t%f\t%f\t%f\n",
                res.m128_f32[0], res.m128_f32[1], res.m128_f32[2], res.m128_f32[3]);

    return 0;
}

产生以下错误:

/usr/lib/gcc/i686-apple-darwin10/4.2.1/include/smmintrin.h:35:3: error: #error "SSE4.1 instruction set not enabled"

【问题讨论】:

  • 您的硬件是否支持 SSE4.1 无关紧要。即使没有,编译器仍然应该能够为它生成代码。或者,如果编译器无法为其生成代码,那么您再次拥有硬件这一事实也无济于事。

标签: gcc sse intrinsics


【解决方案1】:

变化:

g++ -msse sse4.cpp -S -o sse4.asm

到:

g++ -msse4.1 sse4.cpp -S -o sse4.asm

【讨论】:

  • 是的。请注意,使用 m128_f32[] 访问器时还有其他错误,这似乎是 Microsoft 特定的。
  • @Justicle:是的 - 只需使用 _mm_set_XXX 宏来初始化 SIMD 数据类型。
【解决方案2】:

你试过g++ -msse4.1吗?

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2017-09-15
    • 2016-12-31
    • 1970-01-01
    相关资源
    最近更新 更多