Bit manipulation instructions: Difference between revisions

Content deleted Content added
Tags: Mobile edit Mobile web edit Advanced mobile edit
Intel and AMD (x86): PTEST - and VPTEST - set two separate bits in *one* register, the EFLAGS register. Clean up the description a bit.
Line 49:
** {{code|BSF}} Bit Scan Forward - a quirky backwards count trailing zeros
* [[SSE4]] and the [[X86 Bit manipulation instruction set|BMI]] instruction set extensions contains instructions for:
** Count leading zeros - {{code|lzcnt}},
** Count trailing zeros - {{code|tzcnt}}
** Population count - {{code|popcnt}}
** Bit extract/bit deposit - {{code|pext}}/{{code|pdep}}
** Bit test - {{code|PTESTptest}} and {{code|vptest}}, given two inputs, doesdo aboth an {{code|AND}} operation and an {{code|ANDN}} operation between them, and setsset twothe separateZF and CPUCF branchEFLAGS registersbits on whether the results of the AND and ANDN, respectively, are 0. This can be used to test if all masked bits are zero, all masked bits are set, or a mix.
* The [[AVX-512#Bitwise ternary logic|AVX-512 ternary]] extension includes a [[Bitwise ternary logic instruction]], {{code|vpternlog}}. Also noteworthy is a conflict detection instruction. [[AVX-512#Conflict detection|<code>VPCONFLICTD</code>]]
* Also present in the AVX/[[AVX-512]] [[GFNI instruction set|GFNI subset]] is bit-matrix affine transformation and its inverse: {{code|GF2P8AFFINEQB}} is effectively an 8x8 bit-matrix multiply in the [[Galois field]] GF(2^8).<ref>{{cite web | title=GF2P8AFFINEQB — Galois Field Affine Transformation | url=https://www.felixcloutier.com/x86/gf2p8affineqb }}</ref>