私はこれまで実際に使用したことのないベクトル演算を使用するためにアセンブリを試みていますが、構文の一部を把握するのに少し苦労していることは確かです。
関連するコードは以下です。
unit16_t asdf[4];
asdf[0] = 1;
asdf[1] = 2;
asdf[2] = 3;
asdf[3] = 4;
uint16_t other = 3;
__asm__("movq %0, %%mm0"
:
: "m" (asdf));
__asm__("pcmpeqw %0, %%mm0"
:
: "r" (other));
__asm__("movq %%mm0, %0" : "=m" (asdf));
printf("%u %u %u %u\n", asdf[0], asdf[1], asdf[2], asdf[3]);
この単純な例では、配列内の各要素に対して "3" の 16 ビット比較を実行しようとしています。出力が「0 0 65535 0」になることを願っています。でも、まとまりません。
最初のアセンブリ命令で次のエラーが表示されます。
エラー: メモリ入力 0 は直接アドレス指定できません
2 番目の命令では、別のエラーが表示されます。
エラー: `pcmpeqw' のサフィックスまたはオペランドが無効です
どんな助けでも大歓迎です。