mirror of
https://github.com/golang/go.git
synced 2025-05-05 23:53:05 +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 y+48(FP), R8
|
||||||
MOVQ m+72(FP), DX
|
MOVQ m+72(FP), DX
|
||||||
MOVQ $0, BX // i = 0
|
MOVQ $0, BX // i = 0
|
||||||
MOVQ $0, CX // carry
|
MOVQ a+80(FP), CX // carry
|
||||||
CMPQ R11, $8
|
CMPQ R11, $8
|
||||||
JAE adx_loop_header
|
JAE adx_loop_header
|
||||||
CMPQ BX, R11
|
CMPQ BX, R11
|
||||||
@ -446,7 +446,7 @@ adx_loop:
|
|||||||
MULXQ (R8), SI, DI
|
MULXQ (R8), SI, DI
|
||||||
ADCXQ CX,SI
|
ADCXQ CX,SI
|
||||||
ADOXQ (R10), SI
|
ADOXQ (R10), SI
|
||||||
MOVQ SI,(R10)
|
MOVQ SI,(R14)
|
||||||
|
|
||||||
MULXQ 8(R8), AX, CX
|
MULXQ 8(R8), AX, CX
|
||||||
ADCXQ DI, AX
|
ADCXQ DI, AX
|
||||||
@ -505,7 +505,8 @@ adx_short:
|
|||||||
MULXQ (R8)(BX*8), SI, DI
|
MULXQ (R8)(BX*8), SI, DI
|
||||||
ADDQ CX, SI
|
ADDQ CX, SI
|
||||||
ADCQ $0, DI
|
ADCQ $0, DI
|
||||||
ADDQ SI, (R10)(BX*8)
|
ADDQ (R10)(BX*8), SI
|
||||||
|
MOVQ SI, (R14)(BX*8)
|
||||||
ADCQ $0, DI
|
ADCQ $0, DI
|
||||||
MOVQ DI, CX
|
MOVQ DI, CX
|
||||||
ADDQ $1, BX // i++
|
ADDQ $1, BX // i++
|
||||||
|
@ -6,27 +6,10 @@
|
|||||||
|
|
||||||
package big
|
package big
|
||||||
|
|
||||||
import (
|
import "testing"
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Tests whether the non vector routines are working, even when the tests are run on a
|
func TestNoVec(t *testing.T) {
|
||||||
// vector-capable machine
|
// Make sure non-vector versions match vector versions.
|
||||||
|
t.Run("AddVV", func(t *testing.T) { testVV(t, "addVV_novec", addVV_novec, addVV) })
|
||||||
func TestFunVVnovec(t *testing.T) {
|
t.Run("SubVV", func(t *testing.T) { testVV(t, "subVV_novec", subVV_novec, subVV) })
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -466,25 +466,25 @@ func TestShiftRight(t *testing.T) {
|
|||||||
func BenchmarkZeroShifts(b *testing.B) {
|
func BenchmarkZeroShifts(b *testing.B) {
|
||||||
x := rndNat(800)
|
x := rndNat(800)
|
||||||
|
|
||||||
b.Run("Shl", func(b *testing.B) {
|
b.Run("Lsh", func(b *testing.B) {
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
var z nat
|
var z nat
|
||||||
z.lsh(x, 0)
|
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++ {
|
for i := 0; i < b.N; i++ {
|
||||||
x.lsh(x, 0)
|
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++ {
|
for i := 0; i < b.N; i++ {
|
||||||
var z nat
|
var z nat
|
||||||
z.rsh(x, 0)
|
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++ {
|
for i := 0; i < b.N; i++ {
|
||||||
x.rsh(x, 0)
|
x.rsh(x, 0)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user