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