The cmd/cc bundled with 9c has additional code compared to our cmd/cc, and
without those code, 9c couldn't handle switch statement where the expression
is not just a simple int32 or int64 variable (e.g. g->status or int8 variable).
All credit goes to rsc.
LGTM=rsc
R=rsc, iant
CC=golang-codereviews
https://golang.org/cl/
125840043
void
swit1(C1 *q, int nc, int32 def, Node *n)
{
- Node tn;
-
+ Node tn, nod;
+
+ regalloc(&nod, n, Z);
+ /* always signed */
+ if(typev[n->type->etype])
+ nod.type = types[TVLONG];
+ else
+ nod.type = types[TLONG];
+ cgen(n, &nod);
regalloc(&tn, ®node, Z);
- swit2(q, nc, def, n, &tn);
+ swit2(q, nc, def, &nod, &tn);
regfree(&tn);
+ regfree(&nod);
}
void