ADCX, ADOX, PERFETCHW, RDSEED 命令が追加

Intel64 and IA-32 アーキテクチャ仕様書に取り込まれる前の新機能を定義する Intel Architecture Instruction Set Extensions Programming Reference が改版された。

主に AVX2 について記述された June 2011 版(id:nminoru:20110613:avx2)の後に Feb 2012 版がでて Transactional Synchronization Extensions(TSX) が追記された。

今回の July 2012 版では Chapter 9 の部分が追記されている。

  • ADCX (Unsigned Integer Addtion of Two Operands with Carry Flag)
  • ADOX (Unsigned Integer Addtion of Two Operands with Overflow Flag)
  • PERFETCHW (Prefetch Data into Caches in Anticipation of a Write)
  • RDSEED (Read Random SEED)

最初の ADCX と ADOX は 2 オペランドの汎用レジスタ(r32, r64)の符号なし加算命令だが、CF(Carry Flag) または OF(Overflow Flag) を組み込む。つまり ADCX の場合、OP1 += OP2 + CF ? 1 : 0 という演算を、ADOX の場合には OP1 += OP2 + OF ? 1 : 0 という演算を行う。結果によって影響を受けるフラグは ADCX は CF のみ、ADOX の場合は OF のみになる。

もともと ADC (Add with Carry) という命令があったが、ADC は結果として CF 以外のフラグ(OF, ZF, SF, ...) も変更していたが、ADCX は CF だけを変更する点が異なる。

ADOX は ADCX が CF にビットをセットする時に OF にビットをセットする点が異なる。通常の ADD では演算の結果 OF がセットするのは符号あり演算がオーバーフローした場合である。しかし ADOX では ADC/ADCX と同じ符号なし演算で桁上がりをした時にフラグがセットされる。つまり OF の意味が変わっている。


PERFETCHW はキャッシュプリフェッチ命令だが、指定したキャッシュラインを書き込みのために使うことを予告するでの、メモリ上のデータをキャッシュに引き上げると共に、他のプロセッサのキャッシュ内に同一キャッシュラインが (MESI の) E や S のステータスであればこれを破棄させるように仕向けのだと思われる。


RDSEED は乱数値を返す命令である。すでに存在する RDRAND 命令に似ている。
RDRAND が NIST 800-90A 標準に従う deterministic random bit generator (DRBG) が返す乱数値なのに対して、RDSEED が NIST SP800-90B と NIST SP800-90C 標準に従う non-determistic random bit generator (Enhanced NRBG) の返す乱数値なのが異なる。