Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

[![Docs](https://img.shields.io/badge/docs-mkdocs--material-013243)](https://go-ndarray.github.io/docs/)
[![License](https://img.shields.io/badge/license-BSD--3--Clause-blue)](LICENSE)
[![Go](https://img.shields.io/badge/go-1.26.6%2B-00ADD8)](https://go.dev/dl/)
[![Go](https://img.shields.io/badge/go-1.27.1%2B-00ADD8)](https://go.dev/dl/)
[![Status](https://img.shields.io/badge/status-numpy%20parity%20(float64)-9a6700)](docs/plan-ndarray.md)

**A pure-Go (CGO=0) NumPy-style N-dimensional array library.** Row-major
Expand Down
16 changes: 16 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,22 @@ standard library's known vulnerabilities; `govulncheck ./...` reports none.

## Audit log

**2026-10-06 (v0.5.1).**

- The Go floor is 1.27.1 since v0.5.0. `govulncheck` reports no vulnerability
for the library or for its generator module.
- go1.27.0 and go1.27.1 miscompile one loong64 pattern
([golang/go#81000](https://github.com/golang/go/issues/81000): a byte-sized
inlined result spilled with an 8-byte store, clobbering the stack slot next
to it), fixed in 1.27.2. On a real Loongson 3C5000L with LASX (cfarm401),
built with go1.27.1, the whole suite passes, including the fence tests, and
`FuzzOps` ran 52.7 million executions natively without a divergence from its
oracle. That is evidence that this library does not hit the pattern, not
proof. Raise the floor to 1.27.2 once it is released.
- go-asmgen v0.16.0 regenerates the ppc64le and loong64 kernels with
different comments only. The instructions, and the `WORD` encodings Go's
assembler still lacks, are unchanged line for line.

**2026-10-04 (v0.4.0).**

- `FuzzOps` ran 47 million executions without a divergence. A first version
Expand Down
2 changes: 1 addition & 1 deletion internal/kernels/asmgen/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ module github.com/go-ndarray/ndarray/internal/kernels/asmgen

go 1.27.1

require github.com/go-asmgen/asmgen v0.14.0
require github.com/go-asmgen/asmgen v0.16.0
4 changes: 2 additions & 2 deletions internal/kernels/asmgen/go.sum
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
github.com/go-asmgen/asmgen v0.14.0 h1:3f1L0X0RK1Vf1J9nb0Pei87vGRT5yhfNLNlecZ/SNFc=
github.com/go-asmgen/asmgen v0.14.0/go.mod h1:Hj29fXioLRe9oSnQ18SuDBiOcCbu8Qwxba6/5TMr4+Y=
github.com/go-asmgen/asmgen v0.16.0 h1:fjrFWDDNxdSJvaTcN7uTIlawvrXe2PECdtScIZqX5bg=
github.com/go-asmgen/asmgen v0.16.0/go.mod h1:FHWXZt1MrejOwSShl4tPYjI2GPEfNAJuXJUX6Z+ruyQ=
40 changes: 20 additions & 20 deletions internal/kernels/sum_loong64.s
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,10 @@ dloop:
XVMOVQ 64(R6), X10
XVMOVQ 96(R4), X7
XVMOVQ 96(R6), X11
WORD $0x0a202080 // xvfmadd.d $xr0, $xr4, $xr8, $xr0
WORD $0x0a20a4a1 // xvfmadd.d $xr1, $xr5, $xr9, $xr1
WORD $0x0a2128c2 // xvfmadd.d $xr2, $xr6, $xr10, $xr2
WORD $0x0a21ace3 // xvfmadd.d $xr3, $xr7, $xr11, $xr3
WORD $0x0a202080 // XVFMADDD X0, X8, X4, X0
WORD $0x0a20a4a1 // XVFMADDD X1, X9, X5, X1
WORD $0x0a2128c2 // XVFMADDD X2, X10, X6, X2
WORD $0x0a21ace3 // XVFMADDD X3, X11, X7, X3
ADDV $128, R4
ADDV $128, R6
ADDV $-16, R5
Expand Down Expand Up @@ -348,22 +348,22 @@ gloop:
XVMOVQ 40(R6), X23.V4
XVMOVQ 48(R6), X24.V4
XVMOVQ 56(R6), X25.V4
WORD $0x0a204240 // xvfmadd.d $xr0, $xr18, $xr16, $xr0
WORD $0x0a20c641 // xvfmadd.d $xr1, $xr18, $xr17, $xr1
WORD $0x0a214262 // xvfmadd.d $xr2, $xr19, $xr16, $xr2
WORD $0x0a21c663 // xvfmadd.d $xr3, $xr19, $xr17, $xr3
WORD $0x0a224284 // xvfmadd.d $xr4, $xr20, $xr16, $xr4
WORD $0x0a22c685 // xvfmadd.d $xr5, $xr20, $xr17, $xr5
WORD $0x0a2342a6 // xvfmadd.d $xr6, $xr21, $xr16, $xr6
WORD $0x0a23c6a7 // xvfmadd.d $xr7, $xr21, $xr17, $xr7
WORD $0x0a2442c8 // xvfmadd.d $xr8, $xr22, $xr16, $xr8
WORD $0x0a24c6c9 // xvfmadd.d $xr9, $xr22, $xr17, $xr9
WORD $0x0a2542ea // xvfmadd.d $xr10, $xr23, $xr16, $xr10
WORD $0x0a25c6eb // xvfmadd.d $xr11, $xr23, $xr17, $xr11
WORD $0x0a26430c // xvfmadd.d $xr12, $xr24, $xr16, $xr12
WORD $0x0a26c70d // xvfmadd.d $xr13, $xr24, $xr17, $xr13
WORD $0x0a27432e // xvfmadd.d $xr14, $xr25, $xr16, $xr14
WORD $0x0a27c72f // xvfmadd.d $xr15, $xr25, $xr17, $xr15
WORD $0x0a204240 // XVFMADDD X0, X16, X18, X0
WORD $0x0a20c641 // XVFMADDD X1, X17, X18, X1
WORD $0x0a214262 // XVFMADDD X2, X16, X19, X2
WORD $0x0a21c663 // XVFMADDD X3, X17, X19, X3
WORD $0x0a224284 // XVFMADDD X4, X16, X20, X4
WORD $0x0a22c685 // XVFMADDD X5, X17, X20, X5
WORD $0x0a2342a6 // XVFMADDD X6, X16, X21, X6
WORD $0x0a23c6a7 // XVFMADDD X7, X17, X21, X7
WORD $0x0a2442c8 // XVFMADDD X8, X16, X22, X8
WORD $0x0a24c6c9 // XVFMADDD X9, X17, X22, X9
WORD $0x0a2542ea // XVFMADDD X10, X16, X23, X10
WORD $0x0a25c6eb // XVFMADDD X11, X17, X23, X11
WORD $0x0a26430c // XVFMADDD X12, X16, X24, X12
WORD $0x0a26c70d // XVFMADDD X13, X17, X24, X13
WORD $0x0a27432e // XVFMADDD X14, X16, X25, X14
WORD $0x0a27c72f // XVFMADDD X15, X17, X25, X15
ADDV $64, R6
ADDV $64, R7
ADDV $-1, R5
Expand Down
Loading
Loading