mirror of
https://github.com/golang/go
synced 2024-09-06 00:19:45 +00:00
cmd/compile: mark 'store multiple' as clobbering flags on s390x
Store multiple instructions can clobber flags on s390x when the offset passed into the assembler is outside the range representable with a signed 20 bit integer. This is because the assembler uses the agfi instruction to implement the large offset. The assembler could use a different sequence of instructions, but for now just mark the instruction as 'clobberFlags' since this is risk free. Noticed while investigating #38195. No test yet since I'm not sure how to get this bug to trigger and I haven't seen it affect real code. Change-Id: I4a6ab96455a3ef8ffacb76ef0166b97eb40ff925 Reviewed-on: https://go-review.googlesource.com/c/go/+/226759 Run-TryBot: Michael Munday <mike.munday@ibm.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
801cd7c84d
commit
a7a0f03050
|
@ -630,6 +630,7 @@ func init() {
|
|||
asm: "STMG",
|
||||
faultOnNilArg0: true,
|
||||
symEffect: "Write",
|
||||
clobberFlags: true, // TODO(mundaym): currently uses AGFI to handle large offsets
|
||||
},
|
||||
{
|
||||
name: "STMG3",
|
||||
|
@ -640,6 +641,7 @@ func init() {
|
|||
asm: "STMG",
|
||||
faultOnNilArg0: true,
|
||||
symEffect: "Write",
|
||||
clobberFlags: true, // TODO(mundaym): currently uses AGFI to handle large offsets
|
||||
},
|
||||
{
|
||||
name: "STMG4",
|
||||
|
@ -657,6 +659,7 @@ func init() {
|
|||
asm: "STMG",
|
||||
faultOnNilArg0: true,
|
||||
symEffect: "Write",
|
||||
clobberFlags: true, // TODO(mundaym): currently uses AGFI to handle large offsets
|
||||
},
|
||||
{
|
||||
name: "STM2",
|
||||
|
@ -667,6 +670,7 @@ func init() {
|
|||
asm: "STMY",
|
||||
faultOnNilArg0: true,
|
||||
symEffect: "Write",
|
||||
clobberFlags: true, // TODO(mundaym): currently uses AGFI to handle large offsets
|
||||
},
|
||||
{
|
||||
name: "STM3",
|
||||
|
@ -677,6 +681,7 @@ func init() {
|
|||
asm: "STMY",
|
||||
faultOnNilArg0: true,
|
||||
symEffect: "Write",
|
||||
clobberFlags: true, // TODO(mundaym): currently uses AGFI to handle large offsets
|
||||
},
|
||||
{
|
||||
name: "STM4",
|
||||
|
@ -694,6 +699,7 @@ func init() {
|
|||
asm: "STMY",
|
||||
faultOnNilArg0: true,
|
||||
symEffect: "Write",
|
||||
clobberFlags: true, // TODO(mundaym): currently uses AGFI to handle large offsets
|
||||
},
|
||||
|
||||
// large move
|
||||
|
|
|
@ -30110,6 +30110,7 @@ var opcodeTable = [...]opInfo{
|
|||
name: "STMG2",
|
||||
auxType: auxSymOff,
|
||||
argLen: 4,
|
||||
clobberFlags: true,
|
||||
faultOnNilArg0: true,
|
||||
symEffect: SymWrite,
|
||||
asm: s390x.ASTMG,
|
||||
|
@ -30125,6 +30126,7 @@ var opcodeTable = [...]opInfo{
|
|||
name: "STMG3",
|
||||
auxType: auxSymOff,
|
||||
argLen: 5,
|
||||
clobberFlags: true,
|
||||
faultOnNilArg0: true,
|
||||
symEffect: SymWrite,
|
||||
asm: s390x.ASTMG,
|
||||
|
@ -30141,6 +30143,7 @@ var opcodeTable = [...]opInfo{
|
|||
name: "STMG4",
|
||||
auxType: auxSymOff,
|
||||
argLen: 6,
|
||||
clobberFlags: true,
|
||||
faultOnNilArg0: true,
|
||||
symEffect: SymWrite,
|
||||
asm: s390x.ASTMG,
|
||||
|
@ -30158,6 +30161,7 @@ var opcodeTable = [...]opInfo{
|
|||
name: "STM2",
|
||||
auxType: auxSymOff,
|
||||
argLen: 4,
|
||||
clobberFlags: true,
|
||||
faultOnNilArg0: true,
|
||||
symEffect: SymWrite,
|
||||
asm: s390x.ASTMY,
|
||||
|
@ -30173,6 +30177,7 @@ var opcodeTable = [...]opInfo{
|
|||
name: "STM3",
|
||||
auxType: auxSymOff,
|
||||
argLen: 5,
|
||||
clobberFlags: true,
|
||||
faultOnNilArg0: true,
|
||||
symEffect: SymWrite,
|
||||
asm: s390x.ASTMY,
|
||||
|
@ -30189,6 +30194,7 @@ var opcodeTable = [...]opInfo{
|
|||
name: "STM4",
|
||||
auxType: auxSymOff,
|
||||
argLen: 6,
|
||||
clobberFlags: true,
|
||||
faultOnNilArg0: true,
|
||||
symEffect: SymWrite,
|
||||
asm: s390x.ASTMY,
|
||||
|
|
Loading…
Reference in a new issue