In the Carry-less Multiplication x86 instruction, PCLMULQDQ
, what does the "P" prefix stand for?
I've looked in these sources, but none of them explain the mnemonics.
Secondly, what does "QDQ" stand for?
P is for Packed (integer). All SSE/AVX integer instructions have mnemonics starting with p
, like paddb
. (Or vp
for the AVX versions). As opposed to ...ps
(packed-single) and ...pd
packed-double instructions.
Q for Quad-word (64-bit) chunks of the source operand multiplying into a Double-Quad (128-bit) integer.
Thus P
CLMUL
Q
DQ
. (There aren't other size combinations of clmul
at the moment, but it's not a bad thing for the mnemonic to specify.)
FP instructions skip the leading p
, and instead use suffixes like ps
(packed single-precision) or sd
(scalar double). e.g. vaddpd
is the AVX/AVX-512/AVX10 version of ADD Packed Double.
Related:
punpcklqdq
as an example of where dq
is used instead of o
(octword like scalar cqo
), for interleaving 64-bit chunks to make a 128-bit, following the same pattern as punpcklwd
(16 bit interleave).cbw
as well as SIMD element sizes.