klauspost / reedsolomon

Reed-Solomon Erasure Coding in Go
MIT License
1.88k stars 248 forks source link

Loading argument twice off the stack? #278

Closed fwessels closed 6 months ago

fwessels commented 6 months ago

The avo generated code seems to be loading one argument twice:

// func mulAvxTwo_1x1_64(matrix []byte, in [][]byte, out [][]byte, start int, n int)
// Requires: AVX, AVX2, SSE2
TEXT ·mulAvxTwo_1x1_64(SB), $0-88
    // Loading all tables to registers
    // Destination kept in GP registers
    // Full registers estimated 10 YMM used
    MOVQ    n+80(FP), AX
    MOVQ    matrix_base+0(FP), CX
    SHRQ    $0x06, AX
    TESTQ   AX, AX
    JZ      mulAvxTwo_1x1_64_end
    VMOVDQU (CX), Y0
    VMOVDQU 32(CX), Y1
    MOVQ    in_base+24(FP), CX
    MOVQ    (CX), CX
    MOVQ    out_base+48(FP), DX
    MOVQ    out_base+48(FP), DX    // <-----
    MOVQ    (DX), DX
    MOVQ    start+72(FP), BX