Bit Manipulation Instruction Sets

Bit Manipulation Instructions Sets (BMI) sind Befehlssatzerweiterungen für Mikroprozessoren von Intel und AMD.

Es gibt mehrere Untermengen von BMI: BMI1 und BMI2 von Intel, die mit der Intel-Haswell-Mikroarchitektur eingeführt wurden sowie ABM und TBM von AMD. ABM (Advanced Bit Manipulation) beinhaltet Instruktionen aus Intels SSE4.2 und BMI1, TBM (Trailing Bit Manipulation) ist eine Erweiterung von BMI1, die mit der Piledriver-Architektur eingeführt wurde.

Neue Instruktionen

ABM

InstruktionBeschreibung[1]
POPCNTAnzahl gesetzter Bits
LZCNTAnzahl führender Nullen

BMI1

InstruktionBeschreibung[2]Ausdruck in C[3]
ANDNAND NOT~x & y
BEXTRBitfeld extrahieren(src >> start) & ((1 << len)-1)[4]
BLSINiedrigstes gesetztes Bit isolierenx & -x
BLSMSKAlle Bits bis zum niedrigsten gesetzten Bit setzen, alle höheren Bits löschenx ^ (x - 1)
BLSRNiedrigstes gesetztes Bit löschenx & (x - 1)
TZCNTAnzahl schließender Nullen

BMI2

InstruktionBeschreibung
BZHIAlle höheren Bits ab dem angegebenen löschen
MULXVorzeichenlose (unsigned) Multiplikation ohne Einfluss auf Flags (für RSA)[5]
PDEPParalleler Bit-Deposit
PEXTParalleler Bit-Extrakt
RORXBitweise Rotation nach rechts ohne Einfluss auf Flags (für SHA)[5]
SARXArithmetische Verschiebung nach rechts
SHRXLogische Verschiebung nach rechts
SHLXLogische Verschiebung nach links

TBM

InstruktionBeschreibung (englisch)[1]Ausdruck in C[6]
BEXTRBitfeld-Extrakt (unmittelbarer Kontroll-Wert)(src >> start) & ((1 << len)-1)
BLCFILLFill from lowest clear bitx & (x + 1)
BLCIIsolate lowest clear bitx | ~(x + 1)
BLCICIsolate lowest clear bit and complement~x & (x + 1)
BLCMASKMask from lowest clear bitx ^ (x + 1)
BLCSSet lowest clear bitx | (x + 1)
BLSFILLFill from lowest set bitx | (x - 1)
BLSICIsolate lowest set bit and complement~x | (x - 1)
T1MSKCInverse mask from trailing ones~x | (x + 1)
TZMSKMask from trailing zeros~x & (x - 1)

Einzelnachweise

  1. a b AMD64 Architecture Programmer's Manual, Volume 3: General-Purpose and System Instructions. (PDF) In: amd.com. AMD, Oktober 2013, abgerufen am 2. Januar 2014.
  2. Intel Advanced Vector Extensions Programming Reference. (PDF) In: intel.com. Intel, Juni 2011, abgerufen am 3. Januar 2014.
  3. bmiintrin.h from GCC 4.8. Abgerufen am 17. März 2014.
  4. Chess Programming BMI1. Abgerufen am 8. April 2014.
  5. a b Haswell Cryptographic Performance, Juli 2013
  6. tbmintrin.h from GCC 4.8. Abgerufen am 17. März 2014.