CLMUL (ang. carry-less multiplication) – rozszerzenie zestawu instrukcji procesorów x86, umożliwiające sprzętowe wykonywanie mnożenia binarnego bez przeniesień. Zostało opracowane przez firmę Intel i wprowadzone w 2010 roku w procesorach opartych na mikroarchitekturze Westmere. Rozszerzenie zostało następnie zaimplementowane również przez AMD, między innymi w mikroarchitekturze Bulldozer.
Podstawową instrukcją rozszerzenia jest PCLMULQDQ, która mnoży bez przeniesień dwie 64-bitowe wartości i zapisuje 128-bitowy wynik w rejestrze XMM. Wartości te są wybierane z dwóch 128-bitowych operandów: rejestru XMM oraz rejestru XMM lub pamięci. O tym, które 64-bitowe połowy operandów zostaną pomnożone, decydują bity 0 i 4 argumentu natychmiastowego o długości 8 bitów. Obsługę PCLMULQDQ można wykryć za pomocą instrukcji CPUID, sprawdzając bit 1 rejestru ECX dla funkcji 1.
Matematycznie operacja odpowiada mnożeniu wielomianów o współczynnikach z dwuelementowego ciała skończonego GF(2). Dodawanie współczynników jest realizowane za pomocą operacji XOR, bez generowania ani propagowania przeniesień. Wykorzystanie wyniku do mnożenia w większych ciałach skończonych GF(2n) wymaga dodatkowej redukcji modulo odpowiedni wielomian nierozkładalny.
Wektorowa postać instrukcji, VPCLMULQDQ, występuje w wariantach 128, 256 i 512-bitowych. Warianty 256 i 512-bitowe wykonują odpowiednio dwa lub cztery niezależne mnożenia bez przeniesień, po jednym w każdej 128-bitowej części rejestru wektorowego.
CLMUL przyspiesza obliczanie funkcji GHASH, wykorzystywanej do uwierzytelniania danych w trybie GCM, stosowanym między innymi z algorytmem AES. Instrukcja umożliwia również wydajniejsze obliczanie cyklicznych kodów nadmiarowych (CRC), służących do wykrywania błędów danych.