diff options
-rw-r--r-- | community/go/APKBUILD | 10 | ||||
-rw-r--r-- | community/go/cmd-compile-fix-regression-in-PPC64.rules-move-zero.patch | 700 |
2 files changed, 4 insertions, 706 deletions
diff --git a/community/go/APKBUILD b/community/go/APKBUILD index 1a8ad6094c..289a58c0c4 100644 --- a/community/go/APKBUILD +++ b/community/go/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Sören Tempel <soeren+alpine@soeren-tempel.net> # Maintainer: Eivind Uggedal <eivind@uggedal.com> pkgname=go -pkgver=1.9.1 +pkgver=1.9.2 # This should be the latest commit on the corresponding release branch _toolsver="5d2fd3ccab986d52112bf301d47a819783339d0e" pkgrel=0 @@ -21,7 +21,6 @@ source="http://golang.org/dl/go${pkgver/_/}.src.tar.gz default-buildmode-pie.patch set-external-linker.patch make-sure-R0-is-zero-before-main-on-ppc64le.patch - cmd-compile-fix-regression-in-PPC64.rules-move-zero.patch " # NOTE: building go for x86 with grsec kernel requires: @@ -144,9 +143,8 @@ tools() { done } -sha512sums="3c5d11089a54c61acd1a4fad9618ddb2058cc783a54564407ee50e37c864deaadfd5effeab623080c136a599096f448aae091ef41d0afca1abfcdb98adf4a793 go1.9.1.src.tar.gz -d679873082dbac6a47b7c43ac74c47cb19616fb053a4faa3e6ee78004ece86aa5c432fba3d24c030d47396089d7ec7c6357af5648bd767341056396066ff9a04 go-tools-1.9.1.tar.gz +sha512sums="1034098575c317eeaf648629690a4dea0c479a69c3b80d9917f6b96c8781ce79c0f29859f667dc4e07d47a44972aa09bd0163a458f897cf45f9d09eb03e4abb5 go1.9.2.src.tar.gz +d679873082dbac6a47b7c43ac74c47cb19616fb053a4faa3e6ee78004ece86aa5c432fba3d24c030d47396089d7ec7c6357af5648bd767341056396066ff9a04 go-tools-1.9.2.tar.gz ef9da66d76e4698314eaf2aa88cf40a8430a15f8f6cb9ad17ee9d72498ec049b60e63e1ff5acf13a916c5ea365f9d9a282b6f2b06e28de9e3484eb9a3d7dd98e default-buildmode-pie.patch 6b36f3780ab10e5c4902473a8ab5c0417220ece584b537517e9e60979bdc5a548ed14dd2546605392c89ec5ea6691769d337d34e2e19b92eba5bbca1898f4ada set-external-linker.patch -451ca02dea91d74d8e3216c7a48d963bbfc040b43d15868087d6339a1815c4996817c5ace265a20abcdb9d1da4e9ff58e373397d98df773b729876f4623b1cc8 make-sure-R0-is-zero-before-main-on-ppc64le.patch -9e7c8e6132cd7ab22a72fc92c4f7489b25e0f501efc796c8d07f282b178873ce0c51b173c6cf2c18ca42e24e0fec8a47244eb8c93022e37758705f0a77ed96b1 cmd-compile-fix-regression-in-PPC64.rules-move-zero.patch" +451ca02dea91d74d8e3216c7a48d963bbfc040b43d15868087d6339a1815c4996817c5ace265a20abcdb9d1da4e9ff58e373397d98df773b729876f4623b1cc8 make-sure-R0-is-zero-before-main-on-ppc64le.patch" diff --git a/community/go/cmd-compile-fix-regression-in-PPC64.rules-move-zero.patch b/community/go/cmd-compile-fix-regression-in-PPC64.rules-move-zero.patch deleted file mode 100644 index cc2ba079ed..0000000000 --- a/community/go/cmd-compile-fix-regression-in-PPC64.rules-move-zero.patch +++ /dev/null @@ -1,700 +0,0 @@ -From 3fda3765b8691de51d62ef6d68ce772f4eb0c601 Mon Sep 17 00:00:00 2001 -From: Lynn Boger <laboger@linux.vnet.ibm.com> -Date: Tue, 19 Sep 2017 17:36:57 -0400 -Subject: [PATCH] cmd/compile: fix regression in PPC64.rules move zero - -When a MOVDstorezero (8 bytes) is used the offset field -in the instruction must be a multiple of 4. This situation -had been corrected in the rules for other types of stores -but not for the zero case. - -This also removes some of the special MOVDstorezero cases since -they can be handled by the general LowerZero case. - -Updates made to the ssa test for lowering zero moves to -include cases where the target is not aligned to at least 4. - -Fixes #21947 - -Change-Id: I7cceceb1be4898c77cd3b5e78b58dce0a7e28edd -Reviewed-on: https://go-review.googlesource.com/64970 -Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com> -TryBot-Result: Gobot Gobot <gobot@golang.org> -Reviewed-by: Carlos Eduardo Seo <cseo@linux.vnet.ibm.com> -Reviewed-by: Cherry Zhang <cherryyz@google.com> ---- - .../compile/internal/gc/testdata/gen/zeroGen.go | 63 ++++++ - src/cmd/compile/internal/gc/testdata/zero.go | 216 +++++++++++++++++++++ - src/cmd/compile/internal/ssa/gen/PPC64.rules | 58 ++---- - src/cmd/compile/internal/ssa/rewritePPC64.go | 172 +++++----------- - 4 files changed, 350 insertions(+), 159 deletions(-) - -diff --git a/src/cmd/compile/internal/gc/testdata/gen/zeroGen.go b/src/cmd/compile/internal/gc/testdata/gen/zeroGen.go -index fa70b16495..c764c369e6 100644 ---- a/src/cmd/compile/internal/gc/testdata/gen/zeroGen.go -+++ b/src/cmd/compile/internal/gc/testdata/gen/zeroGen.go -@@ -19,6 +19,7 @@ import ( - // will be written into the parent directory containing the tests. - - var sizes = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 16, 17, 23, 24, 25, 31, 32, 33, 63, 64, 65, 1023, 1024, 1025} -+var usizes = [...]int{8, 16, 24, 32, 64, 256} - - func main() { - w := new(bytes.Buffer) -@@ -61,12 +62,74 @@ func main() { - fmt.Fprintf(w, "}\n") - } - -+ for _, s := range usizes { -+ // type for test -+ fmt.Fprintf(w, "type T%du1 struct {\n", s) -+ fmt.Fprintf(w, " b bool\n") -+ fmt.Fprintf(w, " val [%d]byte\n", s) -+ fmt.Fprintf(w, "}\n") -+ -+ fmt.Fprintf(w, "type T%du2 struct {\n", s) -+ fmt.Fprintf(w, " i uint16\n") -+ fmt.Fprintf(w, " val [%d]byte\n", s) -+ fmt.Fprintf(w, "}\n") -+ -+ // function being tested -+ fmt.Fprintf(w, "//go:noinline\n") -+ fmt.Fprintf(w, "func zero%du1_ssa(t *T%du1) {\n", s, s) -+ fmt.Fprintf(w, " t.val = [%d]byte{}\n", s) -+ fmt.Fprintf(w, "}\n") -+ -+ // function being tested -+ fmt.Fprintf(w, "//go:noinline\n") -+ fmt.Fprintf(w, "func zero%du2_ssa(t *T%du2) {\n", s, s) -+ fmt.Fprintf(w, " t.val = [%d]byte{}\n", s) -+ fmt.Fprintf(w, "}\n") -+ -+ // testing harness -+ fmt.Fprintf(w, "func testZero%du() {\n", s) -+ fmt.Fprintf(w, " a := T%du1{false, [%d]byte{", s, s) -+ for i := 0; i < s; i++ { -+ fmt.Fprintf(w, "255,") -+ } -+ fmt.Fprintf(w, "}}\n") -+ fmt.Fprintf(w, " zero%du1_ssa(&a)\n", s) -+ fmt.Fprintf(w, " want := T%du1{false, [%d]byte{", s, s) -+ for i := 0; i < s; i++ { -+ fmt.Fprintf(w, "0,") -+ } -+ fmt.Fprintf(w, "}}\n") -+ fmt.Fprintf(w, " if a != want {\n") -+ fmt.Fprintf(w, " fmt.Printf(\"zero%du2 got=%%v, want %%v\\n\", a, want)\n", s) -+ fmt.Fprintf(w, " failed=true\n") -+ fmt.Fprintf(w, " }\n") -+ fmt.Fprintf(w, " b := T%du2{15, [%d]byte{", s, s) -+ for i := 0; i < s; i++ { -+ fmt.Fprintf(w, "255,") -+ } -+ fmt.Fprintf(w, "}}\n") -+ fmt.Fprintf(w, " zero%du2_ssa(&b)\n", s) -+ fmt.Fprintf(w, " wantb := T%du2{15, [%d]byte{", s, s) -+ for i := 0; i < s; i++ { -+ fmt.Fprintf(w, "0,") -+ } -+ fmt.Fprintf(w, "}}\n") -+ fmt.Fprintf(w, " if b != wantb {\n") -+ fmt.Fprintf(w, " fmt.Printf(\"zero%du2 got=%%v, want %%v\\n\", b, wantb)\n", s) -+ fmt.Fprintf(w, " failed=true\n") -+ fmt.Fprintf(w, " }\n") -+ fmt.Fprintf(w, "}\n") -+ } -+ - // boilerplate at end - fmt.Fprintf(w, "var failed bool\n") - fmt.Fprintf(w, "func main() {\n") - for _, s := range sizes { - fmt.Fprintf(w, " testZero%d()\n", s) - } -+ for _, s := range usizes { -+ fmt.Fprintf(w, " testZero%du()\n", s) -+ } - fmt.Fprintf(w, " if failed {\n") - fmt.Fprintf(w, " panic(\"failed\")\n") - fmt.Fprintf(w, " }\n") -diff --git a/src/cmd/compile/internal/gc/testdata/zero.go b/src/cmd/compile/internal/gc/testdata/zero.go -index f6354868cb..9d261aa401 100644 ---- a/src/cmd/compile/internal/gc/testdata/zero.go -+++ b/src/cmd/compile/internal/gc/testdata/zero.go -@@ -505,6 +505,216 @@ func testZero1025() { - } - } - -+type T8u1 struct { -+ b bool -+ val [8]byte -+} -+type T8u2 struct { -+ i uint16 -+ val [8]byte -+} -+ -+//go:noinline -+func zero8u1_ssa(t *T8u1) { -+ t.val = [8]byte{} -+} -+ -+//go:noinline -+func zero8u2_ssa(t *T8u2) { -+ t.val = [8]byte{} -+} -+func testZero8u() { -+ a := T8u1{false, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} -+ zero8u1_ssa(&a) -+ want := T8u1{false, [8]byte{0, 0, 0, 0, 0, 0, 0, 0}} -+ if a != want { -+ fmt.Printf("zero8u2 got=%v, want %v\n", a, want) -+ failed = true -+ } -+ b := T8u2{15, [8]byte{255, 255, 255, 255, 255, 255, 255, 255}} -+ zero8u2_ssa(&b) -+ wantb := T8u2{15, [8]byte{0, 0, 0, 0, 0, 0, 0, 0}} -+ if b != wantb { -+ fmt.Printf("zero8u2 got=%v, want %v\n", b, wantb) -+ failed = true -+ } -+} -+ -+type T16u1 struct { -+ b bool -+ val [16]byte -+} -+type T16u2 struct { -+ i uint16 -+ val [16]byte -+} -+ -+//go:noinline -+func zero16u1_ssa(t *T16u1) { -+ t.val = [16]byte{} -+} -+ -+//go:noinline -+func zero16u2_ssa(t *T16u2) { -+ t.val = [16]byte{} -+} -+func testZero16u() { -+ a := T16u1{false, [16]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} -+ zero16u1_ssa(&a) -+ want := T16u1{false, [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} -+ if a != want { -+ fmt.Printf("zero16u2 got=%v, want %v\n", a, want) -+ failed = true -+ } -+ b := T16u2{15, [16]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} -+ zero16u2_ssa(&b) -+ wantb := T16u2{15, [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} -+ if b != wantb { -+ fmt.Printf("zero16u2 got=%v, want %v\n", b, wantb) -+ failed = true -+ } -+} -+ -+type T24u1 struct { -+ b bool -+ val [24]byte -+} -+type T24u2 struct { -+ i uint16 -+ val [24]byte -+} -+ -+//go:noinline -+func zero24u1_ssa(t *T24u1) { -+ t.val = [24]byte{} -+} -+ -+//go:noinline -+func zero24u2_ssa(t *T24u2) { -+ t.val = [24]byte{} -+} -+func testZero24u() { -+ a := T24u1{false, [24]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} -+ zero24u1_ssa(&a) -+ want := T24u1{false, [24]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} -+ if a != want { -+ fmt.Printf("zero24u2 got=%v, want %v\n", a, want) -+ failed = true -+ } -+ b := T24u2{15, [24]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} -+ zero24u2_ssa(&b) -+ wantb := T24u2{15, [24]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} -+ if b != wantb { -+ fmt.Printf("zero24u2 got=%v, want %v\n", b, wantb) -+ failed = true -+ } -+} -+ -+type T32u1 struct { -+ b bool -+ val [32]byte -+} -+type T32u2 struct { -+ i uint16 -+ val [32]byte -+} -+ -+//go:noinline -+func zero32u1_ssa(t *T32u1) { -+ t.val = [32]byte{} -+} -+ -+//go:noinline -+func zero32u2_ssa(t *T32u2) { -+ t.val = [32]byte{} -+} -+func testZero32u() { -+ a := T32u1{false, [32]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} -+ zero32u1_ssa(&a) -+ want := T32u1{false, [32]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} -+ if a != want { -+ fmt.Printf("zero32u2 got=%v, want %v\n", a, want) -+ failed = true -+ } -+ b := T32u2{15, [32]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} -+ zero32u2_ssa(&b) -+ wantb := T32u2{15, [32]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} -+ if b != wantb { -+ fmt.Printf("zero32u2 got=%v, want %v\n", b, wantb) -+ failed = true -+ } -+} -+ -+type T64u1 struct { -+ b bool -+ val [64]byte -+} -+type T64u2 struct { -+ i uint16 -+ val [64]byte -+} -+ -+//go:noinline -+func zero64u1_ssa(t *T64u1) { -+ t.val = [64]byte{} -+} -+ -+//go:noinline -+func zero64u2_ssa(t *T64u2) { -+ t.val = [64]byte{} -+} -+func testZero64u() { -+ a := T64u1{false, [64]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} -+ zero64u1_ssa(&a) -+ want := T64u1{false, [64]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} -+ if a != want { -+ fmt.Printf("zero64u2 got=%v, want %v\n", a, want) -+ failed = true -+ } -+ b := T64u2{15, [64]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} -+ zero64u2_ssa(&b) -+ wantb := T64u2{15, [64]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} -+ if b != wantb { -+ fmt.Printf("zero64u2 got=%v, want %v\n", b, wantb) -+ failed = true -+ } -+} -+ -+type T256u1 struct { -+ b bool -+ val [256]byte -+} -+type T256u2 struct { -+ i uint16 -+ val [256]byte -+} -+ -+//go:noinline -+func zero256u1_ssa(t *T256u1) { -+ t.val = [256]byte{} -+} -+ -+//go:noinline -+func zero256u2_ssa(t *T256u2) { -+ t.val = [256]byte{} -+} -+func testZero256u() { -+ a := T256u1{false, [256]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} -+ zero256u1_ssa(&a) -+ want := T256u1{false, [256]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} -+ if a != want { -+ fmt.Printf("zero256u2 got=%v, want %v\n", a, want) -+ failed = true -+ } -+ b := T256u2{15, [256]byte{255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}} -+ zero256u2_ssa(&b) -+ wantb := T256u2{15, [256]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}} -+ if b != wantb { -+ fmt.Printf("zero256u2 got=%v, want %v\n", b, wantb) -+ failed = true -+ } -+} -+ - var failed bool - - func main() { -@@ -533,6 +743,12 @@ func main() { - testZero1023() - testZero1024() - testZero1025() -+ testZero8u() -+ testZero16u() -+ testZero24u() -+ testZero32u() -+ testZero64u() -+ testZero256u() - if failed { - panic("failed") - } -diff --git a/src/cmd/compile/internal/ssa/gen/PPC64.rules b/src/cmd/compile/internal/ssa/gen/PPC64.rules -index 0a09724b8e..6e8d335c90 100644 ---- a/src/cmd/compile/internal/ssa/gen/PPC64.rules -+++ b/src/cmd/compile/internal/ssa/gen/PPC64.rules -@@ -572,49 +572,29 @@ - (MOVBstorezero [6] destptr - (MOVHstorezero [4] destptr - (MOVWstorezero destptr mem))) --(Zero [8] destptr mem) -> -- (MOVDstorezero destptr mem) - --// Zero small numbers of words directly. --(Zero [12] destptr mem) -> -+// MOVD for store with DS must have offsets that are multiple of 4 -+(Zero [8] {t} destptr mem) && t.(*types.Type).Alignment()%4 == 0 -> -+ (MOVDstorezero destptr mem) -+(Zero [8] destptr mem) -> -+ (MOVWstorezero [4] destptr -+ (MOVWstorezero [0] destptr mem)) -+// Handle these cases only if aligned properly, otherwise use general case below -+(Zero [12] {t} destptr mem) && t.(*types.Type).Alignment()%4 == 0 -> - (MOVWstorezero [8] destptr - (MOVDstorezero [0] destptr mem)) --(Zero [16] destptr mem) -> -- (MOVDstorezero [8] destptr -+(Zero [16] {t} destptr mem) && t.(*types.Type).Alignment()%4 == 0 -> -+ (MOVDstorezero [8] destptr - (MOVDstorezero [0] destptr mem)) --(Zero [24] destptr mem) -> -- (MOVDstorezero [16] destptr -- (MOVDstorezero [8] destptr -- (MOVDstorezero [0] destptr mem))) --(Zero [32] destptr mem) -> -- (MOVDstorezero [24] destptr -- (MOVDstorezero [16] destptr -- (MOVDstorezero [8] destptr -- (MOVDstorezero [0] destptr mem)))) -- --(Zero [40] destptr mem) -> -- (MOVDstorezero [32] destptr -- (MOVDstorezero [24] destptr -- (MOVDstorezero [16] destptr -- (MOVDstorezero [8] destptr -- (MOVDstorezero [0] destptr mem))))) -- --(Zero [48] destptr mem) -> -- (MOVDstorezero [40] destptr -- (MOVDstorezero [32] destptr -- (MOVDstorezero [24] destptr -- (MOVDstorezero [16] destptr -- (MOVDstorezero [8] destptr -- (MOVDstorezero [0] destptr mem)))))) -- --(Zero [56] destptr mem) -> -- (MOVDstorezero [48] destptr -- (MOVDstorezero [40] destptr -- (MOVDstorezero [32] destptr -- (MOVDstorezero [24] destptr -- (MOVDstorezero [16] destptr -- (MOVDstorezero [8] destptr -- (MOVDstorezero [0] destptr mem))))))) -+(Zero [24] {t} destptr mem) && t.(*types.Type).Alignment()%4 == 0 -> -+ (MOVDstorezero [16] destptr -+ (MOVDstorezero [8] destptr -+ (MOVDstorezero [0] destptr mem))) -+(Zero [32] {t} destptr mem) && t.(*types.Type).Alignment()%4 == 0 -> -+ (MOVDstorezero [24] destptr -+ (MOVDstorezero [16] destptr -+ (MOVDstorezero [8] destptr -+ (MOVDstorezero [0] destptr mem)))) - - // Handle cases not handled above - (Zero [s] ptr mem) -> (LoweredZero [s] ptr mem) -diff --git a/src/cmd/compile/internal/ssa/rewritePPC64.go b/src/cmd/compile/internal/ssa/rewritePPC64.go -index 53d457f224..7167c9516b 100644 ---- a/src/cmd/compile/internal/ssa/rewritePPC64.go -+++ b/src/cmd/compile/internal/ssa/rewritePPC64.go -@@ -12688,35 +12688,39 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { - v.AddArg(v0) - return true - } -- // match: (Zero [8] destptr mem) -- // cond: -+ // match: (Zero [8] {t} destptr mem) -+ // cond: t.(*types.Type).Alignment()%4 == 0 - // result: (MOVDstorezero destptr mem) - for { - if v.AuxInt != 8 { - break - } -+ t := v.Aux - _ = v.Args[1] - destptr := v.Args[0] - mem := v.Args[1] -+ if !(t.(*types.Type).Alignment()%4 == 0) { -+ break -+ } - v.reset(OpPPC64MOVDstorezero) - v.AddArg(destptr) - v.AddArg(mem) - return true - } -- // match: (Zero [12] destptr mem) -+ // match: (Zero [8] destptr mem) - // cond: -- // result: (MOVWstorezero [8] destptr (MOVDstorezero [0] destptr mem)) -+ // result: (MOVWstorezero [4] destptr (MOVWstorezero [0] destptr mem)) - for { -- if v.AuxInt != 12 { -+ if v.AuxInt != 8 { - break - } - _ = v.Args[1] - destptr := v.Args[0] - mem := v.Args[1] - v.reset(OpPPC64MOVWstorezero) -- v.AuxInt = 8 -+ v.AuxInt = 4 - v.AddArg(destptr) -- v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -+ v0 := b.NewValue0(v.Pos, OpPPC64MOVWstorezero, types.TypeMem) - v0.AuxInt = 0 - v0.AddArg(destptr) - v0.AddArg(mem) -@@ -12728,17 +12732,21 @@ func rewriteValuePPC64_OpZero_0(v *Value) bool { - func rewriteValuePPC64_OpZero_10(v *Value) bool { - b := v.Block - _ = b -- // match: (Zero [16] destptr mem) -- // cond: -- // result: (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem)) -+ // match: (Zero [12] {t} destptr mem) -+ // cond: t.(*types.Type).Alignment()%4 == 0 -+ // result: (MOVWstorezero [8] destptr (MOVDstorezero [0] destptr mem)) - for { -- if v.AuxInt != 16 { -+ if v.AuxInt != 12 { - break - } -+ t := v.Aux - _ = v.Args[1] - destptr := v.Args[0] - mem := v.Args[1] -- v.reset(OpPPC64MOVDstorezero) -+ if !(t.(*types.Type).Alignment()%4 == 0) { -+ break -+ } -+ v.reset(OpPPC64MOVWstorezero) - v.AuxInt = 8 - v.AddArg(destptr) - v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -@@ -12748,161 +12756,85 @@ func rewriteValuePPC64_OpZero_10(v *Value) bool { - v.AddArg(v0) - return true - } -- // match: (Zero [24] destptr mem) -- // cond: -- // result: (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem))) -+ // match: (Zero [16] {t} destptr mem) -+ // cond: t.(*types.Type).Alignment()%4 == 0 -+ // result: (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem)) - for { -- if v.AuxInt != 24 { -+ if v.AuxInt != 16 { - break - } -+ t := v.Aux - _ = v.Args[1] - destptr := v.Args[0] - mem := v.Args[1] -- v.reset(OpPPC64MOVDstorezero) -- v.AuxInt = 16 -- v.AddArg(destptr) -- v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v0.AuxInt = 8 -- v0.AddArg(destptr) -- v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v1.AuxInt = 0 -- v1.AddArg(destptr) -- v1.AddArg(mem) -- v0.AddArg(v1) -- v.AddArg(v0) -- return true -- } -- // match: (Zero [32] destptr mem) -- // cond: -- // result: (MOVDstorezero [24] destptr (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem)))) -- for { -- if v.AuxInt != 32 { -+ if !(t.(*types.Type).Alignment()%4 == 0) { - break - } -- _ = v.Args[1] -- destptr := v.Args[0] -- mem := v.Args[1] - v.reset(OpPPC64MOVDstorezero) -- v.AuxInt = 24 -+ v.AuxInt = 8 - v.AddArg(destptr) - v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v0.AuxInt = 16 -+ v0.AuxInt = 0 - v0.AddArg(destptr) -- v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v1.AuxInt = 8 -- v1.AddArg(destptr) -- v2 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v2.AuxInt = 0 -- v2.AddArg(destptr) -- v2.AddArg(mem) -- v1.AddArg(v2) -- v0.AddArg(v1) -+ v0.AddArg(mem) - v.AddArg(v0) - return true - } -- // match: (Zero [40] destptr mem) -- // cond: -- // result: (MOVDstorezero [32] destptr (MOVDstorezero [24] destptr (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem))))) -+ // match: (Zero [24] {t} destptr mem) -+ // cond: t.(*types.Type).Alignment()%4 == 0 -+ // result: (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem))) - for { -- if v.AuxInt != 40 { -+ if v.AuxInt != 24 { - break - } -+ t := v.Aux - _ = v.Args[1] - destptr := v.Args[0] - mem := v.Args[1] -- v.reset(OpPPC64MOVDstorezero) -- v.AuxInt = 32 -- v.AddArg(destptr) -- v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v0.AuxInt = 24 -- v0.AddArg(destptr) -- v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v1.AuxInt = 16 -- v1.AddArg(destptr) -- v2 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v2.AuxInt = 8 -- v2.AddArg(destptr) -- v3 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v3.AuxInt = 0 -- v3.AddArg(destptr) -- v3.AddArg(mem) -- v2.AddArg(v3) -- v1.AddArg(v2) -- v0.AddArg(v1) -- v.AddArg(v0) -- return true -- } -- // match: (Zero [48] destptr mem) -- // cond: -- // result: (MOVDstorezero [40] destptr (MOVDstorezero [32] destptr (MOVDstorezero [24] destptr (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem)))))) -- for { -- if v.AuxInt != 48 { -+ if !(t.(*types.Type).Alignment()%4 == 0) { - break - } -- _ = v.Args[1] -- destptr := v.Args[0] -- mem := v.Args[1] - v.reset(OpPPC64MOVDstorezero) -- v.AuxInt = 40 -+ v.AuxInt = 16 - v.AddArg(destptr) - v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v0.AuxInt = 32 -+ v0.AuxInt = 8 - v0.AddArg(destptr) - v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v1.AuxInt = 24 -+ v1.AuxInt = 0 - v1.AddArg(destptr) -- v2 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v2.AuxInt = 16 -- v2.AddArg(destptr) -- v3 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v3.AuxInt = 8 -- v3.AddArg(destptr) -- v4 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v4.AuxInt = 0 -- v4.AddArg(destptr) -- v4.AddArg(mem) -- v3.AddArg(v4) -- v2.AddArg(v3) -- v1.AddArg(v2) -+ v1.AddArg(mem) - v0.AddArg(v1) - v.AddArg(v0) - return true - } -- // match: (Zero [56] destptr mem) -- // cond: -- // result: (MOVDstorezero [48] destptr (MOVDstorezero [40] destptr (MOVDstorezero [32] destptr (MOVDstorezero [24] destptr (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem))))))) -+ // match: (Zero [32] {t} destptr mem) -+ // cond: t.(*types.Type).Alignment()%4 == 0 -+ // result: (MOVDstorezero [24] destptr (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem)))) - for { -- if v.AuxInt != 56 { -+ if v.AuxInt != 32 { - break - } -+ t := v.Aux - _ = v.Args[1] - destptr := v.Args[0] - mem := v.Args[1] -+ if !(t.(*types.Type).Alignment()%4 == 0) { -+ break -+ } - v.reset(OpPPC64MOVDstorezero) -- v.AuxInt = 48 -+ v.AuxInt = 24 - v.AddArg(destptr) - v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v0.AuxInt = 40 -+ v0.AuxInt = 16 - v0.AddArg(destptr) - v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v1.AuxInt = 32 -+ v1.AuxInt = 8 - v1.AddArg(destptr) - v2 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v2.AuxInt = 24 -+ v2.AuxInt = 0 - v2.AddArg(destptr) -- v3 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v3.AuxInt = 16 -- v3.AddArg(destptr) -- v4 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v4.AuxInt = 8 -- v4.AddArg(destptr) -- v5 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) -- v5.AuxInt = 0 -- v5.AddArg(destptr) -- v5.AddArg(mem) -- v4.AddArg(v5) -- v3.AddArg(v4) -- v2.AddArg(v3) -+ v2.AddArg(mem) - v1.AddArg(v2) - v0.AddArg(v1) - v.AddArg(v0) --- -2.14.1 - |