Eigenstate: myrddin-dev mailing list

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Force correct sign for intermediate steps of bigmul


---

As discussed in IRC. Unfortunately, this only shows up with numbers of
sizes around 2^(32*64), so the test cases can't be verified by hand
easily.

 lib/std/bigint.myr      |   2 +
 lib/std/test/bigint.myr | 202 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 204 insertions(+)

diff --git a/lib/std/bigint.myr b/lib/std/bigint.myr
index 9213007a..029fd9f6 100644
--- a/lib/std/bigint.myr
+++ b/lib/std/bigint.myr
@@ -601,10 +601,12 @@ const kmul = {r, a, b
 	z1 = bigdup(&x0)
 	trim(z1)
 	bigsub(z1, &x1)
+	var z1sign = z1.sign
 	t0 = bigdup(&y1)
 	bigsub(t0, &y0)
 
 	umul(z1, t0)
+	z1.sign = z1sign * t0.sign
 	bigadd(z1, z0)
 	bigadd(z1, z2)
 
diff --git a/lib/std/test/bigint.myr b/lib/std/test/bigint.myr
index d50b0ff7..91054ef7 100644
--- a/lib/std/test/bigint.myr
+++ b/lib/std/test/bigint.myr
@@ -24,6 +24,7 @@ const main = {
 		[.name = "add-negatives", .fn = addneg],
 		[.name = "sub-negatives", .fn = subneg],
 		[.name = "bigdivmod", .fn = somebigdivmod],
+		[.name = "large-bigmul", .fn = largebigmul],
 	][:])
 }
 
@@ -360,3 +361,204 @@ const somebigdivmod = {c
 		testr.check(c, std.bigeq(r_exp, r_act), "expected {} % {} to be {}, was {}", a, b, r_exp, r_act)
 	;;
 }
+
+/* Tests a and b large enough that we are forced to used kmul, including recursively */
+const largebigmul = {c
+	var inputs : (byte[:], uint32[:], uint32[:], uint32[:])[:] = [
+		( "0", [ 0x1 ][:], [ 0x1 ][:], [ 0x1 ][:] ),
+		( "1",
+			[0xd438d501, 0x4989bb6c, 0xaa02ccd2, 0x8c02c7fb, 0xd0d39cab, 0x7daee963,
+			0x03fa7756, 0x17371fb7, 0x4f2d80c7, 0xbc69e893, 0x02c68eea, 0x0aeec675,
+			0x2975319d, 0x4d263e97, 0x6707e6f7, 0x1a4ef735, 0x28c24ac8, 0x1da85267,
+			0x5ba370ed, 0x74e5b4c0, 0x45620f6a, 0x670847ec, 0xf285f864, 0xecbac2b5,
+			0xc13311b0, 0x15d83f71, 0x38864ab3, 0x338158d0, 0x243593a7, 0x55f00d20,
+			0x7bda6d92, 0xa95ce358, 0x80456513, 0x9bdb0419, 0xd0974038, 0xeab6f619,
+			0x3c30aeaf, 0x8a4a50a1, 0xa2777800, 0xe1973634, 0xde34e4ad, 0xc85422d0,
+			0x536a3638, 0x7bb91969, 0x1b6e1dac, 0x66582385, 0x61aab43a, 0xc0931876,
+			0x74d01412, 0x47539d84, 0x2ceb3858, 0xb75a4c69, 0xafee3d68, 0xa8f568f2,
+			0x05cd2855, 0x846851fe, 0xc358698e, 0x5ad7e3a2, 0x06c04ec2, 0x49c04dd4,
+			0x65af24ee, 0xcaca4901, 0x782682b0, 0x1420ec52, 0xfbd6f634, 0x4e5751b8,
+			0xc60275cd, 0x54000917, 0x2543fd5b, 0x6a7e6ee0, 0x84c7cce5, 0x26f9b270,
+			0x745c34d8, 0xb461676a, 0x6ca583f0, 0x09ada4f6, 0x17158bf5, 0x312018c3,
+			0x2acf878d, 0xa9e0ab50, 0x433370d8, 0x00000005][:],
+			[0x5a518f95, 0xef185267, 0x108f864c, 0xec996040, 0x593b2a4b, 0x3c5d1abb,
+			0x5c2c7236, 0xfb727af9, 0xccfb6dbf, 0xa8e7df8d, 0x7848bada, 0x879d7999,
+			0xfa4c7338, 0x35718a28, 0x0ba6d7c9, 0x18ee1a03, 0xf9730643, 0x114d1a6f,
+			0x30fb26f8, 0xa7ce8a60, 0xeb507683, 0xaec6f875, 0xe9ea93d7, 0x5239caec,
+			0x1b6e181d, 0x0d05743b, 0xa71a466e, 0x78d271f0, 0x991dc0e6, 0x961ec35c,
+			0xe8b25de3, 0x7d8f853a, 0xeed878c0, 0x79a64b5f, 0x33b266f9, 0x737b8b42,
+			0xb0018fb3, 0x02fb1917, 0x101803b8, 0x9969897c, 0x8f1e9f84, 0xb8977c7b,
+			0x0d94ab3c, 0xba0bdc8c, 0xeb5b271e, 0x71bbc3ac, 0x6b3a99aa, 0xcfca90b2,
+			0xc25784a0, 0x4b7b3dab, 0xb4d6301b, 0xe6bf1fb3, 0x4656b287, 0xf71fdd63,
+			0x0783c3c5, 0xb399ec3a, 0x7dae1bd3, 0xa6e9cd42, 0x1b215387, 0x2fbfc73d,
+			0x5a6684f0, 0x012e8f71, 0x0c059772, 0x00000001][:],
+			[0x03608895, 0xcb170728, 0xed235930, 0xa28f5417, 0x5c00f16b, 0x4d742082,
+			0x8b0f61ee, 0xfda181e8, 0x2afd0ab2, 0x893be877, 0xc7661174, 0x4b2a1abd,
+			0xe873e5fa, 0xeafb1741, 0xc905b9ab, 0x7af419ec, 0x8d7f9ffe, 0x46e45629,
+			0x4239bae8, 0x9e50c518, 0x9b38a2c6, 0x4b019ab7, 0x0bf40396, 0xd7dfaa78,
+			0x194ea149, 0x72d40c27, 0xc93fb77e, 0xf46a3bae, 0xf205b59a, 0x37d929da,
+			0xd88ed984, 0x49a2213e, 0x5ede97a1, 0x3f99adc8, 0x6b4c6f3a, 0xdd193272,
+			0x523fc0f7, 0x91f6ac1a, 0x76bcf78d, 0xec30f5e0, 0x71ea7b2b, 0x92fe5381,
+			0x01a70007, 0x70ac2e64, 0x46c66e83, 0x2b0a4f4a, 0xde20afb2, 0x637b17d4,
+			0x32ebad24, 0x5fbc158c, 0x0839222e, 0xaaa69163, 0x1a41e45d, 0x2596c604,
+			0xf241193f, 0x8d7649f6, 0xf14676ab, 0x07e60937, 0x9aa0ec6d, 0xf3f1e581,
+			0xaa405903, 0xb7fcc27e, 0xed7a1a3a, 0x09e0393c, 0x417d0d01, 0x3c0b5748,
+			0x97b26c8a, 0xb18f2bd4, 0xcce143a0, 0x175aaa0a, 0xb5a199a2, 0xe7419c0e,
+			0xad86bb76, 0x21ce336b, 0xdce58113, 0xef9a1639, 0x691857ea, 0x4ea4ce08,
+			0xdb78d01e, 0x8a803b54, 0x4e62c40e, 0xede995d5, 0xea466369, 0x4975d5e2,
+			0xe16ec2b0, 0x35e9f0f9, 0x734b4486, 0x7fc594c6, 0xf59977b9, 0x6fda8fd9,
+			0xc66890ef, 0xa5f6d53f, 0xabc4a213, 0x439e36c9, 0xe1edd657, 0xbef6c23c,
+			0xd1b8e53f, 0xef3d7a8e, 0xd5942d9b, 0x3678d074, 0xc7b33a1f, 0xa0da7e2a,
+			0x55ff1f4b, 0x17543de3, 0x2f37b8e6, 0xc3c6edf2, 0x8757e107, 0x5a6d6ecc,
+			0x05238803, 0xe91265a5, 0x20b6b8d8, 0x49a64334, 0x67d29fd6, 0xf7f64219,
+			0xa5316b89, 0xa70e493a, 0x6500a01e, 0x342c92d8, 0x04c47fc5, 0x418fecea,
+			0x335c77dd, 0x0075fd81, 0xabe80a7a, 0x1c87978b, 0x040928b4, 0x531c47b5,
+			0x5b1abf55, 0x9d62cc66, 0x855394eb, 0xf6045e0b, 0xcd307a1e, 0xab7e9197,
+			0x5725390f, 0x64930312, 0xf10b918a, 0x32d52d5e, 0xe4ebf112, 0x2a1174ac,
+			0x7681fa2c, 0x554dd47f, 0x26bbf792, 0xd18c803c, 0x50c2caf7, 0x8277471f,
+			0x00000005][:] ),
+		( "2",
+			[0x8fa8c809, 0x543ccfc3, 0x40a67589, 0x13c872a6, 0xca8bd8d8, 0xcaa5195e,
+			0x9bfccb1a, 0x5044e5a4, 0x2a1b585a, 0x6e2b558e, 0x02e09bfe, 0xc5773e7b,
+			0xaeb80d18, 0xdfcef845, 0x1644673a, 0xc19be15d, 0x8d98234b, 0x424cb607,
+			0x08f05d1a, 0xea92e8af, 0xf8d85512, 0xc76f3fb6, 0xaf56b49a, 0x162fb1b3,
+			0xc194ef0a, 0x2e48a43b, 0x7952ddba, 0x2605be3e, 0xcd21045e, 0xf3837447,
+			0xea4af63e, 0x56c4f0ba, 0xbd345727, 0xdfdac514, 0xb5622e07, 0xea8a3761,
+			0x28061058, 0xf89e06a4, 0x635d4ea0, 0x44b0946b, 0x042bd0df, 0x479e38b8,
+			0xba572f80, 0x027090ff, 0xafa718bb, 0x5617b2e2, 0x18826318, 0xe7a12367,
+			0x59b565df, 0xa0af53db, 0xcf4c9bb9, 0xf0e87494, 0xf205236a, 0x7f9ffdaa,
+			0x9a1a6b83, 0xfc817575, 0x787a885e, 0x56980581, 0xdc48c4a2, 0x5dba364d,
+			0x3161b177, 0xdffd5d41, 0x8d2e075c, 0xfb7d12c2][:],
+			[0xf7ffa08f, 0x6e5c02bd, 0x0cd84a3a, 0x8e28cb47, 0x4cdd6159, 0xe69b9388,
+			0xf5366110, 0xa3752c29, 0x4c793e6d, 0x13a9ee28, 0xca1aa614, 0x25fdb9b3,
+			0x3fe9c1d2, 0xf9921d1a, 0xe7c9377d, 0x8d79e36f, 0x7a9348de, 0xa110805e,
+			0x5df92768, 0xfb1c84da, 0x8d81287c, 0x8eea0ba5, 0x06beecfa, 0x7ec242b7,
+			0x0e064d8c, 0x0b292555, 0x382ba0b5, 0x580eb632, 0x2755a606, 0x572f30c6,
+			0xf55d2897, 0x2a724e36, 0x657b3ca9, 0x5963dd68, 0x606f5324, 0xf241245d,
+			0x055ab33f, 0x3eef5523, 0xda3504d4, 0x61bfc918, 0xdfc30229, 0x695dfd29,
+			0xd049f5a2, 0xec3eeabd, 0x54837bf9, 0x5f7a4cb3, 0x24f3a6f7, 0xca49bdf3,
+			0x08357231, 0x881af70b, 0x46c7db74, 0x591108dd, 0xc6e63813, 0x7aed2e3b,
+			0x5f0161ab, 0x805e6881, 0xe137b4be, 0x85dc2eea, 0x4b16bcdc, 0x97ed5301,
+			0x5fd127ab, 0xff570b67, 0xc3995a73, 0x293c53ea][:],
+			[0xac445d07, 0xd5a1facb, 0xa0b20e8a, 0x47608bc6, 0xfbfbf40b, 0x1dbfc947,
+			0xb2c95000, 0x7e793f5c, 0xad8b43e4, 0xaed1e721, 0xa353d730, 0x43261fd0,
+			0x35363d03, 0x84fd0166, 0x89a8b3eb, 0x60657de1, 0x5da0fff8, 0x6886160c,
+			0xaba2eb76, 0x56a19809, 0x302b6f1f, 0x3fb5b5c1, 0xb2890ff0, 0x82f8bf60,
+			0x8e0d7375, 0xee92358e, 0x7f54bdf5, 0xa7cf09eb, 0x545ea45b, 0xd8417f77,
+			0x8cc07ac7, 0x378a2893, 0x7da7f4d9, 0xbc470080, 0xd8bcdf22, 0x1e479f3b,
+			0xb6f3f1c4, 0x44f267b2, 0xc3dec7ef, 0x8e63ac6c, 0x1e316ef2, 0x8aa23025,
+			0x7e099910, 0x0ca8740b, 0xc85c30d4, 0x017cb92a, 0xbce9d39c, 0xa3480621,
+			0xb2fc06af, 0x474e5b39, 0x339a2289, 0x9bc881ca, 0xbce293fd, 0xdbca309d,
+			0xbb74a11a, 0xd024441c, 0xf66d6394, 0x3cf320d1, 0x6a1248c3, 0x0b12a871,
+			0x0e227c35, 0x629f4969, 0x72cbef9e, 0xae18a37e, 0xfc1be6ff, 0xd95b4131,
+			0xaac0a3ac, 0x79629682, 0xb8c6323c, 0x76913f2f, 0x90453e91, 0x78b07c24,
+			0xb89ffea0, 0x0cb32917, 0xd75d17e9, 0x52d606c0, 0xc1c33240, 0x0902a819,
+			0x75a73f41, 0x5157a6a0, 0x3bcad1ea, 0x50972558, 0xbfcf1c99, 0x7e12a8df,
+			0x5659c108, 0x6466a629, 0xaab38244, 0xcff2e6de, 0x43d14392, 0xa56dcc0f,
+			0x3ede1c6a, 0xf0ee6c6e, 0xaa1b37b4, 0x9d13b489, 0xa5d5289d, 0xb6b4da73,
+			0x8da6fe58, 0xb98e7c64, 0xb12b0842, 0x1291c110, 0x023521c6, 0x3ca866f9,
+			0x5e642f8f, 0xc946e820, 0x1f65389d, 0x1615acea, 0x2f2a06d4, 0xc42f7923,
+			0x5c4b8d78, 0x9f6bd66b, 0xc16146cd, 0xe18345f3, 0x70e565f9, 0x748bd980,
+			0xc2eed91d, 0xc0791edc, 0x52a4b5cc, 0xb6016466, 0x73eee8e4, 0x0400d3de,
+			0x249a903f, 0x5a9e5ea2, 0x222e0f92, 0x8a645235, 0x06680935, 0xe6894660,
+			0xbbc49b78, 0x28824bc1 ][:] ),
+		("3",
+			[0x22dfeef3, 0x1295b431, 0xe9529863, 0x348d4b7d, 0x7272b12f, 0x0497c293,
+			0xf02f7c25, 0x099e1eb9, 0xda9ba0ea, 0x62a2814d, 0x4fdbe3d7, 0x908a31b8,
+			0xe5060b0d, 0x671d15bd, 0x294965ce, 0x232f88f1, 0x4c448988, 0xfc383d3b,
+			0x86df2de1, 0x20432646, 0x4c7fbe1f, 0x326f7d3c, 0x38dfbec7, 0xf00f3df9,
+			0xce5ea03d, 0x62ab0701, 0x4d23d197, 0x4ef44098, 0x38c375d6, 0xc7d72bc2,
+			0x25199975, 0xbe84f268, 0x00d4ad56, 0x50243728, 0x4aea96dc, 0x4740a2e3,
+			0x5d07b992, 0x7d0a0770, 0xed6a4976, 0x204cb483, 0xe4d930aa, 0xb5b0f5fc,
+			0x3546f99a, 0x42087de5, 0x78cb663c, 0xab2e422d, 0x96214a92, 0x2721b270,
+			0xcf272a16, 0xd0da429d, 0xe69f7c29, 0xb1de29e6, 0x9e9f2305, 0x80be09ca,
+			0x1f5d8a2f, 0xbe152c9a, 0xc57021ed, 0xb99be11d, 0x6bd527e8, 0xda4ef764,
+			0xe1b7d09c, 0xe2693d79, 0x609f8000, 0x69c4d0a3, 0x7f227f5a, 0x9b92e545,
+			0x8833cd2c, 0x95a3a9ae, 0xd81e95f4, 0x422321b3, 0xe586291a, 0x8ef5f3a8,
+			0x4dc1916b, 0x55136cdf, 0x353c870c, 0x7fb85f91, 0x9407cd80, 0xa18b43fa,
+			0xa83d75ec, 0xb72b29e4, 0x99408c66, 0x26080a1e, 0x359f480e, 0xb1344ed4,
+			0x8f9d1a7b, 0x3f264a46, 0xfbc27805, 0xd2e4f801, 0xc9f069e8, 0x77eb4d98,
+			0x5e4e0744, 0x1a7b6e8a, 0x5033ba97, 0x3c8865ad, 0xf8b6918d, 0xaf58dea5,
+			0xa621a059, 0xedd5d287, 0xa7692cf1, 0x08f6da8c, 0xa2f947ff, 0x22a1651b,
+			0xba305733, 0x3d77331b, 0xce23609c, 0x7dc2463f, 0xacded3ea, 0x51af503b,
+			0x9cbf5ddd, 0xa4f0b163, 0xb5102301, 0xc1f3442a, 0xf2f03659, 0x4a84e291,
+			0x719b40f6, 0x1f08c19f, 0x34289a6f, 0xeafbc6da, 0x7e3c1da9, 0xb1736af0,
+			0xa278d6fb, 0xf555dcc6, 0xac6db91f, 0x0961cb3e, 0xeb5988ca, 0x3a9d5433,
+			0x259e1376, 0x6b6e6503][:],
+			[0x6b1ca441, 0x65742248, 0x181e0881, 0xb00f4698, 0x46305741, 0x7b8178e2,
+			0x749ceb45, 0xbf901cb4, 0xb7bd02e6, 0x365da057, 0xa1bca303, 0xcde24d9d,
+			0x5c389bec, 0xc6a226da, 0xca67fbc5, 0x69c47cae, 0x205abc68, 0x86722c43,
+			0x247a94a9, 0x78270cef, 0xedef0dfb, 0x7130c80b, 0xb674b77e, 0xba9534b1,
+			0xed537e68, 0x63198332, 0xceff15fa, 0xf68c1dcc, 0x03fe5e89, 0xa11c3e38,
+			0x83b79cb9, 0x7cac2f9d, 0x29da9204, 0x4d6e2361, 0x11d237eb, 0xc9ccc25e,
+			0x836c1307, 0x54faec3c, 0x42cab0a1, 0xcc53cb2f, 0xca329b79, 0xb1165990,
+			0xbc40c6d3, 0x9c18f2d9, 0x54ad9dc1, 0xf32f4d6b, 0x738b9206, 0xf8d89e3b,
+			0x9bdae564, 0x0d684ecf, 0x8b3ba78b, 0xc3a026ce, 0x7e57f8e0, 0x75e3af99,
+			0xcb0a7aaa, 0x4d7a074c, 0xa7e9f774, 0x10e48e2c, 0x89a10535, 0x267003c0,
+			0x74906b9f, 0x4eafe1f6, 0xd99d4ec0, 0x4323b3e1, 0x488d7a83, 0xde62fcc5,
+			0x07cae706, 0x74cb362a, 0x6b2f4d61, 0xadf806c3, 0x5bad862c, 0x0c9b2b3a,
+			0xf8aa721d, 0xb1b6caa5, 0x04aa9c5b, 0x982bafc9, 0xd1640b6a, 0x45a5c11c,
+			0x37ece529, 0x751f30fc, 0xecdb58d9, 0x4de7d68c, 0x57f8e6dc, 0xbd51784c,
+			0x5e18ac33, 0xfd96f93f, 0x7b9ae848, 0x4d5c3c7a, 0x01f0ad39, 0x15d79946,
+			0x576b4ceb, 0x3fef8d14, 0xe01ff6a5, 0x60717e45, 0x89ec8ffa, 0x11932b09,
+			0xcffd0872, 0xedcbb885, 0xff15ecc6, 0x557d81d6, 0x921f3f5f, 0x4d7e153f,
+			0xa7103379, 0xa11f6491, 0xa0387abf, 0xc00bdb8b, 0x55f3f081, 0xdbb89eec,
+			0x8ab41a4d, 0x59fbc622, 0x11588374, 0x119253b0, 0xf17420d5, 0x964706ec,
+			0x81b886e3, 0x2a8052c7, 0x179a777b, 0xc586b2d1, 0x7bf190d0, 0xec24e894,
+			0xdc832932, 0xcd755483, 0x7c6425ec, 0x876d7e4c, 0x4a9f72c8, 0xfbc115ad,
+			0x25c7d971, 0xedaf521d][:],
+			[0x038357b3, 0x90391e87, 0xbb0b1f64, 0x3ddb1c33, 0xe301125b, 0x12aeb1dc,
+			0x287ffbb9, 0x9ee982ad, 0x9741ae84, 0x39542c4f, 0x9f61a3e8, 0x09387c33,
+			0x70a97e09, 0x1a6c0444, 0x959a837e, 0xa9fa7fbc, 0x93d0cfe3, 0x6983971a,
+			0x9b27a516, 0x27fcaf20, 0x548eef04, 0x68133c8a, 0x4a4f180c, 0x588ed2e9,
+			0x305789bb, 0x92ff4600, 0x4b9172e6, 0x679ccd52, 0xd6a53f0a, 0xba71774e,
+			0x0bdfec3f, 0x0279dd6c, 0x3185adac, 0x8e9aed66, 0xcc7dad42, 0x0879329e,
+			0x767a7c62, 0x05357615, 0x50536d95, 0x149f0875, 0x9aa4ead4, 0x934f498b,
+			0x7fcbb757, 0x39ddcb63, 0x4b6457f8, 0x485564c0, 0x77fad861, 0xed489f61,
+			0x8748a4fc, 0x9c78285c, 0xb8b66eec, 0x5a9a93eb, 0x465223e7, 0x46881a27,
+			0x87c2c4a2, 0xac270dbb, 0x44015283, 0xd558c2c8, 0x93447a91, 0xd7133cdf,
+			0x5012b012, 0xbe460642, 0x1db983e0, 0xe50ffe77, 0x625183a2, 0x8b5e5ca0,
+			0x1163d7b4, 0x0cf9fa2c, 0xad8ab8d8, 0xa0b97c59, 0xa52fefec, 0x58da0bf2,
+			0x6f2fd1bf, 0xdc01ce71, 0x1914aa24, 0x82ad1a95, 0xaa53fac0, 0x62d3f9cc,
+			0xbaaa8089, 0x2a2d1264, 0xb26ea7ac, 0x04ada4f7, 0xfdbc95f5, 0xf2f50786,
+			0x036a237d, 0x64cfacc5, 0x120ef1cc, 0xf3588412, 0x3c7c55ef, 0xb520eb8b,
+			0x7a8dd08f, 0x1db1a183, 0x51f7a79f, 0x7f8f307c, 0xc1a97ca7, 0x80671cc7,
+			0xf9a328c3, 0x47013e4e, 0x7823b8d1, 0xbbe06af0, 0xe680314e, 0x70a7d72c,
+			0x229bf1d7, 0xdf7e1c8f, 0x959b4797, 0xcd2c5562, 0x3a16a7dc, 0xd4ead1f5,
+			0x6338caae, 0x41a5b581, 0x3b39fd1b, 0x8a16105a, 0x6f28277c, 0x3136aa67,
+			0x5b157dd1, 0x07bc0914, 0x651ab249, 0x85d8916d, 0xeacb3296, 0xa3f334a7,
+			0x9a277b25, 0xd22b6466, 0x85e40d95, 0x415f76fa, 0x0e5cf265, 0x0dbfdc80,
+			0xe009f0e1, 0x056c74ae, 0x8348b379, 0x6b14d769, 0xfe5068ae, 0x2c7b8ed8,
+			0xf146323a, 0x916936ef, 0x5e3a9472, 0x2541af46, 0x68f617d0, 0xc779d3f8,
+			0xb78bf034, 0xe4417ac7, 0xf5407b8c, 0x1ea31a97, 0xfd554f03, 0xe7e56918,
+			0x525973d4, 0x4c25a06a, 0xf52bfbab, 0x1c8674fe, 0x317d4101, 0xdde64294,
+			0xd59cbbdd, 0xe656ea74, 0xc4ff15db, 0xab2d0614, 0x19c67569, 0x3c653357,
+			0xf5af550c, 0x26506c80, 0xb279a34d, 0x93cbef6f, 0xd41481f6, 0x76255c7b,
+			0xd4f42c8f, 0x3bb49c64, 0xfa96fe56, 0x1e29f491, 0x2a5bede1, 0xf5b005ae,
+			0xabfc04bd, 0x95cf0697, 0x4f4b9df6, 0x715de20d, 0x4b98356b, 0xf3d4c333,
+			0xad5b4f93, 0x59131b9b, 0x5cd3a556, 0x098bcd23, 0xa06963ba, 0x174395d8,
+			0xbb91e26d, 0x9ebc6f33, 0xa807da65, 0xbb4bd098, 0xd2e652a4, 0x3c7d3ee6,
+			0x52a91bb1, 0x3f62fb01, 0x41be0494, 0xfab8db16, 0x810447dc, 0xfed91418,
+			0x750efd71, 0x3a0ec6bc, 0x2c32e298, 0x151dffff, 0x47f210c1, 0x204e507d,
+			0x84cf5792, 0xde782027, 0x9effd3a9, 0xb43ae3d5, 0x16cf97c1, 0x7d95c2df,
+			0xf858e612, 0x49859ab9, 0xc16d577d, 0x14dd50d3, 0x2dd08736, 0xe96a7b2e,
+			0xeb004b34, 0x9d9bc730, 0x13fe6e1a, 0x7dfd1021, 0x92a3d3d8, 0xf2407043,
+			0x4428a7ca, 0x8d1b3922, 0xd33208e8, 0x8e7225d0, 0xc8f4fa13, 0x64272a09,
+			0xe2c2038d, 0x830c409f, 0x154393f3, 0xe12f4602, 0x8199707a, 0x792f7290,
+			0x64a70bc3, 0xb9bc1551, 0x0db8ffc0, 0x705bcd1b, 0x6471c035, 0x3bf40f65,
+			0x6e8afac9, 0x2cd19929, 0x9c16c41c, 0x025648e3, 0xea05f99a, 0xd3fe51b9,
+			0x66ce52dd, 0xf880e76e, 0x4aaa8a7b, 0x75142f5f, 0x432bd1dd, 0x1d7ac75e,
+			0x5ab946b9, 0xcfdb4114, 0x98a502b7, 0x958470a5, 0xb51024c4, 0x05dd0fd9,
+			0x7e46beda, 0x0a1c6800, 0x8eb15526, 0x63bec670 ][:] ),
+	][:]
+
+	for (id, a_dig, b_dig, exp_dig) : inputs
+		var a = [ .sign = 1, .dig = a_dig ]
+		var b = [ .sign = 1, .dig = b_dig ]
+		var exp_base = [ .sign = 1, .dig = exp_dig ]
+		var exp = &exp_base
+		var act = std.bigdup(&a)
+		std.bigmul(act, &b)
+		testr.check(c, std.bigeq(exp, act), "input #{}: a0 = 0x{x,w=8,p=0}, b0 = 0x{x,w=8,p=0}, exp0 = 0x{x,w=8,p=0}, act0=0x{x,w=8,p=0}", id, a.dig[0], b.dig[0], exp.dig[0], act.dig[0])
+	;;
+}
-- 
2.24.0