another both sides functions
SVN=125230
diff --git a/src/cmd/6g/cgen.c b/src/cmd/6g/cgen.c
index c0e6853..b8c49b4 100644
--- a/src/cmd/6g/cgen.c
+++ b/src/cmd/6g/cgen.c
@@ -29,8 +29,10 @@
if(n->op == OINDREG)
fatal("cgen: this is going to misscompile");
if(res->ullman >= UINF) {
- dump("fncalls", n);
- fatal("cgen: node and result functions");
+ tempname(&n1, n->type);
+ cgen(n, &n1);
+ cgen(&n1, res);
+ goto ret;
}
}
@@ -45,7 +47,7 @@
cgen(n, &n1);
cgen(&n1, res);
regfree(&n1);
- return;
+ goto ret;
}
igen(res, &n1, N);
diff --git a/src/cmd/6g/gen.c b/src/cmd/6g/gen.c
index 36e0ea9..f4b8652 100644
--- a/src/cmd/6g/gen.c
+++ b/src/cmd/6g/gen.c
@@ -746,7 +746,12 @@
nr = n->right;
if(nr->ullman >= UINF && nl->ullman >= UINF) {
- fatal("cgen_asop: both sides call");
+ tempname(&n1, nr->type);
+ cgen(nr, &n1);
+ n2 = *n;
+ n2.right = &n1;
+ cgen_asop(&n2);
+ return;
}
if(nr->ullman > nl->ullman) {
@@ -881,9 +886,6 @@
ullmancalc(nr);
}
- if(nr->ullman >= UINF && nl->ullman >= UINF) {
- fatal("cgen_as both sides call");
- }
cgen(nr, nl);
ret: