diff --git a/README.md b/README.md index 1d6b723..0ace2f9 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/SECURITY.md b/SECURITY.md index ff81a2a..d675dff 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -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 diff --git a/internal/kernels/asmgen/go.mod b/internal/kernels/asmgen/go.mod index a5ea7c9..6b52ea1 100644 --- a/internal/kernels/asmgen/go.mod +++ b/internal/kernels/asmgen/go.mod @@ -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 diff --git a/internal/kernels/asmgen/go.sum b/internal/kernels/asmgen/go.sum index 0a54b2f..e9719a8 100644 --- a/internal/kernels/asmgen/go.sum +++ b/internal/kernels/asmgen/go.sum @@ -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= diff --git a/internal/kernels/sum_loong64.s b/internal/kernels/sum_loong64.s index b9f165c..5c4195a 100644 --- a/internal/kernels/sum_loong64.s +++ b/internal/kernels/sum_loong64.s @@ -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 @@ -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 diff --git a/internal/kernels/sum_ppc64le.s b/internal/kernels/sum_ppc64le.s index 88ddca2..4e9cbae 100644 --- a/internal/kernels/sum_ppc64le.s +++ b/internal/kernels/sum_ppc64le.s @@ -21,19 +21,19 @@ sloop: LXVD2X (R3)(R14), VS5 LXVD2X (R3)(R15), VS6 LXVD2X (R3)(R16), VS7 - WORD $0xf0002300 // xvadddp vs0, vs0, vs4 - WORD $0xf0212b00 // xvadddp vs1, vs1, vs5 - WORD $0xf0423300 // xvadddp vs2, vs2, vs6 - WORD $0xf0633b00 // xvadddp vs3, vs3, vs7 + WORD $0xf0002300 // XVADDDP VS0, VS4, VS0 + WORD $0xf0212b00 // XVADDDP VS1, VS5, VS1 + WORD $0xf0423300 // XVADDDP VS2, VS6, VS2 + WORD $0xf0633b00 // XVADDDP VS3, VS7, VS3 ADD $64, R3 ADD $-8, R4 BR sloop sfold: - WORD $0xf0000b00 // xvadddp vs0, vs0, vs1 - WORD $0xf0421b00 // xvadddp vs2, vs2, vs3 - WORD $0xf0001300 // xvadddp vs0, vs0, vs2 + WORD $0xf0000b00 // XVADDDP VS0, VS1, VS0 + WORD $0xf0421b00 // XVADDDP VS2, VS3, VS2 + WORD $0xf0001300 // XVADDDP VS0, VS2, VS0 XXPERMDI VS0, VS0, $2, VS1 - WORD $0xf0000b00 // xvadddp vs0, vs0, vs1 + WORD $0xf0000b00 // XVADDDP VS0, VS1, VS0 stail: CMP R4, $0 BEQ sdone @@ -68,20 +68,20 @@ dloop: LXVD2X (R5)(R15), VS38 LXVD2X (R3)(R16), VS35 LXVD2X (R5)(R16), VS39 - WORD $0xf000230e // xvmaddadp vs0, vs32, vs36 - WORD $0xf0212b0e // xvmaddadp vs1, vs33, vs37 - WORD $0xf042330e // xvmaddadp vs2, vs34, vs38 - WORD $0xf0633b0e // xvmaddadp vs3, vs35, vs39 + WORD $0xf000230e // XVMADDADP VS32, VS36, VS0 + WORD $0xf0212b0e // XVMADDADP VS33, VS37, VS1 + WORD $0xf042330e // XVMADDADP VS34, VS38, VS2 + WORD $0xf0633b0e // XVMADDADP VS35, VS39, VS3 ADD $64, R3 ADD $64, R5 ADD $-8, R4 BR dloop dfold: - WORD $0xf0000b00 // xvadddp vs0, vs0, vs1 - WORD $0xf0421b00 // xvadddp vs2, vs2, vs3 - WORD $0xf0001300 // xvadddp vs0, vs0, vs2 + WORD $0xf0000b00 // XVADDDP VS0, VS1, VS0 + WORD $0xf0421b00 // XVADDDP VS2, VS3, VS2 + WORD $0xf0001300 // XVADDDP VS0, VS2, VS0 XXPERMDI VS0, VS0, $2, VS1 - WORD $0xf0000b00 // xvadddp vs0, vs0, vs1 + WORD $0xf0000b00 // XVADDDP VS0, VS1, VS0 dtail: CMP R4, $0 BEQ ddone @@ -111,10 +111,10 @@ qloop: LXVD2X (R5)(R14), VS33 LXVD2X (R5)(R15), VS34 LXVD2X (R5)(R16), VS35 - WORD $0xf080032f // xvsqrtdp vs36, vs32 - WORD $0xf0a00b2f // xvsqrtdp vs37, vs33 - WORD $0xf0c0132f // xvsqrtdp vs38, vs34 - WORD $0xf0e01b2f // xvsqrtdp vs39, vs35 + WORD $0xf080032f // XVSQRTDP VS32, VS36 + WORD $0xf0a00b2f // XVSQRTDP VS33, VS37 + WORD $0xf0c0132f // XVSQRTDP VS34, VS38 + WORD $0xf0e01b2f // XVSQRTDP VS35, VS39 STXVD2X VS36, (R3)(R0) STXVD2X VS37, (R3)(R14) STXVD2X VS38, (R3)(R15) @@ -155,10 +155,10 @@ addloop: LXVD2X (R6)(R15), VS38 LXVD2X (R5)(R16), VS35 LXVD2X (R6)(R16), VS39 - WORD $0xf1002307 // xvadddp vs40, vs32, vs36 - WORD $0xf1212b07 // xvadddp vs41, vs33, vs37 - WORD $0xf1423307 // xvadddp vs42, vs34, vs38 - WORD $0xf1633b07 // xvadddp vs43, vs35, vs39 + WORD $0xf1002307 // XVADDDP VS32, VS36, VS40 + WORD $0xf1212b07 // XVADDDP VS33, VS37, VS41 + WORD $0xf1423307 // XVADDDP VS34, VS38, VS42 + WORD $0xf1633b07 // XVADDDP VS35, VS39, VS43 STXVD2X VS40, (R3)(R0) STXVD2X VS41, (R3)(R14) STXVD2X VS42, (R3)(R15) @@ -202,10 +202,10 @@ subloop: LXVD2X (R6)(R15), VS38 LXVD2X (R5)(R16), VS35 LXVD2X (R6)(R16), VS39 - WORD $0xf1002347 // xvsubdp vs40, vs32, vs36 - WORD $0xf1212b47 // xvsubdp vs41, vs33, vs37 - WORD $0xf1423347 // xvsubdp vs42, vs34, vs38 - WORD $0xf1633b47 // xvsubdp vs43, vs35, vs39 + WORD $0xf1002347 // XVSUBDP VS32, VS36, VS40 + WORD $0xf1212b47 // XVSUBDP VS33, VS37, VS41 + WORD $0xf1423347 // XVSUBDP VS34, VS38, VS42 + WORD $0xf1633b47 // XVSUBDP VS35, VS39, VS43 STXVD2X VS40, (R3)(R0) STXVD2X VS41, (R3)(R14) STXVD2X VS42, (R3)(R15) @@ -249,10 +249,10 @@ mulloop: LXVD2X (R6)(R15), VS38 LXVD2X (R5)(R16), VS35 LXVD2X (R6)(R16), VS39 - WORD $0xf1002387 // xvmuldp vs40, vs32, vs36 - WORD $0xf1212b87 // xvmuldp vs41, vs33, vs37 - WORD $0xf1423387 // xvmuldp vs42, vs34, vs38 - WORD $0xf1633b87 // xvmuldp vs43, vs35, vs39 + WORD $0xf1002387 // XVMULDP VS32, VS36, VS40 + WORD $0xf1212b87 // XVMULDP VS33, VS37, VS41 + WORD $0xf1423387 // XVMULDP VS34, VS38, VS42 + WORD $0xf1633b87 // XVMULDP VS35, VS39, VS43 STXVD2X VS40, (R3)(R0) STXVD2X VS41, (R3)(R14) STXVD2X VS42, (R3)(R15) @@ -296,10 +296,10 @@ divloop: LXVD2X (R6)(R15), VS38 LXVD2X (R5)(R16), VS35 LXVD2X (R6)(R16), VS39 - WORD $0xf10023c7 // xvdivdp vs40, vs32, vs36 - WORD $0xf1212bc7 // xvdivdp vs41, vs33, vs37 - WORD $0xf14233c7 // xvdivdp vs42, vs34, vs38 - WORD $0xf1633bc7 // xvdivdp vs43, vs35, vs39 + WORD $0xf10023c7 // XVDIVDP VS32, VS36, VS40 + WORD $0xf1212bc7 // XVDIVDP VS33, VS37, VS41 + WORD $0xf14233c7 // XVDIVDP VS34, VS38, VS42 + WORD $0xf1633bc7 // XVDIVDP VS35, VS39, VS43 STXVD2X VS40, (R3)(R0) STXVD2X VS41, (R3)(R14) STXVD2X VS42, (R3)(R15) @@ -385,45 +385,45 @@ gemmMicro8x8VSXloop2: XXPERMDI VS37, VS37, $2, VS41 XXPERMDI VS38, VS38, $2, VS42 XXPERMDI VS39, VS39, $2, VS43 - WORD $0xf004030e // xvmaddadp vs0, vs36, vs32 - WORD $0xf028030e // xvmaddadp vs1, vs40, vs32 - WORD $0xf0440b0e // xvmaddadp vs2, vs36, vs33 - WORD $0xf0680b0e // xvmaddadp vs3, vs40, vs33 + WORD $0xf004030e // XVMADDADP VS36, VS32, VS0 + WORD $0xf028030e // XVMADDADP VS40, VS32, VS1 + WORD $0xf0440b0e // XVMADDADP VS36, VS33, VS2 + WORD $0xf0680b0e // XVMADDADP VS40, VS33, VS3 LXVD2X (R5)(R0), VS44 - WORD $0xf084130e // xvmaddadp vs4, vs36, vs34 - WORD $0xf0a8130e // xvmaddadp vs5, vs40, vs34 - WORD $0xf0c41b0e // xvmaddadp vs6, vs36, vs35 - WORD $0xf0e81b0e // xvmaddadp vs7, vs40, vs35 + WORD $0xf084130e // XVMADDADP VS36, VS34, VS4 + WORD $0xf0a8130e // XVMADDADP VS40, VS34, VS5 + WORD $0xf0c41b0e // XVMADDADP VS36, VS35, VS6 + WORD $0xf0e81b0e // XVMADDADP VS40, VS35, VS7 LXVD2X (R4)(R0), VS48 - WORD $0xf105030e // xvmaddadp vs8, vs37, vs32 - WORD $0xf129030e // xvmaddadp vs9, vs41, vs32 - WORD $0xf1450b0e // xvmaddadp vs10, vs37, vs33 - WORD $0xf1690b0e // xvmaddadp vs11, vs41, vs33 + WORD $0xf105030e // XVMADDADP VS37, VS32, VS8 + WORD $0xf129030e // XVMADDADP VS41, VS32, VS9 + WORD $0xf1450b0e // XVMADDADP VS37, VS33, VS10 + WORD $0xf1690b0e // XVMADDADP VS41, VS33, VS11 LXVD2X (R5)(R14), VS45 - WORD $0xf185130e // xvmaddadp vs12, vs37, vs34 - WORD $0xf1a9130e // xvmaddadp vs13, vs41, vs34 - WORD $0xf1c51b0e // xvmaddadp vs14, vs37, vs35 - WORD $0xf1e91b0e // xvmaddadp vs15, vs41, vs35 + WORD $0xf185130e // XVMADDADP VS37, VS34, VS12 + WORD $0xf1a9130e // XVMADDADP VS41, VS34, VS13 + WORD $0xf1c51b0e // XVMADDADP VS37, VS35, VS14 + WORD $0xf1e91b0e // XVMADDADP VS41, VS35, VS15 LXVD2X (R4)(R14), VS49 - WORD $0xf206030e // xvmaddadp vs16, vs38, vs32 - WORD $0xf22a030e // xvmaddadp vs17, vs42, vs32 - WORD $0xf2460b0e // xvmaddadp vs18, vs38, vs33 - WORD $0xf26a0b0e // xvmaddadp vs19, vs42, vs33 + WORD $0xf206030e // XVMADDADP VS38, VS32, VS16 + WORD $0xf22a030e // XVMADDADP VS42, VS32, VS17 + WORD $0xf2460b0e // XVMADDADP VS38, VS33, VS18 + WORD $0xf26a0b0e // XVMADDADP VS42, VS33, VS19 LXVD2X (R5)(R15), VS46 - WORD $0xf286130e // xvmaddadp vs20, vs38, vs34 - WORD $0xf2aa130e // xvmaddadp vs21, vs42, vs34 - WORD $0xf2c61b0e // xvmaddadp vs22, vs38, vs35 - WORD $0xf2ea1b0e // xvmaddadp vs23, vs42, vs35 + WORD $0xf286130e // XVMADDADP VS38, VS34, VS20 + WORD $0xf2aa130e // XVMADDADP VS42, VS34, VS21 + WORD $0xf2c61b0e // XVMADDADP VS38, VS35, VS22 + WORD $0xf2ea1b0e // XVMADDADP VS42, VS35, VS23 LXVD2X (R4)(R15), VS50 - WORD $0xf307030e // xvmaddadp vs24, vs39, vs32 - WORD $0xf32b030e // xvmaddadp vs25, vs43, vs32 - WORD $0xf3470b0e // xvmaddadp vs26, vs39, vs33 - WORD $0xf36b0b0e // xvmaddadp vs27, vs43, vs33 + WORD $0xf307030e // XVMADDADP VS39, VS32, VS24 + WORD $0xf32b030e // XVMADDADP VS43, VS32, VS25 + WORD $0xf3470b0e // XVMADDADP VS39, VS33, VS26 + WORD $0xf36b0b0e // XVMADDADP VS43, VS33, VS27 LXVD2X (R5)(R16), VS47 - WORD $0xf387130e // xvmaddadp vs28, vs39, vs34 - WORD $0xf3ab130e // xvmaddadp vs29, vs43, vs34 - WORD $0xf3c71b0e // xvmaddadp vs30, vs39, vs35 - WORD $0xf3eb1b0e // xvmaddadp vs31, vs43, vs35 + WORD $0xf387130e // XVMADDADP VS39, VS34, VS28 + WORD $0xf3ab130e // XVMADDADP VS43, VS34, VS29 + WORD $0xf3c71b0e // XVMADDADP VS39, VS35, VS30 + WORD $0xf3eb1b0e // XVMADDADP VS43, VS35, VS31 LXVD2X (R4)(R16), VS51 ADD $64, R4 ADD $64, R5 @@ -431,38 +431,38 @@ gemmMicro8x8VSXloop2: XXPERMDI VS49, VS49, $2, VS53 XXPERMDI VS50, VS50, $2, VS54 XXPERMDI VS51, VS51, $2, VS55 - WORD $0xf010630e // xvmaddadp vs0, vs48, vs44 - WORD $0xf034630e // xvmaddadp vs1, vs52, vs44 - WORD $0xf0506b0e // xvmaddadp vs2, vs48, vs45 - WORD $0xf0746b0e // xvmaddadp vs3, vs52, vs45 - WORD $0xf090730e // xvmaddadp vs4, vs48, vs46 - WORD $0xf0b4730e // xvmaddadp vs5, vs52, vs46 - WORD $0xf0d07b0e // xvmaddadp vs6, vs48, vs47 - WORD $0xf0f47b0e // xvmaddadp vs7, vs52, vs47 - WORD $0xf111630e // xvmaddadp vs8, vs49, vs44 - WORD $0xf135630e // xvmaddadp vs9, vs53, vs44 - WORD $0xf1516b0e // xvmaddadp vs10, vs49, vs45 - WORD $0xf1756b0e // xvmaddadp vs11, vs53, vs45 - WORD $0xf191730e // xvmaddadp vs12, vs49, vs46 - WORD $0xf1b5730e // xvmaddadp vs13, vs53, vs46 - WORD $0xf1d17b0e // xvmaddadp vs14, vs49, vs47 - WORD $0xf1f57b0e // xvmaddadp vs15, vs53, vs47 - WORD $0xf212630e // xvmaddadp vs16, vs50, vs44 - WORD $0xf236630e // xvmaddadp vs17, vs54, vs44 - WORD $0xf2526b0e // xvmaddadp vs18, vs50, vs45 - WORD $0xf2766b0e // xvmaddadp vs19, vs54, vs45 - WORD $0xf292730e // xvmaddadp vs20, vs50, vs46 - WORD $0xf2b6730e // xvmaddadp vs21, vs54, vs46 - WORD $0xf2d27b0e // xvmaddadp vs22, vs50, vs47 - WORD $0xf2f67b0e // xvmaddadp vs23, vs54, vs47 - WORD $0xf313630e // xvmaddadp vs24, vs51, vs44 - WORD $0xf337630e // xvmaddadp vs25, vs55, vs44 - WORD $0xf3536b0e // xvmaddadp vs26, vs51, vs45 - WORD $0xf3776b0e // xvmaddadp vs27, vs55, vs45 - WORD $0xf393730e // xvmaddadp vs28, vs51, vs46 - WORD $0xf3b7730e // xvmaddadp vs29, vs55, vs46 - WORD $0xf3d37b0e // xvmaddadp vs30, vs51, vs47 - WORD $0xf3f77b0e // xvmaddadp vs31, vs55, vs47 + WORD $0xf010630e // XVMADDADP VS48, VS44, VS0 + WORD $0xf034630e // XVMADDADP VS52, VS44, VS1 + WORD $0xf0506b0e // XVMADDADP VS48, VS45, VS2 + WORD $0xf0746b0e // XVMADDADP VS52, VS45, VS3 + WORD $0xf090730e // XVMADDADP VS48, VS46, VS4 + WORD $0xf0b4730e // XVMADDADP VS52, VS46, VS5 + WORD $0xf0d07b0e // XVMADDADP VS48, VS47, VS6 + WORD $0xf0f47b0e // XVMADDADP VS52, VS47, VS7 + WORD $0xf111630e // XVMADDADP VS49, VS44, VS8 + WORD $0xf135630e // XVMADDADP VS53, VS44, VS9 + WORD $0xf1516b0e // XVMADDADP VS49, VS45, VS10 + WORD $0xf1756b0e // XVMADDADP VS53, VS45, VS11 + WORD $0xf191730e // XVMADDADP VS49, VS46, VS12 + WORD $0xf1b5730e // XVMADDADP VS53, VS46, VS13 + WORD $0xf1d17b0e // XVMADDADP VS49, VS47, VS14 + WORD $0xf1f57b0e // XVMADDADP VS53, VS47, VS15 + WORD $0xf212630e // XVMADDADP VS50, VS44, VS16 + WORD $0xf236630e // XVMADDADP VS54, VS44, VS17 + WORD $0xf2526b0e // XVMADDADP VS50, VS45, VS18 + WORD $0xf2766b0e // XVMADDADP VS54, VS45, VS19 + WORD $0xf292730e // XVMADDADP VS50, VS46, VS20 + WORD $0xf2b6730e // XVMADDADP VS54, VS46, VS21 + WORD $0xf2d27b0e // XVMADDADP VS50, VS47, VS22 + WORD $0xf2f67b0e // XVMADDADP VS54, VS47, VS23 + WORD $0xf313630e // XVMADDADP VS51, VS44, VS24 + WORD $0xf337630e // XVMADDADP VS55, VS44, VS25 + WORD $0xf3536b0e // XVMADDADP VS51, VS45, VS26 + WORD $0xf3776b0e // XVMADDADP VS55, VS45, VS27 + WORD $0xf393730e // XVMADDADP VS51, VS46, VS28 + WORD $0xf3b7730e // XVMADDADP VS55, VS46, VS29 + WORD $0xf3d37b0e // XVMADDADP VS51, VS47, VS30 + WORD $0xf3f77b0e // XVMADDADP VS55, VS47, VS31 ADD $-2, R3 BR gemmMicro8x8VSXloop2 gemmMicro8x8VSXone: @@ -480,173 +480,173 @@ gemmMicro8x8VSXone: XXPERMDI VS37, VS37, $2, VS41 XXPERMDI VS38, VS38, $2, VS42 XXPERMDI VS39, VS39, $2, VS43 - WORD $0xf004030e // xvmaddadp vs0, vs36, vs32 - WORD $0xf028030e // xvmaddadp vs1, vs40, vs32 - WORD $0xf0440b0e // xvmaddadp vs2, vs36, vs33 - WORD $0xf0680b0e // xvmaddadp vs3, vs40, vs33 - WORD $0xf084130e // xvmaddadp vs4, vs36, vs34 - WORD $0xf0a8130e // xvmaddadp vs5, vs40, vs34 - WORD $0xf0c41b0e // xvmaddadp vs6, vs36, vs35 - WORD $0xf0e81b0e // xvmaddadp vs7, vs40, vs35 - WORD $0xf105030e // xvmaddadp vs8, vs37, vs32 - WORD $0xf129030e // xvmaddadp vs9, vs41, vs32 - WORD $0xf1450b0e // xvmaddadp vs10, vs37, vs33 - WORD $0xf1690b0e // xvmaddadp vs11, vs41, vs33 - WORD $0xf185130e // xvmaddadp vs12, vs37, vs34 - WORD $0xf1a9130e // xvmaddadp vs13, vs41, vs34 - WORD $0xf1c51b0e // xvmaddadp vs14, vs37, vs35 - WORD $0xf1e91b0e // xvmaddadp vs15, vs41, vs35 - WORD $0xf206030e // xvmaddadp vs16, vs38, vs32 - WORD $0xf22a030e // xvmaddadp vs17, vs42, vs32 - WORD $0xf2460b0e // xvmaddadp vs18, vs38, vs33 - WORD $0xf26a0b0e // xvmaddadp vs19, vs42, vs33 - WORD $0xf286130e // xvmaddadp vs20, vs38, vs34 - WORD $0xf2aa130e // xvmaddadp vs21, vs42, vs34 - WORD $0xf2c61b0e // xvmaddadp vs22, vs38, vs35 - WORD $0xf2ea1b0e // xvmaddadp vs23, vs42, vs35 - WORD $0xf307030e // xvmaddadp vs24, vs39, vs32 - WORD $0xf32b030e // xvmaddadp vs25, vs43, vs32 - WORD $0xf3470b0e // xvmaddadp vs26, vs39, vs33 - WORD $0xf36b0b0e // xvmaddadp vs27, vs43, vs33 - WORD $0xf387130e // xvmaddadp vs28, vs39, vs34 - WORD $0xf3ab130e // xvmaddadp vs29, vs43, vs34 - WORD $0xf3c71b0e // xvmaddadp vs30, vs39, vs35 - WORD $0xf3eb1b0e // xvmaddadp vs31, vs43, vs35 + WORD $0xf004030e // XVMADDADP VS36, VS32, VS0 + WORD $0xf028030e // XVMADDADP VS40, VS32, VS1 + WORD $0xf0440b0e // XVMADDADP VS36, VS33, VS2 + WORD $0xf0680b0e // XVMADDADP VS40, VS33, VS3 + WORD $0xf084130e // XVMADDADP VS36, VS34, VS4 + WORD $0xf0a8130e // XVMADDADP VS40, VS34, VS5 + WORD $0xf0c41b0e // XVMADDADP VS36, VS35, VS6 + WORD $0xf0e81b0e // XVMADDADP VS40, VS35, VS7 + WORD $0xf105030e // XVMADDADP VS37, VS32, VS8 + WORD $0xf129030e // XVMADDADP VS41, VS32, VS9 + WORD $0xf1450b0e // XVMADDADP VS37, VS33, VS10 + WORD $0xf1690b0e // XVMADDADP VS41, VS33, VS11 + WORD $0xf185130e // XVMADDADP VS37, VS34, VS12 + WORD $0xf1a9130e // XVMADDADP VS41, VS34, VS13 + WORD $0xf1c51b0e // XVMADDADP VS37, VS35, VS14 + WORD $0xf1e91b0e // XVMADDADP VS41, VS35, VS15 + WORD $0xf206030e // XVMADDADP VS38, VS32, VS16 + WORD $0xf22a030e // XVMADDADP VS42, VS32, VS17 + WORD $0xf2460b0e // XVMADDADP VS38, VS33, VS18 + WORD $0xf26a0b0e // XVMADDADP VS42, VS33, VS19 + WORD $0xf286130e // XVMADDADP VS38, VS34, VS20 + WORD $0xf2aa130e // XVMADDADP VS42, VS34, VS21 + WORD $0xf2c61b0e // XVMADDADP VS38, VS35, VS22 + WORD $0xf2ea1b0e // XVMADDADP VS42, VS35, VS23 + WORD $0xf307030e // XVMADDADP VS39, VS32, VS24 + WORD $0xf32b030e // XVMADDADP VS43, VS32, VS25 + WORD $0xf3470b0e // XVMADDADP VS39, VS33, VS26 + WORD $0xf36b0b0e // XVMADDADP VS43, VS33, VS27 + WORD $0xf387130e // XVMADDADP VS39, VS34, VS28 + WORD $0xf3ab130e // XVMADDADP VS43, VS34, VS29 + WORD $0xf3c71b0e // XVMADDADP VS39, VS35, VS30 + WORD $0xf3eb1b0e // XVMADDADP VS43, VS35, VS31 gemmMicro8x8VSXstore: XXPERMDI VS0, VS1, $1, VS56 LXVD2X (R6)(R0), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R0) XXPERMDI VS2, VS3, $1, VS56 LXVD2X (R6)(R14), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R14) XXPERMDI VS4, VS5, $1, VS56 LXVD2X (R6)(R15), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R15) XXPERMDI VS6, VS7, $1, VS56 LXVD2X (R6)(R16), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R16) ADD R7, R6 XXPERMDI VS1, VS0, $1, VS56 LXVD2X (R6)(R0), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R0) XXPERMDI VS3, VS2, $1, VS56 LXVD2X (R6)(R14), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R14) XXPERMDI VS5, VS4, $1, VS56 LXVD2X (R6)(R15), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R15) XXPERMDI VS7, VS6, $1, VS56 LXVD2X (R6)(R16), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R16) ADD R7, R6 XXPERMDI VS8, VS9, $1, VS56 LXVD2X (R6)(R0), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R0) XXPERMDI VS10, VS11, $1, VS56 LXVD2X (R6)(R14), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R14) XXPERMDI VS12, VS13, $1, VS56 LXVD2X (R6)(R15), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R15) XXPERMDI VS14, VS15, $1, VS56 LXVD2X (R6)(R16), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R16) ADD R7, R6 XXPERMDI VS9, VS8, $1, VS56 LXVD2X (R6)(R0), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R0) XXPERMDI VS11, VS10, $1, VS56 LXVD2X (R6)(R14), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R14) XXPERMDI VS13, VS12, $1, VS56 LXVD2X (R6)(R15), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R15) XXPERMDI VS15, VS14, $1, VS56 LXVD2X (R6)(R16), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R16) ADD R7, R6 XXPERMDI VS16, VS17, $1, VS56 LXVD2X (R6)(R0), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R0) XXPERMDI VS18, VS19, $1, VS56 LXVD2X (R6)(R14), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R14) XXPERMDI VS20, VS21, $1, VS56 LXVD2X (R6)(R15), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R15) XXPERMDI VS22, VS23, $1, VS56 LXVD2X (R6)(R16), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R16) ADD R7, R6 XXPERMDI VS17, VS16, $1, VS56 LXVD2X (R6)(R0), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R0) XXPERMDI VS19, VS18, $1, VS56 LXVD2X (R6)(R14), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R14) XXPERMDI VS21, VS20, $1, VS56 LXVD2X (R6)(R15), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R15) XXPERMDI VS23, VS22, $1, VS56 LXVD2X (R6)(R16), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R16) ADD R7, R6 XXPERMDI VS24, VS25, $1, VS56 LXVD2X (R6)(R0), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R0) XXPERMDI VS26, VS27, $1, VS56 LXVD2X (R6)(R14), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R14) XXPERMDI VS28, VS29, $1, VS56 LXVD2X (R6)(R15), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R15) XXPERMDI VS30, VS31, $1, VS56 LXVD2X (R6)(R16), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R16) ADD R7, R6 XXPERMDI VS25, VS24, $1, VS56 LXVD2X (R6)(R0), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R0) XXPERMDI VS27, VS26, $1, VS56 LXVD2X (R6)(R14), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R14) XXPERMDI VS29, VS28, $1, VS56 LXVD2X (R6)(R15), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R15) XXPERMDI VS31, VS30, $1, VS56 LXVD2X (R6)(R16), VS57 - WORD $0xf339c307 // xvadddp vs57, vs57, vs56 + WORD $0xf339c307 // XVADDDP VS57, VS56, VS57 STXVD2X VS57, (R6)(R16) RET