テストの目的で、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 で、GAS 構文を使用します。
編集: 上記のコードは、実際には非拡張アセンブラで動作します。したがって、この:
__asm__("vmovapd -64(%r14, %r10), %zmm0{%k1} ")
動作しますが、以下は動作しません:
__asm__("vmovapd -64(%[src], %%r10), %%zmm0{%%k1} "
:
: [src]"r"(src)
:)
拡張モードで名前を登録する前に、二重の % を使用する必要があることと関係があると思います。しかし、いいえ、k の単一の % も機能しません。