From: Robert Griesemer Date: Fri, 20 Mar 2015 20:02:56 +0000 (-0700) Subject: math/big: enable pure Go (no assembly) build with build tag X-Git-Tag: go1.5beta1~1484 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=98182c86b1e5536ec617793e9127a76197e88ba0;p=gostls13.git math/big: enable pure Go (no assembly) build with build tag 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 --- diff --git a/src/math/big/arith_386.s b/src/math/big/arith_386.s index eb17bc1459..7c8ab8feb7 100644 --- a/src/math/big/arith_386.s +++ b/src/math/big/arith_386.s @@ -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 diff --git a/src/math/big/arith_amd64.s b/src/math/big/arith_amd64.s index bb06e69b78..d2d5187a48 100644 --- a/src/math/big/arith_amd64.s +++ b/src/math/big/arith_amd64.s @@ -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 diff --git a/src/math/big/arith_amd64p32.s b/src/math/big/arith_amd64p32.s index 908dbbdc58..8610e908fe 100644 --- a/src/math/big/arith_amd64p32.s +++ b/src/math/big/arith_amd64p32.s @@ -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 diff --git a/src/math/big/arith_arm.s b/src/math/big/arith_arm.s index a4c51c2127..69590ff39e 100644 --- a/src/math/big/arith_arm.s +++ b/src/math/big/arith_arm.s @@ -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 diff --git a/src/math/big/arith_arm64.s b/src/math/big/arith_arm64.s index 4447ec554f..6e10e47be3 100644 --- a/src/math/big/arith_arm64.s +++ b/src/math/big/arith_arm64.s @@ -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 diff --git a/src/math/big/arith_decl.go b/src/math/big/arith_decl.go index 068cc8d938..1707aa4e20 100644 --- a/src/math/big/arith_decl.go +++ b/src/math/big/arith_decl.go @@ -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 index 0000000000..e760a3816b --- /dev/null +++ b/src/math/big/arith_decl_pure.go @@ -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) +} diff --git a/src/math/big/arith_ppc64x.s b/src/math/big/arith_ppc64x.s index 0cbd126d83..d4d4171f30 100644 --- a/src/math/big/arith_ppc64x.s +++ b/src/math/big/arith_ppc64x.s @@ -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"