Commit 95e8a3a1 authored by Shenghou Ma's avatar Shenghou Ma

[dev.power64] cmd/9c: fix switch bug

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
parent 4be75c8f
...@@ -32,11 +32,19 @@ ...@@ -32,11 +32,19 @@
void void
swit1(C1 *q, int nc, int32 def, Node *n) 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, &regnode, Z); regalloc(&tn, &regnode, Z);
swit2(q, nc, def, n, &tn); swit2(q, nc, def, &nod, &tn);
regfree(&tn); regfree(&tn);
regfree(&nod);
} }
void void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment