2023-06-01 10:39:12 +08:00
|
|
|
// Copyright 2009 The Go Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
//go:build !purego
|
|
|
|
|
|
|
|
#include "textflag.h"
|
|
|
|
|
2023-06-07 09:43:20 +08:00
|
|
|
// func addMulVVW256(z, x *uint, y uint) (c uint)
|
|
|
|
TEXT ·addMulVVW256(SB), $0-16
|
|
|
|
MOVL $8, BX
|
2023-08-16 14:34:31 +08:00
|
|
|
JMP addMulVVWy(SB)
|
2023-06-07 09:43:20 +08:00
|
|
|
|
2023-06-01 10:39:12 +08:00
|
|
|
// func addMulVVW1024(z, x *uint, y uint) (c uint)
|
|
|
|
TEXT ·addMulVVW1024(SB), $0-16
|
|
|
|
MOVL $32, BX
|
2023-08-16 14:34:31 +08:00
|
|
|
JMP addMulVVWy(SB)
|
2023-06-01 10:39:12 +08:00
|
|
|
|
|
|
|
// func addMulVVW1536(z, x *uint, y uint) (c uint)
|
|
|
|
TEXT ·addMulVVW1536(SB), $0-16
|
|
|
|
MOVL $48, BX
|
2023-08-16 14:34:31 +08:00
|
|
|
JMP addMulVVWy(SB)
|
2023-06-01 10:39:12 +08:00
|
|
|
|
|
|
|
// func addMulVVW2048(z, x *uint, y uint) (c uint)
|
|
|
|
TEXT ·addMulVVW2048(SB), $0-16
|
|
|
|
MOVL $64, BX
|
2023-08-16 14:34:31 +08:00
|
|
|
JMP addMulVVWy(SB)
|
2023-06-01 10:39:12 +08:00
|
|
|
|
2023-08-16 14:34:31 +08:00
|
|
|
TEXT addMulVVWy(SB), NOFRAME|NOSPLIT, $0
|
2023-06-01 10:39:12 +08:00
|
|
|
MOVL z+0(FP), DI
|
|
|
|
MOVL x+4(FP), SI
|
|
|
|
MOVL y+8(FP), BP
|
|
|
|
LEAL (DI)(BX*4), DI
|
|
|
|
LEAL (SI)(BX*4), SI
|
|
|
|
NEGL BX // i = -n
|
|
|
|
MOVL $0, CX // c = 0
|
|
|
|
JMP E6
|
|
|
|
|
|
|
|
L6: MOVL (SI)(BX*4), AX
|
|
|
|
MULL BP
|
|
|
|
ADDL CX, AX
|
|
|
|
ADCL $0, DX
|
|
|
|
ADDL AX, (DI)(BX*4)
|
|
|
|
ADCL $0, DX
|
|
|
|
MOVL DX, CX
|
|
|
|
ADDL $1, BX // i++
|
|
|
|
|
|
|
|
E6: CMPL BX, $0 // i < 0
|
|
|
|
JL L6
|
|
|
|
|
|
|
|
MOVL CX, c+12(FP)
|
|
|
|
RET
|