From: Carlos Eduardo Seo Date: Wed, 18 Apr 2018 15:03:26 +0000 (-0300) Subject: cmd/internal/obj/ppc64: add vector multiply instructions X-Git-Tag: go1.11beta1~767 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=4c15fdb32b58cae0a999fdd2fb8eae1c720c870b;p=gostls13.git cmd/internal/obj/ppc64: add vector multiply instructions This change adds vector multiply instructions to the assembler for ppc64x. Change-Id: I5143a2dc3736951344d43999066d38ab8be4a721 Reviewed-on: https://go-review.googlesource.com/107795 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/asm/internal/asm/testdata/ppc64.s b/src/cmd/asm/internal/asm/testdata/ppc64.s index c6150573fc..ba00b8f6e2 100644 --- a/src/cmd/asm/internal/asm/testdata/ppc64.s +++ b/src/cmd/asm/internal/asm/testdata/ppc64.s @@ -814,6 +814,23 @@ label1: VADDEUQM V4, V3, V2, V1 VADDECUQ V4, V3, V2, V1 +// Vector multiply, VX-form +// VRA,VRB,VRT produces +// VRT,VRA,VRB + VMULESB V2, V3, V1 + VMULOSB V2, V3, V1 + VMULEUB V2, V3, V1 + VMULOUB V2, V3, V1 + VMULESH V2, V3, V1 + VMULOSH V2, V3, V1 + VMULEUH V2, V3, V1 + VMULOUH V2, V3, V1 + VMULESW V2, V3, V1 + VMULOSW V2, V3, V1 + VMULEUW V2, V3, V1 + VMULOUW V2, V3, V1 + VMULUWM V2, V3, V1 + // Vector polynomial multiply-sum, VX-form // VRA,VRB,VRT produces // VRT,VRA,VRB diff --git a/src/cmd/internal/obj/ppc64/a.out.go b/src/cmd/internal/obj/ppc64/a.out.go index 55e544209d..8f56da0763 100644 --- a/src/cmd/internal/obj/ppc64/a.out.go +++ b/src/cmd/internal/obj/ppc64/a.out.go @@ -817,6 +817,19 @@ const ( AVSUBE AVSUBEUQM AVSUBECUQ + AVMULESB + AVMULOSB + AVMULEUB + AVMULOUB + AVMULESH + AVMULOSH + AVMULEUH + AVMULOUH + AVMULESW + AVMULOSW + AVMULEUW + AVMULOUW + AVMULUWM AVPMSUM AVPMSUMB AVPMSUMH diff --git a/src/cmd/internal/obj/ppc64/anames.go b/src/cmd/internal/obj/ppc64/anames.go index bfbb544d09..6006f15ad6 100644 --- a/src/cmd/internal/obj/ppc64/anames.go +++ b/src/cmd/internal/obj/ppc64/anames.go @@ -409,6 +409,19 @@ var Anames = []string{ "VSUBE", "VSUBEUQM", "VSUBECUQ", + "VMULESB", + "VMULOSB", + "VMULEUB", + "VMULOUB", + "VMULESH", + "VMULOSH", + "VMULEUH", + "VMULOUH", + "VMULESW", + "VMULOSW", + "VMULEUW", + "VMULOUW", + "VMULUWM", "VPMSUM", "VPMSUMB", "VPMSUMH", diff --git a/src/cmd/internal/obj/ppc64/asm9.go b/src/cmd/internal/obj/ppc64/asm9.go index bfa17fc3b0..4dcb52f9ee 100644 --- a/src/cmd/internal/obj/ppc64/asm9.go +++ b/src/cmd/internal/obj/ppc64/asm9.go @@ -423,6 +423,7 @@ var optab = []Optab{ {AVSUBE, C_VREG, C_VREG, C_VREG, C_VREG, 83, 4, 0}, /* vector subtract extended, va-form */ /* Vector multiply */ + {AVMULESB, C_VREG, C_VREG, C_NONE, C_VREG, 82, 4, 9}, /* vector multiply, vx-form */ {AVPMSUM, C_VREG, C_VREG, C_NONE, C_VREG, 82, 4, 0}, /* vector polynomial multiply & sum, vx-form */ {AVMSUMUDM, C_VREG, C_VREG, C_VREG, C_VREG, 83, 4, 0}, /* vector multiply-sum, va-form */ @@ -1344,6 +1345,19 @@ func buildop(ctxt *obj.Link) { opset(AVSUBEUQM, r0) opset(AVSUBECUQ, r0) + case AVMULESB: /* vmulesb, vmulosb, vmuleub, vmuloub, vmulosh, vmulouh, vmulesw, vmulosw, vmuleuw, vmulouw, vmuluwm */ + opset(AVMULOSB, r0) + opset(AVMULEUB, r0) + opset(AVMULOUB, r0) + opset(AVMULESH, r0) + opset(AVMULOSH, r0) + opset(AVMULEUH, r0) + opset(AVMULOUH, r0) + opset(AVMULESW, r0) + opset(AVMULOSW, r0) + opset(AVMULEUW, r0) + opset(AVMULOUW, r0) + opset(AVMULUWM, r0) case AVPMSUM: /* vpmsumb, vpmsumh, vpmsumw, vpmsumd */ opset(AVPMSUMB, r0) opset(AVPMSUMH, r0) @@ -4182,6 +4196,33 @@ func (c *ctxt9) oprrr(a obj.As) uint32 { case AVADDECUQ: return OPVX(4, 61, 0, 0) /* vaddecuq - v2.07 */ + case AVMULESB: + return OPVX(4, 776, 0, 0) /* vmulesb - v2.03 */ + case AVMULOSB: + return OPVX(4, 264, 0, 0) /* vmulosb - v2.03 */ + case AVMULEUB: + return OPVX(4, 520, 0, 0) /* vmuleub - v2.03 */ + case AVMULOUB: + return OPVX(4, 8, 0, 0) /* vmuloub - v2.03 */ + case AVMULESH: + return OPVX(4, 840, 0, 0) /* vmulesh - v2.03 */ + case AVMULOSH: + return OPVX(4, 328, 0, 0) /* vmulosh - v2.03 */ + case AVMULEUH: + return OPVX(4, 584, 0, 0) /* vmuleuh - v2.03 */ + case AVMULOUH: + return OPVX(4, 72, 0, 0) /* vmulouh - v2.03 */ + case AVMULESW: + return OPVX(4, 904, 0, 0) /* vmulesw - v2.07 */ + case AVMULOSW: + return OPVX(4, 392, 0, 0) /* vmulosw - v2.07 */ + case AVMULEUW: + return OPVX(4, 648, 0, 0) /* vmuleuw - v2.07 */ + case AVMULOUW: + return OPVX(4, 136, 0, 0) /* vmulouw - v2.07 */ + case AVMULUWM: + return OPVX(4, 137, 0, 0) /* vmuluwm - v2.07 */ + case AVPMSUMB: return OPVX(4, 1032, 0, 0) /* vpmsumb - v2.07 */ case AVPMSUMH: