From ca029d34b659c2086ea6f9c84fd9281f2b9bd5ad Mon Sep 17 00:00:00 2001 From: Ken Thompson Date: Fri, 27 Jun 2008 17:53:23 -0700 Subject: [PATCH] another both sides functions SVN=125230 --- src/cmd/6g/cgen.c | 8 +++++--- src/cmd/6g/gen.c | 10 ++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/cmd/6g/cgen.c b/src/cmd/6g/cgen.c index c0e685318d..b8c49b4f92 100644 --- a/src/cmd/6g/cgen.c +++ b/src/cmd/6g/cgen.c @@ -29,8 +29,10 @@ cgen(Node *n, Node *res) 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(Node *n, Node *res) 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 36e0ea9060..f4b8652f6a 100644 --- a/src/cmd/6g/gen.c +++ b/src/cmd/6g/gen.c @@ -746,7 +746,12 @@ cgen_asop(Node *n) 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 @@ cgen_as(Node *nl, Node *nr, int op) ullmancalc(nr); } - if(nr->ullman >= UINF && nl->ullman >= UINF) { - fatal("cgen_as both sides call"); - } cgen(nr, nl); ret: -- 2.48.1