// run // 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 main //go:noinline func cmovClobberAX64(v1, v2 int64, x1, x2 float64) int64 { r := v1 if x1 == x2 { r = v2 } return r } //go:noinline func cmovClobberAX32(v1, v2 int32, x1, x2 float64) int32 { r := v1 if x1 == x2 { r = v2 } return r } //go:noinline func cmovClobberAX16(v1, v2 int16, x1, x2 float64) int16 { r := v1 if x1 == x2 { r = v2 } return r } func main() { if cmovClobberAX16(1, 2, 4.0, 5.0) != 1 { panic("CMOVQEQF causes incorrect code") } if cmovClobberAX32(1, 2, 4.0, 5.0) != 1 { panic("CMOVQEQF causes incorrect code") } if cmovClobberAX64(1, 2, 4.0, 5.0) != 1 { panic("CMOVQEQF causes incorrect code") } }