Skip to content

Releases: emmansun/base64

v0.10.0 (2026-6-23)

Choose a tag to compare

@emmansun emmansun released this 23 Jun 06:02
24e9d2a

New Features

  • WHATWG Forgiving Base64 Decoding (#43)
    Added Forgiving() method on Encoding to support the WHATWG forgiving base64 decoding approach. In this mode, the decoder transparently ignores ASCII whitespace characters — space (' '), tab ('\t'), form feed ('\f'), line feed ('\n'), and carriage return ('\r') — in the input.
    decoded, err := base64.StdEncoding.Forgiving().DecodeString("SGVs bG8g V29y bGQ=")

Performance Improvements

  • AMD64: AVX-512 VBMI encode/decode paths
    Added dedicated AVX-512 VBMI encode and decode implementations. The encode path uses the multishift technique for maximum throughput on wide SIMD hardware. Falls back to AVX2 for tail bytes when input is not aligned to the AVX-512 block size.
  • LoongArch64: LASX (256-bit SIMD) encode/decode
    Added full LASX encode/decode paths using xvpermi.q for Q-lane operations, processing 24 bytes → 32 bytes per encode iteration and 32 bytes → 24 bytes per decode iteration. Falls back to LSX for remaining tail bytes.
  • ARM64: Direct VTBX opcode usage
    Switched to the VTBX opcode directly, eliminating unnecessary intermediate instructions.
  • PowerPC64x: SIMD optimizations
    Refined and debugged the PPC64x assembly paths for better performance and correctness.
  • s390x: SIMD optimizations
    Optimized the s390x vector implementation for improved throughput.

CI / Tooling

  • Added Intel SDE workflow for AVX-512 VBMI testing on GitHub Actions, with automated SDE download, ptrace configuration, and SHA256 verification.
  • Added base64 benchmark GitHub Action for automated performance regression tracking.

Dependencies

  • Bumped golang.org/x/sys from v0.41.0v0.46.0.

RISCV64 RVV Support

Choose a tag to compare

@emmansun emmansun released this 04 Mar 02:59

Notable Changes:

  • Added RISCV64 RVV support for both Base64 encode and decode fast paths, with automatic fallback to generic logic when needed.
  • Introduced adaptive vector-length processing to improve portability and throughput across different RVV-capable CPUs.
  • Added RISCV64-specific asm tests and generic-vs-RVV benchmarks for correctness and performance validation.
  • Added a new riscv64-qemu GitHub Actions workflow and updated README/README-CN CI badges and architecture lists.
  • CI now covers RISCV64 QEMU testing end-to-end, and the new RVV path is verified passing.

v0.8.0

Choose a tag to compare

@emmansun emmansun released this 13 Nov 00:58
b758a3b

Notable Changes

  • Loong64 LSX optimization support.

Since v0.8.0+, the minimum required version of Go has been changed to v1.25+. If you are unable to upgrade your Go version, please continue using the older version.

v0.7.0

Choose a tag to compare

@emmansun emmansun released this 11 Mar 02:27
5e4aec8

Notable Changes:

  • upgrade go to at least 1.23.0

By now Go 1.24.0 has been released, and Go 1.22 is no longer supported
per the Go Release Policy (https://go.dev/doc/devel/release#policy).

v0.6.2

Choose a tag to compare

@emmansun emmansun released this 19 Dec 02:50
4182855

Notable Changes:

  • s390x: reduce one VN call
  • add doc details to DecodeString and AppendDecode
  • Upgrade dependency

v0.6.1

Choose a tag to compare

@emmansun emmansun released this 08 Nov 09:32
f9322d2

Notable Changes:

  • arm64: decode minor optimization #21

v0.6.0

Choose a tag to compare

@emmansun emmansun released this 24 Oct 00:18
05ec2d3

Notable Changes:

  • Supports encoding length in [16,48) with ARM64 NEON instructions #20
  • Supports decoding length in [24,64) with ARM64 NEON instructions #20

v0.5.0

Choose a tag to compare

@emmansun emmansun released this 17 Oct 05:40
57c73e8

Notable Changes:

  • s390x optimization #19

v0.4.0

Choose a tag to compare

@emmansun emmansun released this 16 Oct 02:14
19f3729

Notable Changes:

  • ppc64x optimization #18

v0.3.2

Choose a tag to compare

@emmansun emmansun released this 05 Aug 06:46
db92925

Notable Changes:

  • sync golang SDK.
  • upgrade dependency.