On aarch64 JFJochBitUnshuffleBlock went through bshuf_untrans_bit_elem_NEON, which mallocs and frees a block-sized temporary for every block, while the caller (JFJochDecompressHperfPtr) already owns an unused scratch buffer of exactly that size. Call the two NEON stages it wraps (bshuf_trans_byte_bitrow_NEON, bshuf_shuffle_bit_eightelem_NEON) directly with that scratch. Same code, same output; x86 is untouched. Checked byte-identical under qemu-aarch64 against the classic entry point, hperf and the x86 decoders: element sizes 1/2/3/4/8, every block length 8..1040 elements plus 1536..16384, seven data patterns, and real EIGER2/PILATUS4 bslz4 chunks. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D1G8gJVAy6gp1K5Dz3NE5C