// Copyright 2010 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. //go:build !math_big_pure_go //go:generate go test ./internal/asmgen -generate package big import _ "unsafe" // for linkname // implemented in arith_$GOARCH.s // addVV should be an internal detail, // but widely used packages access it using linkname. // Notable members of the hall of shame include: // - github.com/remyoudompheng/bigfft // // Do not remove or change the type signature. // See go.dev/issue/67401. // //go:linkname addVV //go:noescape func addVV(z, x, y []Word) (c Word) // subVV should be an internal detail, // but widely used packages access it using linkname. // Notable members of the hall of shame include: // - github.com/remyoudompheng/bigfft // // Do not remove or change the type signature. // See go.dev/issue/67401. // //go:linkname subVV //go:noescape func subVV(z, x, y []Word) (c Word) // shlVU should be an internal detail (and a stale one at that), // but widely used packages access it using linkname. // Notable members of the hall of shame include: // - github.com/remyoudompheng/bigfft // // Do not remove or change the type signature. // See go.dev/issue/67401. // //go:linkname shlVU func shlVU(z, x []Word, s uint) (c Word) { if s == 0 { copy(z, x) return 0 } return lshVU(z, x, s) } // lshVU sets z = x<>s, returning the low bits c. 1 ≤ s ≤ _B-1. // //go:noescape func rshVU(z, x []Word, s uint) (c Word) // mulAddVWW should be an internal detail, // but widely used packages access it using linkname. // Notable members of the hall of shame include: // - github.com/remyoudompheng/bigfft // // Do not remove or change the type signature. // See go.dev/issue/67401. // //go:linkname mulAddVWW //go:noescape func mulAddVWW(z, x []Word, m, a Word) (c Word) // addMulVVW should be an internal detail (and a stale one at that), // but widely used packages access it using linkname. // Notable members of the hall of shame include: // - github.com/remyoudompheng/bigfft // // Do not remove or change the type signature. // See go.dev/issue/67401. // //go:linkname addMulVVW func addMulVVW(z, x []Word, y Word) (c Word) { return addMulVVWW(z, z, x, y, 0) } // addMulVVWW sets z = x+y*m+a. // //go:noescape func addMulVVWW(z, x, y []Word, m, a Word) (c Word)