[dev.ssa] cmd/compile: implement ONOT
Co-hacking with josharian at Gophercon.
Change-Id: Ia59dfab676c6ed598c2c25483439cd1395a4ea87
Reviewed-on: https://go-review.googlesource.com/12029
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go
index 90c1e0a..cff1ea7 100644
--- a/src/cmd/compile/internal/gc/ssa.go
+++ b/src/cmd/compile/internal/gc/ssa.go
@@ -496,6 +496,11 @@
b := s.expr(n.Right)
return s.newValue2(binOpToSSA[n.Op], a.Type, a, b)
+ // unary ops
+ case ONOT:
+ a := s.expr(n.Left)
+ return s.newValue1(ssa.OpNot, a.Type, a)
+
case OADDR:
return s.addr(n.Left)
@@ -1185,6 +1190,12 @@
p := Prog(obj.ACALL)
p.To.Type = obj.TYPE_REG
p.To.Reg = regnum(v.Args[0])
+ case ssa.OpAMD64XORQconst:
+ p := Prog(x86.AXORQ)
+ p.From.Type = obj.TYPE_CONST
+ p.From.Offset = v.AuxInt
+ p.To.Type = obj.TYPE_REG
+ p.To.Reg = regnum(v.Args[0])
case ssa.OpSP, ssa.OpSB:
// nothing to do
default: