// asmcheck

// Copyright 2019 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

//go:noinline
func dummy() {}

// Signed 64-bit compare-and-branch.
func si64(x, y chan int64) {
	// s390x:"CGRJ\t[$](2|4), R[0-9]+, R[0-9]+, "
	for <-x < <-y {
		dummy()
	}

	// s390x:"CL?GRJ\t[$]8, R[0-9]+, R[0-9]+, "
	for <-x == <-y {
		dummy()
	}
}

// Signed 64-bit compare-and-branch with 8-bit immediate.
func si64x8() {
	// s390x:"CGIJ\t[$]12, R[0-9]+, [$]127, "
	for i := int64(0); i < 128; i++ {
		dummy()
	}

	// s390x:"CGIJ\t[$]10, R[0-9]+, [$]-128, "
	for i := int64(0); i > -129; i-- {
		dummy()
	}

	// s390x:"CGIJ\t[$]2, R[0-9]+, [$]127, "
	for i := int64(0); i >= 128; i++ {
		dummy()
	}

	// s390x:"CGIJ\t[$]4, R[0-9]+, [$]-128, "
	for i := int64(0); i <= -129; i-- {
		dummy()
	}
}

// Unsigned 64-bit compare-and-branch.
func ui64(x, y chan uint64) {
	// s390x:"CLGRJ\t[$](2|4), R[0-9]+, R[0-9]+, "
	for <-x > <-y {
		dummy()
	}

	// s390x:"CL?GRJ\t[$]6, R[0-9]+, R[0-9]+, "
	for <-x != <-y {
		dummy()
	}
}

// Unsigned 64-bit comparison with 8-bit immediate.
func ui64x8() {
	// s390x:"CLGIJ\t[$]4, R[0-9]+, [$]128, "
	for i := uint64(0); i < 128; i++ {
		dummy()
	}

	// s390x:"CLGIJ\t[$]12, R[0-9]+, [$]255, "
	for i := uint64(0); i < 256; i++ {
		dummy()
	}

	// s390x:"CLGIJ\t[$]2, R[0-9]+, [$]255, "
	for i := uint64(0); i >= 256; i-- {
		dummy()
	}

	// s390x:"CLGIJ\t[$]2, R[0-9]+, [$]0, "
	for i := uint64(1024); i > 0; i-- {
		dummy()
	}
}

// Signed 32-bit compare-and-branch.
func si32(x, y chan int32) {
	// s390x:"CRJ\t[$](2|4), R[0-9]+, R[0-9]+, "
	for <-x < <-y {
		dummy()
	}

	// s390x:"CL?RJ\t[$]8, R[0-9]+, R[0-9]+, "
	for <-x == <-y {
		dummy()
	}
}

// Signed 32-bit compare-and-branch with 8-bit immediate.
func si32x8() {
	// s390x:"CIJ\t[$]12, R[0-9]+, [$]127, "
	for i := int32(0); i < 128; i++ {
		dummy()
	}

	// s390x:"CIJ\t[$]10, R[0-9]+, [$]-128, "
	for i := int32(0); i > -129; i-- {
		dummy()
	}

	// s390x:"CIJ\t[$]2, R[0-9]+, [$]127, "
	for i := int32(0); i >= 128; i++ {
		dummy()
	}

	// s390x:"CIJ\t[$]4, R[0-9]+, [$]-128, "
	for i := int32(0); i <= -129; i-- {
		dummy()
	}
}

// Unsigned 32-bit compare-and-branch.
func ui32(x, y chan uint32) {
	// s390x:"CLRJ\t[$](2|4), R[0-9]+, R[0-9]+, "
	for <-x > <-y {
		dummy()
	}

	// s390x:"CL?RJ\t[$]6, R[0-9]+, R[0-9]+, "
	for <-x != <-y {
		dummy()
	}
}

// Unsigned 32-bit comparison with 8-bit immediate.
func ui32x8() {
	// s390x:"CLIJ\t[$]4, R[0-9]+, [$]128, "
	for i := uint32(0); i < 128; i++ {
		dummy()
	}

	// s390x:"CLIJ\t[$]12, R[0-9]+, [$]255, "
	for i := uint32(0); i < 256; i++ {
		dummy()
	}

	// s390x:"CLIJ\t[$]2, R[0-9]+, [$]255, "
	for i := uint32(0); i >= 256; i-- {
		dummy()
	}

	// s390x:"CLIJ\t[$]2, R[0-9]+, [$]0, "
	for i := uint32(1024); i > 0; i-- {
		dummy()
	}
}

// Signed 64-bit comparison with unsigned 8-bit immediate.
func si64xu8(x chan int64) {
	// s390x:"CLGIJ\t[$]8, R[0-9]+, [$]128, "
	for <-x == 128 {
		dummy()
	}

	// s390x:"CLGIJ\t[$]6, R[0-9]+, [$]255, "
	for <-x != 255 {
		dummy()
	}
}

// Signed 32-bit comparison with unsigned 8-bit immediate.
func si32xu8(x chan int32) {
	// s390x:"CLIJ\t[$]8, R[0-9]+, [$]255, "
	for <-x == 255 {
		dummy()
	}

	// s390x:"CLIJ\t[$]6, R[0-9]+, [$]128, "
	for <-x != 128 {
		dummy()
	}
}

// Unsigned 64-bit comparison with signed 8-bit immediate.
func ui64xu8(x chan uint64) {
	// s390x:"CGIJ\t[$]8, R[0-9]+, [$]-1, "
	for <-x == ^uint64(0) {
		dummy()
	}

	// s390x:"CGIJ\t[$]6, R[0-9]+, [$]-128, "
	for <-x != ^uint64(127) {
		dummy()
	}
}

// Unsigned 32-bit comparison with signed 8-bit immediate.
func ui32xu8(x chan uint32) {
	// s390x:"CIJ\t[$]8, R[0-9]+, [$]-128, "
	for <-x == ^uint32(127) {
		dummy()
	}

	// s390x:"CIJ\t[$]6, R[0-9]+, [$]-1, "
	for <-x != ^uint32(0) {
		dummy()
	}
}
