type SliceHeader struct {
Data uintptr
Len int
Cap int
}type SliceHeader struct {
Data uintptr
Len int
Cap int
}
MOVD data+0(FP), R0
MOVD data+8(FP), R1#include "textflag.h"
// func vectorAdditionV1(first, second, dst []uint8)
TEXT ·vectorAdditionV1(SB), NOSPLIT, $0
LDP first_base+0(FP), (R0, R1)
LDP second_base+24(FP), (R2, R3)
LDP dst_base+48(FP), (R4, R5)
MOVD $0, R7
loop:
CMP R5, R7
BGE done// 16-bit alignment for example
func Contains(s []uint8, target uint8) bool {
for _, e := range s {
if e == target {
return true
}
}
return false
}// 16-bit alignment to simplify
func ContainsSIMD(s []uint8, target uint8) bool {
for i := 0; i < len(s); i += 16 {
if compare(
s[i:i+16],
Duplicate(target, 16),
) != 0 {
return true
}
}
return false
}
func SliceContainsV0(s []uint8, target uint8) bool {
return slices.Contains(s, target)
}
func SliceContainsV1(s []uint8, target uint8) bool//func SliceContainsV1(s []uint8, target uint8) bool
TEXT ·SliceContainsV1(SB), NOSPLIT, $0
LDP slice_base+0(FP), (R0, R1)
MOVB target+24(FP), R2
VDUP R2, V1.B16
loop:
CBZ R1, no
VLD1.P 16(R0), [V2.B16]
VCMEQ V1.B16, V2.B16, V3.B16
VADDV V3.B16, V2
VMOV V2.H[0], R4