Files

59 lines
1.4 KiB
ArmAsm
Raw Permalink Normal View History

// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (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
MOVQ residual_base+16(FP), DI
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