From: Ben Eitzen Date: Fri, 24 Apr 2009 01:23:34 +0000 (-0700) Subject: Clear upper bits of 64-bit indexing register when using types smaller than 64 bits. X-Git-Tag: weekly.2009-11-06~1769 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=155ec1d904cfe90e8a4c2380a71971518f4fcb87;p=gostls13.git Clear upper bits of 64-bit indexing register when using types smaller than 64 bits. APPROVED=ken OCL=27811 CL=27823 --- diff --git a/src/cmd/6g/gsubr.c b/src/cmd/6g/gsubr.c index dfbbb4999a..231caa6331 100644 --- a/src/cmd/6g/gsubr.c +++ b/src/cmd/6g/gsubr.c @@ -1761,7 +1761,7 @@ sudoaddable(Node *n, Addr *a) int o, i, w; int oary[10]; vlong v; - Node n1, n2, *nn, *l, *r; + Node n1, n2, n3, *nn, *l, *r; Node *reg, *reg1; Prog *p1; Type *t; @@ -1868,7 +1868,10 @@ oindex: if(issigned[r->type->etype]) t = types[TINT64]; regalloc(reg1, t, N); - cgen(r, reg1); + regalloc(&n3, r->type, reg1); + cgen(r, &n3); + gmove(&n3, reg1); + regfree(&n3); // load the array (reg) if(l->ullman <= r->ullman) {