mirror of
https://github.com/golang/go
synced 2024-10-05 18:21:21 -06:00
[dev.ssa] cmd/compile: handle non-in-place NEG and NOT
This fixes the crypto/subtle tests. Change-Id: Ie6e721eec3481f67f13de1bfbd7988e227793148 Reviewed-on: https://go-review.googlesource.com/13000 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
85e0329fbc
commit
93c354b6cc
@ -2093,9 +2093,18 @@ func genValue(v *ssa.Value) {
|
|||||||
p.To.Reg = regnum(v.Args[0])
|
p.To.Reg = regnum(v.Args[0])
|
||||||
case ssa.OpAMD64NEGQ, ssa.OpAMD64NEGL, ssa.OpAMD64NEGW, ssa.OpAMD64NEGB,
|
case ssa.OpAMD64NEGQ, ssa.OpAMD64NEGL, ssa.OpAMD64NEGW, ssa.OpAMD64NEGB,
|
||||||
ssa.OpAMD64NOTQ, ssa.OpAMD64NOTL, ssa.OpAMD64NOTW, ssa.OpAMD64NOTB:
|
ssa.OpAMD64NOTQ, ssa.OpAMD64NOTL, ssa.OpAMD64NOTW, ssa.OpAMD64NOTB:
|
||||||
|
x := regnum(v.Args[0])
|
||||||
|
r := regnum(v)
|
||||||
|
if x != r {
|
||||||
|
p := Prog(regMoveAMD64(v.Type.Size()))
|
||||||
|
p.From.Type = obj.TYPE_REG
|
||||||
|
p.From.Reg = x
|
||||||
|
p.To.Type = obj.TYPE_REG
|
||||||
|
p.To.Reg = r
|
||||||
|
}
|
||||||
p := Prog(v.Op.Asm())
|
p := Prog(v.Op.Asm())
|
||||||
p.To.Type = obj.TYPE_REG
|
p.To.Type = obj.TYPE_REG
|
||||||
p.To.Reg = regnum(v.Args[0])
|
p.To.Reg = r
|
||||||
case ssa.OpSP, ssa.OpSB:
|
case ssa.OpSP, ssa.OpSB:
|
||||||
// nothing to do
|
// nothing to do
|
||||||
case ssa.OpAMD64SETEQ, ssa.OpAMD64SETNE,
|
case ssa.OpAMD64SETEQ, ssa.OpAMD64SETNE,
|
||||||
|
Loading…
Reference in New Issue
Block a user