Skip to content

Commit 889178d

Browse files
srinivas-pokalacherrymui
authored andcommitted
cmd/internal/obj/s390x: fix m6 field encoding for VSTRC instruction on s390x
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 <[email protected]> Reviewed-by: Cherry Mui <[email protected]> Reviewed-by: Vishwanatha HD <[email protected]> Reviewed-by: Carlos Amedee <[email protected]>
1 parent 6cce191 commit 889178d

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

src/cmd/asm/internal/asm/testdata/s390x.s

+14-1
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,20 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16-
520520
VSUMQF V4, V5, V6 // e76450002067
521521
VSUMQG V19, V20, V21 // e75340003e67
522522
VSUMB V7, V8, V9 // e79780000064
523-
VSUMH V22, V23, V24 // e78670001e64
523+
VSUMH V22, V23, V24 // e78670001e64
524+
VSTRC V18, V20, V22, V24 // e78240006f8a
525+
VSTRCB V18, V20, V22, V24 // e78240006f8a
526+
VSTRCH V18, V20, V22, V24 // e78241006f8a
527+
VSTRCF V18, V20, V22, V24 // e78242006f8a
528+
VSTRCBS V18, V20, V22, V24 // e78240106f8a
529+
VSTRCHS V18, V20, V22, V24 // e78241106f8a
530+
VSTRCFS V18, V20, V22, V24 // e78242106f8a
531+
VSTRCZB V18, V20, V22, V24 // e78240206f8a
532+
VSTRCZH V18, V20, V22, V24 // e78241206f8a
533+
VSTRCZF V18, V20, V22, V24 // e78242206f8a
534+
VSTRCZBS V18, V20, V22, V24 // e78240306f8a
535+
VSTRCZHS V18, V20, V22, V24 // e78241306f8a
536+
VSTRCZFS V18, V20, V22, V24 // e78242306f8a
524537

525538
RET
526539
RET foo(SB)

src/cmd/internal/obj/s390x/asmz.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1450,6 +1450,7 @@ func buildop(ctxt *obj.Link) {
14501450
opset(AVMALOB, r)
14511451
opset(AVMALOH, r)
14521452
opset(AVMALOF, r)
1453+
opset(AVSTRC, r)
14531454
opset(AVSTRCB, r)
14541455
opset(AVSTRCH, r)
14551456
opset(AVSTRCF, r)
@@ -4346,8 +4347,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
43464347
zVRRc(op, uint32(p.To.Reg), uint32(v2), uint32(p.From.Reg), m6, m5, m4, asm)
43474348

43484349
case 120: // VRR-d
4349-
op, m6, _ := vop(p.As)
4350-
m5 := singleElementMask(p.As)
4350+
op, m6, m5 := vop(p.As)
43514351
v1 := uint32(p.To.Reg)
43524352
v2 := uint32(p.From.Reg)
43534353
v3 := uint32(p.Reg)

src/cmd/internal/obj/s390x/vector.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,14 @@ func vop(as obj.As) (opcode, es, cs uint32) {
4545
return op_VAC, 0, 0
4646
case AVACQ:
4747
return op_VAC, 4, 0
48-
case AVMSLG, AVMSLEG, AVMSLOG, AVMSLEOG:
48+
case AVMSLG:
4949
return op_VMSL, 3, 0
50+
case AVMSLEG:
51+
return op_VMSL, 3, 8
52+
case AVMSLOG:
53+
return op_VMSL, 3, 4
54+
case AVMSLEOG:
55+
return op_VMSL, 3, 12
5056
case AVACCC:
5157
return op_VACCC, 0, 0
5258
case AVACCCQ:
@@ -1058,12 +1064,6 @@ func singleElementMask(as obj.As) uint32 {
10581064
AWFTCIDB,
10591065
AWFIDB:
10601066
return 8
1061-
case AVMSLEG:
1062-
return 8
1063-
case AVMSLOG:
1064-
return 4
1065-
case AVMSLEOG:
1066-
return 12
10671067
}
10681068
return 0
10691069
}

0 commit comments

Comments
 (0)