Commit 7594440e authored by Russ Cox's avatar Russ Cox

cmd/8g: add a few missing splitclean

Fixes #887.

R=ken2
CC=golang-dev
https://golang.org/cl/7303061
parent 2b44c33b
......@@ -704,6 +704,7 @@ cgen_shift(int op, int bounded, Node *nl, Node *nr, Node *res)
regalloc(&n1, types[TUINT32], &n1); // to hold the shift type in CX
split64(&nt, &lo, &hi);
gmove(&lo, &n1);
splitclean();
}
} else {
if(nr->type->width > 4) {
......@@ -716,6 +717,7 @@ cgen_shift(int op, int bounded, Node *nl, Node *nr, Node *res)
p2 = gbranch(optoas(ONE, types[TUINT32]), T, +1);
gins(optoas(OCMP, types[TUINT32]), &n1, ncon(w));
p1 = gbranch(optoas(OLT, types[TUINT32]), T, +1);
splitclean();
patch(p2, pc);
} else {
gins(optoas(OCMP, nr->type), &n1, ncon(w));
......
......@@ -1168,9 +1168,9 @@ split64(Node *n, Node *lo, Node *hi)
if(!is64(n->type))
fatal("split64 %T", n->type);
sclean[nsclean].op = OEMPTY;
if(nsclean >= nelem(sclean))
fatal("split64 clean");
sclean[nsclean].op = OEMPTY;
nsclean++;
switch(n->op) {
default:
......
// compile
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Used to leak registers on 8g.
package p
func f(x byte, y uint64) {
var r byte
switch y {
case 1:
r = x << y // '>>' triggers it too
case 2:
r = x << y
case 3:
r = x << y
case 4:
r = x << y
case 5:
r = x << y
case 6:
r = x << y
case 7:
r = x << y
case 8:
r = x << y
case 9:
r = x << y
case 10:
r = x << y
}
_ = r
}
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