Estoy trabajando con el conjunto de instrucciones SSE2 en MS Visual Studio. Lo estoy usando para hacer algunos cálculos con datos de 16 bits.¿Cómo se define una constante de 128 bits de manera eficiente?
Supongamos que tengo 8 valores cargados en un registro SSE. Quiero agregar una constante (por ejemplo, 42
) a todos ellos. Aquí es cómo me gustaría que se vea mi código.
__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
Ahora, ¿cómo puedo definir la constante? Las dos formas siguientes funcionan, pero una es ineficiente y la otra es fea.
my_const_42 = _mm_set_epi16(42, 42, 42, 42, 42, 42, 42, 42)
- 8 compilador genera comandos para "construir" la constantemy_const_42 = {42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0}
- difícil de entender lo que está pasando; cambiando42
a, p.-42
no es trivial
¿Hay alguna forma de expresar la constante de 128 bits más cómodamente?
Quizás usar una macro para el segundo método esté bien – valdo