diff options
Diffstat (limited to 'test/codegen/bool.go')
-rw-r--r-- | test/codegen/bool.go | 213 |
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 +} |