57 lines
1.3 KiB
ArmAsm
57 lines
1.3 KiB
ArmAsm
// 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
|
|
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
|