CLMUL Befehlssatz - CLMUL instruction set

Carry-less Multiplication ( CLMUL ) ist eine Erweiterung des x86- Befehlssatzes, der von Mikroprozessoren von Intel und AMD verwendet wird und von Intel im März 2008 vorgeschlagen und in den Anfang 2010 angekündigten Intel Westmere-Prozessoren verfügbar gemacht wurde . Mathematisch implementiert der Befehl die Multiplikation von Polynome über dem endlichen Feld GF (2), wobei der Bitstring das Polynom darstellt . Der CLMUL-Befehl ermöglicht auch eine effizientere Implementierung der eng verwandten Multiplikation größerer endlicher Felder GF (2 k ) als der herkömmliche Befehlssatz.

Eine Verwendung dieser Anweisungen besteht darin, die Geschwindigkeit von Anwendungen zu verbessern, die eine Blockverschlüsselung im Galois / Counter-Modus durchführen , was von der GF (2 k ) -Multiplikation mit endlichem Feld abhängt . Eine weitere Anwendung ist die schnelle Berechnung von CRC-Werten , einschließlich derer, die zur Implementierung des DEFLATE- Algorithmus für das LZ77- Schiebefenster in zlib und pngcrush verwendet werden .

ARMv8 hat auch eine Version von CLMUL. SPARC nennt ihre Version XMULX für "XOR-Multiplikation".

Neue Anweisungen

Der Befehl berechnet das 128-Bit- Carry-Less-Produkt aus zwei 64-Bit-Werten. Das Ziel ist ein 128-Bit-XMM-Register . Die Quelle kann ein anderes XMM-Register oder ein anderer Speicher sein. Ein Sofortoperand gibt an, welche Hälften der 128-Bit-Operanden multipliziert werden. Mnemonics, die bestimmte Werte des unmittelbaren Operanden angeben, sind ebenfalls definiert:

Anweisung Opcode Beschreibung
PCLMULQDQ xmmreg,xmmrm,imm [rmi: 66 0f 3a 44 /r ib] Führen Sie eine Carry-Less-Multiplikation von zwei 64-Bit-Polynomen über das endliche Feld GF (2 k ) durch.
PCLMULLQLQDQ xmmreg,xmmrm [rm:  66 0f 3a 44 /r 00] Multiplizieren Sie die unteren Hälften der beiden Register.
PCLMULHQLQDQ xmmreg,xmmrm [rm:  66 0f 3a 44 /r 01] Multiplizieren Sie die obere Hälfte des Zielregisters mit der unteren Hälfte des Quellregisters.
PCLMULLQHQDQ xmmreg,xmmrm [rm:  66 0f 3a 44 /r 10] Multiplizieren Sie die untere Hälfte des Zielregisters mit der oberen Hälfte des Quellregisters.
PCLMULHQHQDQ xmmreg,xmmrm [rm:  66 0f 3a 44 /r 11] Multiplizieren Sie die hohen Hälften der beiden Register.

Eine vektorisierte EVEX-Version (VPCLMULQDQ) ist in AVX-512 zu sehen .

CPUs mit CLMUL-Befehlssatz

Das Vorhandensein des CLMUL-Befehlssatzes kann durch Testen eines der CPU-Merkmalsbits überprüft werden .

Siehe auch

Verweise