From: Ken Thompson Date: Thu, 30 Oct 2008 21:32:04 +0000 (-0700) Subject: shift bug X-Git-Tag: weekly.2009-11-06~2848 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=fd922c875d302a2234c62285051df561a16fc4e6;p=gostls13.git shift bug R=r OCL=18166 CL=18166 --- diff --git a/src/cmd/6g/gen.c b/src/cmd/6g/gen.c index 39c9d6f38b..f4a15f2f20 100644 --- a/src/cmd/6g/gen.c +++ b/src/cmd/6g/gen.c @@ -1047,13 +1047,16 @@ cgen_shift(int op, Node *nl, Node *nr, Node *res) regalloc(&n1, nr->type, &n1); // clean out the CL register - if(rcl && !samereg(res, &n1)) { + if(rcl) { regalloc(&n2, types[TINT64], N); gins(AMOVQ, &n1, &n2); regfree(&n1); reg[D_CX] = 0; - cgen_shift(op, nl, nr, res); + if(samereg(res, &n1)) + cgen_shift(op, nl, nr, &n2); + else + cgen_shift(op, nl, nr, res); reg[D_CX] = rcl; gins(AMOVQ, &n2, &n1);