summaryrefslogtreecommitdiffstats
path: root/test/codegen/bool.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/codegen/bool.go')
-rw-r--r--test/codegen/bool.go213
1 files changed, 213 insertions, 0 deletions
diff --git a/test/codegen/bool.go b/test/codegen/bool.go
new file mode 100644
index 0000000..faf7033
--- /dev/null
+++ b/test/codegen/bool.go
@@ -0,0 +1,213 @@
+// asmcheck
+
+// Copyright 2020 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
+
+// This file contains codegen tests related to boolean simplifications/optimizations.
+
+func convertNeq0B(x uint8, c bool) bool {
+ // amd64:"ANDL\t[$]1",-"SETNE"
+ // ppc64x:"ANDCC",-"CMPW",-"ISEL"
+ b := x&1 != 0
+ return c && b
+}
+
+func convertNeq0W(x uint16, c bool) bool {
+ // amd64:"ANDL\t[$]1",-"SETNE"
+ // ppc64x:"ANDCC",-"CMPW",-"ISEL"
+ b := x&1 != 0
+ return c && b
+}
+
+func convertNeq0L(x uint32, c bool) bool {
+ // amd64:"ANDL\t[$]1",-"SETB"
+ // ppc64x:"ANDCC",-"CMPW",-"ISEL"
+ b := x&1 != 0
+ return c && b
+}
+
+func convertNeq0Q(x uint64, c bool) bool {
+ // amd64:"ANDL\t[$]1",-"SETB"
+ // ppc64x:"ANDCC",-"CMP",-"ISEL"
+ b := x&1 != 0
+ return c && b
+}
+
+func convertNeqBool32(x uint32) bool {
+ // ppc64x:"ANDCC",-"CMPW",-"ISEL"
+ return x&1 != 0
+}
+
+func convertEqBool32(x uint32) bool {
+ // ppc64x:"ANDCC",-"CMPW","XOR",-"ISEL"
+ return x&1 == 0
+}
+
+func convertNeqBool64(x uint64) bool {
+ // ppc64x:"ANDCC",-"CMP",-"ISEL"
+ return x&1 != 0
+}
+
+func convertEqBool64(x uint64) bool {
+ // ppc64x:"ANDCC","XOR",-"CMP",-"ISEL"
+ return x&1 == 0
+}
+
+func TestSetEq64(x uint64, y uint64) bool {
+ // ppc64x/power10:"SETBC\tCR0EQ",-"ISEL"
+ // ppc64x/power9:"CMP","ISEL",-"SETBC\tCR0EQ"
+ // ppc64x/power8:"CMP","ISEL",-"SETBC\tCR0EQ"
+ b := x == y
+ return b
+}
+func TestSetNeq64(x uint64, y uint64) bool {
+ // ppc64x/power10:"SETBCR\tCR0EQ",-"ISEL"
+ // ppc64x/power9:"CMP","ISEL",-"SETBCR\tCR0EQ"
+ // ppc64x/power8:"CMP","ISEL",-"SETBCR\tCR0EQ"
+ b := x != y
+ return b
+}
+func TestSetLt64(x uint64, y uint64) bool {
+ // ppc64x/power10:"SETBC\tCR0GT",-"ISEL"
+ // ppc64x/power9:"CMP","ISEL",-"SETBC\tCR0GT"
+ // ppc64x/power8:"CMP","ISEL",-"SETBC\tCR0GT"
+ b := x < y
+ return b
+}
+func TestSetLe64(x uint64, y uint64) bool {
+ // ppc64x/power10:"SETBCR\tCR0LT",-"ISEL"
+ // ppc64x/power9:"CMP","ISEL",-"SETBCR\tCR0LT"
+ // ppc64x/power8:"CMP","ISEL",-"SETBCR\tCR0LT"
+ b := x <= y
+ return b
+}
+func TestSetGt64(x uint64, y uint64) bool {
+ // ppc64x/power10:"SETBC\tCR0LT",-"ISEL"
+ // ppc64x/power9:"CMP","ISEL",-"SETBC\tCR0LT"
+ // ppc64x/power8:"CMP","ISEL",-"SETBC\tCR0LT"
+ b := x > y
+ return b
+}
+func TestSetGe64(x uint64, y uint64) bool {
+ // ppc64x/power10:"SETBCR\tCR0GT",-"ISEL"
+ // ppc64x/power9:"CMP","ISEL",-"SETBCR\tCR0GT"
+ // ppc64x/power8:"CMP","ISEL",-"SETBCR\tCR0GT"
+ b := x >= y
+ return b
+}
+func TestSetLtFp64(x float64, y float64) bool {
+ // ppc64x/power10:"SETBC\tCR0LT",-"ISEL"
+ // ppc64x/power9:"FCMP","ISEL",-"SETBC\tCR0LT"
+ // ppc64x/power8:"FCMP","ISEL",-"SETBC\tCR0LT"
+ b := x < y
+ return b
+}
+func TestSetLeFp64(x float64, y float64) bool {
+ // ppc64x/power10:"SETBC\tCR0LT","SETBC\tCR0EQ","OR",-"ISEL",-"ISEL"
+ // ppc64x/power9:"ISEL","ISEL",-"SETBC\tCR0LT",-"SETBC\tCR0EQ","OR"
+ // ppc64x/power8:"ISEL","ISEL",-"SETBC\tCR0LT",-"SETBC\tCR0EQ","OR"
+ b := x <= y
+ return b
+}
+func TestSetGtFp64(x float64, y float64) bool {
+ // ppc64x/power10:"SETBC\tCR0LT",-"ISEL"
+ // ppc64x/power9:"FCMP","ISEL",-"SETBC\tCR0LT"
+ // ppc64x/power8:"FCMP","ISEL",-"SETBC\tCR0LT"
+ b := x > y
+ return b
+}
+func TestSetGeFp64(x float64, y float64) bool {
+ // ppc64x/power10:"SETBC\tCR0LT","SETBC\tCR0EQ","OR",-"ISEL",-"ISEL"
+ // ppc64x/power9:"ISEL","ISEL",-"SETBC\tCR0LT",-"SETBC\tCR0EQ","OR"
+ // ppc64x/power8:"ISEL","ISEL",-"SETBC\tCR0LT",-"SETBC\tCR0EQ","OR"
+ b := x >= y
+ return b
+}
+func TestSetInvEq64(x uint64, y uint64) bool {
+ // ppc64x/power10:"SETBCR\tCR0EQ",-"ISEL"
+ // ppc64x/power9:"CMP","ISEL",-"SETBCR\tCR0EQ"
+ // ppc64x/power8:"CMP","ISEL",-"SETBCR\tCR0EQ"
+ b := !(x == y)
+ return b
+}
+func TestSetInvNeq64(x uint64, y uint64) bool {
+ // ppc64x/power10:"SETBC\tCR0EQ",-"ISEL"
+ // ppc64x/power9:"CMP","ISEL",-"SETBC\tCR0EQ"
+ // ppc64x/power8:"CMP","ISEL",-"SETBC\tCR0EQ"
+ b := !(x != y)
+ return b
+}
+func TestSetInvLt64(x uint64, y uint64) bool {
+ // ppc64x/power10:"SETBCR\tCR0GT",-"ISEL"
+ // ppc64x/power9:"CMP","ISEL",-"SETBCR\tCR0GT"
+ // ppc64x/power8:"CMP","ISEL",-"SETBCR\tCR0GT"
+ b := !(x < y)
+ return b
+}
+func TestSetInvLe64(x uint64, y uint64) bool {
+ // ppc64x/power10:"SETBC\tCR0LT",-"ISEL"
+ // ppc64x/power9:"CMP","ISEL",-"SETBC\tCR0LT"
+ // ppc64x/power8:"CMP","ISEL",-"SETBC\tCR0LT"
+ b := !(x <= y)
+ return b
+}
+func TestSetInvGt64(x uint64, y uint64) bool {
+ // ppc64x/power10:"SETBCR\tCR0LT",-"ISEL"
+ // ppc64x/power9:"CMP","ISEL",-"SETBCR\tCR0LT"
+ // ppc64x/power8:"CMP","ISEL",-"SETBCR\tCR0LT"
+ b := !(x > y)
+ return b
+}
+func TestSetInvGe64(x uint64, y uint64) bool {
+ // ppc64x/power10:"SETBC\tCR0GT",-"ISEL"
+ // ppc64x/power9:"CMP","ISEL",-"SETBC\tCR0GT"
+ // ppc64x/power8:"CMP","ISEL",-"SETBC\tCR0GT"
+ b := !(x >= y)
+ return b
+}
+
+func TestSetInvEqFp64(x float64, y float64) bool {
+ // ppc64x/power10:"SETBCR\tCR0EQ",-"ISEL"
+ // ppc64x/power9:"FCMP","ISEL",-"SETBCR\tCR0EQ"
+ // ppc64x/power8:"FCMP","ISEL",-"SETBCR\tCR0EQ"
+ b := !(x == y)
+ return b
+}
+func TestSetInvNeqFp64(x float64, y float64) bool {
+ // ppc64x/power10:"SETBC\tCR0EQ",-"ISEL"
+ // ppc64x/power9:"FCMP","ISEL",-"SETBC\tCR0EQ"
+ // ppc64x/power8:"FCMP","ISEL",-"SETBC\tCR0EQ"
+ b := !(x != y)
+ return b
+}
+func TestSetInvLtFp64(x float64, y float64) bool {
+ // ppc64x/power10:"SETBCR\tCR0LT",-"ISEL"
+ // ppc64x/power9:"FCMP","ISEL",-"SETBCR\tCR0LT"
+ // ppc64x/power8:"FCMP","ISEL",-"SETBCR\tCR0LT"
+ b := !(x < y)
+ return b
+}
+func TestSetInvLeFp64(x float64, y float64) bool {
+ // ppc64x/power10:"SETBC\tCR0LT",-"ISEL"
+ // ppc64x/power9:"FCMP","ISEL",-"SETBC\tCR0LT"
+ // ppc64x/power8:"FCMP","ISEL",-"SETBC\tCR0LT"
+ b := !(x <= y)
+ return b
+}
+func TestSetInvGtFp64(x float64, y float64) bool {
+ // ppc64x/power10:"SETBCR\tCR0LT",-"ISEL"
+ // ppc64x/power9:"FCMP","ISEL",-"SETBCR\tCR0LT"
+ // ppc64x/power8:"FCMP","ISEL",-"SETBCR\tCR0LT"
+ b := !(x > y)
+ return b
+}
+func TestSetInvGeFp64(x float64, y float64) bool {
+ // ppc64x/power10:"SETBC\tCR0LT",-"ISEL"
+ // ppc64x/power9:"FCMP","ISEL",-"SETBC\tCR0LT"
+ // ppc64x/power8:"FCMP","ISEL",-"SETBC\tCR0LT"
+ b := !(x >= y)
+ return b
+}