reported here http://9fans.net/narchive/2009/08/1042

i haven't had much time to even look at this problem.  this
will at least abort the compile, rather than miscompile.  so
it's marginally better than nothing.

the warning is just documentation of the problem.  i recompiled
everything with this patch and didn't see it trip (except in
my lucky code), so i wonder if there is always a problem if
t->right->reg != D_DX holds.

/n/sources/plan9//sys/src/cmd/8c/cgen64.c:2293,2298 - cgen64.c:2293,2300
                                        evacaxdx(l);
                                }
                        }
+                       if(l->op == OSUB && l->right != Z && l->right->op == 
OCAST)
+                               warn(n, "likely vlong bug");
                        t = regpair(Z, n);
                        sugen(r, t, 8);
                        r = t;
/n/sources/plan9//sys/src/cmd/8c/cgen64.c:2336,2341 - cgen64.c:2338,2344
                        zapreg(t->left);
                }
                if(t->right->reg != D_DX) {
+                       fatal(Z, "vlong double-spill botch");
                        d = &nod4;
                        regsalloc(d, t->right);
                        gmove(&nod2, d);

- erik

Reply via email to