// asmcheck

// 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 codegen

// This file contains codegen tests related to arithmetic
// simplifications and optimizations on integer types.
// For codegen tests on float types, see floats.go.

// Addition

func AddLargeConst(a uint64, out []uint64) {
	// ppc64x/power10:"ADD [$]4294967296,"
	// ppc64x/power9:"MOVD [$]1" "SLD [$]32" "ADD R[0-9]*"
	// ppc64x/power8:"MOVD [$]1" "SLD [$]32" "ADD R[0-9]*"
	out[0] = a + 0x100000000
	// ppc64x/power10:"ADD [$]-8589934592,"
	// ppc64x/power9:"MOVD [$]-1" "SLD [$]33" "ADD R[0-9]*"
	// ppc64x/power8:"MOVD [$]-1" "SLD [$]33" "ADD R[0-9]*"
	out[1] = a + 0xFFFFFFFE00000000
	// ppc64x/power10:"ADD [$]1234567,"
	// ppc64x/power9:"ADDIS [$]19," "ADD [$]-10617,"
	// ppc64x/power8:"ADDIS [$]19," "ADD [$]-10617,"
	out[2] = a + 1234567
	// ppc64x/power10:"ADD [$]-1234567,"
	// ppc64x/power9:"ADDIS [$]-19," "ADD [$]10617,"
	// ppc64x/power8:"ADDIS [$]-19," "ADD [$]10617,"
	out[3] = a - 1234567
	// ppc64x/power10:"ADD [$]2147450879,"
	// ppc64x/power9:"ADDIS [$]32767," "ADD [$]32767,"
	// ppc64x/power8:"ADDIS [$]32767," "ADD [$]32767,"
	out[4] = a + 0x7FFF7FFF
	// ppc64x/power10:"ADD [$]-2147483647,"
	// ppc64x/power9:"ADDIS [$]-32768," "ADD [$]1,"
	// ppc64x/power8:"ADDIS [$]-32768," "ADD [$]1,"
	out[5] = a - 2147483647
	// ppc64x:"ADDIS [$]-32768," -"ADD "
	out[6] = a - 2147483648
	// ppc64x:"ADD [$]2147450880," -"ADDIS "
	out[7] = a + 0x7FFF8000
	// ppc64x:"ADD [$]-32768," -"ADDIS "
	out[8] = a - 32768
	// ppc64x/power10:"ADD [$]-32769,"
	// ppc64x/power9:"ADDIS [$]-1," "ADD [$]32767,"
	// ppc64x/power8:"ADDIS [$]-1," "ADD [$]32767,"
	out[9] = a - 32769
}

func AddLargeConst2(a int, out []int) {
	// loong64: -"ADDVU" "ADDV16"
	out[0] = a + 0x10000
}

// Subtraction

var ef int

func SubMem(arr []int, b, c, d int) int {
	// 386:`SUBL [A-Z]+, 8\([A-Z]+\)`
	// amd64:`SUBQ [A-Z]+, 16\([A-Z]+\)`
	arr[2] -= b
	// 386:`SUBL [A-Z]+, 12\([A-Z]+\)`
	// amd64:`SUBQ [A-Z]+, 24\([A-Z]+\)`
	arr[3] -= b
	// 386:`DECL 16\([A-Z]+\)`
	arr[4]--
	// 386:`ADDL [$]-20, 20\([A-Z]+\)`
	arr[5] -= 20
	// 386:`SUBL \([A-Z]+\)\([A-Z]+\*4\), [A-Z]+`
	ef -= arr[b]
	// 386:`SUBL [A-Z]+, \([A-Z]+\)\([A-Z]+\*4\)`
	arr[c] -= b
	// 386:`ADDL [$]-15, \([A-Z]+\)\([A-Z]+\*4\)`
	arr[d] -= 15
	// 386:`DECL \([A-Z]+\)\([A-Z]+\*4\)`
	arr[b]--
	// amd64:`DECQ 64\([A-Z]+\)`
	arr[8]--
	// 386:"SUBL 4"
	// amd64:"SUBQ 8"
	return arr[0] - arr[1]
}

func SubFromConst(a int) int {
	// ppc64x: `SUBC R[0-9]+, [$]40, R`
	// riscv64: "ADDI [$]-40" "NEG"
	b := 40 - a
	return b
}

func SubFromConstNeg(a int) int {
	// arm64: "ADD [$]40"
	// loong64: "ADDV[U] [$]40"
	// mips: "ADD[U] [$]40"
	// mips64: "ADDV[U] [$]40"
	// ppc64x: `ADD [$]40, R[0-9]+, R`
	// riscv64: "ADDI [$]40" -"NEG"
	c := 40 - (-a)
	return c
}

func SubSubFromConst(a int) int {
	// arm64: "ADD [$]20"
	// loong64: "ADDV[U] [$]20"
	// mips: "ADD[U] [$]20"
	// mips64: "ADDV[U] [$]20"
	// ppc64x: `ADD [$]20, R[0-9]+, R`
	// riscv64: "ADDI [$]20" -"NEG"
	c := 40 - (20 - a)
	return c
}

func AddSubFromConst(a int) int {
	// ppc64x: `SUBC R[0-9]+, [$]60, R`
	// riscv64: "ADDI [$]-60" "NEG"
	c := 40 + (20 - a)
	return c
}

func NegSubFromConst(a int) int {
	// arm64: "SUB [$]20"
	// loong64: "ADDV[U] [$]-20"
	// mips: "ADD[U] [$]-20"
	// mips64: "ADDV[U] [$]-20"
	// ppc64x: `ADD [$]-20, R[0-9]+, R`
	// riscv64: "ADDI [$]-20"
	c := -(20 - a)
	return c
}

func NegAddFromConstNeg(a int) int {
	// arm64: "SUB [$]40" "NEG"
	// loong64: "ADDV[U] [$]-40" "SUBV"
	// mips: "ADD[U] [$]-40" "SUB"
	// mips64: "ADDV[U] [$]-40" "SUBV"
	// ppc64x: `SUBC R[0-9]+, [$]40, R`
	// riscv64: "ADDI [$]-40" "NEG"
	c := -(-40 + a)
	return c
}

func SubSubNegSimplify(a, b int) int {
	// amd64:"NEGQ"
	// arm64:"NEG"
	// loong64:"SUBV"
	// mips:"SUB"
	// mips64:"SUBV"
	// ppc64x:"NEG"
	// riscv64:"NEG" -"SUB"
	r := (a - b) - a
	return r
}

func SubAddSimplify(a, b int) int {
	// amd64:-"SUBQ" -"ADDQ"
	// arm64:-"SUB" -"ADD"
	// loong64:-"SUBV" -"ADDV"
	// mips:-"SUB" -"ADD"
	// mips64:-"SUBV" -"ADDV"
	// ppc64x:-"SUB" -"ADD"
	// riscv64:-"SUB" -"ADD"
	r := a + (b - a)
	return r
}

func SubAddSimplify2(a, b, c int) (int, int, int, int, int, int) {
	// amd64:-"ADDQ"
	// arm64:-"ADD"
	// mips:"SUB" -"ADD"
	// mips64:"SUBV" -"ADDV"
	// loong64:"SUBV" -"ADDV"
	// riscv64:-"ADD"
	r := (a + b) - (a + c)
	// amd64:-"ADDQ"
	// riscv64:-"ADD"
	r1 := (a + b) - (c + a)
	// amd64:-"ADDQ"
	// riscv64:-"ADD"
	r2 := (b + a) - (a + c)
	// amd64:-"ADDQ"
	// riscv64:-"ADD"
	r3 := (b + a) - (c + a)
	// amd64:-"SUBQ"
	// arm64:-"SUB"
	// mips:"ADD" -"SUB"
	// mips64:"ADDV" -"SUBV"
	// loong64:"ADDV" -"SUBV"
	// riscv64:-"SUB"
	r4 := (a - c) + (c + b)
	// amd64:-"SUBQ"
	// riscv64:-"SUB"
	r5 := (a - c) + (b + c)
	return r, r1, r2, r3, r4, r5
}

func SubAddNegSimplify(a, b int) int {
	// amd64:"NEGQ" -"ADDQ" -"SUBQ"
	// arm64:"NEG" -"ADD" -"SUB"
	// loong64:"SUBV" -"ADDV"
	// mips:"SUB" -"ADD"
	// mips64:"SUBV" -"ADDV"
	// ppc64x:"NEG" -"ADD" -"SUB"
	// riscv64:"NEG" -"ADD" -"SUB"
	r := a - (b + a)
	return r
}

func AddAddSubSimplify(a, b, c int) int {
	// amd64:-"SUBQ"
	// arm64:"ADD" -"SUB"
	// loong64:"ADDV" -"SUBV"
	// mips:"ADD" -"SUB"
	// mips64:"ADDV" -"SUBV"
	// ppc64x:-"SUB"
	// riscv64:"ADD" "ADD" -"SUB"
	r := a + (b + (c - a))
	return r
}

func AddSubSubSimplify(a, b, c int) int {
	// amd64:"LEAQ" -"SUBQ"
	// arm64:"ADD" -"SUB"
	// loong64:"ADDV" -"SUBV"
	// mips:"ADD" -"SUB"
	// mips64:"ADDV" -"SUBV"
	// ppc64x:-"SUB"
	// riscv64:"ADD" -"SUB"
	return a + (b - (a - c))
}

func NegToInt32(a int) int {
	// riscv64: "NEGW" -"MOVW"
	r := int(int32(-a))
	return r
}

// -------------------- //
//    Multiplication    //
// -------------------- //

func Pow2Muls(n1, n2 int) (int, int) {
	// amd64:"SHLQ [$]5" -"IMULQ"
	// 386:"SHLL [$]5" -"IMULL"
	// arm:"SLL [$]5" -"MUL"
	// arm64:"LSL [$]5" -"MUL"
	// loong64:"SLLV [$]5" -"MULV"
	// ppc64x:"SLD [$]5" -"MUL"
	a := n1 * 32

	// amd64:"SHLQ [$]6" -"IMULQ"
	// 386:"SHLL [$]6" -"IMULL"
	// arm:"SLL [$]6" -"MUL"
	// arm64:`NEG R[0-9]+<<6, R[0-9]+` -`LSL` -`MUL`
	// loong64:"SLLV [$]6" -"MULV"
	// ppc64x:"SLD [$]6" "NEG R[0-9]+, R[0-9]+" -"MUL"
	b := -64 * n2

	return a, b
}

func Mul_2(n1 int32, n2 int64) (int32, int64) {
	// amd64:"ADDL" -"SHLL"
	a := n1 * 2
	// amd64:"ADDQ" -"SHLQ"
	b := n2 * 2

	return a, b
}

func Mul_96(n int) int {
	// amd64:`SHLQ [$]5` `LEAQ \(.*\)\(.*\*2\),` -`IMULQ`
	// 386:`SHLL [$]5` `LEAL \(.*\)\(.*\*2\),` -`IMULL`
	// arm64:`LSL [$]5` `ADD R[0-9]+<<1, R[0-9]+` -`MUL`
	// arm:`SLL [$]5` `ADD R[0-9]+<<1, R[0-9]+` -`MUL`
	// loong64:"SLLV [$]5" "ALSLV [$]1,"
	// s390x:`SLD [$]5` `SLD [$]6` -`MULLD`
	return n * 96
}

func Mul_n120(n int) int {
	// loong64:"SLLV [$]3" "SLLV [$]7" "SUBVU" -"MULV"
	// s390x:`SLD [$]3` `SLD [$]7` -`MULLD`
	return n * -120
}

func MulMemSrc(a []uint32, b []float32) {
	// 386:`IMULL 4\([A-Z]+\), [A-Z]+`
	a[0] *= a[1]
	// 386/sse2:`MULSS 4\([A-Z]+\), X[0-9]+`
	// amd64:`MULSS 4\([A-Z]+\), X[0-9]+`
	b[0] *= b[1]
}

// Multiplications merging tests

func MergeMuls1(n int) int {
	// amd64:"IMUL3Q [$]46"
	// 386:"IMUL3L [$]46"
	// ppc64x:"MULLD [$]46"
	return 15*n + 31*n // 46n
}

func MergeMuls2(n int) int {
	// amd64:"IMUL3Q [$]23" "(ADDQ [$]29)|(LEAQ 29)"
	// 386:"IMUL3L [$]23" "ADDL [$]29"
	// ppc64x/power9:"MADDLD" -"MULLD [$]23" -"ADD [$]29"
	// ppc64x/power8:"MULLD [$]23" "ADD [$]29"
	return 5*n + 7*(n+1) + 11*(n+2) // 23n + 29
}

func MergeMuls3(a, n int) int {
	// amd64:"ADDQ [$]19" -"IMULQ [$]19"
	// 386:"ADDL [$]19" -"IMULL [$]19"
	// ppc64x:"ADD [$]19" -"MULLD [$]19"
	return a*n + 19*n // (a+19)n
}

func MergeMuls4(n int) int {
	// amd64:"IMUL3Q [$]14"
	// 386:"IMUL3L [$]14"
	// ppc64x:"MULLD [$]14"
	return 23*n - 9*n // 14n
}

func MergeMuls5(a, n int) int {
	// amd64:"ADDQ [$]-19" -"IMULQ [$]19"
	// 386:"ADDL [$]-19" -"IMULL [$]19"
	// ppc64x:"ADD [$]-19" -"MULLD [$]19"
	return a*n - 19*n // (a-19)n
}

// Multiplications folded negation

func FoldNegMul(a int) int {
	// amd64:"IMUL3Q [$]-11" -"NEGQ"
	// arm64:"MOVD [$]-11" "MUL" -"NEG"
	// loong64:"ALSLV [$]2" "SUBVU" "ALSLV [$]4"
	// riscv64:"MOV [$]-11" "MUL" -"NEG"
	return -a * 11
}

func Fold2NegMul(a, b int) int {
	// amd64:"IMULQ" -"NEGQ"
	// arm64:"MUL" -"NEG"
	// loong64:"MULV" -"SUBVU R[0-9], R0,"
	// riscv64:"MUL" -"NEG"
	return -a * -b
}

func Mul32(a, b int32) int64 {
	// arm64:"SMULL" -"MOVW"
	// loong64:"MULWVW" -"MOVW"
	return int64(a) * int64(b)
}

func Mul32U(a, b uint32) uint64 {
	// arm64:"UMULL" -"MOVWU"
	// loong64:"MULWVWU" -"MOVWU"
	return uint64(a) * uint64(b)
}

func SimplifyNegMulConst(a int) int {
	// amd64:-"NEGQ"
	// arm64:"MOVD [$]11" "MUL" -"NEG"
	// riscv64:"MOV [$]11" "MUL" -"NEG"
	return -(a * -11)
}

func SimplifyNegMul(a, b int) int {
	// amd64:-"NEGQ"
	// arm64:"MUL" -"NEG"
	// riscv64:"MUL" -"NEG"
	return -(-a * b)
}

// -------------- //
//    Division    //
// -------------- //

func DivMemSrc(a []float64) {
	// 386/sse2:`DIVSD 8\([A-Z]+\), X[0-9]+`
	// amd64:`DIVSD 8\([A-Z]+\), X[0-9]+`
	a[0] /= a[1]
}

func Pow2Divs(n1 uint, n2 int) (uint, int) {
	// 386:"SHRL [$]5" -"DIVL"
	// amd64:"SHRQ [$]5" -"DIVQ"
	// arm:"SRL [$]5" -".*udiv"
	// arm64:"LSR [$]5" -"UDIV"
	// ppc64x:"SRD"
	a := n1 / 32 // unsigned

	// amd64:"SARQ [$]6" -"IDIVQ"
	// 386:"SARL [$]6" -"IDIVL"
	// arm:"SRA [$]6" -".*udiv"
	// arm64:"ASR [$]6" -"SDIV"
	// ppc64x:"SRAD"
	b := n2 / 64 // signed

	return a, b
}

// Check that constant divisions get turned into MULs
func ConstDivs(n1 uint, n2 int) (uint, int) {
	// amd64: "MOVQ [$]-1085102592571150095" `MULX?Q` -"DIVQ"
	// 386: "MOVL [$]-252645135" "MULL" -"DIVL"
	// arm64: `MOVD` `UMULH` -`DIV`
	// arm: `MOVW` `MUL` -`.*udiv`
	a := n1 / 17 // unsigned

	// amd64: "MOVQ [$]-1085102592571150095" "IMULQ" -"IDIVQ"
	// 386: "IMULL" "SARL [$]4," "SARL [$]31," "SUBL" -".*DIV"
	// arm64: `SMULH` -`DIV`
	// arm: `MOVW` `MUL` -`.*udiv`
	b := n2 / 17 // signed

	return a, b
}

func FloatDivs(a []float32) float32 {
	// amd64:`DIVSS 8\([A-Z]+\), X[0-9]+`
	// 386/sse2:`DIVSS 8\([A-Z]+\), X[0-9]+`
	return a[1] / a[2]
}

func Pow2Mods(n1 uint, n2 int) (uint, int) {
	// 386:"ANDL [$]31" -"DIVL"
	// amd64:"ANDL [$]31" -"DIVQ"
	// arm:"AND [$]31" -".*udiv"
	// arm64:"AND [$]31" -"UDIV"
	// ppc64x:"RLDICL"
	a := n1 % 32 // unsigned

	// 386:"SHRL" -"IDIVL"
	// amd64:"SHRQ" -"IDIVQ"
	// arm:"SRA" -".*udiv"
	// arm64:"ASR" -"REM"
	// ppc64x:"SRAD"
	b := n2 % 64 // signed

	return a, b
}

// Check that signed divisibility checks get converted to AND on low bits
func Pow2DivisibleSigned(n1, n2 int) (bool, bool) {
	// 386:"TESTL [$]63" -"DIVL" -"SHRL"
	// amd64:"TESTQ [$]63" -"DIVQ" -"SHRQ"
	// arm:"AND [$]63" -".*udiv" -"SRA"
	// arm64:"TST [$]63" -"UDIV" -"ASR" -"AND"
	// ppc64x:"ANDCC" -"RLDICL" -"SRAD" -"CMP"
	a := n1%64 == 0 // signed divisible

	// 386:"TESTL [$]63" -"DIVL" -"SHRL"
	// amd64:"TESTQ [$]63" -"DIVQ" -"SHRQ"
	// arm:"AND [$]63" -".*udiv" -"SRA"
	// arm64:"TST [$]63" -"UDIV" -"ASR" -"AND"
	// ppc64x:"ANDCC" -"RLDICL" -"SRAD" -"CMP"
	b := n2%64 != 0 // signed indivisible

	return a, b
}

// Check that constant modulo divs get turned into MULs
func ConstMods(n1 uint, n2 int) (uint, int) {
	// amd64: "MOVQ [$]-1085102592571150095" `MULX?Q` -"DIVQ"
	// 386: "MOVL [$]-252645135" "MULL" -".*DIVL"
	// arm64: `MOVD` `UMULH` -`DIV`
	// arm: `MOVW` `MUL` -`.*udiv`
	a := n1 % 17 // unsigned

	// amd64: "MOVQ [$]-1085102592571150095" "IMULQ" -"IDIVQ"
	// 386: "IMULL" "SARL [$]4," "SARL [$]31," "SUBL" "SHLL [$]4," "SUBL" -".*DIV"
	// arm64: `SMULH` -`DIV`
	// arm: `MOVW` `MUL` -`.*udiv`
	b := n2 % 17 // signed

	return a, b
}

// Check that divisibility checks x%c==0 are converted to MULs and rotates
func DivisibleU(n uint) (bool, bool) {
	// amd64:"MOVQ [$]-6148914691236517205" "IMULQ" "ROLQ [$]63" -"DIVQ"
	// 386:"IMUL3L [$]-1431655765" "ROLL [$]31" -"DIVQ"
	// arm64:"MOVD [$]-6148914691236517205" "MOVD [$]3074457345618258602" "MUL" "ROR" -"DIV"
	// arm:"MUL" "CMP [$]715827882" -".*udiv"
	// ppc64x:"MULLD" "ROTL [$]63"
	even := n%6 == 0

	// amd64:"MOVQ [$]-8737931403336103397" "IMULQ" -"ROLQ" -"DIVQ"
	// 386:"IMUL3L [$]678152731" -"ROLL" -"DIVQ"
	// arm64:"MOVD [$]-8737931403336103397" "MUL" -"ROR" -"DIV"
	// arm:"MUL" "CMP [$]226050910" -".*udiv"
	// ppc64x:"MULLD" -"ROTL"
	odd := n%19 == 0

	return even, odd
}

func Divisible(n int) (bool, bool) {
	// amd64:"IMULQ" "ADD" "ROLQ [$]63" -"DIVQ"
	// 386:"IMUL3L [$]-1431655765" "ADDL [$]715827882" "ROLL [$]31" -"DIVQ"
	// arm64:"MOVD [$]-6148914691236517205" "MOVD [$]3074457345618258602" "MUL" "ADD R" "ROR" -"DIV"
	// arm:"MUL" "ADD [$]715827882" -".*udiv"
	// ppc64x/power8:"MULLD" "ADD" "ROTL [$]63"
	// ppc64x/power9:"MADDLD" "ROTL [$]63"
	even := n%6 == 0

	// amd64:"IMULQ" "ADD" -"ROLQ" -"DIVQ"
	// 386:"IMUL3L [$]678152731" "ADDL [$]113025455" -"ROLL" -"DIVQ"
	// arm64:"MUL" "MOVD [$]485440633518672410" "ADD" -"ROR" -"DIV"
	// arm:"MUL" "ADD [$]113025455" -".*udiv"
	// ppc64x/power8:"MULLD" "ADD" -"ROTL"
	// ppc64x/power9:"MADDLD" -"ROTL"
	odd := n%19 == 0

	return even, odd
}

// Check that fix-up code is not generated for divisions where it has been proven that
// that the divisor is not -1 or that the dividend is > MinIntNN.
func NoFix64A(divr int64) (int64, int64) {
	var d int64 = 42
	var e int64 = 84
	if divr > 5 {
		d /= divr // amd64:-"JMP"
		e %= divr // amd64:-"JMP"
		// The following statement is to avoid conflict between the above check
		// and the normal JMP generated at the end of the block.
		d += e
	}
	return d, e
}

func NoFix64B(divd int64) (int64, int64) {
	var d int64
	var e int64
	var divr int64 = -1
	if divd > -9223372036854775808 {
		d = divd / divr // amd64:-"JMP"
		e = divd % divr // amd64:-"JMP"
		d += e
	}
	return d, e
}

func NoFix32A(divr int32) (int32, int32) {
	var d int32 = 42
	var e int32 = 84
	if divr > 5 {
		// amd64:-"JMP"
		// 386:-"JMP"
		d /= divr
		// amd64:-"JMP"
		// 386:-"JMP"
		e %= divr
		d += e
	}
	return d, e
}

func NoFix32B(divd int32) (int32, int32) {
	var d int32
	var e int32
	var divr int32 = -1
	if divd > -2147483648 {
		// amd64:-"JMP"
		// 386:-"JMP"
		d = divd / divr
		// amd64:-"JMP"
		// 386:-"JMP"
		e = divd % divr
		d += e
	}
	return d, e
}

func NoFix16A(divr int16) (int16, int16) {
	var d int16 = 42
	var e int16 = 84
	if divr > 5 {
		// amd64:-"JMP"
		// 386:-"JMP"
		d /= divr
		// amd64:-"JMP"
		// 386:-"JMP"
		e %= divr
		d += e
	}
	return d, e
}

func NoFix16B(divd int16) (int16, int16) {
	var d int16
	var e int16
	var divr int16 = -1
	if divd > -32768 {
		// amd64:-"JMP"
		// 386:-"JMP"
		d = divd / divr
		// amd64:-"JMP"
		// 386:-"JMP"
		e = divd % divr
		d += e
	}
	return d, e
}

// Check that len() and cap() calls divided by powers of two are
// optimized into shifts and ands

func LenDiv1(a []int) int {
	// 386:"SHRL [$]10"
	// amd64:"SHRQ [$]10"
	// arm64:"LSR [$]10" -"SDIV"
	// arm:"SRL [$]10" -".*udiv"
	// ppc64x:"SRD [$]10"
	return len(a) / 1024
}

func LenDiv2(s string) int {
	// 386:"SHRL [$]11"
	// amd64:"SHRQ [$]11"
	// arm64:"LSR [$]11" -"SDIV"
	// arm:"SRL [$]11" -".*udiv"
	// ppc64x:"SRD [$]11"
	return len(s) / (4097 >> 1)
}

func LenMod1(a []int) int {
	// 386:"ANDL [$]1023"
	// amd64:"ANDL [$]1023"
	// arm64:"AND [$]1023" -"SDIV"
	// arm/6:"AND" -".*udiv"
	// arm/7:"BFC" -".*udiv" -"AND"
	// ppc64x:"RLDICL"
	return len(a) % 1024
}

func LenMod2(s string) int {
	// 386:"ANDL [$]2047"
	// amd64:"ANDL [$]2047"
	// arm64:"AND [$]2047" -"SDIV"
	// arm/6:"AND" -".*udiv"
	// arm/7:"BFC" -".*udiv" -"AND"
	// ppc64x:"RLDICL"
	return len(s) % (4097 >> 1)
}

func CapDiv(a []int) int {
	// 386:"SHRL [$]12"
	// amd64:"SHRQ [$]12"
	// arm64:"LSR [$]12" -"SDIV"
	// arm:"SRL [$]12" -".*udiv"
	// ppc64x:"SRD [$]12"
	return cap(a) / ((1 << 11) + 2048)
}

func CapMod(a []int) int {
	// 386:"ANDL [$]4095"
	// amd64:"ANDL [$]4095"
	// arm64:"AND [$]4095" -"SDIV"
	// arm/6:"AND" -".*udiv"
	// arm/7:"BFC" -".*udiv" -"AND"
	// ppc64x:"RLDICL"
	return cap(a) % ((1 << 11) + 2048)
}

func AddMul(x int) int {
	// amd64:"LEAQ 1"
	return 2*x + 1
}

func AddShift(a, b int) int {
	// loong64: "ALSLV"
	return a + (b << 4)
}

func MULA(a, b, c uint32) (uint32, uint32, uint32) {
	// arm:`MULA` -`MUL `
	// arm64:`MADDW` -`MULW`
	r0 := a*b + c
	// arm:`MULA` -`MUL `
	// arm64:`MADDW` -`MULW`
	r1 := c*79 + a
	// arm:`ADD` -`MULA` -`MUL `
	// arm64:`ADD` -`MADD` -`MULW`
	// ppc64x:`ADD` -`MULLD`
	r2 := b*64 + c
	return r0, r1, r2
}

func MULS(a, b, c uint32) (uint32, uint32, uint32) {
	// arm/7:`MULS` -`MUL `
	// arm/6:`SUB` `MUL ` -`MULS`
	// arm64:`MSUBW` -`MULW`
	r0 := c - a*b
	// arm/7:`MULS` -`MUL `
	// arm/6:`SUB` `MUL ` -`MULS`
	// arm64:`MSUBW` -`MULW`
	r1 := a - c*79
	// arm/7:`SUB` -`MULS` -`MUL `
	// arm64:`SUB` -`MSUBW` -`MULW`
	// ppc64x:`SUB` -`MULLD`
	r2 := c - b*64
	return r0, r1, r2
}

func addSpecial(a, b, c uint32) (uint32, uint32, uint32) {
	// amd64:`INCL`
	a++
	// amd64:`DECL`
	b--
	// amd64:`SUBL.*-128`
	c += 128
	return a, b, c
}

// Divide -> shift rules usually require fixup for negative inputs.
// If the input is non-negative, make sure the unsigned form is generated.
func divInt(v int64) int64 {
	if v < 0 {
		// amd64:`SARQ.*63,` `SHRQ.*56,` `SARQ.*8,`
		return v / 256
	}
	// amd64:-`.*SARQ` `SHRQ.*9,`
	return v / 512
}

// The reassociate rules "x - (z + C) -> (x - z) - C" and
// "(z + C) -x -> C + (z - x)" can optimize the following cases.
func constantFold1(i0, j0, i1, j1, i2, j2, i3, j3 int) (int, int, int, int) {
	// arm64:"SUB" "ADD [$]2"
	// ppc64x:"SUB" "ADD [$]2"
	r0 := (i0 + 3) - (j0 + 1)
	// arm64:"SUB" "SUB [$]4"
	// ppc64x:"SUB" "ADD [$]-4"
	r1 := (i1 - 3) - (j1 + 1)
	// arm64:"SUB" "ADD [$]4"
	// ppc64x:"SUB" "ADD [$]4"
	r2 := (i2 + 3) - (j2 - 1)
	// arm64:"SUB" "SUB [$]2"
	// ppc64x:"SUB" "ADD [$]-2"
	r3 := (i3 - 3) - (j3 - 1)
	return r0, r1, r2, r3
}

// The reassociate rules "x - (z + C) -> (x - z) - C" and
// "(C - z) - x -> C - (z + x)" can optimize the following cases.
func constantFold2(i0, j0, i1, j1 int) (int, int) {
	// arm64:"ADD" "MOVD [$]2" "SUB"
	// ppc64x: `SUBC R[0-9]+, [$]2, R`
	r0 := (3 - i0) - (j0 + 1)
	// arm64:"ADD" "MOVD [$]4" "SUB"
	// ppc64x: `SUBC R[0-9]+, [$]4, R`
	r1 := (3 - i1) - (j1 - 1)
	return r0, r1
}

func constantFold3(i, j int) int {
	// arm64: "LSL [$]5," "SUB R[0-9]+<<1," -"ADD"
	// ppc64x:"MULLD [$]30" "MULLD"
	r := (5 * i) * (6 * j)
	return r
}

// Integer Min/Max

func Int64Min(a, b int64) int64 {
	// amd64: "CMPQ" "CMOVQLT"
	// arm64: "CMP" "CSEL"
	// riscv64/rva20u64:"BLT "
	// riscv64/rva22u64,riscv64/rva23u64:"MIN "
	return min(a, b)
}

func Int64Max(a, b int64) int64 {
	// amd64: "CMPQ" "CMOVQGT"
	// arm64: "CMP" "CSEL"
	// riscv64/rva20u64:"BLT "
	// riscv64/rva22u64,riscv64/rva23u64:"MAX "
	return max(a, b)
}

func Uint64Min(a, b uint64) uint64 {
	// amd64: "CMPQ" "CMOVQCS"
	// arm64: "CMP" "CSEL"
	// riscv64/rva20u64:"BLTU"
	// riscv64/rva22u64,riscv64/rva23u64:"MINU"
	return min(a, b)
}

func Uint64Max(a, b uint64) uint64 {
	// amd64: "CMPQ" "CMOVQHI"
	// arm64: "CMP" "CSEL"
	// riscv64/rva20u64:"BLTU"
	// riscv64/rva22u64,riscv64/rva23u64:"MAXU"
	return max(a, b)
}

// PPC64x: Canonicalization of uint8/uint16 logical immediates
func U16And(v uint16) uint16 {
	// ppc64x:"ANDCC [$]32768" -"MOVD"
	return v & (1 << 15)
}

func U16Or(v uint16) uint16 {
	// ppc64x:"OR[I]? [$]32768" -"MOVD"
	return v | (1 << 15)
}

func U16Xor(v uint16) uint16 {
	// ppc64x:"XOR[I]? [$]32768" -"MOVD"
	return v ^ (1 << 15)
}

func U8And(v uint8) uint8 {
	// ppc64x:"ANDCC [$]128" -"MOVD"
	return v & (1 << 7)
}

func U8Or(v uint8) uint8 {
	// ppc64x:"OR[I]? [$]128" -"MOVD"
	return v | (1 << 7)
}

func U8Xor(v uint8) uint8 {
	// ppc64x:"XOR[I]? [$]128" -"MOVD"
	return v ^ (1 << 7)
}

func mul9223372036854775808(a uint64) uint64 {
	// amd64: "SHLQ [$]63"
	// arm64: "LSL [$]63"
	// ppc64x:"SLD [$]63"
	return a * 9223372036854775808
}
func mulneg17293822569102704640(a uint64) uint64 {
	// amd64: "SHLQ [$]60" "NEGQ"
	// arm64: "NEG R[0-9]+<<60" -"LSL"
	// ppc64x:"SLD [$]60" "NEG"
	return a * 17293822569102704640
}
