// Copyright (c) 2026 Petr Balvín (https://petrbalvin.org) // SPDX-License-Identifier: BSD-3-Clause #include "textflag.h" // Index vector for the order-2 ramp. GLOBL ·idx16(SB), RODATA, $64 DATA ·idx16+0(SB)/4, $1 DATA ·idx16+4(SB)/4, $2 // A file-local (static) constant table. GLOBL mask24<>(SB), RODATA, $16 DATA mask24<>+0(SB)/4, $0x80020100 DATA mask24<>+4(SB)/4, $0x80050403 // func analyzeO1RangeAVX2(swin []int32, dstP []uint32, hist *[32]uint16) (partSum uint64, overflow bool) TEXT ·analyzeO1RangeAVX2(SB), NOSPLIT, $0-65 MOVQ swin_base+0(FP), SI MOVQ dstP_base+24(FP), DI MOVQ dstP_len+32(FP), BX MOVQ hist+48(FP), R13 VPCMPEQD Y0, Y0, Y0 VPSLLD $31, Y0, Y0 LEAQ (SI)(BX*4), R9 MOVQ BX, R10 ANDQ $-8, R10 vec1: CMPQ SI, R10 JGE vec1done VMOVDQU (SI), Y1 VMOVDQU 4(SI), Y2 VPSUBD Y1, Y2, Y3 ADDQ $32, SI JMP vec1 vec1done: MOVQ AX, partSum+56(FP) MOVB AL, overflow+64(FP) VZEROUPPER RET // func decodeFixedO1AVX512(samples []int32, residual []int32) TEXT ·decodeFixedO1AVX512(SB), NOSPLIT, $0-48 MOVQ samples_base+0(FP), SI VPBROADCASTD AX, Z15 VMOVDQU32 (DI)(AX*1), Z0 VALIGND $15, Z9, Z0, Z1 VFMADD231PD Z14, Z12, Z10 VPCMPEQD Z0, Z3, K1 KTESTW K1, K1 VPSRAQ X31, Z8, Z8 VMOVDQU32 Z0, 4(SI)(AX*1) RET