TEXT ·AddVector16(SB),NOSPLIT,$0-48
MOVD a+0(FP), R0
MOVD a+8(FP), R1
MOVD a+16(FP), R2
MOVD a+24(FP), R3
VMOV R0, V0.D[0]
VMOV R1, V0.D[1]
VMOV R2, V1.D[0]
VMOV R3, V1.D[1]
VADD V1.B16, V0.B16, V0.B16
VMOV V0.D[0], R0
VMOV V0.D[1], R1
MOVD R0, ret+32(FP)
MOVD R1, ret+40(FP)
RET
TEXT ·AddVector32(SB),NOSPLIT,$0-96
MOVD a+0(FP), R0
MOVD a+8(FP), R1
MOVD a+16(FP), R2
MOVD a+24(FP), R3
MOVD a+32(FP), R4
MOVD a+40(FP), R5
MOVD a+48(FP), R6
MOVD a+56(FP), R7
VMOV R0, V0.D[0]
VMOV R1, V0.D[1]
VMOV R2, V1.D[0]
VMOV R3, V1.D[1]
VMOV R4, V2.D[0]
VMOV R5, V2.D[1]
VMOV R6, V3.D[0]
VMOV R7, V3.D[1]
VADD V2.B16, V0.B16, V0.B16
VADD V3.B16, V1.B16, V1.B16
VMOV V0.D[0], R0
VMOV V0.D[1], R1
VMOV V1.D[0], R2
VMOV V1.D[1], R3
MOVD R0, ret+64(FP)
MOVD R1, ret+72(FP)
MOVD R2, ret+80(FP)
MOVD R3, ret+88(FP)
RET
While these work, I'm forced to add the 16 and 32 suffixes. Is there any way to have only one function name and link the assembly to something like:
type Uint8x32 [32]uint8
//go:noescape
func AddVector[T Uint8x16 | Uint8x32](a, b T) T
If there is let me know, otherwise is there some other alternatives?
Btw any feedback on the assembly is welcome, I'm new to it.