// asmcheck | |
// Copyright 2018 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. | |
package codegen | |
var gx, gy int | |
// Test to make sure that (CMPQ (ANDQ x y) [0]) does not get rewritten to | |
// (TESTQ x y) if the ANDQ has other uses. If that rewrite happens, then one | |
// of the args of the ANDQ needs to be saved so it can be used as the arg to TESTQ. | |
func andWithUse(x, y int) int { | |
// Load x,y into registers, so those MOVQ will not appear at the z := x&y line. | |
gx, gy = x, y | |
// amd64:-"MOVQ" | |
z := x & y | |
if z == 0 { | |
return 77 | |
} | |
// use z by returning it | |
return z | |
} |