-
v0.9.0 Stable
released this
2026-07-14 19:03:26 +00:00 | 271 commits to main since this releaseAVX-512 masking and a wider EVEX integer set.
Added
asm: EVEX masking the way Go writes it — an explicitK1–K7
operand placed among the operands (merging mask), and a.Zmnemonic
suffix for zeroing (VPADDD.Z Z1, Z2, K2, Z3). Supported across the NDS,
reg/rm, immediate-shift, align, extract, convert and move forms, including
masked comparisons with a K destination (VPCMPEQD Z0, Z3, K2, K1). K0 is
rejected as an explicit mask, and.Zwithout a mask is an error, matching
the Go assembler.asm: the common AVX-512 F/BW integer set — VPADDB/W, VPSUBB/W, VPANDD/Q,
VPANDND/Q, VPMULLW, VPAVGB/W, the signed/unsigned min/max family for
B/W/D/Q elements, the variable shifts VPSLLVD/Q, VPSRLVD/Q, VPSRAVD/Q, the
EVEX forms of VPSHUFD/VPSHUFB, and the VMOVDQU8/VMOVDQU16 move aliases.
Register indices 16–31 encode correctly (the mod=11 quirk carries rm[4]
in X̄). All verified byte for byte against the Go assembler.lint: masked EVEX forms (.Zsuffix, K operands) are recognised by
unknown-instructionand exempted fromoperand-count.
Fixed
asm: EVEX register–register operands with indices 16–31 encoded rm[4]
into B̄ instead of X̄ (the EVEX mod=11 extension quirk), producing wrong
prefix bytes for X16+/Y16+ r/m operands.
Downloads