| // 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 x [2]bool | 
 | var x8 [2]uint8 | 
 | var x16 [2]uint16 | 
 | var x32 [2]uint32 | 
 | var x64 [2]uint64 | 
 |  | 
 | func compMem1() int { | 
 | 	// amd64:`CMPB\t"".x\+1\(SB\), [$]0` | 
 | 	if x[1] { | 
 | 		return 1 | 
 | 	} | 
 | 	// amd64:`CMPB\t"".x8\+1\(SB\), [$]7` | 
 | 	if x8[1] == 7 { | 
 | 		return 1 | 
 | 	} | 
 | 	// amd64:`CMPW\t"".x16\+2\(SB\), [$]7` | 
 | 	if x16[1] == 7 { | 
 | 		return 1 | 
 | 	} | 
 | 	// amd64:`CMPL\t"".x32\+4\(SB\), [$]7` | 
 | 	if x32[1] == 7 { | 
 | 		return 1 | 
 | 	} | 
 | 	// amd64:`CMPQ\t"".x64\+8\(SB\), [$]7` | 
 | 	if x64[1] == 7 { | 
 | 		return 1 | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | //go:noinline | 
 | func f(x int) bool { | 
 | 	return false | 
 | } | 
 |  | 
 | //go:noinline | 
 | func f8(x int) int8 { | 
 | 	return 0 | 
 | } | 
 |  | 
 | //go:noinline | 
 | func f16(x int) int16 { | 
 | 	return 0 | 
 | } | 
 |  | 
 | //go:noinline | 
 | func f32(x int) int32 { | 
 | 	return 0 | 
 | } | 
 |  | 
 | //go:noinline | 
 | func f64(x int) int64 { | 
 | 	return 0 | 
 | } | 
 |  | 
 | func compMem2() int { | 
 | 	// amd64:`CMPB\t8\(SP\), [$]0` | 
 | 	if f(3) { | 
 | 		return 1 | 
 | 	} | 
 | 	// amd64:`CMPB\t8\(SP\), [$]7` | 
 | 	if f8(3) == 7 { | 
 | 		return 1 | 
 | 	} | 
 | 	// amd64:`CMPW\t8\(SP\), [$]7` | 
 | 	if f16(3) == 7 { | 
 | 		return 1 | 
 | 	} | 
 | 	// amd64:`CMPL\t8\(SP\), [$]7` | 
 | 	if f32(3) == 7 { | 
 | 		return 1 | 
 | 	} | 
 | 	// amd64:`CMPQ\t8\(SP\), [$]7` | 
 | 	if f64(3) == 7 { | 
 | 		return 1 | 
 | 	} | 
 | 	return 0 | 
 | } | 
 |  | 
 | func compMem3(x, y *int) (int, bool) { | 
 | 	// We can do comparisons of a register with memory even if | 
 | 	// the register is used subsequently. | 
 | 	r := *x | 
 | 	// amd64:`CMPQ\t\(` | 
 | 	// 386:`CMPL\t\(` | 
 | 	return r, r < *y | 
 | } |