]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/obj/s390x: add support of SPM instruction
authorCherry Zhang <cherryyz@google.com>
Wed, 30 Oct 2019 01:02:35 +0000 (21:02 -0400)
committerCherry Zhang <cherryyz@google.com>
Mon, 4 Nov 2019 17:19:36 +0000 (17:19 +0000)
For restoring condition code (we already support IPM instruction
for saving condition code).

Change-Id: I56d376df44a5f831134a130d052521cec6b5b781
Reviewed-on: https://go-review.googlesource.com/c/go/+/204104
Reviewed-by: Michael Munday <mike.munday@ibm.com>
src/cmd/asm/internal/asm/testdata/s390x.s
src/cmd/internal/obj/s390x/a.out.go
src/cmd/internal/obj/s390x/anames.go
src/cmd/internal/obj/s390x/asmz.go

index ad5241f92649394598a9255513b5c540b774100b..85adb476b7dfc8574fee1791714692c5a6c84e28 100644 (file)
@@ -284,6 +284,9 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16-
        IPM     R3                     // b2220030
        IPM     R12                    // b22200c0
 
+       SPM     R1                     // 0410
+       SPM     R10                    // 04a0
+
        BRC     $7, 0(PC)              // a7740000
        BNE     0(PC)                  // a7740000
        BEQ     0(PC)                  // a7840000
index 7dcf3e8cfe7a65fdd583a2758a29bc53fecaac05..6768be097760dd9d16a7c04abf695df75ee6271b 100644 (file)
@@ -386,6 +386,9 @@ const (
        // insert program mask
        AIPM
 
+       // set program mask
+       ASPM
+
        // compare and swap
        ACS
        ACSG
index c3a76a0df0b6790eb007c9b48fa033488e4759ee..d8556d86458677818de8c841f8be3b5150a202ec 100644 (file)
@@ -138,6 +138,7 @@ var Anames = []string{
        "TMLH",
        "TMLL",
        "IPM",
+       "SPM",
        "CS",
        "CSG",
        "SYNC",
index 48353a412182ae008ba80c13a10e4ecab8057a77..0402e8ce0373041dafa377a892b62c239e38748f 100644 (file)
@@ -286,6 +286,9 @@ var optab = []Optab{
        // insert program mask
        {i: 92, as: AIPM, a1: C_REG},
 
+       // set program mask
+       {i: 76, as: ASPM, a1: C_REG},
+
        // 32-bit access registers
        {i: 68, as: AMOVW, a1: C_AREG, a6: C_REG},
        {i: 68, as: AMOVWZ, a1: C_AREG, a6: C_REG},
@@ -3630,6 +3633,9 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
                }
                c.addrilreloc(p.From.Sym, int64(i2))
 
+       case 76: // set program mask
+               zRR(op_SPM, uint32(p.From.Reg), 0, asm)
+
        case 77: // syscall $constant
                if p.From.Offset > 255 || p.From.Offset < 1 {
                        c.ctxt.Diag("illegal system call; system call number out of range: %v", p)