Re: [問題] _mm_shuffle_epi8 :: 看不懂MSDN上的解釋

看板C_and_CPP作者 (-858993460)時間14年前 (2011/04/06 20:26), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《DrStein (啤酒肚)》之銘言: : 這是SSE3的指令集: : http://msdn.microsoft.com/zh-tw/library/bb531427%28v=vs.90%29.aspx : __m128i _mm_shuffle_epi8( : __m128i a, : __m128i mask : ); : msdn上面這樣寫: : rn = (maskn & 0x80) ? 0 : SELECT(a, maskn & 0x0f) : SELECT的解適是這樣 : SELECT(a, n) extracts the nth 8-bit parameter from a. The 0th 8-bit parameter : is the least significant 8-bits. : 但我真的不懂這是在幹嘛: : MSDN上的例子: : a.m128i_i8[15] = -1; ---> 1111 1111 : mask.m128i_u8[15] = 0x00; -> 取第0個8bit ? : 那為何輸出是 1 ( 0000 0001). : 同理: : a.m128i_i8[13] = -64; ---> 1100 0000 : mask.m128i_u8[13] = 0x02; : 那為何輸出是 4 (0000 0100) ?? : 謝謝 SELECT(a,x) 就是選出 a 的第 x 個 8-bit 值出來 或者換個講法就是 a_x 例如 a = 0xFEDCBA98765432100123456789ABCDEF 好了 那 SELECT(a,0) 就會得到 0xEF SELECT(a,1) 0xCD 等等 既然 a_0 等的編號也是從低位開始 那 SELECT(a,x) 就等於是 a_x 了 這樣一來它的例子就很清楚了: mask_0 = 0x8F => r_0 = 0 mask_1 = 0x0E => r_1 = a_14 = -128 mask_2 = 0x8D => r_2 = 0 mask_3 = 0x0C => r_3 = a_12 = -32 等等 -- 1989/02/22 優希堂悟 1990/02/22 冬川こころ 1993/07/05 小町つぐみ 1994/05/21 高江 ミュウ 1995/04 歡迎來到 星野遊々 1997/03/24 守野いづみ 1997/03/24 伊野瀬チサト 1998/06/18 守野くるみ 1999/10/19 打越鋼太郎的 楠田ゆに 2000/02/15 樋口遙 2002/ 12/17 八神ココ 2011/01/11 HAL18於朱倉岳墜機 2011/04/02 ∞與∫的世界 茜崎空啟動 2012/05/21 第貮日蝕計畫預定 2017/05/01~07 LeMU崩壞事故 2019/04/01~07 某大學合宿 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.230.62

04/06 23:07, , 1F
謝謝 完全了解
04/06 23:07, 1F
文章代碼(AID): #1Dd5m5Gr (C_and_CPP)
文章代碼(AID): #1Dd5m5Gr (C_and_CPP)