// 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 | |
} |