From: Lynn Boger Date: Wed, 28 Aug 2019 13:46:11 +0000 (-0400) Subject: cmd/internal/obj/ppc64: add support for vmrgow,vmrgew X-Git-Tag: go1.14beta1~1279 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=8f79ca1d1ae78d3cc8025f0901540c45848347ab;p=gostls13.git cmd/internal/obj/ppc64: add support for vmrgow,vmrgew This adds support for ppc64 instructions vmrgow and vmrgew which are needed for an improved implementation of chacha20. Change-Id: I967a2de54236bcc573a99f7e2b222d5a8bb29e03 Reviewed-on: https://go-review.googlesource.com/c/go/+/192117 Run-TryBot: Lynn Boger TryBot-Result: Gobot Gobot Reviewed-by: Carlos Eduardo Seo --- diff --git a/src/cmd/asm/internal/asm/testdata/ppc64.s b/src/cmd/asm/internal/asm/testdata/ppc64.s index 8440375de6..ce520b1ecf 100644 --- a/src/cmd/asm/internal/asm/testdata/ppc64.s +++ b/src/cmd/asm/internal/asm/testdata/ppc64.s @@ -900,6 +900,13 @@ label1: // VRT,VRA,VRB,SHB VSLDOI $4, V2, V1, V0 +// Vector merge odd and even word +// VRA,VRB,VRT produces +// VRT,VRA,VRB + + VMRGOW V4,V5,V6 + VMRGEW V4,V5,V6 + // Vector count, VX-form // VRB,VRT produces // VRT,VRB diff --git a/src/cmd/internal/obj/ppc64/a.out.go b/src/cmd/internal/obj/ppc64/a.out.go index c637d54a50..c51e6e3fdb 100644 --- a/src/cmd/internal/obj/ppc64/a.out.go +++ b/src/cmd/internal/obj/ppc64/a.out.go @@ -929,6 +929,8 @@ const ( AVSHASIGMA AVSHASIGMAW AVSHASIGMAD + AVMRGEW + AVMRGOW /* VSX */ ALXV diff --git a/src/cmd/internal/obj/ppc64/anames.go b/src/cmd/internal/obj/ppc64/anames.go index 5a459ee1ce..cea5905311 100644 --- a/src/cmd/internal/obj/ppc64/anames.go +++ b/src/cmd/internal/obj/ppc64/anames.go @@ -519,6 +519,8 @@ var Anames = []string{ "VSHASIGMA", "VSHASIGMAW", "VSHASIGMAD", + "VMRGEW", + "VMRGOW", "LXV", "LXVD2X", "LXVDSX", diff --git a/src/cmd/internal/obj/ppc64/asm9.go b/src/cmd/internal/obj/ppc64/asm9.go index a7ac0ff0c0..ff0e984555 100644 --- a/src/cmd/internal/obj/ppc64/asm9.go +++ b/src/cmd/internal/obj/ppc64/asm9.go @@ -449,6 +449,9 @@ var optab = []Optab{ {AVCMPGT, C_VREG, C_VREG, C_NONE, C_VREG, 82, 4, 0}, /* vector compare greater than, vc-form */ {AVCMPNEZB, C_VREG, C_VREG, C_NONE, C_VREG, 82, 4, 0}, /* vector compare not equal, vx-form */ + /* Vector merge */ + {AVMRGOW, C_VREG, C_VREG, C_NONE, C_VREG, 82, 4, 0}, /* vector merge odd word, vx-form */ + /* Vector permute */ {AVPERM, C_VREG, C_VREG, C_VREG, C_VREG, 83, 4, 0}, /* vector permute, va-form */ @@ -1354,6 +1357,9 @@ func buildop(ctxt *obj.Link) { opset(AVANDC, r0) opset(AVNAND, r0) + case AVMRGOW: /* vmrgew, vmrgow */ + opset(AVMRGEW, r0) + case AVOR: /* vor, vorc, vxor, vnor, veqv */ opset(AVOR, r0) opset(AVORC, r0) @@ -4406,6 +4412,11 @@ func (c *ctxt9) oprrr(a obj.As) uint32 { case AVRLD: return OPVX(4, 196, 0, 0) /* vrld - v2.07 */ + case AVMRGOW: + return OPVX(4, 1676, 0, 0) /* vmrgow - v2.07 */ + case AVMRGEW: + return OPVX(4, 1932, 0, 0) /* vmrgew - v2.07 */ + case AVSLB: return OPVX(4, 260, 0, 0) /* vslh - v2.03 */ case AVSLH: