• v0.9.0 0f3146ff2c

    v0.9.0 Stable

    petrbalvin released this 2026-07-14 19:03:26 +00:00 | 271 commits to main since this release

    AVX-512 masking and a wider EVEX integer set.

    Added

    • asm: EVEX masking the way Go writes it — an explicit K1–K7
      operand placed among the operands (merging mask), and a .Z mnemonic
      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 .Z without 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 (.Z suffix, K operands) are recognised by
      unknown-instruction and exempted from operand-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