Skip to content

Commit c042fed

Browse files
committed
test/codegen: add arithmetic tests for 386/amd64/arm/arm64
This CL adds several test cases of arithmetic operations for 386/amd64/arm/arm64. Change-Id: I362687c06249f31091458a1d8c45fc4d006b616a Reviewed-on: https://go-review.googlesource.com/c/151897 Run-TryBot: Ben Shi <[email protected]> Reviewed-by: Keith Randall <[email protected]>
1 parent 6d6c858 commit c042fed

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

test/codegen/arithmetic.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,18 @@ func Pow2Muls(n1, n2 int) (int, int) {
6666
}
6767

6868
func Mul_96(n int) int {
69-
// amd64:`SHLQ\t[$]5`,`LEAQ\t\(.*\)\(.*\*2\),`
69+
// amd64:`SHLQ\t[$]5`,`LEAQ\t\(.*\)\(.*\*2\),`,-`IMULQ`
70+
// 386:`SHLL\t[$]5`,`LEAL\t\(.*\)\(.*\*2\),`,-`IMULL`
71+
// arm64:`LSL\t[$]5`,`ADD\sR[0-9]+<<1,\sR[0-9]+`,-`MUL`
72+
// arm:`SLL\t[$]5`,`ADD\sR[0-9]+<<1,\sR[0-9]+`,-`MUL`
7073
return n * 96
7174
}
7275

7376
func MulMemSrc(a []uint32, b []float32) {
7477
// 386:`IMULL\s4\([A-Z]+\),\s[A-Z]+`
7578
a[0] *= a[1]
7679
// 386/sse2:`MULSS\s4\([A-Z]+\),\sX[0-9]+`
80+
// amd64:`MULSS\s4\([A-Z]+\),\sX[0-9]+`
7781
b[0] *= b[1]
7882
}
7983

@@ -115,6 +119,7 @@ func MergeMuls5(a, n int) int {
115119

116120
func DivMemSrc(a []float64) {
117121
// 386/sse2:`DIVSD\s8\([A-Z]+\),\sX[0-9]+`
122+
// amd64:`DIVSD\s8\([A-Z]+\),\sX[0-9]+`
118123
a[0] /= a[1]
119124
}
120125

@@ -141,16 +146,23 @@ func Pow2Divs(n1 uint, n2 int) (uint, int) {
141146
// Check that constant divisions get turned into MULs
142147
func ConstDivs(n1 uint, n2 int) (uint, int) {
143148
// amd64:"MOVQ\t[$]-1085102592571150095","MULQ",-"DIVQ"
149+
// 386:"MOVL\t[$]-252645135","MULL",-"DIVL"
150+
// arm64:`MOVD`,`UMULH`,-`DIV`
151+
// arm:`MOVW`,`MUL`,-`.*udiv`
144152
a := n1 / 17 // unsigned
145153

146154
// amd64:"MOVQ\t[$]-1085102592571150095","IMULQ",-"IDIVQ"
155+
// 386:"MOVL\t[$]-252645135","IMULL",-"IDIVL"
156+
// arm64:`MOVD`,`SMULH`,-`DIV`
157+
// arm:`MOVW`,`MUL`,-`.*udiv`
147158
b := n2 / 17 // signed
148159

149160
return a, b
150161
}
151162

152163
func FloatDivs(a []float32) float32 {
153164
// amd64:`DIVSS\s8\([A-Z]+\),\sX[0-9]+`
165+
// 386/sse2:`DIVSS\s8\([A-Z]+\),\sX[0-9]+`
154166
return a[1] / a[2]
155167
}
156168

@@ -175,9 +187,15 @@ func Pow2Mods(n1 uint, n2 int) (uint, int) {
175187
// Check that constant modulo divs get turned into MULs
176188
func ConstMods(n1 uint, n2 int) (uint, int) {
177189
// amd64:"MOVQ\t[$]-1085102592571150095","MULQ",-"DIVQ"
190+
// 386:"MOVL\t[$]-252645135","MULL",-"DIVL"
191+
// arm64:`MOVD`,`UMULH`,-`DIV`
192+
// arm:`MOVW`,`MUL`,-`.*udiv`
178193
a := n1 % 17 // unsigned
179194

180195
// amd64:"MOVQ\t[$]-1085102592571150095","IMULQ",-"IDIVQ"
196+
// 386:"MOVL\t[$]-252645135","IMULL",-"IDIVL"
197+
// arm64:`MOVD`,`SMULH`,-`DIV`
198+
// arm:`MOVW`,`MUL`,-`.*udiv`
181199
b := n2 % 17 // signed
182200

183201
return a, b
@@ -270,6 +288,8 @@ func NoFix16B(divd int16) (int16, int16) {
270288
func LenDiv1(a []int) int {
271289
// 386:"SHRL\t[$]10"
272290
// amd64:"SHRQ\t[$]10"
291+
// arm64:"LSR\t[$]10",-"SDIV"
292+
// arm:"SRL\t[$]10",-".*udiv"
273293
// ppc64:"SRD"\t[$]10"
274294
// ppc64le:"SRD"\t[$]10"
275295
return len(a) / 1024
@@ -278,6 +298,8 @@ func LenDiv1(a []int) int {
278298
func LenDiv2(s string) int {
279299
// 386:"SHRL\t[$]11"
280300
// amd64:"SHRQ\t[$]11"
301+
// arm64:"LSR\t[$]11",-"SDIV"
302+
// arm:"SRL\t[$]11",-".*udiv"
281303
// ppc64:"SRD\t[$]11"
282304
// ppc64le:"SRD\t[$]11"
283305
return len(s) / (4097 >> 1)
@@ -286,6 +308,9 @@ func LenDiv2(s string) int {
286308
func LenMod1(a []int) int {
287309
// 386:"ANDL\t[$]1023"
288310
// amd64:"ANDQ\t[$]1023"
311+
// arm64:"AND\t[$]1023",-"SDIV"
312+
// arm/6:"AND",-".*udiv"
313+
// arm/7:"BFC",-".*udiv",-"AND"
289314
// ppc64:"ANDCC\t[$]1023"
290315
// ppc64le:"ANDCC\t[$]1023"
291316
return len(a) % 1024
@@ -294,6 +319,9 @@ func LenMod1(a []int) int {
294319
func LenMod2(s string) int {
295320
// 386:"ANDL\t[$]2047"
296321
// amd64:"ANDQ\t[$]2047"
322+
// arm64:"AND\t[$]2047",-"SDIV"
323+
// arm/6:"AND",-".*udiv"
324+
// arm/7:"BFC",-".*udiv",-"AND"
297325
// ppc64:"ANDCC\t[$]2047"
298326
// ppc64le:"ANDCC\t[$]2047"
299327
return len(s) % (4097 >> 1)
@@ -302,6 +330,8 @@ func LenMod2(s string) int {
302330
func CapDiv(a []int) int {
303331
// 386:"SHRL\t[$]12"
304332
// amd64:"SHRQ\t[$]12"
333+
// arm64:"LSR\t[$]12",-"SDIV"
334+
// arm:"SRL\t[$]12",-".*udiv"
305335
// ppc64:"SRD\t[$]12"
306336
// ppc64le:"SRD\t[$]12"
307337
return cap(a) / ((1 << 11) + 2048)
@@ -310,6 +340,9 @@ func CapDiv(a []int) int {
310340
func CapMod(a []int) int {
311341
// 386:"ANDL\t[$]4095"
312342
// amd64:"ANDQ\t[$]4095"
343+
// arm64:"AND\t[$]4095",-"SDIV"
344+
// arm/6:"AND",-".*udiv"
345+
// arm/7:"BFC",-".*udiv",-"AND"
313346
// ppc64:"ANDCC\t[$]4095"
314347
// ppc64le:"ANDCC\t[$]4095"
315348
return cap(a) % ((1 << 11) + 2048)

0 commit comments

Comments
 (0)