From 155ec1d904cfe90e8a4c2380a71971518f4fcb87 Mon Sep 17 00:00:00 2001 From: Ben Eitzen Date: Thu, 23 Apr 2009 18:23:34 -0700 Subject: [PATCH] Clear upper bits of 64-bit indexing register when using types smaller than 64 bits. APPROVED=ken OCL=27811 CL=27823 --- src/cmd/6g/gsubr.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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) { -- 2.48.1