// 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