]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: amd64, allow XCHG on stack pointers
authorKeith Randall <khr@golang.org>
Sun, 19 Feb 2017 08:16:27 +0000 (00:16 -0800)
committerKeith Randall <khr@golang.org>
Sun, 19 Feb 2017 17:16:01 +0000 (17:16 +0000)
XCHG needs to allow the stack pointer as an argument because we have a
rewrite that incorporates the address of a local variable into the
instruction.

Fixes #19184

Change-Id: Ic438e6e1946332cdce3864d15abecd41b911b2a9
Reviewed-on: https://go-review.googlesource.com/37253
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/compile/internal/ssa/gen/AMD64Ops.go
src/cmd/compile/internal/ssa/opGen.go

index 32758b7bf70c4298f5137173b5b82f3333568a49..cdd553998440c55fef160adadf52ce84e4bb99ef 100644 (file)
@@ -134,7 +134,7 @@ func init() {
                gpstoreconst    = regInfo{inputs: []regMask{gpspsb, 0}}
                gpstoreidx      = regInfo{inputs: []regMask{gpspsb, gpsp, gpsp, 0}}
                gpstoreconstidx = regInfo{inputs: []regMask{gpspsb, gpsp, 0}}
-               gpstorexchg     = regInfo{inputs: []regMask{gp, gp, 0}, outputs: []regMask{gp}}
+               gpstorexchg     = regInfo{inputs: []regMask{gp, gpspsb, 0}, outputs: []regMask{gp}}
                cmpxchg         = regInfo{inputs: []regMask{gp, ax, gp, 0}, outputs: []regMask{gp, 0}, clobbers: ax}
 
                fp01     = regInfo{inputs: nil, outputs: fponly}
index e2eb376303b9fefc7813a9fae7f40927ca1945ab..26bcbe0b24491035058b53064aded6be903b05c9 100644 (file)
@@ -7635,8 +7635,8 @@ var opcodeTable = [...]opInfo{
                asm:            x86.AXCHGL,
                reg: regInfo{
                        inputs: []inputInfo{
-                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
-                               {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                               {0, 65519},      // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                               {1, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
                        outputs: []outputInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
@@ -7652,8 +7652,8 @@ var opcodeTable = [...]opInfo{
                asm:            x86.AXCHGQ,
                reg: regInfo{
                        inputs: []inputInfo{
-                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
-                               {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                               {0, 65519},      // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                               {1, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
                        outputs: []outputInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
@@ -7670,8 +7670,8 @@ var opcodeTable = [...]opInfo{
                asm:            x86.AXADDL,
                reg: regInfo{
                        inputs: []inputInfo{
-                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
-                               {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                               {0, 65519},      // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                               {1, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
                        outputs: []outputInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
@@ -7688,8 +7688,8 @@ var opcodeTable = [...]opInfo{
                asm:            x86.AXADDQ,
                reg: regInfo{
                        inputs: []inputInfo{
-                               {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
-                               {1, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                               {0, 65519},      // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15
+                               {1, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R14 R15 SB
                        },
                        outputs: []outputInfo{
                                {0, 65519}, // AX CX DX BX BP SI DI R8 R9 R10 R11 R12 R13 R14 R15