mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
math/big: add more complete tests and benchmarks of assembly
Also fix a few real but currently harmless bugs from CL 664895. There were a few places that were still wrong if z != x or if a != 0. Change-Id: Id8971e2505523bc4708780c82bf998a546f4f081 Reviewed-on: https://go-review.googlesource.com/c/go/+/664897 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Alan Donovan <adonovan@google.com>
This commit is contained in:
parent
930cf59ba8
commit
b44b360dd4
@ -430,7 +430,7 @@ adx:
|
||||
MOVQ y+48(FP), R8
|
||||
MOVQ m+72(FP), DX
|
||||
MOVQ $0, BX // i = 0
|
||||
MOVQ $0, CX // carry
|
||||
MOVQ a+80(FP), CX // carry
|
||||
CMPQ R11, $8
|
||||
JAE adx_loop_header
|
||||
CMPQ BX, R11
|
||||
@ -446,7 +446,7 @@ adx_loop:
|
||||
MULXQ (R8), SI, DI
|
||||
ADCXQ CX,SI
|
||||
ADOXQ (R10), SI
|
||||
MOVQ SI,(R10)
|
||||
MOVQ SI,(R14)
|
||||
|
||||
MULXQ 8(R8), AX, CX
|
||||
ADCXQ DI, AX
|
||||
@ -505,7 +505,8 @@ adx_short:
|
||||
MULXQ (R8)(BX*8), SI, DI
|
||||
ADDQ CX, SI
|
||||
ADCQ $0, DI
|
||||
ADDQ SI, (R10)(BX*8)
|
||||
ADDQ (R10)(BX*8), SI
|
||||
MOVQ SI, (R14)(BX*8)
|
||||
ADCQ $0, DI
|
||||
MOVQ DI, CX
|
||||
ADDQ $1, BX // i++
|
||||
|
@ -6,27 +6,10 @@
|
||||
|
||||
package big
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
import "testing"
|
||||
|
||||
// Tests whether the non vector routines are working, even when the tests are run on a
|
||||
// vector-capable machine
|
||||
|
||||
func TestFunVVnovec(t *testing.T) {
|
||||
if hasVX {
|
||||
for _, a := range sumVV {
|
||||
arg := a
|
||||
testFunVV(t, "addVV_novec", addVV_novec, arg)
|
||||
|
||||
arg = argVV{a.z, a.y, a.x, a.c}
|
||||
testFunVV(t, "addVV_novec symmetric", addVV_novec, arg)
|
||||
|
||||
arg = argVV{a.x, a.z, a.y, a.c}
|
||||
testFunVV(t, "subVV_novec", subVV_novec, arg)
|
||||
|
||||
arg = argVV{a.y, a.z, a.x, a.c}
|
||||
testFunVV(t, "subVV_novec symmetric", subVV_novec, arg)
|
||||
}
|
||||
}
|
||||
func TestNoVec(t *testing.T) {
|
||||
// Make sure non-vector versions match vector versions.
|
||||
t.Run("AddVV", func(t *testing.T) { testVV(t, "addVV_novec", addVV_novec, addVV) })
|
||||
t.Run("SubVV", func(t *testing.T) { testVV(t, "subVV_novec", subVV_novec, subVV) })
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -466,25 +466,25 @@ func TestShiftRight(t *testing.T) {
|
||||
func BenchmarkZeroShifts(b *testing.B) {
|
||||
x := rndNat(800)
|
||||
|
||||
b.Run("Shl", func(b *testing.B) {
|
||||
b.Run("Lsh", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
var z nat
|
||||
z.lsh(x, 0)
|
||||
}
|
||||
})
|
||||
b.Run("ShlSame", func(b *testing.B) {
|
||||
b.Run("LshSame", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
x.lsh(x, 0)
|
||||
}
|
||||
})
|
||||
|
||||
b.Run("Shr", func(b *testing.B) {
|
||||
b.Run("Rsh", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
var z nat
|
||||
z.rsh(x, 0)
|
||||
}
|
||||
})
|
||||
b.Run("ShrSame", func(b *testing.B) {
|
||||
b.Run("RshSame", func(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
x.rsh(x, 0)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user