]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: strength reduce more x86 constant multiplication
authorJosh Bleecher Snyder <josharian@gmail.com>
Sat, 24 Mar 2018 02:09:23 +0000 (19:09 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Wed, 28 Mar 2018 18:33:10 +0000 (18:33 +0000)
The additions were machine-generated.

The change for x * 7 avoids a reg-reg move,
reducing the number of instructions from 3 to 2.

Change-Id: Ib002e39f29ca5e46cfdb8daaf87ddc7ba50a17e5
Reviewed-on: https://go-review.googlesource.com/102395
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/gc/testdata/arithConst.go
src/cmd/compile/internal/gc/testdata/gen/arithConstGen.go
src/cmd/compile/internal/ssa/gen/386.rules
src/cmd/compile/internal/ssa/gen/AMD64.rules
src/cmd/compile/internal/ssa/rewrite386.go
src/cmd/compile/internal/ssa/rewriteAMD64.go

index 887abead155ec5cdc169884975df2b4d82918f71..4ece5a9cb6fc37c538392a1573427f51a2bcf666 100644 (file)
@@ -300,6 +300,102 @@ func xor_uint64_18446744073709551615(a uint64) uint64 { return a ^ 1844674407370
 //go:noinline
 func xor_18446744073709551615_uint64(a uint64) uint64 { return 18446744073709551615 ^ a }
 
+//go:noinline
+func mul_uint64_3(a uint64) uint64 { return a * 3 }
+
+//go:noinline
+func mul_3_uint64(a uint64) uint64 { return 3 * a }
+
+//go:noinline
+func mul_uint64_5(a uint64) uint64 { return a * 5 }
+
+//go:noinline
+func mul_5_uint64(a uint64) uint64 { return 5 * a }
+
+//go:noinline
+func mul_uint64_7(a uint64) uint64 { return a * 7 }
+
+//go:noinline
+func mul_7_uint64(a uint64) uint64 { return 7 * a }
+
+//go:noinline
+func mul_uint64_9(a uint64) uint64 { return a * 9 }
+
+//go:noinline
+func mul_9_uint64(a uint64) uint64 { return 9 * a }
+
+//go:noinline
+func mul_uint64_10(a uint64) uint64 { return a * 10 }
+
+//go:noinline
+func mul_10_uint64(a uint64) uint64 { return 10 * a }
+
+//go:noinline
+func mul_uint64_11(a uint64) uint64 { return a * 11 }
+
+//go:noinline
+func mul_11_uint64(a uint64) uint64 { return 11 * a }
+
+//go:noinline
+func mul_uint64_13(a uint64) uint64 { return a * 13 }
+
+//go:noinline
+func mul_13_uint64(a uint64) uint64 { return 13 * a }
+
+//go:noinline
+func mul_uint64_19(a uint64) uint64 { return a * 19 }
+
+//go:noinline
+func mul_19_uint64(a uint64) uint64 { return 19 * a }
+
+//go:noinline
+func mul_uint64_21(a uint64) uint64 { return a * 21 }
+
+//go:noinline
+func mul_21_uint64(a uint64) uint64 { return 21 * a }
+
+//go:noinline
+func mul_uint64_25(a uint64) uint64 { return a * 25 }
+
+//go:noinline
+func mul_25_uint64(a uint64) uint64 { return 25 * a }
+
+//go:noinline
+func mul_uint64_27(a uint64) uint64 { return a * 27 }
+
+//go:noinline
+func mul_27_uint64(a uint64) uint64 { return 27 * a }
+
+//go:noinline
+func mul_uint64_37(a uint64) uint64 { return a * 37 }
+
+//go:noinline
+func mul_37_uint64(a uint64) uint64 { return 37 * a }
+
+//go:noinline
+func mul_uint64_41(a uint64) uint64 { return a * 41 }
+
+//go:noinline
+func mul_41_uint64(a uint64) uint64 { return 41 * a }
+
+//go:noinline
+func mul_uint64_45(a uint64) uint64 { return a * 45 }
+
+//go:noinline
+func mul_45_uint64(a uint64) uint64 { return 45 * a }
+
+//go:noinline
+func mul_uint64_73(a uint64) uint64 { return a * 73 }
+
+//go:noinline
+func mul_73_uint64(a uint64) uint64 { return 73 * a }
+
+//go:noinline
+func mul_uint64_81(a uint64) uint64 { return a * 81 }
+
+//go:noinline
+func mul_81_uint64(a uint64) uint64 { return 81 * a }
+
 //go:noinline
 func add_int64_Neg9223372036854775808(a int64) int64 { return a + -9223372036854775808 }
 
@@ -726,6 +822,120 @@ func xor_int64_9223372036854775807(a int64) int64 { return a ^ 92233720368547758
 //go:noinline
 func xor_9223372036854775807_int64(a int64) int64 { return 9223372036854775807 ^ a }
 
+//go:noinline
+func mul_int64_Neg9(a int64) int64 { return a * -9 }
+
+//go:noinline
+func mul_Neg9_int64(a int64) int64 { return -9 * a }
+
+//go:noinline
+func mul_int64_Neg5(a int64) int64 { return a * -5 }
+
+//go:noinline
+func mul_Neg5_int64(a int64) int64 { return -5 * a }
+
+//go:noinline
+func mul_int64_Neg3(a int64) int64 { return a * -3 }
+
+//go:noinline
+func mul_Neg3_int64(a int64) int64 { return -3 * a }
+
+//go:noinline
+func mul_int64_3(a int64) int64 { return a * 3 }
+
+//go:noinline
+func mul_3_int64(a int64) int64 { return 3 * a }
+
+//go:noinline
+func mul_int64_5(a int64) int64 { return a * 5 }
+
+//go:noinline
+func mul_5_int64(a int64) int64 { return 5 * a }
+
+//go:noinline
+func mul_int64_7(a int64) int64 { return a * 7 }
+
+//go:noinline
+func mul_7_int64(a int64) int64 { return 7 * a }
+
+//go:noinline
+func mul_int64_9(a int64) int64 { return a * 9 }
+
+//go:noinline
+func mul_9_int64(a int64) int64 { return 9 * a }
+
+//go:noinline
+func mul_int64_10(a int64) int64 { return a * 10 }
+
+//go:noinline
+func mul_10_int64(a int64) int64 { return 10 * a }
+
+//go:noinline
+func mul_int64_11(a int64) int64 { return a * 11 }
+
+//go:noinline
+func mul_11_int64(a int64) int64 { return 11 * a }
+
+//go:noinline
+func mul_int64_13(a int64) int64 { return a * 13 }
+
+//go:noinline
+func mul_13_int64(a int64) int64 { return 13 * a }
+
+//go:noinline
+func mul_int64_19(a int64) int64 { return a * 19 }
+
+//go:noinline
+func mul_19_int64(a int64) int64 { return 19 * a }
+
+//go:noinline
+func mul_int64_21(a int64) int64 { return a * 21 }
+
+//go:noinline
+func mul_21_int64(a int64) int64 { return 21 * a }
+
+//go:noinline
+func mul_int64_25(a int64) int64 { return a * 25 }
+
+//go:noinline
+func mul_25_int64(a int64) int64 { return 25 * a }
+
+//go:noinline
+func mul_int64_27(a int64) int64 { return a * 27 }
+
+//go:noinline
+func mul_27_int64(a int64) int64 { return 27 * a }
+
+//go:noinline
+func mul_int64_37(a int64) int64 { return a * 37 }
+
+//go:noinline
+func mul_37_int64(a int64) int64 { return 37 * a }
+
+//go:noinline
+func mul_int64_41(a int64) int64 { return a * 41 }
+
+//go:noinline
+func mul_41_int64(a int64) int64 { return 41 * a }
+
+//go:noinline
+func mul_int64_45(a int64) int64 { return a * 45 }
+
+//go:noinline
+func mul_45_int64(a int64) int64 { return 45 * a }
+
+//go:noinline
+func mul_int64_73(a int64) int64 { return a * 73 }
+
+//go:noinline
+func mul_73_int64(a int64) int64 { return 73 * a }
+
+//go:noinline
+func mul_int64_81(a int64) int64 { return a * 81 }
+
+//go:noinline
+func mul_81_int64(a int64) int64 { return 81 * a }
+
 //go:noinline
 func add_uint32_0(a uint32) uint32 { return a + 0 }
 
@@ -900,6 +1110,102 @@ func xor_uint32_4294967295(a uint32) uint32 { return a ^ 4294967295 }
 //go:noinline
 func xor_4294967295_uint32(a uint32) uint32 { return 4294967295 ^ a }
 
+//go:noinline
+func mul_uint32_3(a uint32) uint32 { return a * 3 }
+
+//go:noinline
+func mul_3_uint32(a uint32) uint32 { return 3 * a }
+
+//go:noinline
+func mul_uint32_5(a uint32) uint32 { return a * 5 }
+
+//go:noinline
+func mul_5_uint32(a uint32) uint32 { return 5 * a }
+
+//go:noinline
+func mul_uint32_7(a uint32) uint32 { return a * 7 }
+
+//go:noinline
+func mul_7_uint32(a uint32) uint32 { return 7 * a }
+
+//go:noinline
+func mul_uint32_9(a uint32) uint32 { return a * 9 }
+
+//go:noinline
+func mul_9_uint32(a uint32) uint32 { return 9 * a }
+
+//go:noinline
+func mul_uint32_10(a uint32) uint32 { return a * 10 }
+
+//go:noinline
+func mul_10_uint32(a uint32) uint32 { return 10 * a }
+
+//go:noinline
+func mul_uint32_11(a uint32) uint32 { return a * 11 }
+
+//go:noinline
+func mul_11_uint32(a uint32) uint32 { return 11 * a }
+
+//go:noinline
+func mul_uint32_13(a uint32) uint32 { return a * 13 }
+
+//go:noinline
+func mul_13_uint32(a uint32) uint32 { return 13 * a }
+
+//go:noinline
+func mul_uint32_19(a uint32) uint32 { return a * 19 }
+
+//go:noinline
+func mul_19_uint32(a uint32) uint32 { return 19 * a }
+
+//go:noinline
+func mul_uint32_21(a uint32) uint32 { return a * 21 }
+
+//go:noinline
+func mul_21_uint32(a uint32) uint32 { return 21 * a }
+
+//go:noinline
+func mul_uint32_25(a uint32) uint32 { return a * 25 }
+
+//go:noinline
+func mul_25_uint32(a uint32) uint32 { return 25 * a }
+
+//go:noinline
+func mul_uint32_27(a uint32) uint32 { return a * 27 }
+
+//go:noinline
+func mul_27_uint32(a uint32) uint32 { return 27 * a }
+
+//go:noinline
+func mul_uint32_37(a uint32) uint32 { return a * 37 }
+
+//go:noinline
+func mul_37_uint32(a uint32) uint32 { return 37 * a }
+
+//go:noinline
+func mul_uint32_41(a uint32) uint32 { return a * 41 }
+
+//go:noinline
+func mul_41_uint32(a uint32) uint32 { return 41 * a }
+
+//go:noinline
+func mul_uint32_45(a uint32) uint32 { return a * 45 }
+
+//go:noinline
+func mul_45_uint32(a uint32) uint32 { return 45 * a }
+
+//go:noinline
+func mul_uint32_73(a uint32) uint32 { return a * 73 }
+
+//go:noinline
+func mul_73_uint32(a uint32) uint32 { return 73 * a }
+
+//go:noinline
+func mul_uint32_81(a uint32) uint32 { return a * 81 }
+
+//go:noinline
+func mul_81_uint32(a uint32) uint32 { return 81 * a }
+
 //go:noinline
 func add_int32_Neg2147483648(a int32) int32 { return a + -2147483648 }
 
@@ -1182,6 +1488,120 @@ func xor_int32_2147483647(a int32) int32 { return a ^ 2147483647 }
 //go:noinline
 func xor_2147483647_int32(a int32) int32 { return 2147483647 ^ a }
 
+//go:noinline
+func mul_int32_Neg9(a int32) int32 { return a * -9 }
+
+//go:noinline
+func mul_Neg9_int32(a int32) int32 { return -9 * a }
+
+//go:noinline
+func mul_int32_Neg5(a int32) int32 { return a * -5 }
+
+//go:noinline
+func mul_Neg5_int32(a int32) int32 { return -5 * a }
+
+//go:noinline
+func mul_int32_Neg3(a int32) int32 { return a * -3 }
+
+//go:noinline
+func mul_Neg3_int32(a int32) int32 { return -3 * a }
+
+//go:noinline
+func mul_int32_3(a int32) int32 { return a * 3 }
+
+//go:noinline
+func mul_3_int32(a int32) int32 { return 3 * a }
+
+//go:noinline
+func mul_int32_5(a int32) int32 { return a * 5 }
+
+//go:noinline
+func mul_5_int32(a int32) int32 { return 5 * a }
+
+//go:noinline
+func mul_int32_7(a int32) int32 { return a * 7 }
+
+//go:noinline
+func mul_7_int32(a int32) int32 { return 7 * a }
+
+//go:noinline
+func mul_int32_9(a int32) int32 { return a * 9 }
+
+//go:noinline
+func mul_9_int32(a int32) int32 { return 9 * a }
+
+//go:noinline
+func mul_int32_10(a int32) int32 { return a * 10 }
+
+//go:noinline
+func mul_10_int32(a int32) int32 { return 10 * a }
+
+//go:noinline
+func mul_int32_11(a int32) int32 { return a * 11 }
+
+//go:noinline
+func mul_11_int32(a int32) int32 { return 11 * a }
+
+//go:noinline
+func mul_int32_13(a int32) int32 { return a * 13 }
+
+//go:noinline
+func mul_13_int32(a int32) int32 { return 13 * a }
+
+//go:noinline
+func mul_int32_19(a int32) int32 { return a * 19 }
+
+//go:noinline
+func mul_19_int32(a int32) int32 { return 19 * a }
+
+//go:noinline
+func mul_int32_21(a int32) int32 { return a * 21 }
+
+//go:noinline
+func mul_21_int32(a int32) int32 { return 21 * a }
+
+//go:noinline
+func mul_int32_25(a int32) int32 { return a * 25 }
+
+//go:noinline
+func mul_25_int32(a int32) int32 { return 25 * a }
+
+//go:noinline
+func mul_int32_27(a int32) int32 { return a * 27 }
+
+//go:noinline
+func mul_27_int32(a int32) int32 { return 27 * a }
+
+//go:noinline
+func mul_int32_37(a int32) int32 { return a * 37 }
+
+//go:noinline
+func mul_37_int32(a int32) int32 { return 37 * a }
+
+//go:noinline
+func mul_int32_41(a int32) int32 { return a * 41 }
+
+//go:noinline
+func mul_41_int32(a int32) int32 { return 41 * a }
+
+//go:noinline
+func mul_int32_45(a int32) int32 { return a * 45 }
+
+//go:noinline
+func mul_45_int32(a int32) int32 { return 45 * a }
+
+//go:noinline
+func mul_int32_73(a int32) int32 { return a * 73 }
+
+//go:noinline
+func mul_73_int32(a int32) int32 { return 73 * a }
+
+//go:noinline
+func mul_int32_81(a int32) int32 { return a * 81 }
+
+//go:noinline
+func mul_81_int32(a int32) int32 { return 81 * a }
+
 //go:noinline
 func add_uint16_0(a uint16) uint16 { return a + 0 }
 
@@ -2680,6 +3100,528 @@ var tests_uint64 = []test_uint64{
        test_uint64{fn: xor_18446744073709551615_uint64, fnname: "xor_18446744073709551615_uint64", in: 18446744073709551615, want: 0},
        test_uint64{fn: xor_uint64_18446744073709551615, fnname: "xor_uint64_18446744073709551615", in: 18446744073709551615, want: 0}}
 
+type test_uint64mul struct {
+       fn     func(uint64) uint64
+       fnname string
+       in     uint64
+       want   uint64
+}
+
+var tests_uint64mul = []test_uint64{
+
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 3, want: 9},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 3, want: 9},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 5, want: 15},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 5, want: 15},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 7, want: 21},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 7, want: 21},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 9, want: 27},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 9, want: 27},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 10, want: 30},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 10, want: 30},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 11, want: 33},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 11, want: 33},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 13, want: 39},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 13, want: 39},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 19, want: 57},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 19, want: 57},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 21, want: 63},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 21, want: 63},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 25, want: 75},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 25, want: 75},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 27, want: 81},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 27, want: 81},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 37, want: 111},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 37, want: 111},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 41, want: 123},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 41, want: 123},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 45, want: 135},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 45, want: 135},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 73, want: 219},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 73, want: 219},
+       test_uint64{fn: mul_3_uint64, fnname: "mul_3_uint64", in: 81, want: 243},
+       test_uint64{fn: mul_uint64_3, fnname: "mul_uint64_3", in: 81, want: 243},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 3, want: 15},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 3, want: 15},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 5, want: 25},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 5, want: 25},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 7, want: 35},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 7, want: 35},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 9, want: 45},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 9, want: 45},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 10, want: 50},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 10, want: 50},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 11, want: 55},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 11, want: 55},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 13, want: 65},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 13, want: 65},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 19, want: 95},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 19, want: 95},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 21, want: 105},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 21, want: 105},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 25, want: 125},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 25, want: 125},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 27, want: 135},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 27, want: 135},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 37, want: 185},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 37, want: 185},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 41, want: 205},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 41, want: 205},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 45, want: 225},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 45, want: 225},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 73, want: 365},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 73, want: 365},
+       test_uint64{fn: mul_5_uint64, fnname: "mul_5_uint64", in: 81, want: 405},
+       test_uint64{fn: mul_uint64_5, fnname: "mul_uint64_5", in: 81, want: 405},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 3, want: 21},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 3, want: 21},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 5, want: 35},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 5, want: 35},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 7, want: 49},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 7, want: 49},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 9, want: 63},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 9, want: 63},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 10, want: 70},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 10, want: 70},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 11, want: 77},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 11, want: 77},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 13, want: 91},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 13, want: 91},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 19, want: 133},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 19, want: 133},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 21, want: 147},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 21, want: 147},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 25, want: 175},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 25, want: 175},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 27, want: 189},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 27, want: 189},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 37, want: 259},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 37, want: 259},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 41, want: 287},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 41, want: 287},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 45, want: 315},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 45, want: 315},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 73, want: 511},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 73, want: 511},
+       test_uint64{fn: mul_7_uint64, fnname: "mul_7_uint64", in: 81, want: 567},
+       test_uint64{fn: mul_uint64_7, fnname: "mul_uint64_7", in: 81, want: 567},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 3, want: 27},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 3, want: 27},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 5, want: 45},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 5, want: 45},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 7, want: 63},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 7, want: 63},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 9, want: 81},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 9, want: 81},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 10, want: 90},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 10, want: 90},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 11, want: 99},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 11, want: 99},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 13, want: 117},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 13, want: 117},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 19, want: 171},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 19, want: 171},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 21, want: 189},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 21, want: 189},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 25, want: 225},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 25, want: 225},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 27, want: 243},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 27, want: 243},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 37, want: 333},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 37, want: 333},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 41, want: 369},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 41, want: 369},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 45, want: 405},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 45, want: 405},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 73, want: 657},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 73, want: 657},
+       test_uint64{fn: mul_9_uint64, fnname: "mul_9_uint64", in: 81, want: 729},
+       test_uint64{fn: mul_uint64_9, fnname: "mul_uint64_9", in: 81, want: 729},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 3, want: 30},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 3, want: 30},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 5, want: 50},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 5, want: 50},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 7, want: 70},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 7, want: 70},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 9, want: 90},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 9, want: 90},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 10, want: 100},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 10, want: 100},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 11, want: 110},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 11, want: 110},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 13, want: 130},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 13, want: 130},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 19, want: 190},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 19, want: 190},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 21, want: 210},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 21, want: 210},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 25, want: 250},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 25, want: 250},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 27, want: 270},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 27, want: 270},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 37, want: 370},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 37, want: 370},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 41, want: 410},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 41, want: 410},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 45, want: 450},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 45, want: 450},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 73, want: 730},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 73, want: 730},
+       test_uint64{fn: mul_10_uint64, fnname: "mul_10_uint64", in: 81, want: 810},
+       test_uint64{fn: mul_uint64_10, fnname: "mul_uint64_10", in: 81, want: 810},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 3, want: 33},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 3, want: 33},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 5, want: 55},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 5, want: 55},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 7, want: 77},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 7, want: 77},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 9, want: 99},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 9, want: 99},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 10, want: 110},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 10, want: 110},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 11, want: 121},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 11, want: 121},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 13, want: 143},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 13, want: 143},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 19, want: 209},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 19, want: 209},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 21, want: 231},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 21, want: 231},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 25, want: 275},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 25, want: 275},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 27, want: 297},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 27, want: 297},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 37, want: 407},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 37, want: 407},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 41, want: 451},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 41, want: 451},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 45, want: 495},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 45, want: 495},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 73, want: 803},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 73, want: 803},
+       test_uint64{fn: mul_11_uint64, fnname: "mul_11_uint64", in: 81, want: 891},
+       test_uint64{fn: mul_uint64_11, fnname: "mul_uint64_11", in: 81, want: 891},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 3, want: 39},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 3, want: 39},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 5, want: 65},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 5, want: 65},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 7, want: 91},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 7, want: 91},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 9, want: 117},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 9, want: 117},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 10, want: 130},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 10, want: 130},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 11, want: 143},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 11, want: 143},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 13, want: 169},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 13, want: 169},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 19, want: 247},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 19, want: 247},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 21, want: 273},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 21, want: 273},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 25, want: 325},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 25, want: 325},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 27, want: 351},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 27, want: 351},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 37, want: 481},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 37, want: 481},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 41, want: 533},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 41, want: 533},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 45, want: 585},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 45, want: 585},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 73, want: 949},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 73, want: 949},
+       test_uint64{fn: mul_13_uint64, fnname: "mul_13_uint64", in: 81, want: 1053},
+       test_uint64{fn: mul_uint64_13, fnname: "mul_uint64_13", in: 81, want: 1053},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 3, want: 57},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 3, want: 57},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 5, want: 95},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 5, want: 95},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 7, want: 133},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 7, want: 133},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 9, want: 171},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 9, want: 171},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 10, want: 190},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 10, want: 190},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 11, want: 209},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 11, want: 209},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 13, want: 247},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 13, want: 247},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 19, want: 361},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 19, want: 361},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 21, want: 399},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 21, want: 399},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 25, want: 475},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 25, want: 475},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 27, want: 513},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 27, want: 513},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 37, want: 703},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 37, want: 703},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 41, want: 779},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 41, want: 779},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 45, want: 855},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 45, want: 855},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 73, want: 1387},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 73, want: 1387},
+       test_uint64{fn: mul_19_uint64, fnname: "mul_19_uint64", in: 81, want: 1539},
+       test_uint64{fn: mul_uint64_19, fnname: "mul_uint64_19", in: 81, want: 1539},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 3, want: 63},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 3, want: 63},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 5, want: 105},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 5, want: 105},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 7, want: 147},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 7, want: 147},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 9, want: 189},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 9, want: 189},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 10, want: 210},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 10, want: 210},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 11, want: 231},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 11, want: 231},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 13, want: 273},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 13, want: 273},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 19, want: 399},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 19, want: 399},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 21, want: 441},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 21, want: 441},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 25, want: 525},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 25, want: 525},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 27, want: 567},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 27, want: 567},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 37, want: 777},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 37, want: 777},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 41, want: 861},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 41, want: 861},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 45, want: 945},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 45, want: 945},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 73, want: 1533},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 73, want: 1533},
+       test_uint64{fn: mul_21_uint64, fnname: "mul_21_uint64", in: 81, want: 1701},
+       test_uint64{fn: mul_uint64_21, fnname: "mul_uint64_21", in: 81, want: 1701},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 3, want: 75},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 3, want: 75},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 5, want: 125},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 5, want: 125},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 7, want: 175},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 7, want: 175},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 9, want: 225},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 9, want: 225},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 10, want: 250},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 10, want: 250},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 11, want: 275},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 11, want: 275},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 13, want: 325},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 13, want: 325},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 19, want: 475},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 19, want: 475},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 21, want: 525},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 21, want: 525},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 25, want: 625},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 25, want: 625},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 27, want: 675},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 27, want: 675},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 37, want: 925},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 37, want: 925},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 41, want: 1025},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 41, want: 1025},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 45, want: 1125},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 45, want: 1125},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 73, want: 1825},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 73, want: 1825},
+       test_uint64{fn: mul_25_uint64, fnname: "mul_25_uint64", in: 81, want: 2025},
+       test_uint64{fn: mul_uint64_25, fnname: "mul_uint64_25", in: 81, want: 2025},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 3, want: 81},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 3, want: 81},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 5, want: 135},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 5, want: 135},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 7, want: 189},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 7, want: 189},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 9, want: 243},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 9, want: 243},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 10, want: 270},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 10, want: 270},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 11, want: 297},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 11, want: 297},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 13, want: 351},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 13, want: 351},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 19, want: 513},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 19, want: 513},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 21, want: 567},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 21, want: 567},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 25, want: 675},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 25, want: 675},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 27, want: 729},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 27, want: 729},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 37, want: 999},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 37, want: 999},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 41, want: 1107},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 41, want: 1107},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 45, want: 1215},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 45, want: 1215},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 73, want: 1971},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 73, want: 1971},
+       test_uint64{fn: mul_27_uint64, fnname: "mul_27_uint64", in: 81, want: 2187},
+       test_uint64{fn: mul_uint64_27, fnname: "mul_uint64_27", in: 81, want: 2187},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 3, want: 111},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 3, want: 111},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 5, want: 185},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 5, want: 185},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 7, want: 259},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 7, want: 259},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 9, want: 333},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 9, want: 333},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 10, want: 370},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 10, want: 370},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 11, want: 407},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 11, want: 407},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 13, want: 481},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 13, want: 481},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 19, want: 703},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 19, want: 703},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 21, want: 777},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 21, want: 777},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 25, want: 925},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 25, want: 925},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 27, want: 999},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 27, want: 999},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 37, want: 1369},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 37, want: 1369},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 41, want: 1517},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 41, want: 1517},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 45, want: 1665},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 45, want: 1665},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 73, want: 2701},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 73, want: 2701},
+       test_uint64{fn: mul_37_uint64, fnname: "mul_37_uint64", in: 81, want: 2997},
+       test_uint64{fn: mul_uint64_37, fnname: "mul_uint64_37", in: 81, want: 2997},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 3, want: 123},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 3, want: 123},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 5, want: 205},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 5, want: 205},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 7, want: 287},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 7, want: 287},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 9, want: 369},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 9, want: 369},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 10, want: 410},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 10, want: 410},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 11, want: 451},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 11, want: 451},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 13, want: 533},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 13, want: 533},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 19, want: 779},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 19, want: 779},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 21, want: 861},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 21, want: 861},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 25, want: 1025},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 25, want: 1025},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 27, want: 1107},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 27, want: 1107},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 37, want: 1517},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 37, want: 1517},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 41, want: 1681},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 41, want: 1681},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 45, want: 1845},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 45, want: 1845},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 73, want: 2993},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 73, want: 2993},
+       test_uint64{fn: mul_41_uint64, fnname: "mul_41_uint64", in: 81, want: 3321},
+       test_uint64{fn: mul_uint64_41, fnname: "mul_uint64_41", in: 81, want: 3321},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 3, want: 135},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 3, want: 135},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 5, want: 225},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 5, want: 225},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 7, want: 315},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 7, want: 315},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 9, want: 405},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 9, want: 405},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 10, want: 450},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 10, want: 450},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 11, want: 495},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 11, want: 495},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 13, want: 585},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 13, want: 585},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 19, want: 855},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 19, want: 855},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 21, want: 945},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 21, want: 945},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 25, want: 1125},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 25, want: 1125},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 27, want: 1215},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 27, want: 1215},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 37, want: 1665},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 37, want: 1665},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 41, want: 1845},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 41, want: 1845},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 45, want: 2025},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 45, want: 2025},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 73, want: 3285},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 73, want: 3285},
+       test_uint64{fn: mul_45_uint64, fnname: "mul_45_uint64", in: 81, want: 3645},
+       test_uint64{fn: mul_uint64_45, fnname: "mul_uint64_45", in: 81, want: 3645},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 3, want: 219},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 3, want: 219},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 5, want: 365},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 5, want: 365},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 7, want: 511},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 7, want: 511},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 9, want: 657},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 9, want: 657},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 10, want: 730},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 10, want: 730},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 11, want: 803},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 11, want: 803},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 13, want: 949},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 13, want: 949},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 19, want: 1387},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 19, want: 1387},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 21, want: 1533},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 21, want: 1533},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 25, want: 1825},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 25, want: 1825},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 27, want: 1971},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 27, want: 1971},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 37, want: 2701},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 37, want: 2701},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 41, want: 2993},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 41, want: 2993},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 45, want: 3285},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 45, want: 3285},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 73, want: 5329},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 73, want: 5329},
+       test_uint64{fn: mul_73_uint64, fnname: "mul_73_uint64", in: 81, want: 5913},
+       test_uint64{fn: mul_uint64_73, fnname: "mul_uint64_73", in: 81, want: 5913},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 3, want: 243},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 3, want: 243},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 5, want: 405},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 5, want: 405},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 7, want: 567},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 7, want: 567},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 9, want: 729},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 9, want: 729},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 10, want: 810},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 10, want: 810},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 11, want: 891},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 11, want: 891},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 13, want: 1053},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 13, want: 1053},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 19, want: 1539},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 19, want: 1539},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 21, want: 1701},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 21, want: 1701},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 25, want: 2025},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 25, want: 2025},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 27, want: 2187},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 27, want: 2187},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 37, want: 2997},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 37, want: 2997},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 41, want: 3321},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 41, want: 3321},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 45, want: 3645},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 45, want: 3645},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 73, want: 5913},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 73, want: 5913},
+       test_uint64{fn: mul_81_uint64, fnname: "mul_81_uint64", in: 81, want: 6561},
+       test_uint64{fn: mul_uint64_81, fnname: "mul_uint64_81", in: 81, want: 6561}}
+
 type test_int64 struct {
        fn     func(int64) int64
        fnname string
@@ -3950,6 +4892,738 @@ var tests_int64 = []test_int64{
        test_int64{fn: xor_9223372036854775807_int64, fnname: "xor_9223372036854775807_int64", in: 9223372036854775807, want: 0},
        test_int64{fn: xor_int64_9223372036854775807, fnname: "xor_int64_9223372036854775807", in: 9223372036854775807, want: 0}}
 
+type test_int64mul struct {
+       fn     func(int64) int64
+       fnname string
+       in     int64
+       want   int64
+}
+
+var tests_int64mul = []test_int64{
+
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: -9, want: 81},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: -9, want: 81},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: -5, want: 45},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: -5, want: 45},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: -3, want: 27},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: -3, want: 27},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 3, want: -27},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 3, want: -27},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 5, want: -45},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 5, want: -45},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 7, want: -63},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 7, want: -63},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 9, want: -81},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 9, want: -81},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 10, want: -90},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 10, want: -90},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 11, want: -99},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 11, want: -99},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 13, want: -117},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 13, want: -117},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 19, want: -171},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 19, want: -171},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 21, want: -189},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 21, want: -189},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 25, want: -225},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 25, want: -225},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 27, want: -243},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 27, want: -243},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 37, want: -333},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 37, want: -333},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 41, want: -369},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 41, want: -369},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 45, want: -405},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 45, want: -405},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 73, want: -657},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 73, want: -657},
+       test_int64{fn: mul_Neg9_int64, fnname: "mul_Neg9_int64", in: 81, want: -729},
+       test_int64{fn: mul_int64_Neg9, fnname: "mul_int64_Neg9", in: 81, want: -729},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: -9, want: 45},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: -9, want: 45},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: -5, want: 25},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: -5, want: 25},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: -3, want: 15},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: -3, want: 15},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 3, want: -15},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 3, want: -15},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 5, want: -25},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 5, want: -25},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 7, want: -35},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 7, want: -35},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 9, want: -45},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 9, want: -45},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 10, want: -50},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 10, want: -50},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 11, want: -55},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 11, want: -55},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 13, want: -65},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 13, want: -65},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 19, want: -95},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 19, want: -95},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 21, want: -105},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 21, want: -105},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 25, want: -125},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 25, want: -125},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 27, want: -135},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 27, want: -135},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 37, want: -185},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 37, want: -185},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 41, want: -205},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 41, want: -205},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 45, want: -225},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 45, want: -225},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 73, want: -365},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 73, want: -365},
+       test_int64{fn: mul_Neg5_int64, fnname: "mul_Neg5_int64", in: 81, want: -405},
+       test_int64{fn: mul_int64_Neg5, fnname: "mul_int64_Neg5", in: 81, want: -405},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: -9, want: 27},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: -9, want: 27},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: -5, want: 15},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: -5, want: 15},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: -3, want: 9},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: -3, want: 9},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 3, want: -9},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 3, want: -9},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 5, want: -15},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 5, want: -15},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 7, want: -21},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 7, want: -21},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 9, want: -27},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 9, want: -27},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 10, want: -30},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 10, want: -30},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 11, want: -33},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 11, want: -33},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 13, want: -39},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 13, want: -39},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 19, want: -57},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 19, want: -57},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 21, want: -63},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 21, want: -63},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 25, want: -75},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 25, want: -75},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 27, want: -81},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 27, want: -81},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 37, want: -111},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 37, want: -111},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 41, want: -123},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 41, want: -123},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 45, want: -135},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 45, want: -135},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 73, want: -219},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 73, want: -219},
+       test_int64{fn: mul_Neg3_int64, fnname: "mul_Neg3_int64", in: 81, want: -243},
+       test_int64{fn: mul_int64_Neg3, fnname: "mul_int64_Neg3", in: 81, want: -243},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: -9, want: -27},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: -9, want: -27},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: -5, want: -15},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: -5, want: -15},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: -3, want: -9},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: -3, want: -9},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 3, want: 9},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 3, want: 9},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 5, want: 15},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 5, want: 15},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 7, want: 21},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 7, want: 21},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 9, want: 27},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 9, want: 27},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 10, want: 30},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 10, want: 30},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 11, want: 33},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 11, want: 33},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 13, want: 39},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 13, want: 39},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 19, want: 57},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 19, want: 57},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 21, want: 63},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 21, want: 63},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 25, want: 75},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 25, want: 75},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 27, want: 81},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 27, want: 81},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 37, want: 111},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 37, want: 111},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 41, want: 123},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 41, want: 123},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 45, want: 135},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 45, want: 135},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 73, want: 219},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 73, want: 219},
+       test_int64{fn: mul_3_int64, fnname: "mul_3_int64", in: 81, want: 243},
+       test_int64{fn: mul_int64_3, fnname: "mul_int64_3", in: 81, want: 243},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: -9, want: -45},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: -9, want: -45},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: -5, want: -25},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: -5, want: -25},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: -3, want: -15},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: -3, want: -15},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 3, want: 15},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 3, want: 15},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 5, want: 25},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 5, want: 25},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 7, want: 35},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 7, want: 35},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 9, want: 45},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 9, want: 45},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 10, want: 50},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 10, want: 50},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 11, want: 55},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 11, want: 55},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 13, want: 65},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 13, want: 65},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 19, want: 95},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 19, want: 95},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 21, want: 105},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 21, want: 105},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 25, want: 125},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 25, want: 125},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 27, want: 135},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 27, want: 135},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 37, want: 185},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 37, want: 185},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 41, want: 205},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 41, want: 205},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 45, want: 225},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 45, want: 225},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 73, want: 365},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 73, want: 365},
+       test_int64{fn: mul_5_int64, fnname: "mul_5_int64", in: 81, want: 405},
+       test_int64{fn: mul_int64_5, fnname: "mul_int64_5", in: 81, want: 405},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: -9, want: -63},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: -9, want: -63},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: -5, want: -35},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: -5, want: -35},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: -3, want: -21},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: -3, want: -21},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 3, want: 21},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 3, want: 21},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 5, want: 35},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 5, want: 35},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 7, want: 49},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 7, want: 49},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 9, want: 63},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 9, want: 63},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 10, want: 70},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 10, want: 70},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 11, want: 77},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 11, want: 77},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 13, want: 91},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 13, want: 91},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 19, want: 133},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 19, want: 133},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 21, want: 147},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 21, want: 147},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 25, want: 175},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 25, want: 175},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 27, want: 189},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 27, want: 189},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 37, want: 259},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 37, want: 259},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 41, want: 287},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 41, want: 287},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 45, want: 315},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 45, want: 315},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 73, want: 511},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 73, want: 511},
+       test_int64{fn: mul_7_int64, fnname: "mul_7_int64", in: 81, want: 567},
+       test_int64{fn: mul_int64_7, fnname: "mul_int64_7", in: 81, want: 567},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: -9, want: -81},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: -9, want: -81},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: -5, want: -45},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: -5, want: -45},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: -3, want: -27},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: -3, want: -27},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 3, want: 27},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 3, want: 27},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 5, want: 45},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 5, want: 45},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 7, want: 63},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 7, want: 63},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 9, want: 81},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 9, want: 81},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 10, want: 90},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 10, want: 90},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 11, want: 99},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 11, want: 99},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 13, want: 117},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 13, want: 117},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 19, want: 171},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 19, want: 171},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 21, want: 189},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 21, want: 189},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 25, want: 225},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 25, want: 225},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 27, want: 243},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 27, want: 243},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 37, want: 333},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 37, want: 333},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 41, want: 369},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 41, want: 369},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 45, want: 405},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 45, want: 405},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 73, want: 657},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 73, want: 657},
+       test_int64{fn: mul_9_int64, fnname: "mul_9_int64", in: 81, want: 729},
+       test_int64{fn: mul_int64_9, fnname: "mul_int64_9", in: 81, want: 729},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: -9, want: -90},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: -9, want: -90},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: -5, want: -50},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: -5, want: -50},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: -3, want: -30},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: -3, want: -30},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 3, want: 30},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 3, want: 30},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 5, want: 50},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 5, want: 50},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 7, want: 70},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 7, want: 70},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 9, want: 90},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 9, want: 90},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 10, want: 100},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 10, want: 100},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 11, want: 110},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 11, want: 110},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 13, want: 130},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 13, want: 130},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 19, want: 190},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 19, want: 190},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 21, want: 210},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 21, want: 210},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 25, want: 250},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 25, want: 250},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 27, want: 270},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 27, want: 270},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 37, want: 370},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 37, want: 370},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 41, want: 410},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 41, want: 410},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 45, want: 450},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 45, want: 450},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 73, want: 730},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 73, want: 730},
+       test_int64{fn: mul_10_int64, fnname: "mul_10_int64", in: 81, want: 810},
+       test_int64{fn: mul_int64_10, fnname: "mul_int64_10", in: 81, want: 810},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: -9, want: -99},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: -9, want: -99},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: -5, want: -55},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: -5, want: -55},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: -3, want: -33},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: -3, want: -33},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 3, want: 33},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 3, want: 33},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 5, want: 55},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 5, want: 55},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 7, want: 77},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 7, want: 77},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 9, want: 99},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 9, want: 99},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 10, want: 110},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 10, want: 110},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 11, want: 121},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 11, want: 121},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 13, want: 143},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 13, want: 143},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 19, want: 209},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 19, want: 209},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 21, want: 231},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 21, want: 231},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 25, want: 275},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 25, want: 275},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 27, want: 297},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 27, want: 297},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 37, want: 407},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 37, want: 407},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 41, want: 451},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 41, want: 451},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 45, want: 495},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 45, want: 495},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 73, want: 803},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 73, want: 803},
+       test_int64{fn: mul_11_int64, fnname: "mul_11_int64", in: 81, want: 891},
+       test_int64{fn: mul_int64_11, fnname: "mul_int64_11", in: 81, want: 891},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: -9, want: -117},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: -9, want: -117},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: -5, want: -65},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: -5, want: -65},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: -3, want: -39},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: -3, want: -39},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 3, want: 39},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 3, want: 39},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 5, want: 65},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 5, want: 65},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 7, want: 91},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 7, want: 91},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 9, want: 117},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 9, want: 117},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 10, want: 130},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 10, want: 130},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 11, want: 143},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 11, want: 143},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 13, want: 169},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 13, want: 169},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 19, want: 247},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 19, want: 247},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 21, want: 273},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 21, want: 273},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 25, want: 325},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 25, want: 325},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 27, want: 351},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 27, want: 351},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 37, want: 481},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 37, want: 481},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 41, want: 533},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 41, want: 533},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 45, want: 585},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 45, want: 585},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 73, want: 949},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 73, want: 949},
+       test_int64{fn: mul_13_int64, fnname: "mul_13_int64", in: 81, want: 1053},
+       test_int64{fn: mul_int64_13, fnname: "mul_int64_13", in: 81, want: 1053},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: -9, want: -171},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: -9, want: -171},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: -5, want: -95},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: -5, want: -95},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: -3, want: -57},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: -3, want: -57},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 3, want: 57},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 3, want: 57},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 5, want: 95},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 5, want: 95},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 7, want: 133},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 7, want: 133},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 9, want: 171},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 9, want: 171},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 10, want: 190},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 10, want: 190},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 11, want: 209},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 11, want: 209},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 13, want: 247},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 13, want: 247},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 19, want: 361},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 19, want: 361},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 21, want: 399},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 21, want: 399},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 25, want: 475},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 25, want: 475},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 27, want: 513},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 27, want: 513},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 37, want: 703},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 37, want: 703},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 41, want: 779},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 41, want: 779},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 45, want: 855},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 45, want: 855},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 73, want: 1387},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 73, want: 1387},
+       test_int64{fn: mul_19_int64, fnname: "mul_19_int64", in: 81, want: 1539},
+       test_int64{fn: mul_int64_19, fnname: "mul_int64_19", in: 81, want: 1539},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: -9, want: -189},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: -9, want: -189},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: -5, want: -105},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: -5, want: -105},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: -3, want: -63},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: -3, want: -63},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 3, want: 63},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 3, want: 63},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 5, want: 105},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 5, want: 105},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 7, want: 147},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 7, want: 147},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 9, want: 189},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 9, want: 189},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 10, want: 210},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 10, want: 210},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 11, want: 231},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 11, want: 231},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 13, want: 273},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 13, want: 273},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 19, want: 399},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 19, want: 399},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 21, want: 441},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 21, want: 441},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 25, want: 525},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 25, want: 525},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 27, want: 567},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 27, want: 567},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 37, want: 777},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 37, want: 777},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 41, want: 861},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 41, want: 861},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 45, want: 945},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 45, want: 945},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 73, want: 1533},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 73, want: 1533},
+       test_int64{fn: mul_21_int64, fnname: "mul_21_int64", in: 81, want: 1701},
+       test_int64{fn: mul_int64_21, fnname: "mul_int64_21", in: 81, want: 1701},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: -9, want: -225},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: -9, want: -225},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: -5, want: -125},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: -5, want: -125},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: -3, want: -75},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: -3, want: -75},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 3, want: 75},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 3, want: 75},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 5, want: 125},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 5, want: 125},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 7, want: 175},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 7, want: 175},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 9, want: 225},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 9, want: 225},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 10, want: 250},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 10, want: 250},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 11, want: 275},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 11, want: 275},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 13, want: 325},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 13, want: 325},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 19, want: 475},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 19, want: 475},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 21, want: 525},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 21, want: 525},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 25, want: 625},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 25, want: 625},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 27, want: 675},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 27, want: 675},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 37, want: 925},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 37, want: 925},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 41, want: 1025},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 41, want: 1025},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 45, want: 1125},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 45, want: 1125},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 73, want: 1825},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 73, want: 1825},
+       test_int64{fn: mul_25_int64, fnname: "mul_25_int64", in: 81, want: 2025},
+       test_int64{fn: mul_int64_25, fnname: "mul_int64_25", in: 81, want: 2025},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: -9, want: -243},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: -9, want: -243},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: -5, want: -135},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: -5, want: -135},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: -3, want: -81},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: -3, want: -81},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 3, want: 81},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 3, want: 81},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 5, want: 135},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 5, want: 135},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 7, want: 189},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 7, want: 189},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 9, want: 243},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 9, want: 243},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 10, want: 270},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 10, want: 270},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 11, want: 297},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 11, want: 297},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 13, want: 351},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 13, want: 351},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 19, want: 513},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 19, want: 513},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 21, want: 567},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 21, want: 567},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 25, want: 675},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 25, want: 675},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 27, want: 729},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 27, want: 729},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 37, want: 999},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 37, want: 999},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 41, want: 1107},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 41, want: 1107},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 45, want: 1215},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 45, want: 1215},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 73, want: 1971},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 73, want: 1971},
+       test_int64{fn: mul_27_int64, fnname: "mul_27_int64", in: 81, want: 2187},
+       test_int64{fn: mul_int64_27, fnname: "mul_int64_27", in: 81, want: 2187},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: -9, want: -333},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: -9, want: -333},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: -5, want: -185},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: -5, want: -185},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: -3, want: -111},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: -3, want: -111},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 3, want: 111},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 3, want: 111},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 5, want: 185},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 5, want: 185},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 7, want: 259},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 7, want: 259},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 9, want: 333},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 9, want: 333},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 10, want: 370},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 10, want: 370},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 11, want: 407},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 11, want: 407},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 13, want: 481},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 13, want: 481},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 19, want: 703},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 19, want: 703},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 21, want: 777},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 21, want: 777},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 25, want: 925},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 25, want: 925},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 27, want: 999},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 27, want: 999},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 37, want: 1369},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 37, want: 1369},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 41, want: 1517},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 41, want: 1517},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 45, want: 1665},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 45, want: 1665},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 73, want: 2701},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 73, want: 2701},
+       test_int64{fn: mul_37_int64, fnname: "mul_37_int64", in: 81, want: 2997},
+       test_int64{fn: mul_int64_37, fnname: "mul_int64_37", in: 81, want: 2997},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: -9, want: -369},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: -9, want: -369},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: -5, want: -205},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: -5, want: -205},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: -3, want: -123},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: -3, want: -123},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 3, want: 123},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 3, want: 123},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 5, want: 205},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 5, want: 205},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 7, want: 287},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 7, want: 287},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 9, want: 369},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 9, want: 369},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 10, want: 410},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 10, want: 410},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 11, want: 451},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 11, want: 451},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 13, want: 533},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 13, want: 533},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 19, want: 779},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 19, want: 779},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 21, want: 861},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 21, want: 861},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 25, want: 1025},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 25, want: 1025},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 27, want: 1107},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 27, want: 1107},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 37, want: 1517},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 37, want: 1517},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 41, want: 1681},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 41, want: 1681},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 45, want: 1845},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 45, want: 1845},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 73, want: 2993},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 73, want: 2993},
+       test_int64{fn: mul_41_int64, fnname: "mul_41_int64", in: 81, want: 3321},
+       test_int64{fn: mul_int64_41, fnname: "mul_int64_41", in: 81, want: 3321},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: -9, want: -405},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: -9, want: -405},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: -5, want: -225},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: -5, want: -225},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: -3, want: -135},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: -3, want: -135},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 3, want: 135},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 3, want: 135},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 5, want: 225},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 5, want: 225},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 7, want: 315},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 7, want: 315},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 9, want: 405},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 9, want: 405},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 10, want: 450},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 10, want: 450},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 11, want: 495},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 11, want: 495},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 13, want: 585},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 13, want: 585},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 19, want: 855},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 19, want: 855},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 21, want: 945},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 21, want: 945},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 25, want: 1125},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 25, want: 1125},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 27, want: 1215},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 27, want: 1215},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 37, want: 1665},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 37, want: 1665},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 41, want: 1845},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 41, want: 1845},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 45, want: 2025},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 45, want: 2025},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 73, want: 3285},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 73, want: 3285},
+       test_int64{fn: mul_45_int64, fnname: "mul_45_int64", in: 81, want: 3645},
+       test_int64{fn: mul_int64_45, fnname: "mul_int64_45", in: 81, want: 3645},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: -9, want: -657},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: -9, want: -657},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: -5, want: -365},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: -5, want: -365},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: -3, want: -219},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: -3, want: -219},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 3, want: 219},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 3, want: 219},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 5, want: 365},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 5, want: 365},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 7, want: 511},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 7, want: 511},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 9, want: 657},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 9, want: 657},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 10, want: 730},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 10, want: 730},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 11, want: 803},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 11, want: 803},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 13, want: 949},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 13, want: 949},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 19, want: 1387},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 19, want: 1387},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 21, want: 1533},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 21, want: 1533},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 25, want: 1825},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 25, want: 1825},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 27, want: 1971},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 27, want: 1971},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 37, want: 2701},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 37, want: 2701},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 41, want: 2993},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 41, want: 2993},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 45, want: 3285},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 45, want: 3285},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 73, want: 5329},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 73, want: 5329},
+       test_int64{fn: mul_73_int64, fnname: "mul_73_int64", in: 81, want: 5913},
+       test_int64{fn: mul_int64_73, fnname: "mul_int64_73", in: 81, want: 5913},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: -9, want: -729},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: -9, want: -729},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: -5, want: -405},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: -5, want: -405},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: -3, want: -243},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: -3, want: -243},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 3, want: 243},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 3, want: 243},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 5, want: 405},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 5, want: 405},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 7, want: 567},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 7, want: 567},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 9, want: 729},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 9, want: 729},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 10, want: 810},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 10, want: 810},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 11, want: 891},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 11, want: 891},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 13, want: 1053},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 13, want: 1053},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 19, want: 1539},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 19, want: 1539},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 21, want: 1701},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 21, want: 1701},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 25, want: 2025},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 25, want: 2025},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 27, want: 2187},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 27, want: 2187},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 37, want: 2997},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 37, want: 2997},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 41, want: 3321},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 41, want: 3321},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 45, want: 3645},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 45, want: 3645},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 73, want: 5913},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 73, want: 5913},
+       test_int64{fn: mul_81_int64, fnname: "mul_81_int64", in: 81, want: 6561},
+       test_int64{fn: mul_int64_81, fnname: "mul_int64_81", in: 81, want: 6561}}
+
 type test_uint32 struct {
        fn     func(uint32) uint32
        fnname string
@@ -4128,6 +5802,528 @@ var tests_uint32 = []test_uint32{
        test_uint32{fn: xor_4294967295_uint32, fnname: "xor_4294967295_uint32", in: 4294967295, want: 0},
        test_uint32{fn: xor_uint32_4294967295, fnname: "xor_uint32_4294967295", in: 4294967295, want: 0}}
 
+type test_uint32mul struct {
+       fn     func(uint32) uint32
+       fnname string
+       in     uint32
+       want   uint32
+}
+
+var tests_uint32mul = []test_uint32{
+
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 3, want: 9},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 3, want: 9},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 5, want: 15},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 5, want: 15},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 7, want: 21},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 7, want: 21},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 9, want: 27},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 9, want: 27},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 10, want: 30},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 10, want: 30},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 11, want: 33},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 11, want: 33},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 13, want: 39},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 13, want: 39},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 19, want: 57},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 19, want: 57},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 21, want: 63},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 21, want: 63},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 25, want: 75},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 25, want: 75},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 27, want: 81},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 27, want: 81},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 37, want: 111},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 37, want: 111},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 41, want: 123},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 41, want: 123},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 45, want: 135},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 45, want: 135},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 73, want: 219},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 73, want: 219},
+       test_uint32{fn: mul_3_uint32, fnname: "mul_3_uint32", in: 81, want: 243},
+       test_uint32{fn: mul_uint32_3, fnname: "mul_uint32_3", in: 81, want: 243},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 3, want: 15},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 3, want: 15},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 5, want: 25},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 5, want: 25},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 7, want: 35},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 7, want: 35},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 9, want: 45},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 9, want: 45},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 10, want: 50},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 10, want: 50},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 11, want: 55},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 11, want: 55},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 13, want: 65},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 13, want: 65},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 19, want: 95},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 19, want: 95},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 21, want: 105},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 21, want: 105},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 25, want: 125},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 25, want: 125},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 27, want: 135},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 27, want: 135},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 37, want: 185},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 37, want: 185},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 41, want: 205},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 41, want: 205},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 45, want: 225},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 45, want: 225},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 73, want: 365},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 73, want: 365},
+       test_uint32{fn: mul_5_uint32, fnname: "mul_5_uint32", in: 81, want: 405},
+       test_uint32{fn: mul_uint32_5, fnname: "mul_uint32_5", in: 81, want: 405},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 3, want: 21},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 3, want: 21},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 5, want: 35},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 5, want: 35},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 7, want: 49},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 7, want: 49},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 9, want: 63},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 9, want: 63},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 10, want: 70},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 10, want: 70},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 11, want: 77},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 11, want: 77},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 13, want: 91},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 13, want: 91},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 19, want: 133},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 19, want: 133},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 21, want: 147},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 21, want: 147},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 25, want: 175},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 25, want: 175},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 27, want: 189},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 27, want: 189},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 37, want: 259},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 37, want: 259},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 41, want: 287},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 41, want: 287},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 45, want: 315},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 45, want: 315},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 73, want: 511},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 73, want: 511},
+       test_uint32{fn: mul_7_uint32, fnname: "mul_7_uint32", in: 81, want: 567},
+       test_uint32{fn: mul_uint32_7, fnname: "mul_uint32_7", in: 81, want: 567},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 3, want: 27},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 3, want: 27},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 5, want: 45},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 5, want: 45},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 7, want: 63},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 7, want: 63},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 9, want: 81},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 9, want: 81},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 10, want: 90},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 10, want: 90},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 11, want: 99},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 11, want: 99},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 13, want: 117},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 13, want: 117},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 19, want: 171},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 19, want: 171},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 21, want: 189},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 21, want: 189},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 25, want: 225},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 25, want: 225},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 27, want: 243},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 27, want: 243},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 37, want: 333},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 37, want: 333},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 41, want: 369},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 41, want: 369},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 45, want: 405},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 45, want: 405},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 73, want: 657},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 73, want: 657},
+       test_uint32{fn: mul_9_uint32, fnname: "mul_9_uint32", in: 81, want: 729},
+       test_uint32{fn: mul_uint32_9, fnname: "mul_uint32_9", in: 81, want: 729},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 3, want: 30},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 3, want: 30},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 5, want: 50},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 5, want: 50},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 7, want: 70},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 7, want: 70},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 9, want: 90},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 9, want: 90},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 10, want: 100},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 10, want: 100},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 11, want: 110},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 11, want: 110},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 13, want: 130},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 13, want: 130},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 19, want: 190},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 19, want: 190},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 21, want: 210},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 21, want: 210},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 25, want: 250},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 25, want: 250},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 27, want: 270},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 27, want: 270},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 37, want: 370},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 37, want: 370},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 41, want: 410},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 41, want: 410},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 45, want: 450},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 45, want: 450},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 73, want: 730},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 73, want: 730},
+       test_uint32{fn: mul_10_uint32, fnname: "mul_10_uint32", in: 81, want: 810},
+       test_uint32{fn: mul_uint32_10, fnname: "mul_uint32_10", in: 81, want: 810},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 3, want: 33},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 3, want: 33},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 5, want: 55},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 5, want: 55},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 7, want: 77},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 7, want: 77},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 9, want: 99},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 9, want: 99},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 10, want: 110},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 10, want: 110},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 11, want: 121},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 11, want: 121},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 13, want: 143},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 13, want: 143},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 19, want: 209},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 19, want: 209},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 21, want: 231},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 21, want: 231},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 25, want: 275},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 25, want: 275},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 27, want: 297},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 27, want: 297},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 37, want: 407},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 37, want: 407},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 41, want: 451},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 41, want: 451},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 45, want: 495},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 45, want: 495},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 73, want: 803},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 73, want: 803},
+       test_uint32{fn: mul_11_uint32, fnname: "mul_11_uint32", in: 81, want: 891},
+       test_uint32{fn: mul_uint32_11, fnname: "mul_uint32_11", in: 81, want: 891},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 3, want: 39},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 3, want: 39},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 5, want: 65},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 5, want: 65},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 7, want: 91},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 7, want: 91},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 9, want: 117},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 9, want: 117},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 10, want: 130},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 10, want: 130},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 11, want: 143},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 11, want: 143},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 13, want: 169},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 13, want: 169},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 19, want: 247},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 19, want: 247},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 21, want: 273},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 21, want: 273},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 25, want: 325},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 25, want: 325},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 27, want: 351},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 27, want: 351},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 37, want: 481},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 37, want: 481},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 41, want: 533},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 41, want: 533},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 45, want: 585},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 45, want: 585},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 73, want: 949},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 73, want: 949},
+       test_uint32{fn: mul_13_uint32, fnname: "mul_13_uint32", in: 81, want: 1053},
+       test_uint32{fn: mul_uint32_13, fnname: "mul_uint32_13", in: 81, want: 1053},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 3, want: 57},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 3, want: 57},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 5, want: 95},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 5, want: 95},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 7, want: 133},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 7, want: 133},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 9, want: 171},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 9, want: 171},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 10, want: 190},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 10, want: 190},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 11, want: 209},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 11, want: 209},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 13, want: 247},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 13, want: 247},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 19, want: 361},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 19, want: 361},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 21, want: 399},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 21, want: 399},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 25, want: 475},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 25, want: 475},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 27, want: 513},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 27, want: 513},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 37, want: 703},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 37, want: 703},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 41, want: 779},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 41, want: 779},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 45, want: 855},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 45, want: 855},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 73, want: 1387},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 73, want: 1387},
+       test_uint32{fn: mul_19_uint32, fnname: "mul_19_uint32", in: 81, want: 1539},
+       test_uint32{fn: mul_uint32_19, fnname: "mul_uint32_19", in: 81, want: 1539},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 3, want: 63},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 3, want: 63},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 5, want: 105},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 5, want: 105},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 7, want: 147},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 7, want: 147},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 9, want: 189},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 9, want: 189},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 10, want: 210},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 10, want: 210},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 11, want: 231},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 11, want: 231},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 13, want: 273},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 13, want: 273},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 19, want: 399},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 19, want: 399},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 21, want: 441},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 21, want: 441},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 25, want: 525},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 25, want: 525},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 27, want: 567},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 27, want: 567},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 37, want: 777},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 37, want: 777},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 41, want: 861},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 41, want: 861},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 45, want: 945},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 45, want: 945},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 73, want: 1533},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 73, want: 1533},
+       test_uint32{fn: mul_21_uint32, fnname: "mul_21_uint32", in: 81, want: 1701},
+       test_uint32{fn: mul_uint32_21, fnname: "mul_uint32_21", in: 81, want: 1701},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 3, want: 75},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 3, want: 75},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 5, want: 125},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 5, want: 125},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 7, want: 175},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 7, want: 175},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 9, want: 225},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 9, want: 225},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 10, want: 250},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 10, want: 250},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 11, want: 275},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 11, want: 275},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 13, want: 325},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 13, want: 325},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 19, want: 475},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 19, want: 475},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 21, want: 525},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 21, want: 525},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 25, want: 625},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 25, want: 625},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 27, want: 675},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 27, want: 675},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 37, want: 925},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 37, want: 925},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 41, want: 1025},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 41, want: 1025},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 45, want: 1125},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 45, want: 1125},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 73, want: 1825},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 73, want: 1825},
+       test_uint32{fn: mul_25_uint32, fnname: "mul_25_uint32", in: 81, want: 2025},
+       test_uint32{fn: mul_uint32_25, fnname: "mul_uint32_25", in: 81, want: 2025},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 3, want: 81},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 3, want: 81},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 5, want: 135},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 5, want: 135},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 7, want: 189},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 7, want: 189},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 9, want: 243},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 9, want: 243},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 10, want: 270},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 10, want: 270},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 11, want: 297},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 11, want: 297},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 13, want: 351},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 13, want: 351},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 19, want: 513},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 19, want: 513},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 21, want: 567},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 21, want: 567},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 25, want: 675},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 25, want: 675},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 27, want: 729},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 27, want: 729},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 37, want: 999},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 37, want: 999},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 41, want: 1107},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 41, want: 1107},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 45, want: 1215},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 45, want: 1215},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 73, want: 1971},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 73, want: 1971},
+       test_uint32{fn: mul_27_uint32, fnname: "mul_27_uint32", in: 81, want: 2187},
+       test_uint32{fn: mul_uint32_27, fnname: "mul_uint32_27", in: 81, want: 2187},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 3, want: 111},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 3, want: 111},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 5, want: 185},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 5, want: 185},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 7, want: 259},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 7, want: 259},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 9, want: 333},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 9, want: 333},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 10, want: 370},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 10, want: 370},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 11, want: 407},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 11, want: 407},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 13, want: 481},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 13, want: 481},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 19, want: 703},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 19, want: 703},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 21, want: 777},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 21, want: 777},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 25, want: 925},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 25, want: 925},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 27, want: 999},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 27, want: 999},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 37, want: 1369},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 37, want: 1369},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 41, want: 1517},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 41, want: 1517},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 45, want: 1665},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 45, want: 1665},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 73, want: 2701},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 73, want: 2701},
+       test_uint32{fn: mul_37_uint32, fnname: "mul_37_uint32", in: 81, want: 2997},
+       test_uint32{fn: mul_uint32_37, fnname: "mul_uint32_37", in: 81, want: 2997},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 3, want: 123},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 3, want: 123},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 5, want: 205},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 5, want: 205},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 7, want: 287},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 7, want: 287},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 9, want: 369},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 9, want: 369},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 10, want: 410},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 10, want: 410},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 11, want: 451},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 11, want: 451},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 13, want: 533},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 13, want: 533},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 19, want: 779},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 19, want: 779},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 21, want: 861},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 21, want: 861},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 25, want: 1025},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 25, want: 1025},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 27, want: 1107},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 27, want: 1107},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 37, want: 1517},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 37, want: 1517},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 41, want: 1681},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 41, want: 1681},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 45, want: 1845},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 45, want: 1845},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 73, want: 2993},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 73, want: 2993},
+       test_uint32{fn: mul_41_uint32, fnname: "mul_41_uint32", in: 81, want: 3321},
+       test_uint32{fn: mul_uint32_41, fnname: "mul_uint32_41", in: 81, want: 3321},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 3, want: 135},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 3, want: 135},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 5, want: 225},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 5, want: 225},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 7, want: 315},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 7, want: 315},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 9, want: 405},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 9, want: 405},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 10, want: 450},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 10, want: 450},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 11, want: 495},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 11, want: 495},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 13, want: 585},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 13, want: 585},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 19, want: 855},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 19, want: 855},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 21, want: 945},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 21, want: 945},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 25, want: 1125},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 25, want: 1125},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 27, want: 1215},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 27, want: 1215},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 37, want: 1665},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 37, want: 1665},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 41, want: 1845},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 41, want: 1845},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 45, want: 2025},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 45, want: 2025},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 73, want: 3285},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 73, want: 3285},
+       test_uint32{fn: mul_45_uint32, fnname: "mul_45_uint32", in: 81, want: 3645},
+       test_uint32{fn: mul_uint32_45, fnname: "mul_uint32_45", in: 81, want: 3645},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 3, want: 219},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 3, want: 219},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 5, want: 365},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 5, want: 365},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 7, want: 511},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 7, want: 511},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 9, want: 657},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 9, want: 657},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 10, want: 730},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 10, want: 730},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 11, want: 803},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 11, want: 803},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 13, want: 949},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 13, want: 949},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 19, want: 1387},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 19, want: 1387},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 21, want: 1533},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 21, want: 1533},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 25, want: 1825},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 25, want: 1825},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 27, want: 1971},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 27, want: 1971},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 37, want: 2701},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 37, want: 2701},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 41, want: 2993},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 41, want: 2993},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 45, want: 3285},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 45, want: 3285},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 73, want: 5329},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 73, want: 5329},
+       test_uint32{fn: mul_73_uint32, fnname: "mul_73_uint32", in: 81, want: 5913},
+       test_uint32{fn: mul_uint32_73, fnname: "mul_uint32_73", in: 81, want: 5913},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 3, want: 243},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 3, want: 243},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 5, want: 405},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 5, want: 405},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 7, want: 567},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 7, want: 567},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 9, want: 729},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 9, want: 729},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 10, want: 810},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 10, want: 810},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 11, want: 891},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 11, want: 891},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 13, want: 1053},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 13, want: 1053},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 19, want: 1539},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 19, want: 1539},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 21, want: 1701},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 21, want: 1701},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 25, want: 2025},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 25, want: 2025},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 27, want: 2187},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 27, want: 2187},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 37, want: 2997},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 37, want: 2997},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 41, want: 3321},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 41, want: 3321},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 45, want: 3645},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 45, want: 3645},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 73, want: 5913},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 73, want: 5913},
+       test_uint32{fn: mul_81_uint32, fnname: "mul_81_uint32", in: 81, want: 6561},
+       test_uint32{fn: mul_uint32_81, fnname: "mul_uint32_81", in: 81, want: 6561}}
+
 type test_int32 struct {
        fn     func(int32) int32
        fnname string
@@ -4690,6 +6886,738 @@ var tests_int32 = []test_int32{
        test_int32{fn: xor_2147483647_int32, fnname: "xor_2147483647_int32", in: 2147483647, want: 0},
        test_int32{fn: xor_int32_2147483647, fnname: "xor_int32_2147483647", in: 2147483647, want: 0}}
 
+type test_int32mul struct {
+       fn     func(int32) int32
+       fnname string
+       in     int32
+       want   int32
+}
+
+var tests_int32mul = []test_int32{
+
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: -9, want: 81},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: -9, want: 81},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: -5, want: 45},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: -5, want: 45},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: -3, want: 27},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: -3, want: 27},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 3, want: -27},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 3, want: -27},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 5, want: -45},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 5, want: -45},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 7, want: -63},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 7, want: -63},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 9, want: -81},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 9, want: -81},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 10, want: -90},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 10, want: -90},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 11, want: -99},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 11, want: -99},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 13, want: -117},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 13, want: -117},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 19, want: -171},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 19, want: -171},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 21, want: -189},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 21, want: -189},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 25, want: -225},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 25, want: -225},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 27, want: -243},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 27, want: -243},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 37, want: -333},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 37, want: -333},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 41, want: -369},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 41, want: -369},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 45, want: -405},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 45, want: -405},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 73, want: -657},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 73, want: -657},
+       test_int32{fn: mul_Neg9_int32, fnname: "mul_Neg9_int32", in: 81, want: -729},
+       test_int32{fn: mul_int32_Neg9, fnname: "mul_int32_Neg9", in: 81, want: -729},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: -9, want: 45},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: -9, want: 45},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: -5, want: 25},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: -5, want: 25},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: -3, want: 15},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: -3, want: 15},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 3, want: -15},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 3, want: -15},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 5, want: -25},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 5, want: -25},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 7, want: -35},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 7, want: -35},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 9, want: -45},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 9, want: -45},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 10, want: -50},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 10, want: -50},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 11, want: -55},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 11, want: -55},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 13, want: -65},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 13, want: -65},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 19, want: -95},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 19, want: -95},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 21, want: -105},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 21, want: -105},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 25, want: -125},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 25, want: -125},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 27, want: -135},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 27, want: -135},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 37, want: -185},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 37, want: -185},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 41, want: -205},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 41, want: -205},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 45, want: -225},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 45, want: -225},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 73, want: -365},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 73, want: -365},
+       test_int32{fn: mul_Neg5_int32, fnname: "mul_Neg5_int32", in: 81, want: -405},
+       test_int32{fn: mul_int32_Neg5, fnname: "mul_int32_Neg5", in: 81, want: -405},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: -9, want: 27},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: -9, want: 27},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: -5, want: 15},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: -5, want: 15},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: -3, want: 9},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: -3, want: 9},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 3, want: -9},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 3, want: -9},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 5, want: -15},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 5, want: -15},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 7, want: -21},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 7, want: -21},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 9, want: -27},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 9, want: -27},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 10, want: -30},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 10, want: -30},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 11, want: -33},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 11, want: -33},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 13, want: -39},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 13, want: -39},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 19, want: -57},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 19, want: -57},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 21, want: -63},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 21, want: -63},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 25, want: -75},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 25, want: -75},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 27, want: -81},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 27, want: -81},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 37, want: -111},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 37, want: -111},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 41, want: -123},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 41, want: -123},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 45, want: -135},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 45, want: -135},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 73, want: -219},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 73, want: -219},
+       test_int32{fn: mul_Neg3_int32, fnname: "mul_Neg3_int32", in: 81, want: -243},
+       test_int32{fn: mul_int32_Neg3, fnname: "mul_int32_Neg3", in: 81, want: -243},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: -9, want: -27},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: -9, want: -27},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: -5, want: -15},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: -5, want: -15},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: -3, want: -9},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: -3, want: -9},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 3, want: 9},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 3, want: 9},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 5, want: 15},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 5, want: 15},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 7, want: 21},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 7, want: 21},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 9, want: 27},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 9, want: 27},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 10, want: 30},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 10, want: 30},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 11, want: 33},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 11, want: 33},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 13, want: 39},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 13, want: 39},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 19, want: 57},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 19, want: 57},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 21, want: 63},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 21, want: 63},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 25, want: 75},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 25, want: 75},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 27, want: 81},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 27, want: 81},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 37, want: 111},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 37, want: 111},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 41, want: 123},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 41, want: 123},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 45, want: 135},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 45, want: 135},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 73, want: 219},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 73, want: 219},
+       test_int32{fn: mul_3_int32, fnname: "mul_3_int32", in: 81, want: 243},
+       test_int32{fn: mul_int32_3, fnname: "mul_int32_3", in: 81, want: 243},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: -9, want: -45},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: -9, want: -45},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: -5, want: -25},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: -5, want: -25},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: -3, want: -15},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: -3, want: -15},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 3, want: 15},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 3, want: 15},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 5, want: 25},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 5, want: 25},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 7, want: 35},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 7, want: 35},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 9, want: 45},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 9, want: 45},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 10, want: 50},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 10, want: 50},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 11, want: 55},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 11, want: 55},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 13, want: 65},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 13, want: 65},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 19, want: 95},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 19, want: 95},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 21, want: 105},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 21, want: 105},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 25, want: 125},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 25, want: 125},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 27, want: 135},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 27, want: 135},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 37, want: 185},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 37, want: 185},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 41, want: 205},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 41, want: 205},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 45, want: 225},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 45, want: 225},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 73, want: 365},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 73, want: 365},
+       test_int32{fn: mul_5_int32, fnname: "mul_5_int32", in: 81, want: 405},
+       test_int32{fn: mul_int32_5, fnname: "mul_int32_5", in: 81, want: 405},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: -9, want: -63},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: -9, want: -63},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: -5, want: -35},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: -5, want: -35},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: -3, want: -21},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: -3, want: -21},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 3, want: 21},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 3, want: 21},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 5, want: 35},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 5, want: 35},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 7, want: 49},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 7, want: 49},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 9, want: 63},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 9, want: 63},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 10, want: 70},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 10, want: 70},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 11, want: 77},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 11, want: 77},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 13, want: 91},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 13, want: 91},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 19, want: 133},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 19, want: 133},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 21, want: 147},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 21, want: 147},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 25, want: 175},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 25, want: 175},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 27, want: 189},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 27, want: 189},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 37, want: 259},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 37, want: 259},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 41, want: 287},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 41, want: 287},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 45, want: 315},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 45, want: 315},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 73, want: 511},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 73, want: 511},
+       test_int32{fn: mul_7_int32, fnname: "mul_7_int32", in: 81, want: 567},
+       test_int32{fn: mul_int32_7, fnname: "mul_int32_7", in: 81, want: 567},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: -9, want: -81},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: -9, want: -81},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: -5, want: -45},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: -5, want: -45},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: -3, want: -27},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: -3, want: -27},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 3, want: 27},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 3, want: 27},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 5, want: 45},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 5, want: 45},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 7, want: 63},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 7, want: 63},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 9, want: 81},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 9, want: 81},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 10, want: 90},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 10, want: 90},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 11, want: 99},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 11, want: 99},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 13, want: 117},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 13, want: 117},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 19, want: 171},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 19, want: 171},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 21, want: 189},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 21, want: 189},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 25, want: 225},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 25, want: 225},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 27, want: 243},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 27, want: 243},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 37, want: 333},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 37, want: 333},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 41, want: 369},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 41, want: 369},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 45, want: 405},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 45, want: 405},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 73, want: 657},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 73, want: 657},
+       test_int32{fn: mul_9_int32, fnname: "mul_9_int32", in: 81, want: 729},
+       test_int32{fn: mul_int32_9, fnname: "mul_int32_9", in: 81, want: 729},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: -9, want: -90},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: -9, want: -90},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: -5, want: -50},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: -5, want: -50},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: -3, want: -30},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: -3, want: -30},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 3, want: 30},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 3, want: 30},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 5, want: 50},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 5, want: 50},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 7, want: 70},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 7, want: 70},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 9, want: 90},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 9, want: 90},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 10, want: 100},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 10, want: 100},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 11, want: 110},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 11, want: 110},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 13, want: 130},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 13, want: 130},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 19, want: 190},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 19, want: 190},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 21, want: 210},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 21, want: 210},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 25, want: 250},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 25, want: 250},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 27, want: 270},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 27, want: 270},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 37, want: 370},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 37, want: 370},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 41, want: 410},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 41, want: 410},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 45, want: 450},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 45, want: 450},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 73, want: 730},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 73, want: 730},
+       test_int32{fn: mul_10_int32, fnname: "mul_10_int32", in: 81, want: 810},
+       test_int32{fn: mul_int32_10, fnname: "mul_int32_10", in: 81, want: 810},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: -9, want: -99},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: -9, want: -99},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: -5, want: -55},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: -5, want: -55},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: -3, want: -33},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: -3, want: -33},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 3, want: 33},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 3, want: 33},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 5, want: 55},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 5, want: 55},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 7, want: 77},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 7, want: 77},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 9, want: 99},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 9, want: 99},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 10, want: 110},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 10, want: 110},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 11, want: 121},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 11, want: 121},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 13, want: 143},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 13, want: 143},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 19, want: 209},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 19, want: 209},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 21, want: 231},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 21, want: 231},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 25, want: 275},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 25, want: 275},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 27, want: 297},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 27, want: 297},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 37, want: 407},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 37, want: 407},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 41, want: 451},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 41, want: 451},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 45, want: 495},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 45, want: 495},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 73, want: 803},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 73, want: 803},
+       test_int32{fn: mul_11_int32, fnname: "mul_11_int32", in: 81, want: 891},
+       test_int32{fn: mul_int32_11, fnname: "mul_int32_11", in: 81, want: 891},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: -9, want: -117},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: -9, want: -117},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: -5, want: -65},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: -5, want: -65},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: -3, want: -39},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: -3, want: -39},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 3, want: 39},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 3, want: 39},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 5, want: 65},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 5, want: 65},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 7, want: 91},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 7, want: 91},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 9, want: 117},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 9, want: 117},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 10, want: 130},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 10, want: 130},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 11, want: 143},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 11, want: 143},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 13, want: 169},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 13, want: 169},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 19, want: 247},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 19, want: 247},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 21, want: 273},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 21, want: 273},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 25, want: 325},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 25, want: 325},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 27, want: 351},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 27, want: 351},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 37, want: 481},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 37, want: 481},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 41, want: 533},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 41, want: 533},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 45, want: 585},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 45, want: 585},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 73, want: 949},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 73, want: 949},
+       test_int32{fn: mul_13_int32, fnname: "mul_13_int32", in: 81, want: 1053},
+       test_int32{fn: mul_int32_13, fnname: "mul_int32_13", in: 81, want: 1053},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: -9, want: -171},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: -9, want: -171},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: -5, want: -95},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: -5, want: -95},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: -3, want: -57},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: -3, want: -57},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 3, want: 57},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 3, want: 57},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 5, want: 95},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 5, want: 95},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 7, want: 133},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 7, want: 133},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 9, want: 171},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 9, want: 171},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 10, want: 190},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 10, want: 190},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 11, want: 209},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 11, want: 209},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 13, want: 247},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 13, want: 247},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 19, want: 361},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 19, want: 361},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 21, want: 399},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 21, want: 399},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 25, want: 475},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 25, want: 475},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 27, want: 513},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 27, want: 513},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 37, want: 703},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 37, want: 703},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 41, want: 779},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 41, want: 779},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 45, want: 855},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 45, want: 855},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 73, want: 1387},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 73, want: 1387},
+       test_int32{fn: mul_19_int32, fnname: "mul_19_int32", in: 81, want: 1539},
+       test_int32{fn: mul_int32_19, fnname: "mul_int32_19", in: 81, want: 1539},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: -9, want: -189},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: -9, want: -189},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: -5, want: -105},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: -5, want: -105},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: -3, want: -63},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: -3, want: -63},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 3, want: 63},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 3, want: 63},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 5, want: 105},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 5, want: 105},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 7, want: 147},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 7, want: 147},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 9, want: 189},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 9, want: 189},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 10, want: 210},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 10, want: 210},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 11, want: 231},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 11, want: 231},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 13, want: 273},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 13, want: 273},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 19, want: 399},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 19, want: 399},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 21, want: 441},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 21, want: 441},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 25, want: 525},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 25, want: 525},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 27, want: 567},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 27, want: 567},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 37, want: 777},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 37, want: 777},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 41, want: 861},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 41, want: 861},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 45, want: 945},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 45, want: 945},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 73, want: 1533},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 73, want: 1533},
+       test_int32{fn: mul_21_int32, fnname: "mul_21_int32", in: 81, want: 1701},
+       test_int32{fn: mul_int32_21, fnname: "mul_int32_21", in: 81, want: 1701},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: -9, want: -225},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: -9, want: -225},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: -5, want: -125},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: -5, want: -125},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: -3, want: -75},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: -3, want: -75},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 3, want: 75},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 3, want: 75},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 5, want: 125},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 5, want: 125},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 7, want: 175},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 7, want: 175},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 9, want: 225},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 9, want: 225},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 10, want: 250},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 10, want: 250},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 11, want: 275},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 11, want: 275},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 13, want: 325},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 13, want: 325},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 19, want: 475},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 19, want: 475},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 21, want: 525},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 21, want: 525},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 25, want: 625},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 25, want: 625},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 27, want: 675},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 27, want: 675},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 37, want: 925},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 37, want: 925},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 41, want: 1025},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 41, want: 1025},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 45, want: 1125},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 45, want: 1125},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 73, want: 1825},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 73, want: 1825},
+       test_int32{fn: mul_25_int32, fnname: "mul_25_int32", in: 81, want: 2025},
+       test_int32{fn: mul_int32_25, fnname: "mul_int32_25", in: 81, want: 2025},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: -9, want: -243},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: -9, want: -243},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: -5, want: -135},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: -5, want: -135},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: -3, want: -81},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: -3, want: -81},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 3, want: 81},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 3, want: 81},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 5, want: 135},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 5, want: 135},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 7, want: 189},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 7, want: 189},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 9, want: 243},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 9, want: 243},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 10, want: 270},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 10, want: 270},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 11, want: 297},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 11, want: 297},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 13, want: 351},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 13, want: 351},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 19, want: 513},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 19, want: 513},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 21, want: 567},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 21, want: 567},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 25, want: 675},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 25, want: 675},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 27, want: 729},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 27, want: 729},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 37, want: 999},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 37, want: 999},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 41, want: 1107},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 41, want: 1107},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 45, want: 1215},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 45, want: 1215},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 73, want: 1971},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 73, want: 1971},
+       test_int32{fn: mul_27_int32, fnname: "mul_27_int32", in: 81, want: 2187},
+       test_int32{fn: mul_int32_27, fnname: "mul_int32_27", in: 81, want: 2187},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: -9, want: -333},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: -9, want: -333},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: -5, want: -185},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: -5, want: -185},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: -3, want: -111},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: -3, want: -111},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 3, want: 111},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 3, want: 111},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 5, want: 185},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 5, want: 185},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 7, want: 259},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 7, want: 259},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 9, want: 333},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 9, want: 333},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 10, want: 370},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 10, want: 370},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 11, want: 407},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 11, want: 407},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 13, want: 481},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 13, want: 481},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 19, want: 703},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 19, want: 703},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 21, want: 777},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 21, want: 777},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 25, want: 925},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 25, want: 925},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 27, want: 999},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 27, want: 999},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 37, want: 1369},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 37, want: 1369},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 41, want: 1517},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 41, want: 1517},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 45, want: 1665},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 45, want: 1665},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 73, want: 2701},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 73, want: 2701},
+       test_int32{fn: mul_37_int32, fnname: "mul_37_int32", in: 81, want: 2997},
+       test_int32{fn: mul_int32_37, fnname: "mul_int32_37", in: 81, want: 2997},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: -9, want: -369},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: -9, want: -369},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: -5, want: -205},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: -5, want: -205},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: -3, want: -123},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: -3, want: -123},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 3, want: 123},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 3, want: 123},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 5, want: 205},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 5, want: 205},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 7, want: 287},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 7, want: 287},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 9, want: 369},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 9, want: 369},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 10, want: 410},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 10, want: 410},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 11, want: 451},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 11, want: 451},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 13, want: 533},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 13, want: 533},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 19, want: 779},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 19, want: 779},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 21, want: 861},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 21, want: 861},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 25, want: 1025},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 25, want: 1025},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 27, want: 1107},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 27, want: 1107},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 37, want: 1517},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 37, want: 1517},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 41, want: 1681},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 41, want: 1681},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 45, want: 1845},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 45, want: 1845},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 73, want: 2993},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 73, want: 2993},
+       test_int32{fn: mul_41_int32, fnname: "mul_41_int32", in: 81, want: 3321},
+       test_int32{fn: mul_int32_41, fnname: "mul_int32_41", in: 81, want: 3321},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: -9, want: -405},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: -9, want: -405},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: -5, want: -225},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: -5, want: -225},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: -3, want: -135},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: -3, want: -135},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 3, want: 135},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 3, want: 135},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 5, want: 225},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 5, want: 225},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 7, want: 315},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 7, want: 315},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 9, want: 405},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 9, want: 405},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 10, want: 450},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 10, want: 450},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 11, want: 495},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 11, want: 495},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 13, want: 585},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 13, want: 585},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 19, want: 855},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 19, want: 855},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 21, want: 945},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 21, want: 945},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 25, want: 1125},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 25, want: 1125},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 27, want: 1215},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 27, want: 1215},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 37, want: 1665},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 37, want: 1665},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 41, want: 1845},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 41, want: 1845},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 45, want: 2025},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 45, want: 2025},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 73, want: 3285},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 73, want: 3285},
+       test_int32{fn: mul_45_int32, fnname: "mul_45_int32", in: 81, want: 3645},
+       test_int32{fn: mul_int32_45, fnname: "mul_int32_45", in: 81, want: 3645},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: -9, want: -657},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: -9, want: -657},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: -5, want: -365},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: -5, want: -365},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: -3, want: -219},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: -3, want: -219},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 3, want: 219},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 3, want: 219},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 5, want: 365},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 5, want: 365},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 7, want: 511},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 7, want: 511},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 9, want: 657},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 9, want: 657},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 10, want: 730},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 10, want: 730},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 11, want: 803},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 11, want: 803},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 13, want: 949},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 13, want: 949},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 19, want: 1387},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 19, want: 1387},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 21, want: 1533},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 21, want: 1533},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 25, want: 1825},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 25, want: 1825},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 27, want: 1971},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 27, want: 1971},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 37, want: 2701},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 37, want: 2701},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 41, want: 2993},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 41, want: 2993},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 45, want: 3285},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 45, want: 3285},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 73, want: 5329},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 73, want: 5329},
+       test_int32{fn: mul_73_int32, fnname: "mul_73_int32", in: 81, want: 5913},
+       test_int32{fn: mul_int32_73, fnname: "mul_int32_73", in: 81, want: 5913},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: -9, want: -729},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: -9, want: -729},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: -5, want: -405},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: -5, want: -405},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: -3, want: -243},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: -3, want: -243},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 3, want: 243},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 3, want: 243},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 5, want: 405},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 5, want: 405},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 7, want: 567},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 7, want: 567},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 9, want: 729},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 9, want: 729},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 10, want: 810},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 10, want: 810},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 11, want: 891},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 11, want: 891},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 13, want: 1053},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 13, want: 1053},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 19, want: 1539},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 19, want: 1539},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 21, want: 1701},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 21, want: 1701},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 25, want: 2025},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 25, want: 2025},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 27, want: 2187},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 27, want: 2187},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 37, want: 2997},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 37, want: 2997},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 41, want: 3321},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 41, want: 3321},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 45, want: 3645},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 45, want: 3645},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 73, want: 5913},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 73, want: 5913},
+       test_int32{fn: mul_81_int32, fnname: "mul_81_int32", in: 81, want: 6561},
+       test_int32{fn: mul_int32_81, fnname: "mul_int32_81", in: 81, want: 6561}}
+
 type test_uint16 struct {
        fn     func(uint16) uint16
        fnname string
@@ -6587,24 +9515,48 @@ func main() {
                        failed = true
                }
        }
+       for _, test := range tests_uint64mul {
+               if got := test.fn(test.in); got != test.want {
+                       fmt.Printf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want)
+                       failed = true
+               }
+       }
        for _, test := range tests_int64 {
                if got := test.fn(test.in); got != test.want {
                        fmt.Printf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want)
                        failed = true
                }
        }
+       for _, test := range tests_int64mul {
+               if got := test.fn(test.in); got != test.want {
+                       fmt.Printf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want)
+                       failed = true
+               }
+       }
        for _, test := range tests_uint32 {
                if got := test.fn(test.in); got != test.want {
                        fmt.Printf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want)
                        failed = true
                }
        }
+       for _, test := range tests_uint32mul {
+               if got := test.fn(test.in); got != test.want {
+                       fmt.Printf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want)
+                       failed = true
+               }
+       }
        for _, test := range tests_int32 {
                if got := test.fn(test.in); got != test.want {
                        fmt.Printf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want)
                        failed = true
                }
        }
+       for _, test := range tests_int32mul {
+               if got := test.fn(test.in); got != test.want {
+                       fmt.Printf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want)
+                       failed = true
+               }
+       }
        for _, test := range tests_uint16 {
                if got := test.fn(test.in); got != test.want {
                        fmt.Printf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want)
index 9739a594c9833c822f12452c0aaed15758f948e4..7fd5c31a1328b91fe947065c5136c4750ae47d0a 100644 (file)
@@ -24,20 +24,27 @@ type op struct {
        name, symbol string
 }
 type szD struct {
-       name string
-       sn   string
-       u    []uint64
-       i    []int64
+       name   string
+       sn     string
+       u      []uint64
+       i      []int64
+       oponly string
 }
 
 var szs = []szD{
        {name: "uint64", sn: "64", u: []uint64{0, 1, 4294967296, 0x8000000000000000, 0xffffFFFFffffFFFF}},
+       {name: "uint64", sn: "64", u: []uint64{3, 5, 7, 9, 10, 11, 13, 19, 21, 25, 27, 37, 41, 45, 73, 81}, oponly: "mul"},
+
        {name: "int64", sn: "64", i: []int64{-0x8000000000000000, -0x7FFFFFFFFFFFFFFF,
                -4294967296, -1, 0, 1, 4294967296, 0x7FFFFFFFFFFFFFFE, 0x7FFFFFFFFFFFFFFF}},
+       {name: "int64", sn: "64", i: []int64{-9, -5, -3, 3, 5, 7, 9, 10, 11, 13, 19, 21, 25, 27, 37, 41, 45, 73, 81}, oponly: "mul"},
 
        {name: "uint32", sn: "32", u: []uint64{0, 1, 4294967295}},
+       {name: "uint32", sn: "32", u: []uint64{3, 5, 7, 9, 10, 11, 13, 19, 21, 25, 27, 37, 41, 45, 73, 81}, oponly: "mul"},
+
        {name: "int32", sn: "32", i: []int64{-0x80000000, -0x7FFFFFFF, -1, 0,
                1, 0x7FFFFFFF}},
+       {name: "int32", sn: "32", i: []int64{-9, -5, -3, 3, 5, 7, 9, 10, 11, 13, 19, 21, 25, 27, 37, 41, 45, 73, 81}, oponly: "mul"},
 
        {name: "uint16", sn: "16", u: []uint64{0, 1, 65535}},
        {name: "int16", sn: "16", i: []int64{-32768, -32767, -1, 0, 1, 32766, 32767}},
@@ -162,6 +169,9 @@ func {{.Name}}_{{.FNumber}}_{{.Type_}}(a {{.Type_}}) {{.Type_}} { return {{.Numb
 
        for _, s := range szs {
                for _, o := range ops {
+                       if s.oponly != "" && s.oponly != o.name {
+                               continue
+                       }
                        fd := fncData{o.name, s.name, o.symbol, "", ""}
 
                        // unsigned test cases
@@ -218,17 +228,20 @@ func {{.Name}}_{{.FNumber}}_{{.Type_}}(a {{.Type_}}) {{.Type_}} { return {{.Numb
        }
        for _, s := range szs {
                fmt.Fprintf(w, `
-type test_%[1]s struct {
+type test_%[1]s%[2]s struct {
        fn func (%[1]s) %[1]s
        fnname string
        in %[1]s
        want %[1]s
 }
-`, s.name)
-               fmt.Fprintf(w, "var tests_%[1]s =[]test_%[1]s {\n\n", s.name)
+`, s.name, s.oponly)
+               fmt.Fprintf(w, "var tests_%[1]s%[2]s =[]test_%[1]s {\n\n", s.name, s.oponly)
 
                if len(s.u) > 0 {
                        for _, o := range ops {
+                               if s.oponly != "" && s.oponly != o.name {
+                                       continue
+                               }
                                fd := cfncData{s.name, o.name, s.name, o.symbol, "", "", "", ""}
                                for _, i := range s.u {
                                        fd.Number = fmt.Sprintf("%d", i)
@@ -262,6 +275,9 @@ type test_%[1]s struct {
                // signed
                if len(s.i) > 0 {
                        for _, o := range ops {
+                               if s.oponly != "" && s.oponly != o.name {
+                                       continue
+                               }
                                // don't generate tests for shifts by signed integers
                                if o.name == "lsh" || o.name == "rsh" {
                                        continue
@@ -303,7 +319,7 @@ func main() {
 `)
 
        for _, s := range szs {
-               fmt.Fprintf(w, `for _, test := range tests_%s {`, s.name)
+               fmt.Fprintf(w, `for _, test := range tests_%s%s {`, s.name, s.oponly)
                // Use WriteString here to avoid a vet warning about formatting directives.
                w.WriteString(`if got := test.fn(test.in); got != test.want {
                        fmt.Printf("%s(%d) = %d, want %d\n", test.fnname, test.in, got, test.want)
index ccf8dd062777d599da6594a7f24a462b7eaf1fad..35db2e216d658b0fe9c6e14f9c3875edb8c1745b 100644 (file)
 
 // strength reduction
 // Assumes that the following costs from https://gmplib.org/~tege/x86-timing.pdf:
-//    1 - addq, shlq, leaq, negq
-//    3 - imulq
+//    1 - addl, shll, leal, negl, subl
+//    3 - imull
 // This limits the rewrites to two instructions.
-// TODO: 27, 81
+// Note that negl always operates in-place,
+// which can require a register-register move
+// to preserve the original value,
+// so it must be used with care.
+(MULLconst [-9] x) -> (NEGL (LEAL8 <v.Type> x x))
+(MULLconst [-5] x) -> (NEGL (LEAL4 <v.Type> x x))
+(MULLconst [-3] x) -> (NEGL (LEAL2 <v.Type> x x))
 (MULLconst [-1] x) -> (NEGL x)
 (MULLconst [0] _) -> (MOVLconst [0])
 (MULLconst [1] x) -> x
 (MULLconst [3] x) -> (LEAL2 x x)
 (MULLconst [5] x) -> (LEAL4 x x)
-(MULLconst [7] x) -> (LEAL8 (NEGL <v.Type> x) x)
+(MULLconst [7] x) -> (LEAL2 x (LEAL2 <v.Type> x x))
 (MULLconst [9] x) -> (LEAL8 x x)
 (MULLconst [11] x) -> (LEAL2 x (LEAL4 <v.Type> x x))
 (MULLconst [13] x) -> (LEAL4 x (LEAL2 <v.Type> x x))
+(MULLconst [19] x) -> (LEAL2 x (LEAL8 <v.Type> x x))
 (MULLconst [21] x) -> (LEAL4 x (LEAL4 <v.Type> x x))
 (MULLconst [25] x) -> (LEAL8 x (LEAL2 <v.Type> x x))
+(MULLconst [27] x) -> (LEAL8 (LEAL2 <v.Type> x x) (LEAL2 <v.Type> x x))
 (MULLconst [37] x) -> (LEAL4 x (LEAL8 <v.Type> x x))
 (MULLconst [41] x) -> (LEAL8 x (LEAL4 <v.Type> x x))
+(MULLconst [45] x) -> (LEAL8 (LEAL4 <v.Type> x x) (LEAL4 <v.Type> x x))
 (MULLconst [73] x) -> (LEAL8 x (LEAL8 <v.Type> x x))
+(MULLconst [81] x) -> (LEAL8 (LEAL8 <v.Type> x x) (LEAL8 <v.Type> x x))
 
 (MULLconst [c] x) && isPowerOfTwo(c+1) && c >= 15 -> (SUBL (SHLLconst <v.Type> [log2(c+1)] x) x)
 (MULLconst [c] x) && isPowerOfTwo(c-1) && c >= 17 -> (LEAL1 (SHLLconst <v.Type> [log2(c-1)] x) x)
index f0315e8c57ff4c53180a46f32509cd29c5314a8c..4006c5cd7e0d7384924d90f88d45f1f42c5bd5a8 100644 (file)
 
 // strength reduction
 // Assumes that the following costs from https://gmplib.org/~tege/x86-timing.pdf:
-//    1 - addq, shlq, leaq, negq
+//    1 - addq, shlq, leaq, negq, subq
 //    3 - imulq
 // This limits the rewrites to two instructions.
-// TODO: 27, 81
+// Note that negq always operates in-place,
+// which can require a register-register move
+// to preserve the original value,
+// so it must be used with care.
+(MULQconst [-9] x) -> (NEGQ (LEAQ8 <v.Type> x x))
+(MULQconst [-5] x) -> (NEGQ (LEAQ4 <v.Type> x x))
+(MULQconst [-3] x) -> (NEGQ (LEAQ2 <v.Type> x x))
 (MULQconst [-1] x) -> (NEGQ x)
 (MULQconst [0] _) -> (MOVQconst [0])
 (MULQconst [1] x) -> x
 (MULQconst [3] x) -> (LEAQ2 x x)
 (MULQconst [5] x) -> (LEAQ4 x x)
-(MULQconst [7] x) -> (LEAQ8 (NEGQ <v.Type> x) x)
+(MULQconst [7] x) -> (LEAQ2 x (LEAQ2 <v.Type> x x))
 (MULQconst [9] x) -> (LEAQ8 x x)
 (MULQconst [11] x) -> (LEAQ2 x (LEAQ4 <v.Type> x x))
 (MULQconst [13] x) -> (LEAQ4 x (LEAQ2 <v.Type> x x))
+(MULQconst [19] x) -> (LEAQ2 x (LEAQ8 <v.Type> x x))
 (MULQconst [21] x) -> (LEAQ4 x (LEAQ4 <v.Type> x x))
 (MULQconst [25] x) -> (LEAQ8 x (LEAQ2 <v.Type> x x))
+(MULQconst [27] x) -> (LEAQ8 (LEAQ2 <v.Type> x x) (LEAQ2 <v.Type> x x))
 (MULQconst [37] x) -> (LEAQ4 x (LEAQ8 <v.Type> x x))
 (MULQconst [41] x) -> (LEAQ8 x (LEAQ4 <v.Type> x x))
+(MULQconst [45] x) -> (LEAQ8 (LEAQ4 <v.Type> x x) (LEAQ4 <v.Type> x x))
 (MULQconst [73] x) -> (LEAQ8 x (LEAQ8 <v.Type> x x))
+(MULQconst [81] x) -> (LEAQ8 (LEAQ8 <v.Type> x x) (LEAQ8 <v.Type> x x))
 
 (MULQconst [c] x) && isPowerOfTwo(c+1) && c >= 15 -> (SUBQ (SHLQconst <v.Type> [log2(c+1)] x) x)
 (MULQconst [c] x) && isPowerOfTwo(c-1) && c >= 17 -> (LEAQ1 (SHLQconst <v.Type> [log2(c-1)] x) x)
index 039c2ffbebd60b06217bb9e17be1681b67291b3c..a1ea307121f93b9a632ca7542555affb797cd438 100644 (file)
@@ -140,7 +140,7 @@ func rewriteValue386(v *Value) bool {
        case Op386MULL:
                return rewriteValue386_Op386MULL_0(v)
        case Op386MULLconst:
-               return rewriteValue386_Op386MULLconst_0(v) || rewriteValue386_Op386MULLconst_10(v) || rewriteValue386_Op386MULLconst_20(v)
+               return rewriteValue386_Op386MULLconst_0(v) || rewriteValue386_Op386MULLconst_10(v) || rewriteValue386_Op386MULLconst_20(v) || rewriteValue386_Op386MULLconst_30(v)
        case Op386NEGL:
                return rewriteValue386_Op386NEGL_0(v)
        case Op386NOTL:
@@ -8339,6 +8339,51 @@ func rewriteValue386_Op386MULLconst_0(v *Value) bool {
                v.AddArg(x)
                return true
        }
+       // match: (MULLconst [-9] x)
+       // cond:
+       // result: (NEGL (LEAL8 <v.Type> x x))
+       for {
+               if v.AuxInt != -9 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(Op386NEGL)
+               v0 := b.NewValue0(v.Pos, Op386LEAL8, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               return true
+       }
+       // match: (MULLconst [-5] x)
+       // cond:
+       // result: (NEGL (LEAL4 <v.Type> x x))
+       for {
+               if v.AuxInt != -5 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(Op386NEGL)
+               v0 := b.NewValue0(v.Pos, Op386LEAL4, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               return true
+       }
+       // match: (MULLconst [-3] x)
+       // cond:
+       // result: (NEGL (LEAL2 <v.Type> x x))
+       for {
+               if v.AuxInt != -3 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(Op386NEGL)
+               v0 := b.NewValue0(v.Pos, Op386LEAL2, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               return true
+       }
        // match: (MULLconst [-1] x)
        // cond:
        // result: (NEGL x)
@@ -8403,19 +8448,25 @@ func rewriteValue386_Op386MULLconst_0(v *Value) bool {
        }
        // match: (MULLconst [7] x)
        // cond:
-       // result: (LEAL8 (NEGL <v.Type> x) x)
+       // result: (LEAL2 x (LEAL2 <v.Type> x x))
        for {
                if v.AuxInt != 7 {
                        break
                }
                x := v.Args[0]
-               v.reset(Op386LEAL8)
-               v0 := b.NewValue0(v.Pos, Op386NEGL, v.Type)
+               v.reset(Op386LEAL2)
+               v.AddArg(x)
+               v0 := b.NewValue0(v.Pos, Op386LEAL2, v.Type)
+               v0.AddArg(x)
                v0.AddArg(x)
                v.AddArg(v0)
-               v.AddArg(x)
                return true
        }
+       return false
+}
+func rewriteValue386_Op386MULLconst_10(v *Value) bool {
+       b := v.Block
+       _ = b
        // match: (MULLconst [9] x)
        // cond:
        // result: (LEAL8 x x)
@@ -8461,11 +8512,22 @@ func rewriteValue386_Op386MULLconst_0(v *Value) bool {
                v.AddArg(v0)
                return true
        }
-       return false
-}
-func rewriteValue386_Op386MULLconst_10(v *Value) bool {
-       b := v.Block
-       _ = b
+       // match: (MULLconst [19] x)
+       // cond:
+       // result: (LEAL2 x (LEAL8 <v.Type> x x))
+       for {
+               if v.AuxInt != 19 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(Op386LEAL2)
+               v.AddArg(x)
+               v0 := b.NewValue0(v.Pos, Op386LEAL8, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               return true
+       }
        // match: (MULLconst [21] x)
        // cond:
        // result: (LEAL4 x (LEAL4 <v.Type> x x))
@@ -8498,6 +8560,25 @@ func rewriteValue386_Op386MULLconst_10(v *Value) bool {
                v.AddArg(v0)
                return true
        }
+       // match: (MULLconst [27] x)
+       // cond:
+       // result: (LEAL8 (LEAL2 <v.Type> x x) (LEAL2 <v.Type> x x))
+       for {
+               if v.AuxInt != 27 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(Op386LEAL8)
+               v0 := b.NewValue0(v.Pos, Op386LEAL2, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               v1 := b.NewValue0(v.Pos, Op386LEAL2, v.Type)
+               v1.AddArg(x)
+               v1.AddArg(x)
+               v.AddArg(v1)
+               return true
+       }
        // match: (MULLconst [37] x)
        // cond:
        // result: (LEAL4 x (LEAL8 <v.Type> x x))
@@ -8530,6 +8611,30 @@ func rewriteValue386_Op386MULLconst_10(v *Value) bool {
                v.AddArg(v0)
                return true
        }
+       // match: (MULLconst [45] x)
+       // cond:
+       // result: (LEAL8 (LEAL4 <v.Type> x x) (LEAL4 <v.Type> x x))
+       for {
+               if v.AuxInt != 45 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(Op386LEAL8)
+               v0 := b.NewValue0(v.Pos, Op386LEAL4, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               v1 := b.NewValue0(v.Pos, Op386LEAL4, v.Type)
+               v1.AddArg(x)
+               v1.AddArg(x)
+               v.AddArg(v1)
+               return true
+       }
+       return false
+}
+func rewriteValue386_Op386MULLconst_20(v *Value) bool {
+       b := v.Block
+       _ = b
        // match: (MULLconst [73] x)
        // cond:
        // result: (LEAL8 x (LEAL8 <v.Type> x x))
@@ -8546,6 +8651,25 @@ func rewriteValue386_Op386MULLconst_10(v *Value) bool {
                v.AddArg(v0)
                return true
        }
+       // match: (MULLconst [81] x)
+       // cond:
+       // result: (LEAL8 (LEAL8 <v.Type> x x) (LEAL8 <v.Type> x x))
+       for {
+               if v.AuxInt != 81 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(Op386LEAL8)
+               v0 := b.NewValue0(v.Pos, Op386LEAL8, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               v1 := b.NewValue0(v.Pos, Op386LEAL8, v.Type)
+               v1.AddArg(x)
+               v1.AddArg(x)
+               v.AddArg(v1)
+               return true
+       }
        // match: (MULLconst [c] x)
        // cond: isPowerOfTwo(c+1) && c >= 15
        // result: (SUBL (SHLLconst <v.Type> [log2(c+1)] x) x)
@@ -8631,11 +8755,6 @@ func rewriteValue386_Op386MULLconst_10(v *Value) bool {
                v.AddArg(x)
                return true
        }
-       return false
-}
-func rewriteValue386_Op386MULLconst_20(v *Value) bool {
-       b := v.Block
-       _ = b
        // match: (MULLconst [c] x)
        // cond: c%3 == 0 && isPowerOfTwo(c/3)
        // result: (SHLLconst [log2(c/3)] (LEAL2 <v.Type> x x))
@@ -8687,6 +8806,9 @@ func rewriteValue386_Op386MULLconst_20(v *Value) bool {
                v.AddArg(v0)
                return true
        }
+       return false
+}
+func rewriteValue386_Op386MULLconst_30(v *Value) bool {
        // match: (MULLconst [c] (MOVLconst [d]))
        // cond:
        // result: (MOVLconst [int64(int32(c*d))])
index 3aac711105c7d22187ab2bda3154248ca01d558e..3d781db6f6a667e5baae30fa51b97d4f14c38f52 100644 (file)
@@ -300,7 +300,7 @@ func rewriteValueAMD64(v *Value) bool {
        case OpAMD64MULQ:
                return rewriteValueAMD64_OpAMD64MULQ_0(v)
        case OpAMD64MULQconst:
-               return rewriteValueAMD64_OpAMD64MULQconst_0(v) || rewriteValueAMD64_OpAMD64MULQconst_10(v) || rewriteValueAMD64_OpAMD64MULQconst_20(v)
+               return rewriteValueAMD64_OpAMD64MULQconst_0(v) || rewriteValueAMD64_OpAMD64MULQconst_10(v) || rewriteValueAMD64_OpAMD64MULQconst_20(v) || rewriteValueAMD64_OpAMD64MULQconst_30(v)
        case OpAMD64MULSD:
                return rewriteValueAMD64_OpAMD64MULSD_0(v)
        case OpAMD64MULSDmem:
@@ -19190,6 +19190,51 @@ func rewriteValueAMD64_OpAMD64MULQconst_0(v *Value) bool {
                v.AddArg(x)
                return true
        }
+       // match: (MULQconst [-9] x)
+       // cond:
+       // result: (NEGQ (LEAQ8 <v.Type> x x))
+       for {
+               if v.AuxInt != -9 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(OpAMD64NEGQ)
+               v0 := b.NewValue0(v.Pos, OpAMD64LEAQ8, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               return true
+       }
+       // match: (MULQconst [-5] x)
+       // cond:
+       // result: (NEGQ (LEAQ4 <v.Type> x x))
+       for {
+               if v.AuxInt != -5 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(OpAMD64NEGQ)
+               v0 := b.NewValue0(v.Pos, OpAMD64LEAQ4, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               return true
+       }
+       // match: (MULQconst [-3] x)
+       // cond:
+       // result: (NEGQ (LEAQ2 <v.Type> x x))
+       for {
+               if v.AuxInt != -3 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(OpAMD64NEGQ)
+               v0 := b.NewValue0(v.Pos, OpAMD64LEAQ2, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               return true
+       }
        // match: (MULQconst [-1] x)
        // cond:
        // result: (NEGQ x)
@@ -19254,19 +19299,25 @@ func rewriteValueAMD64_OpAMD64MULQconst_0(v *Value) bool {
        }
        // match: (MULQconst [7] x)
        // cond:
-       // result: (LEAQ8 (NEGQ <v.Type> x) x)
+       // result: (LEAQ2 x (LEAQ2 <v.Type> x x))
        for {
                if v.AuxInt != 7 {
                        break
                }
                x := v.Args[0]
-               v.reset(OpAMD64LEAQ8)
-               v0 := b.NewValue0(v.Pos, OpAMD64NEGQ, v.Type)
+               v.reset(OpAMD64LEAQ2)
+               v.AddArg(x)
+               v0 := b.NewValue0(v.Pos, OpAMD64LEAQ2, v.Type)
+               v0.AddArg(x)
                v0.AddArg(x)
                v.AddArg(v0)
-               v.AddArg(x)
                return true
        }
+       return false
+}
+func rewriteValueAMD64_OpAMD64MULQconst_10(v *Value) bool {
+       b := v.Block
+       _ = b
        // match: (MULQconst [9] x)
        // cond:
        // result: (LEAQ8 x x)
@@ -19312,11 +19363,22 @@ func rewriteValueAMD64_OpAMD64MULQconst_0(v *Value) bool {
                v.AddArg(v0)
                return true
        }
-       return false
-}
-func rewriteValueAMD64_OpAMD64MULQconst_10(v *Value) bool {
-       b := v.Block
-       _ = b
+       // match: (MULQconst [19] x)
+       // cond:
+       // result: (LEAQ2 x (LEAQ8 <v.Type> x x))
+       for {
+               if v.AuxInt != 19 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(OpAMD64LEAQ2)
+               v.AddArg(x)
+               v0 := b.NewValue0(v.Pos, OpAMD64LEAQ8, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               return true
+       }
        // match: (MULQconst [21] x)
        // cond:
        // result: (LEAQ4 x (LEAQ4 <v.Type> x x))
@@ -19349,6 +19411,25 @@ func rewriteValueAMD64_OpAMD64MULQconst_10(v *Value) bool {
                v.AddArg(v0)
                return true
        }
+       // match: (MULQconst [27] x)
+       // cond:
+       // result: (LEAQ8 (LEAQ2 <v.Type> x x) (LEAQ2 <v.Type> x x))
+       for {
+               if v.AuxInt != 27 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(OpAMD64LEAQ8)
+               v0 := b.NewValue0(v.Pos, OpAMD64LEAQ2, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               v1 := b.NewValue0(v.Pos, OpAMD64LEAQ2, v.Type)
+               v1.AddArg(x)
+               v1.AddArg(x)
+               v.AddArg(v1)
+               return true
+       }
        // match: (MULQconst [37] x)
        // cond:
        // result: (LEAQ4 x (LEAQ8 <v.Type> x x))
@@ -19381,6 +19462,30 @@ func rewriteValueAMD64_OpAMD64MULQconst_10(v *Value) bool {
                v.AddArg(v0)
                return true
        }
+       // match: (MULQconst [45] x)
+       // cond:
+       // result: (LEAQ8 (LEAQ4 <v.Type> x x) (LEAQ4 <v.Type> x x))
+       for {
+               if v.AuxInt != 45 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(OpAMD64LEAQ8)
+               v0 := b.NewValue0(v.Pos, OpAMD64LEAQ4, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               v1 := b.NewValue0(v.Pos, OpAMD64LEAQ4, v.Type)
+               v1.AddArg(x)
+               v1.AddArg(x)
+               v.AddArg(v1)
+               return true
+       }
+       return false
+}
+func rewriteValueAMD64_OpAMD64MULQconst_20(v *Value) bool {
+       b := v.Block
+       _ = b
        // match: (MULQconst [73] x)
        // cond:
        // result: (LEAQ8 x (LEAQ8 <v.Type> x x))
@@ -19397,6 +19502,25 @@ func rewriteValueAMD64_OpAMD64MULQconst_10(v *Value) bool {
                v.AddArg(v0)
                return true
        }
+       // match: (MULQconst [81] x)
+       // cond:
+       // result: (LEAQ8 (LEAQ8 <v.Type> x x) (LEAQ8 <v.Type> x x))
+       for {
+               if v.AuxInt != 81 {
+                       break
+               }
+               x := v.Args[0]
+               v.reset(OpAMD64LEAQ8)
+               v0 := b.NewValue0(v.Pos, OpAMD64LEAQ8, v.Type)
+               v0.AddArg(x)
+               v0.AddArg(x)
+               v.AddArg(v0)
+               v1 := b.NewValue0(v.Pos, OpAMD64LEAQ8, v.Type)
+               v1.AddArg(x)
+               v1.AddArg(x)
+               v.AddArg(v1)
+               return true
+       }
        // match: (MULQconst [c] x)
        // cond: isPowerOfTwo(c+1) && c >= 15
        // result: (SUBQ (SHLQconst <v.Type> [log2(c+1)] x) x)
@@ -19482,11 +19606,6 @@ func rewriteValueAMD64_OpAMD64MULQconst_10(v *Value) bool {
                v.AddArg(x)
                return true
        }
-       return false
-}
-func rewriteValueAMD64_OpAMD64MULQconst_20(v *Value) bool {
-       b := v.Block
-       _ = b
        // match: (MULQconst [c] x)
        // cond: c%3 == 0 && isPowerOfTwo(c/3)
        // result: (SHLQconst [log2(c/3)] (LEAQ2 <v.Type> x x))
@@ -19538,6 +19657,9 @@ func rewriteValueAMD64_OpAMD64MULQconst_20(v *Value) bool {
                v.AddArg(v0)
                return true
        }
+       return false
+}
+func rewriteValueAMD64_OpAMD64MULQconst_30(v *Value) bool {
        // match: (MULQconst [c] (MOVQconst [d]))
        // cond:
        // result: (MOVQconst [c*d])