Commit 191a6bfc authored by Robert Griesemer's avatar Robert Griesemer

big: do not modify divisor

Fixes #1907.

R=rsc
CC=golang-dev
https://golang.org/cl/4527096
parent 4d155777
...@@ -551,7 +551,12 @@ func (z nat) divLarge(u, uIn, v nat) (q, r nat) { ...@@ -551,7 +551,12 @@ func (z nat) divLarge(u, uIn, v nat) (q, r nat) {
// D1. // D1.
shift := Word(leadingZeros(v[n-1])) shift := Word(leadingZeros(v[n-1]))
shlVW(v, v, shift) if shift > 0 {
// do not modify v, it may be used by another goroutine simultaneously
v1 := make(nat, n)
shlVW(v1, v, shift)
v = v1
}
u[len(uIn)] = shlVW(u[0:len(uIn)], uIn, shift) u[len(uIn)] = shlVW(u[0:len(uIn)], uIn, shift)
// D2. // D2.
...@@ -592,7 +597,6 @@ func (z nat) divLarge(u, uIn, v nat) (q, r nat) { ...@@ -592,7 +597,6 @@ func (z nat) divLarge(u, uIn, v nat) (q, r nat) {
q = q.norm() q = q.norm()
shrVW(u, u, shift) shrVW(u, u, shift)
shrVW(v, v, shift)
r = u.norm() r = u.norm()
return q, r return q, r
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment