mirror of
https://github.com/golang/go.git
synced 2025-10-21 20:13:20 +00:00
41 lines
579 B
Go
41 lines
579 B
Go
![]() |
// asmcheck
|
||
|
|
||
|
// Copyright 2025 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
|
||
|
|
||
|
import "cmp"
|
||
|
|
||
|
func isNaN[T cmp.Ordered](x T) bool {
|
||
|
return x != x
|
||
|
}
|
||
|
|
||
|
func compare[T cmp.Ordered](x, y T) int {
|
||
|
// amd64:-"TESTB"
|
||
|
// arm64:-"MOVB"
|
||
|
xNaN := isNaN(x)
|
||
|
yNaN := isNaN(y)
|
||
|
if xNaN {
|
||
|
if yNaN {
|
||
|
return 0
|
||
|
}
|
||
|
return -1
|
||
|
}
|
||
|
if yNaN {
|
||
|
return +1
|
||
|
}
|
||
|
if x < y {
|
||
|
return -1
|
||
|
}
|
||
|
if x > y {
|
||
|
return +1
|
||
|
}
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
func usesCompare(a, b int) int {
|
||
|
return compare(a, b)
|
||
|
}
|