]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix a bug in 386 backend
authorBen Shi <powerman1st@163.com>
Fri, 6 Jul 2018 23:39:01 +0000 (23:39 +0000)
committerBen Shi <powerman1st@163.com>
Sat, 7 Jul 2018 00:05:34 +0000 (00:05 +0000)
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 <powerman1st@163.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/ssa/gen/386Ops.go
src/cmd/compile/internal/ssa/opGen.go

index 6c1d506ae4adc2714d9e9f8d0b3e2507e459107c..0a77776b52e77795d36f30b3b2f490de0b013f32 100644 (file)
@@ -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
index 4924947d8b46c933a44a5e9c6d7fccc7de4da3e8..1942ab148aaa685f14c9cad05611fca58661e86d 100644 (file)
@@ -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,