質問

テスト目的で、ICCインラインアセンブラを使用してIntelのXeon Phi用の短いアセンブリスニペットを書きます。今、私はマスクされたベクターの指示を使いたかったが、私はそれらをインラインアセンブラーに送ることに失敗する。

このようなコードの場合:

vmovapd  -64(%%r14, %%r10), %%zmm0{%%k1} 
.

エラーメッセージ

/tmp/icpc5115IWas_.s: Assembler messages:
/tmp/icpc5115IWas_.s:563: Error: junk `%k1' after register
.

私はさまざまな組み合わせをたくさん試しましたが、何もうまくいきませんでした。コンパイラのバージョンは、ガスの構文を使用して、Linuxの下のIntel64 / 13.1up03です。

編集:上記のコードは実際には非拡張アセンブラで動作します。だからこれ:

__asm__("vmovapd  -64(%r14, %r10), %zmm0{%k1} ")
.

は機能しませんが、次のようになります。

__asm__("vmovapd  -64(%[src], %%r10), %%zmm0{%%k1} "
    :
    : [src]"r"(src)
    :)
.

register namesの前に2倍%を使う必要があると思います。しかし、kのための単一%はどちらも機能しない。

役に立ちましたか?

解決

Intel Developer Zone

他のヒント

命令のマスクされた亜種を使う必要があると思います:vmaskmovpd

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top