@@ -66,14 +66,18 @@ func Pow2Muls(n1, n2 int) (int, int) {
66
66
}
67
67
68
68
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`
70
73
return n * 96
71
74
}
72
75
73
76
func MulMemSrc (a []uint32 , b []float32 ) {
74
77
// 386:`IMULL\s4\([A-Z]+\),\s[A-Z]+`
75
78
a [0 ] *= a [1 ]
76
79
// 386/sse2:`MULSS\s4\([A-Z]+\),\sX[0-9]+`
80
+ // amd64:`MULSS\s4\([A-Z]+\),\sX[0-9]+`
77
81
b [0 ] *= b [1 ]
78
82
}
79
83
@@ -115,6 +119,7 @@ func MergeMuls5(a, n int) int {
115
119
116
120
func DivMemSrc (a []float64 ) {
117
121
// 386/sse2:`DIVSD\s8\([A-Z]+\),\sX[0-9]+`
122
+ // amd64:`DIVSD\s8\([A-Z]+\),\sX[0-9]+`
118
123
a [0 ] /= a [1 ]
119
124
}
120
125
@@ -141,16 +146,23 @@ func Pow2Divs(n1 uint, n2 int) (uint, int) {
141
146
// Check that constant divisions get turned into MULs
142
147
func ConstDivs (n1 uint , n2 int ) (uint , int ) {
143
148
// amd64:"MOVQ\t[$]-1085102592571150095","MULQ",-"DIVQ"
149
+ // 386:"MOVL\t[$]-252645135","MULL",-"DIVL"
150
+ // arm64:`MOVD`,`UMULH`,-`DIV`
151
+ // arm:`MOVW`,`MUL`,-`.*udiv`
144
152
a := n1 / 17 // unsigned
145
153
146
154
// amd64:"MOVQ\t[$]-1085102592571150095","IMULQ",-"IDIVQ"
155
+ // 386:"MOVL\t[$]-252645135","IMULL",-"IDIVL"
156
+ // arm64:`MOVD`,`SMULH`,-`DIV`
157
+ // arm:`MOVW`,`MUL`,-`.*udiv`
147
158
b := n2 / 17 // signed
148
159
149
160
return a , b
150
161
}
151
162
152
163
func FloatDivs (a []float32 ) float32 {
153
164
// amd64:`DIVSS\s8\([A-Z]+\),\sX[0-9]+`
165
+ // 386/sse2:`DIVSS\s8\([A-Z]+\),\sX[0-9]+`
154
166
return a [1 ] / a [2 ]
155
167
}
156
168
@@ -175,9 +187,15 @@ func Pow2Mods(n1 uint, n2 int) (uint, int) {
175
187
// Check that constant modulo divs get turned into MULs
176
188
func ConstMods (n1 uint , n2 int ) (uint , int ) {
177
189
// amd64:"MOVQ\t[$]-1085102592571150095","MULQ",-"DIVQ"
190
+ // 386:"MOVL\t[$]-252645135","MULL",-"DIVL"
191
+ // arm64:`MOVD`,`UMULH`,-`DIV`
192
+ // arm:`MOVW`,`MUL`,-`.*udiv`
178
193
a := n1 % 17 // unsigned
179
194
180
195
// amd64:"MOVQ\t[$]-1085102592571150095","IMULQ",-"IDIVQ"
196
+ // 386:"MOVL\t[$]-252645135","IMULL",-"IDIVL"
197
+ // arm64:`MOVD`,`SMULH`,-`DIV`
198
+ // arm:`MOVW`,`MUL`,-`.*udiv`
181
199
b := n2 % 17 // signed
182
200
183
201
return a , b
@@ -270,6 +288,8 @@ func NoFix16B(divd int16) (int16, int16) {
270
288
func LenDiv1 (a []int ) int {
271
289
// 386:"SHRL\t[$]10"
272
290
// amd64:"SHRQ\t[$]10"
291
+ // arm64:"LSR\t[$]10",-"SDIV"
292
+ // arm:"SRL\t[$]10",-".*udiv"
273
293
// ppc64:"SRD"\t[$]10"
274
294
// ppc64le:"SRD"\t[$]10"
275
295
return len (a ) / 1024
@@ -278,6 +298,8 @@ func LenDiv1(a []int) int {
278
298
func LenDiv2 (s string ) int {
279
299
// 386:"SHRL\t[$]11"
280
300
// amd64:"SHRQ\t[$]11"
301
+ // arm64:"LSR\t[$]11",-"SDIV"
302
+ // arm:"SRL\t[$]11",-".*udiv"
281
303
// ppc64:"SRD\t[$]11"
282
304
// ppc64le:"SRD\t[$]11"
283
305
return len (s ) / (4097 >> 1 )
@@ -286,6 +308,9 @@ func LenDiv2(s string) int {
286
308
func LenMod1 (a []int ) int {
287
309
// 386:"ANDL\t[$]1023"
288
310
// amd64:"ANDQ\t[$]1023"
311
+ // arm64:"AND\t[$]1023",-"SDIV"
312
+ // arm/6:"AND",-".*udiv"
313
+ // arm/7:"BFC",-".*udiv",-"AND"
289
314
// ppc64:"ANDCC\t[$]1023"
290
315
// ppc64le:"ANDCC\t[$]1023"
291
316
return len (a ) % 1024
@@ -294,6 +319,9 @@ func LenMod1(a []int) int {
294
319
func LenMod2 (s string ) int {
295
320
// 386:"ANDL\t[$]2047"
296
321
// amd64:"ANDQ\t[$]2047"
322
+ // arm64:"AND\t[$]2047",-"SDIV"
323
+ // arm/6:"AND",-".*udiv"
324
+ // arm/7:"BFC",-".*udiv",-"AND"
297
325
// ppc64:"ANDCC\t[$]2047"
298
326
// ppc64le:"ANDCC\t[$]2047"
299
327
return len (s ) % (4097 >> 1 )
@@ -302,6 +330,8 @@ func LenMod2(s string) int {
302
330
func CapDiv (a []int ) int {
303
331
// 386:"SHRL\t[$]12"
304
332
// amd64:"SHRQ\t[$]12"
333
+ // arm64:"LSR\t[$]12",-"SDIV"
334
+ // arm:"SRL\t[$]12",-".*udiv"
305
335
// ppc64:"SRD\t[$]12"
306
336
// ppc64le:"SRD\t[$]12"
307
337
return cap (a ) / ((1 << 11 ) + 2048 )
@@ -310,6 +340,9 @@ func CapDiv(a []int) int {
310
340
func CapMod (a []int ) int {
311
341
// 386:"ANDL\t[$]4095"
312
342
// amd64:"ANDQ\t[$]4095"
343
+ // arm64:"AND\t[$]4095",-"SDIV"
344
+ // arm/6:"AND",-".*udiv"
345
+ // arm/7:"BFC",-".*udiv",-"AND"
313
346
// ppc64:"ANDCC\t[$]4095"
314
347
// ppc64le:"ANDCC\t[$]4095"
315
348
return cap (a ) % ((1 << 11 ) + 2048 )
0 commit comments