// Copyright (c) 2026 Petr Balvín (https://petrbalvin.org) // SPDX-License-Identifier: BSD-3-Clause #include "textflag.h" // func add(a, b int64) int64 TEXT ·add(SB), NOSPLIT, $0-24 MOVQ a+0(FP), AX ADDQ b+8(FP), AX MOVQ AX, ret+16(FP) RET // func sum(data []int64) int64 // Sums all elements of the slice. TEXT ·sum(SB), NOSPLIT, $0-32 MOVQ data_base+0(FP), SI MOVQ data_len+8(FP), CX XORQ AX, AX TESTQ CX, CX JZ sum_done sum_loop: ADDQ (SI), AX ADDQ $8, SI DECQ CX JNZ sum_loop sum_done: MOVQ AX, ret+24(FP) RET // func wideCopy(dst, src []byte) // Non-overlapping copy of min(len(dst), len(src)) bytes using 32-byte moves. TEXT ·wideCopy(SB), NOSPLIT, $0-48 MOVQ dst_base+0(FP), DI MOVQ dst_len+8(FP), BX MOVQ src_base+24(FP), SI MOVQ src_len+32(FP), R8 CMPQ BX, R8 JLE wc_have_n MOVQ R8, BX wc_have_n: CMPQ BX, $32 JB wc_small VMOVDQU (SI), Y0 VMOVDQU Y0, (DI) VMOVDQU -32(SI)(BX*1), Y0 VMOVDQU Y0,-32(DI)(BX*1) VZEROUPPER RET wc_small: TESTQ BX, BX JZ wc_done wc_byte: MOVB (SI), R8B MOVB R8B, (DI) INCQ SI INCQ DI DECQ BX JNZ wc_byte wc_done: RET