Hi all.
I have a question on SSE operations.
I have 'm128i_i8 of __m128i' data that have as following.
__m128i Mydata;
Mydata.m128i_i8[0] : 90
Mydata.m128i_i8[1] : 0
Mydata.m128i_i8[2] : 1
Mydata.m128i_i8[3] : 0
Mydata.m128i_i8[4] : 114
Mydata.m128i_i8[5] : 1
Mydata.m128i_i8[6] : 34
Mydata.m128i_i8[7] : 1
Mydata.m128i_i8[8] : 85
Mydata.m128i_i8[9] : 2
Mydata.m128i_i8[10] : 68
Mydata.m128i_i8[11] : 2
Mydata.m128i_i8[12] : 103
Mydata.m128i_i8[13] : 2
Mydata.m128i_i8[14] : 119
Mydata.m128i_i8[15] : 1
※ Question 1.
Can I convert data following as ?
__m128i result;
result.m128i_i8[0] : 90
result.m128i_i8[1] : 1
result.m128i_i8[2] : 114
result.m128i_i8[3] : 34
result.m128i_i8[4] : 85
result.m128i_i8[5] : 68
result.m128i_i8[6] : 103
result.m128i_i8[7] : 119
result.m128i_i8[8] : 0
result.m128i_i8[9] : 0
result.m128i_i8[10] : 0
result.m128i_i8[11] : 0
result.m128i_i8[12] : 0
result.m128i_i8[13] : 0
result.m128i_i8[14] : 0
result.m128i_i8[15] : 0
※ Question 2.
If I have as following data.
Mydata.m128i_i16[0] : 90
Mydata.m128i_i16[1] : 1
Mydata.m128i_i16[2] : 114
Mydata.m128i_i16[3] : 222
Mydata.m128i_i16[4] : 341
Mydata.m128i_i16[5] : 444
Mydata.m128i_i16[6] : 359
Mydata.m128i_i16[7] : 119
Can I convert as following?
(Threshold is 255)
__m128i result;
result.m128i_i8[0] : 90
result.m128i_i8[1] : 1
result.m128i_i8[2] : 114
result.m128i_i8[3] : 222
result.m128i_i8[4] : 255
result.m128i_i8[5] : 255
result.m128i_i8[6] : 255
result.m128i_i8[7] : 119
result.m128i_i8[8] : 0
result.m128i_i8[9] : 0
result.m128i_i8[10] : 0
result.m128i_i8[11] : 0
result.m128i_i8[12] : 0
result.m128i_i8[13] : 0
result.m128i_i8[14] : 0
result.m128i_i8[15] : 0
My code:
__m128i result = _mm_setzero_si128();
result = _mm_packs_epi16(Mydata,_mm_setzero_si128());
Please advise me. Thank you. :)
What I have tried:
I tried to use '_mm_packs_epi16' operation but result is strange.