mirror of
https://github.com/status-im/status-go.git
synced 2025-02-08 04:43:52 +00:00
* feat_: LogOnPanic linter * fix_: add missing defer LogOnPanic * chore_: make vendor * fix_: tests, address pr comments * fix_: address pr comments
109 lines
2.1 KiB
ArmAsm
109 lines
2.1 KiB
ArmAsm
// Code generated by command: go run keyset_asm.go -pkg keyset -out ../keyset/keyset_amd64.s -stubs ../keyset/keyset_amd64.go. DO NOT EDIT.
|
|
|
|
//go:build !purego
|
|
// +build !purego
|
|
|
|
#include "textflag.h"
|
|
|
|
// func Lookup(keyset []byte, key []byte) int
|
|
// Requires: AVX
|
|
TEXT ·Lookup(SB), NOSPLIT, $0-56
|
|
MOVQ keyset_base+0(FP), AX
|
|
MOVQ keyset_len+8(FP), CX
|
|
SHRQ $0x04, CX
|
|
MOVQ key_base+24(FP), DX
|
|
MOVQ key_len+32(FP), BX
|
|
MOVQ key_cap+40(FP), SI
|
|
CMPQ BX, $0x10
|
|
JA not_found
|
|
CMPQ SI, $0x10
|
|
JB safe_load
|
|
|
|
load:
|
|
VMOVUPS (DX), X0
|
|
|
|
prepare:
|
|
VPXOR X2, X2, X2
|
|
VPCMPEQB X1, X1, X1
|
|
LEAQ blend_masks<>+16(SB), DX
|
|
SUBQ BX, DX
|
|
VMOVUPS (DX), X3
|
|
VPBLENDVB X3, X0, X2, X0
|
|
XORQ DX, DX
|
|
MOVQ CX, BX
|
|
SHRQ $0x02, BX
|
|
SHLQ $0x02, BX
|
|
|
|
bigloop:
|
|
CMPQ DX, BX
|
|
JE loop
|
|
VPCMPEQB (AX), X0, X8
|
|
VPTEST X1, X8
|
|
JCS done
|
|
VPCMPEQB 16(AX), X0, X9
|
|
VPTEST X1, X9
|
|
JCS found1
|
|
VPCMPEQB 32(AX), X0, X10
|
|
VPTEST X1, X10
|
|
JCS found2
|
|
VPCMPEQB 48(AX), X0, X11
|
|
VPTEST X1, X11
|
|
JCS found3
|
|
ADDQ $0x04, DX
|
|
ADDQ $0x40, AX
|
|
JMP bigloop
|
|
|
|
loop:
|
|
CMPQ DX, CX
|
|
JE done
|
|
VPCMPEQB (AX), X0, X2
|
|
VPTEST X1, X2
|
|
JCS done
|
|
INCQ DX
|
|
ADDQ $0x10, AX
|
|
JMP loop
|
|
JMP done
|
|
|
|
found3:
|
|
INCQ DX
|
|
|
|
found2:
|
|
INCQ DX
|
|
|
|
found1:
|
|
INCQ DX
|
|
|
|
done:
|
|
MOVQ DX, ret+48(FP)
|
|
RET
|
|
|
|
not_found:
|
|
MOVQ CX, ret+48(FP)
|
|
RET
|
|
|
|
safe_load:
|
|
MOVQ DX, SI
|
|
ANDQ $0x00000fff, SI
|
|
CMPQ SI, $0x00000ff0
|
|
JBE load
|
|
MOVQ $0xfffffffffffffff0, SI
|
|
ADDQ BX, SI
|
|
VMOVUPS (DX)(SI*1), X0
|
|
LEAQ shuffle_masks<>+16(SB), DX
|
|
SUBQ BX, DX
|
|
VMOVUPS (DX), X1
|
|
VPSHUFB X1, X0, X0
|
|
JMP prepare
|
|
|
|
DATA blend_masks<>+0(SB)/8, $0xffffffffffffffff
|
|
DATA blend_masks<>+8(SB)/8, $0xffffffffffffffff
|
|
DATA blend_masks<>+16(SB)/8, $0x0000000000000000
|
|
DATA blend_masks<>+24(SB)/8, $0x0000000000000000
|
|
GLOBL blend_masks<>(SB), RODATA|NOPTR, $32
|
|
|
|
DATA shuffle_masks<>+0(SB)/8, $0x0706050403020100
|
|
DATA shuffle_masks<>+8(SB)/8, $0x0f0e0d0c0b0a0908
|
|
DATA shuffle_masks<>+16(SB)/8, $0x0706050403020100
|
|
DATA shuffle_masks<>+24(SB)/8, $0x0f0e0d0c0b0a0908
|
|
GLOBL shuffle_masks<>(SB), RODATA|NOPTR, $32
|