From: Ben Shi Date: Fri, 6 Jul 2018 23:39:01 +0000 (+0000) Subject: cmd/compile: fix a bug in 386 backend X-Git-Tag: go1.11beta2~196 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f5d4863130dff38f7126df6ed6f0303a4809aa04;p=gostls13.git cmd/compile: fix a bug in 386 backend The ADDLmodify/SUBLmodify/ANDLmodify/ORLmodify/XORLmodify should have clobberFlags set to true. Change-Id: Ie447d536db51334eddc70c00a722647282186a69 Reviewed-on: https://go-review.googlesource.com/122556 Run-TryBot: Ben Shi TryBot-Result: Gobot Gobot Reviewed-by: Keith Randall --- diff --git a/src/cmd/compile/internal/ssa/gen/386Ops.go b/src/cmd/compile/internal/ssa/gen/386Ops.go index 6c1d506ae4..0a77776b52 100644 --- a/src/cmd/compile/internal/ssa/gen/386Ops.go +++ b/src/cmd/compile/internal/ssa/gen/386Ops.go @@ -346,11 +346,11 @@ func init() { {name: "MOVLstore", argLength: 3, reg: gpstore, asm: "MOVL", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Write"}, // store 4 bytes in arg1 to arg0+auxint+aux. arg2=mem // direct binary-op on memory (read-modify-write) - {name: "ADDLmodify", argLength: 3, reg: gpstore, asm: "ADDL", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Read,Write"}, // *(arg0+auxint+aux) += arg1, arg2=mem - {name: "SUBLmodify", argLength: 3, reg: gpstore, asm: "SUBL", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Read,Write"}, // *(arg0+auxint+aux) -= arg1, arg2=mem - {name: "ANDLmodify", argLength: 3, reg: gpstore, asm: "ANDL", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Read,Write"}, // *(arg0+auxint+aux) &= arg1, arg2=mem - {name: "ORLmodify", argLength: 3, reg: gpstore, asm: "ORL", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Read,Write"}, // *(arg0+auxint+aux) |= arg1, arg2=mem - {name: "XORLmodify", argLength: 3, reg: gpstore, asm: "XORL", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, symEffect: "Read,Write"}, // *(arg0+auxint+aux) ^= arg1, arg2=mem + {name: "ADDLmodify", argLength: 3, reg: gpstore, asm: "ADDL", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, clobberFlags: true, symEffect: "Read,Write"}, // *(arg0+auxint+aux) += arg1, arg2=mem + {name: "SUBLmodify", argLength: 3, reg: gpstore, asm: "SUBL", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, clobberFlags: true, symEffect: "Read,Write"}, // *(arg0+auxint+aux) -= arg1, arg2=mem + {name: "ANDLmodify", argLength: 3, reg: gpstore, asm: "ANDL", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, clobberFlags: true, symEffect: "Read,Write"}, // *(arg0+auxint+aux) &= arg1, arg2=mem + {name: "ORLmodify", argLength: 3, reg: gpstore, asm: "ORL", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, clobberFlags: true, symEffect: "Read,Write"}, // *(arg0+auxint+aux) |= arg1, arg2=mem + {name: "XORLmodify", argLength: 3, reg: gpstore, asm: "XORL", aux: "SymOff", typ: "Mem", faultOnNilArg0: true, clobberFlags: true, symEffect: "Read,Write"}, // *(arg0+auxint+aux) ^= arg1, arg2=mem // indexed loads/stores {name: "MOVBloadidx1", argLength: 3, reg: gploadidx, commutative: true, asm: "MOVBLZX", aux: "SymOff", symEffect: "Read"}, // load a byte from arg0+arg1+auxint+aux. arg2=mem diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go index 4924947d8b..1942ab148a 100644 --- a/src/cmd/compile/internal/ssa/opGen.go +++ b/src/cmd/compile/internal/ssa/opGen.go @@ -4435,6 +4435,7 @@ var opcodeTable = [...]opInfo{ name: "ADDLmodify", auxType: auxSymOff, argLen: 3, + clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead | SymWrite, asm: x86.AADDL, @@ -4449,6 +4450,7 @@ var opcodeTable = [...]opInfo{ name: "SUBLmodify", auxType: auxSymOff, argLen: 3, + clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead | SymWrite, asm: x86.ASUBL, @@ -4463,6 +4465,7 @@ var opcodeTable = [...]opInfo{ name: "ANDLmodify", auxType: auxSymOff, argLen: 3, + clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead | SymWrite, asm: x86.AANDL, @@ -4477,6 +4480,7 @@ var opcodeTable = [...]opInfo{ name: "ORLmodify", auxType: auxSymOff, argLen: 3, + clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead | SymWrite, asm: x86.AORL, @@ -4491,6 +4495,7 @@ var opcodeTable = [...]opInfo{ name: "XORLmodify", auxType: auxSymOff, argLen: 3, + clobberFlags: true, faultOnNilArg0: true, symEffect: SymRead | SymWrite, asm: x86.AXORL,