more code fiddling

R=r
OCL=28201
CL=28201
diff --git a/src/cmd/6g/cgen.c b/src/cmd/6g/cgen.c
index a2fbea4..d12bbef6 100644
--- a/src/cmd/6g/cgen.c
+++ b/src/cmd/6g/cgen.c
@@ -72,8 +72,8 @@
 			break;
 		}
 
-		if(sudoaddable(res, &addr)) {
-			a = optoas(OAS, res->type);
+		a = optoas(OAS, res->type);
+		if(sudoaddable(a, res, &addr)) {
 			if(f) {
 				regalloc(&n2, res->type, N);
 				cgen(n, &n2);
@@ -112,8 +112,8 @@
 		goto ret;
 	}
 
-	if(sudoaddable(n, &addr)) {
-		a = optoas(OAS, n->type);
+	a = optoas(OAS, n->type);
+	if(sudoaddable(a, n, &addr)) {
 		if(res->op == OREGISTER) {
 			p1 = gins(a, N, res);
 			p1->from = addr;
@@ -309,7 +309,7 @@
 		regalloc(&n1, nl->type, res);
 		cgen(nl, &n1);
 
-		if(sudoaddable(nr, &addr)) {
+		if(sudoaddable(a, nr, &addr)) {
 			p1 = gins(a, N, &n1);
 			p1->from = addr;
 			gmove(&n1, res);
@@ -317,7 +317,6 @@
 			regfree(&n1);
 			goto ret;
 		}
-
 		regalloc(&n2, nr->type, N);
 		cgen(nr, &n2);
 	} else {