diff --git a/cgo/clapack/clapack.go b/cgo/clapack/clapack.go index fb13700..bf5a81e 100644 --- a/cgo/clapack/clapack.go +++ b/cgo/clapack/clapack.go @@ -2917,6 +2917,8 @@ func Slacpy(ul blas.Uplo, m int, n int, a []float32, lda int, b []float32, ldb i ul = 'U' case blas.Lower: ul = 'L' + case blas.All: + ul = 'A' default: panic("lapack: illegal triangle") } @@ -2930,6 +2932,8 @@ func Dlacpy(ul blas.Uplo, m int, n int, a []float64, lda int, b []float64, ldb i ul = 'U' case blas.Lower: ul = 'L' + case blas.All: + ul = 'A' default: panic("lapack: illegal triangle") } @@ -2943,6 +2947,8 @@ func Clacpy(ul blas.Uplo, m int, n int, a []complex64, lda int, b []complex64, l ul = 'U' case blas.Lower: ul = 'L' + case blas.All: + ul = 'A' default: panic("lapack: illegal triangle") } @@ -2956,6 +2962,8 @@ func Zlacpy(ul blas.Uplo, m int, n int, a []complex128, lda int, b []complex128, ul = 'U' case blas.Lower: ul = 'L' + case blas.All: + ul = 'A' default: panic("lapack: illegal triangle") } diff --git a/cgo/clapack/genLapack.pl b/cgo/clapack/genLapack.pl index 720cb4f..2548d6c 100644 --- a/cgo/clapack/genLapack.pl +++ b/cgo/clapack/genLapack.pl @@ -124,6 +124,12 @@ package clapack "double_return" => "float64" ); +# allUplo is a list of routines that allow 'A' for their uplo argument. +# The list keys are truncated by one character to cover all four numeric types. +our %allUplo = ( + "lacpy" => undef +); + foreach my $line (@lines) { process($line); } @@ -225,7 +231,22 @@ sub processParamToGo { }; $var eq "uplo" && do { $var = "ul"; - my $bp = << "EOH"; + my $bp; + if (exists $allUplo{substr($func, 1)}) { + $bp = << "EOH"; +switch $var { +case blas.Upper: +$var = 'U' +case blas.Lower: +$var = 'L' +case blas.All: +$var = 'A' +default: +panic("lapack: illegal triangle") +} +EOH + } else { + $bp = << "EOH"; switch $var { case blas.Upper: $var = 'U' @@ -235,6 +256,7 @@ sub processParamToGo { panic("lapack: illegal triangle") } EOH + } push @boilerplate, $bp; push @processed, $var." blas.Uplo"; next; };