@@ -26,6 +26,9 @@ static const u64 test_div64_dividends[] = {
2626 0x0072db27380dd689 ,
2727 0x0842f488162e2284 ,
2828 0xf66745411d8ab063 ,
29+ 0xfffffffffffffffb ,
30+ 0xfffffffffffffffc ,
31+ 0xffffffffffffffff ,
2932};
3033#define SIZE_DIV64_DIVIDENDS ARRAY_SIZE(test_div64_dividends)
3134
@@ -37,7 +40,10 @@ static const u64 test_div64_dividends[] = {
3740#define TEST_DIV64_DIVISOR_5 0x0008a880
3841#define TEST_DIV64_DIVISOR_6 0x003fd3ae
3942#define TEST_DIV64_DIVISOR_7 0x0b658fac
40- #define TEST_DIV64_DIVISOR_8 0xdc08b349
43+ #define TEST_DIV64_DIVISOR_8 0x80000001
44+ #define TEST_DIV64_DIVISOR_9 0xdc08b349
45+ #define TEST_DIV64_DIVISOR_A 0xfffffffe
46+ #define TEST_DIV64_DIVISOR_B 0xffffffff
4147
4248static const u32 test_div64_divisors [] = {
4349 TEST_DIV64_DIVISOR_0 ,
@@ -49,13 +55,16 @@ static const u32 test_div64_divisors[] = {
4955 TEST_DIV64_DIVISOR_6 ,
5056 TEST_DIV64_DIVISOR_7 ,
5157 TEST_DIV64_DIVISOR_8 ,
58+ TEST_DIV64_DIVISOR_9 ,
59+ TEST_DIV64_DIVISOR_A ,
60+ TEST_DIV64_DIVISOR_B ,
5261};
5362#define SIZE_DIV64_DIVISORS ARRAY_SIZE(test_div64_divisors)
5463
5564static const struct {
5665 u64 quotient ;
5766 u32 remainder ;
58- } test_div64_results [SIZE_DIV64_DIVISORS ][ SIZE_DIV64_DIVIDENDS ] = {
67+ } test_div64_results [SIZE_DIV64_DIVIDENDS ][ SIZE_DIV64_DIVISORS ] = {
5968 {
6069 { 0x0000000013045e47 , 0x00000001 },
6170 { 0x000000000161596c , 0x00000030 },
@@ -65,6 +74,9 @@ static const struct {
6574 { 0x00000000000013c4 , 0x0004ce80 },
6675 { 0x00000000000002ae , 0x001e143c },
6776 { 0x000000000000000f , 0x0033e56c },
77+ { 0x0000000000000001 , 0x2b27507f },
78+ { 0x0000000000000000 , 0xab275080 },
79+ { 0x0000000000000000 , 0xab275080 },
6880 { 0x0000000000000000 , 0xab275080 },
6981 }, {
7082 { 0x00000001c45c02d1 , 0x00000000 },
@@ -75,7 +87,10 @@ static const struct {
7587 { 0x000000000001d637 , 0x0004e5d9 },
7688 { 0x0000000000003fc9 , 0x000713bb },
7789 { 0x0000000000000165 , 0x029abe7d },
90+ { 0x000000000000001f , 0x673c193a },
7891 { 0x0000000000000012 , 0x6e9f7e37 },
92+ { 0x000000000000000f , 0xe73c1977 },
93+ { 0x000000000000000f , 0xe73c1968 },
7994 }, {
8095 { 0x000000197a3a0cf7 , 0x00000002 },
8196 { 0x00000001d9632e5c , 0x00000021 },
@@ -85,7 +100,10 @@ static const struct {
85100 { 0x00000000001a7bb3 , 0x00072331 },
86101 { 0x00000000000397ad , 0x0002c61b },
87102 { 0x000000000000141e , 0x06ea2e89 },
103+ { 0x00000000000001ca , 0x4c0a72e7 },
88104 { 0x000000000000010a , 0xab002ad7 },
105+ { 0x00000000000000e5 , 0x4c0a767b },
106+ { 0x00000000000000e5 , 0x4c0a7596 },
89107 }, {
90108 { 0x0000017949e37538 , 0x00000001 },
91109 { 0x0000001b62441f37 , 0x00000055 },
@@ -95,7 +113,10 @@ static const struct {
95113 { 0x0000000001882ec6 , 0x0005cbf9 },
96114 { 0x000000000035333b , 0x0017abdf },
97115 { 0x00000000000129f1 , 0x0ab4520d },
116+ { 0x0000000000001a87 , 0x18ff0472 },
98117 { 0x0000000000000f6e , 0x8ac0ce9b },
118+ { 0x0000000000000d43 , 0x98ff397f },
119+ { 0x0000000000000d43 , 0x98ff2c3c },
99120 }, {
100121 { 0x000011f321a74e49 , 0x00000006 },
101122 { 0x0000014d8481d211 , 0x0000005b },
@@ -105,7 +126,10 @@ static const struct {
105126 { 0x0000000012a88828 , 0x00036c97 },
106127 { 0x000000000287f16f , 0x002c2a25 },
107128 { 0x00000000000e2cc7 , 0x02d581e3 },
129+ { 0x0000000000014318 , 0x2ee07d7f },
108130 { 0x000000000000bbf4 , 0x1ba08c03 },
131+ { 0x000000000000a18c , 0x2ee303af },
132+ { 0x000000000000a18c , 0x2ee26223 },
109133 }, {
110134 { 0x0000d8db8f72935d , 0x00000005 },
111135 { 0x00000fbd5aed7a2e , 0x00000002 },
@@ -115,7 +139,10 @@ static const struct {
115139 { 0x00000000e16b20fa , 0x0002a14a },
116140 { 0x000000001e940d22 , 0x00353b2e },
117141 { 0x0000000000ab40ac , 0x06fba6ba },
142+ { 0x00000000000f3f70 , 0x0af7eeda },
118143 { 0x000000000008debd , 0x72d98365 },
144+ { 0x0000000000079fb8 , 0x0b166dba },
145+ { 0x0000000000079fb8 , 0x0b0ece02 },
119146 }, {
120147 { 0x000cc3045b8fc281 , 0x00000000 },
121148 { 0x0000ed1f48b5c9fc , 0x00000079 },
@@ -125,7 +152,10 @@ static const struct {
125152 { 0x0000000d43fce827 , 0x00082b09 },
126153 { 0x00000001ccaba11a , 0x0037e8dd },
127154 { 0x000000000a13f729 , 0x0566dffd },
155+ { 0x0000000000e5b64e , 0x3728203b },
128156 { 0x000000000085a14b , 0x23d36726 },
157+ { 0x000000000072db27 , 0x38f38cd7 },
158+ { 0x000000000072db27 , 0x3880b1b0 },
129159 }, {
130160 { 0x00eafeb9c993592b , 0x00000001 },
131161 { 0x00110e5befa9a991 , 0x00000048 },
@@ -135,7 +165,10 @@ static const struct {
135165 { 0x000000f4459740fc , 0x00084484 },
136166 { 0x0000002122c47bf9 , 0x002ca446 },
137167 { 0x00000000b9936290 , 0x004979c4 },
168+ { 0x000000001085e910 , 0x05a83974 },
138169 { 0x00000000099ca89d , 0x9db446bf },
170+ { 0x000000000842f488 , 0x26b40b94 },
171+ { 0x000000000842f488 , 0x1e71170c },
139172 }, {
140173 { 0x1b60cece589da1d2 , 0x00000001 },
141174 { 0x01fcb42be1453f5b , 0x0000004f },
@@ -145,7 +178,49 @@ static const struct {
145178 { 0x00001c757dfab350 , 0x00048863 },
146179 { 0x000003dc4979c652 , 0x00224ea7 },
147180 { 0x000000159edc3144 , 0x06409ab3 },
181+ { 0x00000001ecce8a7e , 0x30bc25e5 },
148182 { 0x000000011eadfee3 , 0xa99c48a8 },
183+ { 0x00000000f6674543 , 0x0a593ae9 },
184+ { 0x00000000f6674542 , 0x13f1f5a5 },
185+ }, {
186+ { 0x1c71c71c71c71c71 , 0x00000002 },
187+ { 0x0210842108421084 , 0x0000000b },
188+ { 0x007f01fc07f01fc0 , 0x000000fb },
189+ { 0x00014245eabf1f9a , 0x0000a63d },
190+ { 0x0000ffffffffffff , 0x0000fffb },
191+ { 0x00001d913cecc509 , 0x0007937b },
192+ { 0x00000402c70c678f , 0x0005bfc9 },
193+ { 0x00000016766cb70b , 0x045edf97 },
194+ { 0x00000001fffffffb , 0x80000000 },
195+ { 0x0000000129d84b3a , 0xa2e8fe71 },
196+ { 0x0000000100000001 , 0xfffffffd },
197+ { 0x0000000100000000 , 0xfffffffb },
198+ }, {
199+ { 0x1c71c71c71c71c71 , 0x00000003 },
200+ { 0x0210842108421084 , 0x0000000c },
201+ { 0x007f01fc07f01fc0 , 0x000000fc },
202+ { 0x00014245eabf1f9a , 0x0000a63e },
203+ { 0x0000ffffffffffff , 0x0000fffc },
204+ { 0x00001d913cecc509 , 0x0007937c },
205+ { 0x00000402c70c678f , 0x0005bfca },
206+ { 0x00000016766cb70b , 0x045edf98 },
207+ { 0x00000001fffffffc , 0x00000000 },
208+ { 0x0000000129d84b3a , 0xa2e8fe72 },
209+ { 0x0000000100000002 , 0x00000000 },
210+ { 0x0000000100000000 , 0xfffffffc },
211+ }, {
212+ { 0x1c71c71c71c71c71 , 0x00000006 },
213+ { 0x0210842108421084 , 0x0000000f },
214+ { 0x007f01fc07f01fc0 , 0x000000ff },
215+ { 0x00014245eabf1f9a , 0x0000a641 },
216+ { 0x0000ffffffffffff , 0x0000ffff },
217+ { 0x00001d913cecc509 , 0x0007937f },
218+ { 0x00000402c70c678f , 0x0005bfcd },
219+ { 0x00000016766cb70b , 0x045edf9b },
220+ { 0x00000001fffffffc , 0x00000003 },
221+ { 0x0000000129d84b3a , 0xa2e8fe75 },
222+ { 0x0000000100000002 , 0x00000003 },
223+ { 0x0000000100000001 , 0x00000000 },
149224 },
150225};
151226
@@ -208,6 +283,12 @@ static bool __init test_div64(void)
208283 return false;
209284 if (!test_div64_one (dividend , TEST_DIV64_DIVISOR_8 , i , 8 ))
210285 return false;
286+ if (!test_div64_one (dividend , TEST_DIV64_DIVISOR_9 , i , 9 ))
287+ return false;
288+ if (!test_div64_one (dividend , TEST_DIV64_DIVISOR_A , i , 10 ))
289+ return false;
290+ if (!test_div64_one (dividend , TEST_DIV64_DIVISOR_B , i , 11 ))
291+ return false;
211292 for (j = 0 ; j < SIZE_DIV64_DIVISORS ; j ++ ) {
212293 if (!test_div64_one (dividend , test_div64_divisors [j ],
213294 i , j ))
0 commit comments