diff --git a/test/codegen/arithmetic.go b/test/codegen/arithmetic.go index 2cc294897a..e5671774ed 100644 --- a/test/codegen/arithmetic.go +++ b/test/codegen/arithmetic.go @@ -66,7 +66,10 @@ func Pow2Muls(n1, n2 int) (int, int) { } func Mul_96(n int) int { - // amd64:`SHLQ\t[$]5`,`LEAQ\t\(.*\)\(.*\*2\),` + // amd64:`SHLQ\t[$]5`,`LEAQ\t\(.*\)\(.*\*2\),`,-`IMULQ` + // 386:`SHLL\t[$]5`,`LEAL\t\(.*\)\(.*\*2\),`,-`IMULL` + // arm64:`LSL\t[$]5`,`ADD\sR[0-9]+<<1,\sR[0-9]+`,-`MUL` + // arm:`SLL\t[$]5`,`ADD\sR[0-9]+<<1,\sR[0-9]+`,-`MUL` return n * 96 } @@ -74,6 +77,7 @@ func MulMemSrc(a []uint32, b []float32) { // 386:`IMULL\s4\([A-Z]+\),\s[A-Z]+` a[0] *= a[1] // 386/sse2:`MULSS\s4\([A-Z]+\),\sX[0-9]+` + // amd64:`MULSS\s4\([A-Z]+\),\sX[0-9]+` b[0] *= b[1] } @@ -115,6 +119,7 @@ func MergeMuls5(a, n int) int { func DivMemSrc(a []float64) { // 386/sse2:`DIVSD\s8\([A-Z]+\),\sX[0-9]+` + // amd64:`DIVSD\s8\([A-Z]+\),\sX[0-9]+` a[0] /= a[1] } @@ -141,9 +146,15 @@ func Pow2Divs(n1 uint, n2 int) (uint, int) { // Check that constant divisions get turned into MULs func ConstDivs(n1 uint, n2 int) (uint, int) { // amd64:"MOVQ\t[$]-1085102592571150095","MULQ",-"DIVQ" + // 386:"MOVL\t[$]-252645135","MULL",-"DIVL" + // arm64:`MOVD`,`UMULH`,-`DIV` + // arm:`MOVW`,`MUL`,-`.*udiv` a := n1 / 17 // unsigned // amd64:"MOVQ\t[$]-1085102592571150095","IMULQ",-"IDIVQ" + // 386:"MOVL\t[$]-252645135","IMULL",-"IDIVL" + // arm64:`MOVD`,`SMULH`,-`DIV` + // arm:`MOVW`,`MUL`,-`.*udiv` b := n2 / 17 // signed return a, b @@ -151,6 +162,7 @@ func ConstDivs(n1 uint, n2 int) (uint, int) { func FloatDivs(a []float32) float32 { // amd64:`DIVSS\s8\([A-Z]+\),\sX[0-9]+` + // 386/sse2:`DIVSS\s8\([A-Z]+\),\sX[0-9]+` return a[1] / a[2] } @@ -175,9 +187,15 @@ func Pow2Mods(n1 uint, n2 int) (uint, int) { // Check that constant modulo divs get turned into MULs func ConstMods(n1 uint, n2 int) (uint, int) { // amd64:"MOVQ\t[$]-1085102592571150095","MULQ",-"DIVQ" + // 386:"MOVL\t[$]-252645135","MULL",-"DIVL" + // arm64:`MOVD`,`UMULH`,-`DIV` + // arm:`MOVW`,`MUL`,-`.*udiv` a := n1 % 17 // unsigned // amd64:"MOVQ\t[$]-1085102592571150095","IMULQ",-"IDIVQ" + // 386:"MOVL\t[$]-252645135","IMULL",-"IDIVL" + // arm64:`MOVD`,`SMULH`,-`DIV` + // arm:`MOVW`,`MUL`,-`.*udiv` b := n2 % 17 // signed return a, b @@ -270,6 +288,8 @@ func NoFix16B(divd int16) (int16, int16) { func LenDiv1(a []int) int { // 386:"SHRL\t[$]10" // amd64:"SHRQ\t[$]10" + // arm64:"LSR\t[$]10",-"SDIV" + // arm:"SRL\t[$]10",-".*udiv" // ppc64:"SRD"\t[$]10" // ppc64le:"SRD"\t[$]10" return len(a) / 1024 @@ -278,6 +298,8 @@ func LenDiv1(a []int) int { func LenDiv2(s string) int { // 386:"SHRL\t[$]11" // amd64:"SHRQ\t[$]11" + // arm64:"LSR\t[$]11",-"SDIV" + // arm:"SRL\t[$]11",-".*udiv" // ppc64:"SRD\t[$]11" // ppc64le:"SRD\t[$]11" return len(s) / (4097 >> 1) @@ -286,6 +308,9 @@ func LenDiv2(s string) int { func LenMod1(a []int) int { // 386:"ANDL\t[$]1023" // amd64:"ANDQ\t[$]1023" + // arm64:"AND\t[$]1023",-"SDIV" + // arm/6:"AND",-".*udiv" + // arm/7:"BFC",-".*udiv",-"AND" // ppc64:"ANDCC\t[$]1023" // ppc64le:"ANDCC\t[$]1023" return len(a) % 1024 @@ -294,6 +319,9 @@ func LenMod1(a []int) int { func LenMod2(s string) int { // 386:"ANDL\t[$]2047" // amd64:"ANDQ\t[$]2047" + // arm64:"AND\t[$]2047",-"SDIV" + // arm/6:"AND",-".*udiv" + // arm/7:"BFC",-".*udiv",-"AND" // ppc64:"ANDCC\t[$]2047" // ppc64le:"ANDCC\t[$]2047" return len(s) % (4097 >> 1) @@ -302,6 +330,8 @@ func LenMod2(s string) int { func CapDiv(a []int) int { // 386:"SHRL\t[$]12" // amd64:"SHRQ\t[$]12" + // arm64:"LSR\t[$]12",-"SDIV" + // arm:"SRL\t[$]12",-".*udiv" // ppc64:"SRD\t[$]12" // ppc64le:"SRD\t[$]12" return cap(a) / ((1 << 11) + 2048) @@ -310,6 +340,9 @@ func CapDiv(a []int) int { func CapMod(a []int) int { // 386:"ANDL\t[$]4095" // amd64:"ANDQ\t[$]4095" + // arm64:"AND\t[$]4095",-"SDIV" + // arm/6:"AND",-".*udiv" + // arm/7:"BFC",-".*udiv",-"AND" // ppc64:"ANDCC\t[$]4095" // ppc64le:"ANDCC\t[$]4095" return cap(a) % ((1 << 11) + 2048)