[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: