Make generated complex drop-ins

Again this is to allow simpler code generation of other BLAS routines.
This commit is contained in:
kortschak
2015-02-09 21:34:03 +10:30
parent b5fa43ce0f
commit 5b84ddfb9d
10 changed files with 208 additions and 0 deletions

22
asm/caxpy.go Normal file
View File

@@ -0,0 +1,22 @@
// Generated code do not edit. Run `go generate`.
// Copyright ©2015 The gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package asm
// The extra z parameter is needed because of floats.AddScaledTo
func CaxpyUnitary(alpha complex64, x, y, z []complex64) {
for i, v := range x {
z[i] = alpha*v + y[i]
}
}
func CaxpyInc(alpha complex64, x, y []complex64, n, incX, incY, ix, iy uintptr) {
for i := 0; i < int(n); i++ {
y[iy] += alpha * x[ix]
ix += incX
iy += incY
}
}

23
asm/cdotc.go Normal file
View File

@@ -0,0 +1,23 @@
// Generated code do not edit. Run `go generate`.
// Copyright ©2015 The gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package asm
func CdotcUnitary(x, y []complex64) (sum complex64) {
for i, v := range x {
sum += y[i] * conj(v)
}
return
}
func CdotcInc(x, y []complex64, n, incX, incY, ix, iy uintptr) (sum complex64) {
for i := 0; i < int(n); i++ {
sum += y[iy] * conj(x[ix])
ix += incX
iy += incY
}
return
}

23
asm/cdotu.go Normal file
View File

@@ -0,0 +1,23 @@
// Generated code do not edit. Run `go generate`.
// Copyright ©2015 The gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package asm
func CdotuUnitary(x, y []complex64) (sum complex64) {
for i, v := range x {
sum += y[i] * v
}
return
}
func CdotuInc(x, y []complex64, n, incX, incY, ix, iy uintptr) (sum complex64) {
for i := 0; i < int(n); i++ {
sum += y[iy] * x[ix]
ix += incX
iy += incY
}
return
}

58
asm/complex Executable file
View File

@@ -0,0 +1,58 @@
#!/usr/bin/env bash
# Copyright ©2015 The gonum Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
echo Generating zdotu.go
echo -e '// Generated code do not edit. Run `go generate`.\n' > zdotu.go
cat ddot.go \
| grep -v '//+build' \
| gofmt -r 'float64 -> complex128' \
| sed 's/Ddot/Zdotu/' \
>> zdotu.go
echo Generating zdotc.go
echo -e '// Generated code do not edit. Run `go generate`.\n' > zdotc.go
cat ddot.go \
| grep -v '//+build' \
| gofmt -r 'float64 -> complex128' \
| gofmt -r 'y[i] * v -> y[i] * cmplx.Conj(v)' \
| sed 's/Ddot/Zdotc/' \
| goimports \
>> zdotc.go
echo Generating zaxpy.go
echo -e '// Generated code do not edit. Run `go generate`.\n' > zaxpy.go
cat daxpy.go \
| grep -v '//+build' \
| gofmt -r 'float64 -> complex128' \
| sed 's/Daxpy/Zaxpy/' \
>> zaxpy.go
echo Generating cdotu.go
echo -e '// Generated code do not edit. Run `go generate`.\n' > cdotu.go
cat ddot.go \
| grep -v '//+build' \
| gofmt -r 'float64 -> complex64' \
| sed 's/Ddot/Cdotu/' \
>> cdotu.go
echo Generating cdotc.go
echo -e '// Generated code do not edit. Run `go generate`.\n' > cdotc.go
cat ddot.go \
| grep -v '//+build' \
| gofmt -r 'float64 -> complex64' \
| gofmt -r 'y[i] * v -> y[i] * conj(v)' \
| sed 's/Ddot/Cdotc/' \
| goimports \
>> cdotc.go
echo Generating caxpy.go
echo -e '// Generated code do not edit. Run `go generate`.\n' > caxpy.go
cat daxpy.go \
| grep -v '//+build' \
| gofmt -r 'float64 -> complex64' \
| sed 's/Daxpy/Caxpy/' \
>> caxpy.go

7
asm/conj.go Normal file
View File

@@ -0,0 +1,7 @@
// Copyright ©2015 The gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package asm
func conj(c complex64) complex64 { return complex(real(c), -imag(c)) }

View File

@@ -3,5 +3,6 @@
// license that can be found in the LICENSE file.
//go:generate ./single_precision
//go:generate ./complex
package asm

View File

@@ -1,5 +1,9 @@
#!/usr/bin/env bash
# Copyright ©2015 The gonum Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
echo Generating dsdot.go
echo -e '// Generated code do not edit. Run `go generate`.\n' > dsdot.go
cat ddot.go \

22
asm/zaxpy.go Normal file
View File

@@ -0,0 +1,22 @@
// Generated code do not edit. Run `go generate`.
// Copyright ©2015 The gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package asm
// The extra z parameter is needed because of floats.AddScaledTo
func ZaxpyUnitary(alpha complex128, x, y, z []complex128) {
for i, v := range x {
z[i] = alpha*v + y[i]
}
}
func ZaxpyInc(alpha complex128, x, y []complex128, n, incX, incY, ix, iy uintptr) {
for i := 0; i < int(n); i++ {
y[iy] += alpha * x[ix]
ix += incX
iy += incY
}
}

25
asm/zdotc.go Normal file
View File

@@ -0,0 +1,25 @@
// Generated code do not edit. Run `go generate`.
// Copyright ©2015 The gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package asm
import "math/cmplx"
func ZdotcUnitary(x, y []complex128) (sum complex128) {
for i, v := range x {
sum += y[i] * cmplx.Conj(v)
}
return
}
func ZdotcInc(x, y []complex128, n, incX, incY, ix, iy uintptr) (sum complex128) {
for i := 0; i < int(n); i++ {
sum += y[iy] * cmplx.Conj(x[ix])
ix += incX
iy += incY
}
return
}

23
asm/zdotu.go Normal file
View File

@@ -0,0 +1,23 @@
// Generated code do not edit. Run `go generate`.
// Copyright ©2015 The gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package asm
func ZdotuUnitary(x, y []complex128) (sum complex128) {
for i, v := range x {
sum += y[i] * v
}
return
}
func ZdotuInc(x, y []complex128, n, incX, incY, ix, iy uintptr) (sum complex128) {
for i := 0; i < int(n); i++ {
sum += y[iy] * x[ix]
ix += incX
iy += incY
}
return
}