Intelの次世代CPUについて語ろう 22

このエントリーをはてなブックマークに追加
677Socket774
pshub は pshufw/pshufdのようにimm8がつかないんだが
どんな命令なんだ?
678・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/04(土) 20:39:25 ID:0xg7Kp7s
+ 90:0f 38 00 01[ ]+pshufb \(%ecx\),%mm0
+ 94:0f 38 00 c1[ ]+pshufb %mm1,%mm0
+ 98:66 0f 38 00 01[ ]+pshufb \(%ecx\),%xmm0
+ 9d:66 0f 38 00 c1[ ]+pshufb %xmm1,%xmm0

俺はこんなオペレーションかと思った(MM版の場合)
tmp = dest
for(int i = 0; i < 8; i++) { dest[i] = tmp[ (ecx >> (i * 4)) * 0x0F ]; }


でも汎用レジスタって4バイトだから各バイトの順番表すとして8個しか順番保てなくね?
ひょっとしてxmm版はmm版2個くっつけただけの糞命令?

xmm版がまともなことを期待しますよ。
679MACオタ>677 さん:2006/03/04(土) 20:44:07 ID:9igVid/W
>>677
もしAltiVec的なvector permute命令だとすると,二つ目の引数に行き先の位置が書いてあって
  abcdefghijklmnop, 03 05 01 12 04 08 02 11 09 10 06 13 15 00 07 14
-> ncgaebkofijhdlpm
とバイト単位で並べ替える命令すかね。。。
680Socket774:2006/03/04(土) 20:44:57 ID:6vdxV1Mj
エンコードは
(66) 0F 38 ?? MOD/RM
だから
pshufb mm1, mm2/mem64
pshufb xmm1, xmm2/mem128
だろ
681Socket774:2006/03/04(土) 20:49:16 ID:6vdxV1Mj
680は >>678
682・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/04(土) 20:51:20 ID:0xg7Kp7s
失敬。直感でアドレスかと思った。
それならこれでOKだね。

MM版
tmp = dest ;
for(int i = 0; i < 8; i++) {
dest[i] = tmp[src[i]];
}

XMM版
tmp = dest ;
for(int i = 0; i < 16; i++) {
dest[i] = tmp[src[i]];
}
683・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/04(土) 20:52:26 ID:0xg7Kp7s
×アドレスかと
○レジスタ即値かと


ってことは

VPERM移植ktkr!!!!
684Socket774:2006/03/04(土) 20:55:14 ID:xUHwVt5m
今回のSPECはそのSSE4を使ったものなのかな?
685・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/04(土) 20:58:03 ID:0xg7Kp7s
http://www.spec.org/osg/cpu2000/CINT2000/
あんま使えそうなとこが無い気が。


fpのほうは積和算の性能がダイレクトに反映されるような。
686MACオタ>683 さん:2006/03/04(土) 20:59:55 ID:9igVid/W
>>683
  ---------------------
  VPERM移植ktkr!!!!
  ---------------------
AltiVecのvpermわ,2本のベクトルレジスタから並べ替えができるす。
http://developer.apple.com/hardware/ve/highlights.html#Ex%203

ちなみにAIMのvector permute特許も「二つの入力ベクトルレジスタ」を指定しているす。
http://164.195.100.11/netacgi/nph-Parser?Sect1=PTO2&Sect2=HITOFF&u=/netahtml/search-adv.htm&r=1&p=1&f=G&l=50&d=ptxt&S1=5,996,057.WKU.&OS=PN/5,996,057&RS=PN/5,996,057
687・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/04(土) 21:02:05 ID:0xg7Kp7s
なるほど。
完璧なVPERM移植は命令フォーマット的に無理すね。