【发布时间】:2012-06-08 01:42:48
【问题描述】:
我正在使用 MS Visual Studio 中的 SSE2 指令集。我正在使用它对 16 位数据进行一些计算。
假设我有 8 个值加载到 SSE 寄存器中。我想为所有这些添加一个常量(例如42)。这是我希望我的代码看起来的样子。
__m128i values; // 8 values, 16 bits each
const __m128i my_const_42 = ???; // What should i write here?
values = _mm_add_epi16(values, my_const_2); // Add 42 to the 8 values
现在,我该如何定义常量?以下两种方式可行,但一种效率低,另一种难看。
-
my_const_42 = _mm_set_epi16(42, 42, 42, 42, 42, 42, 42, 42)- 编译器生成 8 个命令来“构建”常量 -
my_const_42 = {42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0}- 很难理解发生了什么;将42更改为例如-42不是小事
有没有什么方法可以更方便的表达128位常量?
【问题讨论】:
-
或许用宏来做第二种方法是可以的
标签: c visual-studio optimization sse intrinsics