That's what I thought. When I checked the assembly of a generic function I 
could see the go.shape part and that's what made me think about 
specialisation.
However, after trying to write that myself it just didn't compile.

I guess, I'll have to do lot of copy pasting ^^

On Wednesday, December 20, 2023 at 2:23:01 AM UTC+8 David Finkel wrote:

> On Thu, Dec 14, 2023 at 10:43 PM Clément Jean <clemen...@gmail.com> wrote:
>
>> Hi,
>>
>> I'm currently learning how to write Go assembly on arm64 and I made the 
>> following functions:
>>
>> 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 Uint8x16 [16]uint8
>> 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?
>>
>>
> Unfortunately, I think a suffix is the best you can do without jumping 
> through some serious (and ugly) hoops.
> The generics implementation opted for a "stenciling" approach, (and 
> doesn't support specializations) so although the symbols do encode the GC 
> shape a bit.
> Here's the design doc for GC Shape Stenciling
>
> https://go.googlesource.com/proposal/+/refs/heads/master/design/generics-implementation-gcshape.md
>   
>  
>
>> Btw any feedback on the assembly is welcome, I'm new to it.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/3224bd47-2747-4e1d-bbc5-4a5c4a300f85n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/3224bd47-2747-4e1d-bbc5-4a5c4a300f85n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/426161bd-fb19-43ef-bd2d-051f3acafdf7n%40googlegroups.com.

Reply via email to