【发布时间】:2013-12-06 02:05:33
【问题描述】:
我正在尝试将 log2 应用于 __m128 变量。像这样:
#include <immintrin.h>
int main (void) {
__m128 two_v = {2.0, 2.0, 2.0, 2.0};
__m128 log2_v = _mm_log2_ps(two_v); // log_2 := log(2)
return 0;
}
尝试编译它会返回此错误:
error: initializing '__m128' with an expression of
incompatible type 'int'
__m128 log2_v = _mm_log2_ps(two_v); // log_2 := log(2)
^ ~~~~~~~~~~~~~~~~~~
我该如何解决?
【问题讨论】:
-
这是一个 SVML 内在函数。 .h 文件中的声明是错误的,请告诉我们它的样子。
-
@HansPassant 对不起,我不明白。你想看看我的 immintrin.h 文件吗?
-
我没有指定任何头文件。你已经可以看到我所有的代码了。
-
@tmuecksch 例如,通过使用给定的 SSE-instrinsics,如
_mm_set_ps等。但似乎您的编译器无论如何都理解该语法(即使这不是与平台无关的),因为错误似乎确实在 log2 行中。 Hans 的意思是,您应该在其头文件中查找_mm_log2_ps内在函数的声明,以检查它是否真的接受并返回__m128,而不是以某种方式错误地声明。 -
@ChristianRau 感谢您的建议。
标签: c++ compiler-errors sse intrinsics sse2