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>
TCEB F5, $8 // ed5000080010
TCDB F15, $4095 // edf00fff0011
+ UNDEF // 00000000
+ NOPH // 0700
+
VL (R15), V1 // e710f0000006
VST V1, (R15) // e710f000000e
VL (R15), V31 // e7f0f0000806
}
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)
}
AVMSLOG
AVMSLEOG
+ ANOPH // NOP
+
// binary
ABYTE
AWORD
"VMSLEG",
"VMSLOG",
"VMSLEOG",
+ "NOPH",
"BYTE",
"WORD",
"DWORD",
// undefined (deliberate illegal instruction)
{i: 78, as: obj.AUNDEF},
+ // 2 byte no-operation
+ {i: 66, as: ANOPH},
+
// vector instructions
// VRX store
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 {