]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/ppc64: add vector multiply instructions
authorCarlos Eduardo Seo <cseo@linux.vnet.ibm.com>
Wed, 18 Apr 2018 15:03:26 +0000 (12:03 -0300)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 18 Apr 2018 18:03:07 +0000 (18:03 +0000)
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 <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/asm/internal/asm/testdata/ppc64.s
src/cmd/internal/obj/ppc64/a.out.go
src/cmd/internal/obj/ppc64/anames.go
src/cmd/internal/obj/ppc64/asm9.go

index c6150573fc37b6a8c761532571a2049a4680f27c..ba00b8f6e25df553779d211fc73b04562b615859 100644 (file)
@@ -814,6 +814,23 @@ label1:
        VADDEUQM V4, V3, V2, V1
        VADDECUQ V4, V3, V2, V1
 
+//     Vector multiply, VX-form
+//     <MNEMONIC>  VRA,VRB,VRT produces
+//     <mnemonic>  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
 //     <MNEMONIC>  VRA,VRB,VRT produces
 //     <mnemonic>  VRT,VRA,VRB
index 55e544209d58183d26728435483e0189d1691143..8f56da0763d7c2c32b1b3612af893b8412308e15 100644 (file)
@@ -817,6 +817,19 @@ const (
        AVSUBE
        AVSUBEUQM
        AVSUBECUQ
+       AVMULESB
+       AVMULOSB
+       AVMULEUB
+       AVMULOUB
+       AVMULESH
+       AVMULOSH
+       AVMULEUH
+       AVMULOUH
+       AVMULESW
+       AVMULOSW
+       AVMULEUW
+       AVMULOUW
+       AVMULUWM
        AVPMSUM
        AVPMSUMB
        AVPMSUMH
index bfbb544d09451d1413fe232d06ea560d71351e22..6006f15ad64687633a529f34c21382177171cf11 100644 (file)
@@ -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",
index bfa17fc3b0a2fe6367c3af38c851992370c48091..4dcb52f9eee265b4511200afc920a46d462d273a 100644 (file)
@@ -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: