Bit Manipulation Instruction Sets
# 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

| Instruktion | Beschreibung |
| - | - |
| POPCNT | Anzahl gesetzter Bits |
| LZCNT | Anzahl führender Nullen |

### BMI1

| Instruktion | Beschreibung | Ausdruck in C |
| - | - | - |
| ANDN | AND NOT | ~x & y |
| BEXTR | Bitfeld extrahieren | (src >> start) & ((1 << len)-1) |
| BLSI | Niedrigstes gesetztes Bit isolieren | x & -x |
| BLSMSK | Alle Bits bis zum niedrigsten gesetzten Bit setzen, alle höheren Bits löschen | x ^ (x - 1) |
| BLSR | Niedrigstes gesetztes Bit löschen | x & (x - 1) |
| TZCNT | Anzahl schließender Nullen | – |

### BMI2

| Instruktion | Beschreibung |
| - | - |
| BZHI | Alle höheren Bits ab dem angegebenen löschen |
| MULX | Vorzeichenlose (unsigned) Multiplikation ohne Einfluss auf Flags (für RSA) |
| PDEP | Paralleler Bit-Deposit |
| PEXT | Paralleler Bit-Extrakt |
| RORX | Bitweise Rotation nach rechts ohne Einfluss auf Flags (für SHA) |
| SARX | Arithmetische Verschiebung nach rechts |
| SHRX | Logische Verschiebung nach rechts |
| SHLX | Logische Verschiebung nach links |

### TBM

| Instruktion | Beschreibung (englisch) | Ausdruck in C |
| - | - | - |
| BEXTR | Bitfeld-Extrakt (unmittelbarer Kontroll-Wert) | (src >> start) & ((1 << len)-1) |
| BLCFILL | Fill from lowest clear bit | x & (x + 1) |
| BLCI | Isolate lowest clear bit | x | ~(x + 1) |
| BLCIC | Isolate lowest clear bit and complement | ~x & (x + 1) |
| BLCMASK | Mask from lowest clear bit | x ^ (x + 1) |
| BLCS | Set lowest clear bit | x | (x + 1) |
| BLSFILL | Fill from lowest set bit | x | (x - 1) |
| BLSIC | Isolate lowest set bit and complement | ~x | (x - 1) |
| T1MSKC | Inverse mask from trailing ones | ~x | (x + 1) |
| TZMSK | Mask from trailing zeros | ~x & (x - 1) |
