]> Cypherpunks repositories - gostls13.git/commitdiff
math/big: enable pure Go (no assembly) build with build tag
authorRobert Griesemer <gri@golang.org>
Fri, 20 Mar 2015 20:02:56 +0000 (13:02 -0700)
committerRobert Griesemer <gri@golang.org>
Fri, 20 Mar 2015 21:58:19 +0000 (21:58 +0000)
To use a pure Go implementation of the low-level arithmetic
functions (when no platform-specific assembly implementations
are available), set the build tag math_big_pure_go.

This will make it easy to vendor the math/big package where no
assembly is available (for instance for use with gc which relies
on 1.4 functionality for now).

Change-Id: I91e17c0fdc568a20ec1512d7c64621241dc60c17
Reviewed-on: https://go-review.googlesource.com/7856
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/math/big/arith_386.s
src/math/big/arith_amd64.s
src/math/big/arith_amd64p32.s
src/math/big/arith_arm.s
src/math/big/arith_arm64.s
src/math/big/arith_decl.go
src/math/big/arith_decl_pure.go [new file with mode: 0644]
src/math/big/arith_ppc64x.s

index eb17bc1459eb737ff107b1677e05f470aa39a88e..7c8ab8feb752b91c5d97665c982d6d600742e790 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build !math_big_pure_go
+
 #include "textflag.h"
 
 // This file provides fast assembly versions for the elementary
index bb06e69b782b3430d8babb403c0d54ad26e6fc8e..d2d5187a485c7fd44151383dd365cd1ef4d82ce1 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build !math_big_pure_go
+
 #include "textflag.h"
 
 // This file provides fast assembly versions for the elementary
index 908dbbdc5856c530dd0ef727c1063e0505c78b4c..8610e908fe7ce5a4ec54e6f8d0b5d94656602a95 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build !math_big_pure_go
+
 #include "textflag.h"
 
 TEXT Â·mulWW(SB),NOSPLIT,$0
index a4c51c2127f07aab622c4bd36fd0db9c97a30125..69590ff39e1a4b584c6e1fb6c2c6d6fb6e08e4aa 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build !math_big_pure_go
+
 #include "textflag.h"
 
 // This file provides fast assembly versions for the elementary
index 4447ec554f7caca2b816b8476d2eff436537401f..6e10e47be3d1d998cf137ec993f643a65c0d9165 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build !math_big_pure_go
+
 #include "textflag.h"
 
 // This file provides fast assembly versions for the elementary
index 068cc8d93888f82385d614b4e5e023b865707b28..1707aa4e209c0f2bac3397fca2f1d1c65e99cba4 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build !math_big_pure_go
+
 package big
 
 // implemented in arith_$GOARCH.s
diff --git a/src/math/big/arith_decl_pure.go b/src/math/big/arith_decl_pure.go
new file mode 100644 (file)
index 0000000..e760a38
--- /dev/null
@@ -0,0 +1,55 @@
+// Copyright 2015 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.
+
+// +build math_big_pure_go
+
+package big
+
+func mulWW(x, y Word) (z1, z0 Word) {
+       return mulWW_g(x, y)
+}
+
+func divWW(x1, x0, y Word) (q, r Word) {
+       return divWW_g(x1, x0, y)
+}
+
+func addVV(z, x, y []Word) (c Word) {
+       return addVV_g(z, x, y)
+}
+
+func subVV(z, x, y []Word) (c Word) {
+       return subVV_g(z, x, y)
+}
+
+func addVW(z, x []Word, y Word) (c Word) {
+       return addVW_g(z, x, y)
+}
+
+func subVW(z, x []Word, y Word) (c Word) {
+       return subVW_g(z, x, y)
+}
+
+func shlVU(z, x []Word, s uint) (c Word) {
+       return shlVU_g(z, x, s)
+}
+
+func shrVU(z, x []Word, s uint) (c Word) {
+       return shrVU_g(z, x, s)
+}
+
+func mulAddVWW(z, x []Word, y, r Word) (c Word) {
+       return mulAddVWW_g(z, x, y, r)
+}
+
+func addMulVVW(z, x []Word, y Word) (c Word) {
+       return addMulVVW_g(z, x, y)
+}
+
+func divWVW(z []Word, xn Word, x []Word, y Word) (r Word) {
+       return divWVW_g(z, xn, x, y)
+}
+
+func bitLen(x Word) (n int) {
+       return bitLen_g(x)
+}
index 0cbd126d83c9518334491b79941dc0537ee23f55..d4d4171f305e2cc9cc577d5a120d7506b77a9533 100644 (file)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build ppc64 ppc64le
+// +build !math_big_pure_go,ppc64 !math_big_pure_go,ppc64le
 
 #include "textflag.h"