fix broken code produced for ominus

go/test: passes 89% (308/345)

R=rsc
APPROVED=rsc
DELTA=10  (5 added, 0 deleted, 5 changed)
OCL=36005
CL=36021
diff --git a/src/cmd/5g/cgen.c b/src/cmd/5g/cgen.c
index bba552f..347a530 100644
--- a/src/cmd/5g/cgen.c
+++ b/src/cmd/5g/cgen.c
@@ -222,11 +222,16 @@
 		goto ret;
 
 	case OMINUS:
-		nr = nl;
-		nl = &n1;
-		nodconst(nl, nr->type, 0);
-		a = optoas(OSUB, nr->type);
-		goto abop;
+		nodconst(&n3, nl->type, 0);
+		regalloc(&n2, nl->type, res);
+		regalloc(&n1, nl->type, N);
+		gmove(&n3, &n2);
+		cgen(nl, &n1);
+		gins(optoas(OSUB, nl->type), &n1, &n2);
+		gmove(&n2, res);
+		regfree(&n1);
+		regfree(&n2);
+		goto ret;
 
 	// symmetric binary
 	case OAND: