summaryrefslogtreecommitdiff
path: root/src/cmd/6g/cgen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/6g/cgen.c')
-rw-r--r--src/cmd/6g/cgen.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/cmd/6g/cgen.c b/src/cmd/6g/cgen.c
index 43bec0059..fd8493231 100644
--- a/src/cmd/6g/cgen.c
+++ b/src/cmd/6g/cgen.c
@@ -717,6 +717,7 @@ bgen(Node *n, int true, Prog *to)
int et, a;
Node *nl, *nr, *l, *r;
Node n1, n2, tmp;
+ NodeList *ll;
Prog *p1, *p2;
if(debug['g']) {
@@ -834,7 +835,10 @@ bgen(Node *n, int true, Prog *to)
p1 = gbranch(AJMP, T);
p2 = gbranch(AJMP, T);
patch(p1, pc);
+ ll = n->ninit; // avoid re-genning ninit
+ n->ninit = nil;
bgen(n, 1, p2);
+ n->ninit = ll;
patch(gbranch(AJMP, T), to);
patch(p2, pc);
goto ret;
@@ -1019,13 +1023,13 @@ stkof(Node *n)
* memmove(&ns, &n, w);
*/
void
-sgen(Node *n, Node *ns, int32 w)
+sgen(Node *n, Node *ns, int64 w)
{
Node nodl, nodr, oldl, oldr, cx, oldcx, tmp;
int32 c, q, odst, osrc;
if(debug['g']) {
- print("\nsgen w=%d\n", w);
+ print("\nsgen w=%lld\n", w);
dump("r", n);
dump("res", ns);
}
@@ -1034,7 +1038,7 @@ sgen(Node *n, Node *ns, int32 w)
fatal("sgen UINF");
if(w < 0)
- fatal("sgen copy %d", w);
+ fatal("sgen copy %lld", w);
if(w == 16)
if(componentgen(n, ns))