]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/s390x: replace 4-byte NOP with a 2-byte NOP on s390x
authorRuixin(Peter) Bao <ruixin.bao@ibm.com>
Thu, 22 Aug 2019 13:53:54 +0000 (09:53 -0400)
committerMichael Munday <mike.munday@ibm.com>
Wed, 11 Sep 2019 12:19:26 +0000 (12:19 +0000)
Added a new instruction, NOPH, with the encoding [0x0700](i.e: bcr 0, 0) and
replace the current 4-byte nop that was encoded using the WORD instruction.

This reduces the size of .text section in go binary by around 17KB and make
generated code easier to read.

Change-Id: I6a756df39e93c4415ea6d038ba4af001b8ccb286
Reviewed-on: https://go-review.googlesource.com/c/go/+/194344
Reviewed-by: Michael Munday <mike.munday@ibm.com>
Run-TryBot: Michael Munday <mike.munday@ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/asm/internal/asm/testdata/s390x.s
src/cmd/compile/internal/s390x/ggen.go
src/cmd/internal/obj/s390x/a.out.go
src/cmd/internal/obj/s390x/anames.go
src/cmd/internal/obj/s390x/asmz.go

index c9f4d69736ee78ea1d71638111a41e0756acc16e..4c1ca2361c5329c37494c73021d352e62def49ec 100644 (file)
@@ -329,6 +329,9 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16-
        TCEB    F5, $8                 // ed5000080010
        TCDB    F15, $4095             // edf00fff0011
 
+       UNDEF                          // 00000000
+       NOPH                           // 0700
+
        VL      (R15), V1               // e710f0000006
        VST     V1, (R15)               // e710f000000e
        VL      (R15), V31              // e7f0f0000806
index 6a72b27ac56826205107290c30b6d722c7943809..ae9965c378cb124fa4f08d157b1e048f7360f598 100644 (file)
@@ -105,8 +105,5 @@ func zeroAuto(pp *gc.Progs, n *gc.Node) {
 }
 
 func ginsnop(pp *gc.Progs) *obj.Prog {
-       p := pp.Prog(s390x.AWORD)
-       p.From.Type = obj.TYPE_CONST
-       p.From.Offset = 0x47000000 // nop 0
-       return p
+       return pp.Prog(s390x.ANOPH)
 }
index d11a3834b083f330677f784264cceb515c8fa65f..08ead40f538fe09d56b113148449d167e2df2f45 100644 (file)
@@ -966,6 +966,8 @@ const (
        AVMSLOG
        AVMSLEOG
 
+       ANOPH // NOP
+
        // binary
        ABYTE
        AWORD
index a9bdfcafe9d2893f81fbff305e66182d2f3a35aa..2deae18b3cd62bb2156fafc866766b08b76e6837 100644 (file)
@@ -696,6 +696,7 @@ var Anames = []string{
        "VMSLEG",
        "VMSLOG",
        "VMSLEOG",
+       "NOPH",
        "BYTE",
        "WORD",
        "DWORD",
index 2b187edca5f218a5e39083062305806c56891ac1..d76eb258299480035dd570c953807638f8ff4f82 100644 (file)
@@ -314,6 +314,9 @@ var optab = []Optab{
        // undefined (deliberate illegal instruction)
        {i: 78, as: obj.AUNDEF},
 
+       // 2 byte no-operation
+       {i: 66, as: ANOPH},
+
        // vector instructions
 
        // VRX store
@@ -3394,6 +3397,9 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) {
                d2 := c.regoff(&p.To)
                zRXE(opcode, uint32(p.From.Reg), 0, 0, uint32(d2), 0, asm)
 
+       case 66:
+               zRR(op_BCR, 0, 0, asm)
+
        case 67: // fmov $0 freg
                var opcode uint32
                switch p.As {