]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/s390x: fix m6 field encoding for VSTRC instruction on s390x
authorSrinivas Pokala <Pokala.Srinivas@ibm.com>
Wed, 11 Sep 2024 04:53:00 +0000 (06:53 +0200)
committerCherry Mui <cherryyz@google.com>
Wed, 18 Sep 2024 15:49:24 +0000 (15:49 +0000)
M6 field for all extended mnemonics of VSTRC set to zero
This fixes VSTRC codegen to emit correctly  and added testcases for all
the extended mnemonics.

Fixes #69216

Change-Id: I2a1b7fb61d6bd6444286eab56a506225c90b75e7
Reviewed-on: https://go-review.googlesource.com/c/go/+/612315
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Vishwanatha HD <vishwanatha.hd@ibm.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
src/cmd/asm/internal/asm/testdata/s390x.s
src/cmd/internal/obj/s390x/asmz.go
src/cmd/internal/obj/s390x/vector.go

index 977190678f9585234b98bcdd5d0f0f122404faf7..db2ee199cf4404fca52b970732de03c148a894ad 100644 (file)
@@ -520,7 +520,20 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16-
        VSUMQF  V4, V5, V6              // e76450002067
        VSUMQG  V19, V20, V21           // e75340003e67
        VSUMB   V7, V8, V9              // e79780000064
-       VSUMH   V22, V23, V24           // e78670001e64
+       VSUMH   V22, V23, V24           // e78670001e64
+       VSTRC   V18, V20, V22, V24      // e78240006f8a
+       VSTRCB  V18, V20, V22, V24      // e78240006f8a
+       VSTRCH  V18, V20, V22, V24      // e78241006f8a
+       VSTRCF  V18, V20, V22, V24      // e78242006f8a
+       VSTRCBS V18, V20, V22, V24      // e78240106f8a
+       VSTRCHS V18, V20, V22, V24      // e78241106f8a
+       VSTRCFS V18, V20, V22, V24      // e78242106f8a
+       VSTRCZB V18, V20, V22, V24      // e78240206f8a
+       VSTRCZH V18, V20, V22, V24      // e78241206f8a
+       VSTRCZF V18, V20, V22, V24      // e78242206f8a
+       VSTRCZBS V18, V20, V22, V24     // e78240306f8a
+       VSTRCZHS V18, V20, V22, V24     // e78241306f8a
+       VSTRCZFS V18, V20, V22, V24     // e78242306f8a
 
        RET
        RET     foo(SB)
index 4af92a27f8d8235a65e499c561d748f8191300e6..fdcd1d5fd1ea8847b39458804cdd24f4e776d9a1 100644 (file)
@@ -1450,6 +1450,7 @@ func buildop(ctxt *obj.Link) {
                        opset(AVMALOB, r)
                        opset(AVMALOH, r)
                        opset(AVMALOF, r)
+                       opset(AVSTRC, r)
                        opset(AVSTRCB, r)
                        opset(AVSTRCH, r)
                        opset(AVSTRCF, r)
@@ -4346,8 +4347,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
                zVRRc(op, uint32(p.To.Reg), uint32(v2), uint32(p.From.Reg), m6, m5, m4, asm)
 
        case 120: // VRR-d
-               op, m6, _ := vop(p.As)
-               m5 := singleElementMask(p.As)
+               op, m6, m5 := vop(p.As)
                v1 := uint32(p.To.Reg)
                v2 := uint32(p.From.Reg)
                v3 := uint32(p.Reg)
index 00f578340f9db69bc43451d23a074c48af0c93af..e7e36eaf15abd61ad64161d9fa86f48d58c616d2 100644 (file)
@@ -45,8 +45,14 @@ func vop(as obj.As) (opcode, es, cs uint32) {
                return op_VAC, 0, 0
        case AVACQ:
                return op_VAC, 4, 0
-       case AVMSLG, AVMSLEG, AVMSLOG, AVMSLEOG:
+       case AVMSLG:
                return op_VMSL, 3, 0
+       case AVMSLEG:
+               return op_VMSL, 3, 8
+       case AVMSLOG:
+               return op_VMSL, 3, 4
+       case AVMSLEOG:
+               return op_VMSL, 3, 12
        case AVACCC:
                return op_VACCC, 0, 0
        case AVACCCQ:
@@ -1058,12 +1064,6 @@ func singleElementMask(as obj.As) uint32 {
                AWFTCIDB,
                AWFIDB:
                return 8
-       case AVMSLEG:
-               return 8
-       case AVMSLOG:
-               return 4
-       case AVMSLEOG:
-               return 12
        }
        return 0
 }