gpt4 book ai didi

c++ - 如何在英特尔 SSE 内在函数中将参数传递给 const 值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:15:34 25 4
gpt4 key购买 nike

我知道在参数中使用常量值;当您不希望函数修改参数时。

所以这段测试代码运行良好:

#include "stdafx.h"
#include <io.h>
#include <iostream>
using namespace std;

void foo (const int y )
{
printf ( "x = %d \n" , y*2 ) ;
}

int _tmain(int argc, _TCHAR* argv[])
{
int y = 3;
foo ( y );
system("pause");
return 0;
}

但是当我在英特尔 SSE 内在函数上做同样的事情时,例如 *_mm_blend_epi16* 函数,我得到这个错误:

error C2057: expected constant expression

这个错误的代码是:

#include "stdafx.h"
#include <io.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int y = 3 ;
__m128i x1,x2;
_mm_blend_epi16(x1,x2,y);
system("pause");
return 0;
}

_mm_blend_epi16 的定义是:

__m128i _mm_blend_epi16( __m128i a, __m128i b, const int mask )

那么,问题是什么?难道我做错了什么 ?

编辑
解决方案是什么?

最佳答案

问题是 _mm_blend_epi16 要求掩码不仅是 const int,而且是编译时的已知值(如 constexpr 在 c++11 中)。所以,即使 _mm_blend_epi16(x1,x2,(const int)y) 也不起作用。此行为不同于测试示例中的行为,因为它是编译器固有的而不是真正的函数。

关于c++ - 如何在英特尔 SSE 内在函数中将参数传递给 const 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21503546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com