aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2017-11-13 02:11:27 -0500
committerGravatar Jason Gross <jgross@mit.edu>2017-11-13 02:11:27 -0500
commitc9f51b5a7cbc46ac8c104bbb2c09a974e9ec72a3 (patch)
tree98227ca8130e922d4bacd9edf7b9ff0513bb72de /src
parent5d8503a2c300b586efccdf42d7dd6e78c2b240fc (diff)
Update display logs and c files
Diffstat (limited to 'src')
-rw-r--r--src/Specific/solinas32_2e192m2e64m1_10limbs/feadd.c33
-rw-r--r--src/Specific/solinas32_2e192m2e64m1_10limbs/femul.c89
-rw-r--r--src/Specific/solinas32_2e192m2e64m1_10limbs/fesquare.c79
-rw-r--r--src/Specific/solinas32_2e192m2e64m1_10limbs/fesub.c33
-rw-r--r--src/Specific/solinas32_2e192m2e64m1_10limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e192m2e64m1_10limbs/freeze.c54
-rw-r--r--src/Specific/solinas32_2e192m2e64m1_10limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e192m2e64m1_9limbs/feadd.c30
-rw-r--r--src/Specific/solinas32_2e192m2e64m1_9limbs/femul.c82
-rw-r--r--src/Specific/solinas32_2e192m2e64m1_9limbs/fesquare.c73
-rw-r--r--src/Specific/solinas32_2e192m2e64m1_9limbs/fesub.c30
-rw-r--r--src/Specific/solinas32_2e192m2e64m1_9limbs/freeze.c49
-rw-r--r--src/Specific/solinas32_2e224m2e96p1_10limbs/feadd.c33
-rw-r--r--src/Specific/solinas32_2e224m2e96p1_10limbs/freeze.c51
-rw-r--r--src/Specific/solinas32_2e224m2e96p1_10limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e224m2e96p1_11limbs/feadd.c36
-rw-r--r--src/Specific/solinas32_2e224m2e96p1_11limbs/freeze.c56
-rw-r--r--src/Specific/solinas32_2e224m2e96p1_11limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/feadd.c36
-rw-r--r--src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/freeze.c56
-rw-r--r--src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e256m2e32m977_13limbs/feadd.c42
-rw-r--r--src/Specific/solinas32_2e256m2e32m977_13limbs/femul.c110
-rw-r--r--src/Specific/solinas32_2e256m2e32m977_13limbs/fesquare.c97
-rw-r--r--src/Specific/solinas32_2e256m2e32m977_13limbs/fesub.c42
-rw-r--r--src/Specific/solinas32_2e256m2e32m977_13limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e256m2e32m977_13limbs/freeze.c69
-rw-r--r--src/Specific/solinas32_2e256m2e32m977_13limbs/freezeDisplay.log8
-rw-r--r--src/Specific/solinas32_2e322m2e161m1_12limbs/femul.c113
-rw-r--r--src/Specific/solinas32_2e322m2e161m1_12limbs/femulDisplay.log81
-rw-r--r--src/Specific/solinas32_2e379m19_15limbs/femul.c113
-rw-r--r--src/Specific/solinas32_2e379m19_15limbs/femulDisplay.log72
-rw-r--r--src/Specific/solinas32_2e379m19_16limbs/femul.c120
-rw-r--r--src/Specific/solinas32_2e379m19_16limbs/femulDisplay.log76
-rw-r--r--src/Specific/solinas32_2e382m105_16limbs/femul.c120
-rw-r--r--src/Specific/solinas32_2e382m105_16limbs/femulDisplay.log76
-rw-r--r--src/Specific/solinas32_2e382m105_17limbs/femul.c127
-rw-r--r--src/Specific/solinas32_2e382m105_17limbs/femulDisplay.log80
-rw-r--r--src/Specific/solinas32_2e382m105_17limbs/fesquare.c110
-rw-r--r--src/Specific/solinas32_2e382m105_17limbs/fesquareDisplay.log80
-rw-r--r--src/Specific/solinas32_2e383m187_16limbs/femul.c120
-rw-r--r--src/Specific/solinas32_2e383m187_16limbs/femulDisplay.log76
-rw-r--r--src/Specific/solinas32_2e383m187_16limbs/fesquare.c104
-rw-r--r--src/Specific/solinas32_2e383m187_16limbs/fesquareDisplay.log76
-rw-r--r--src/Specific/solinas32_2e383m187_16limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e383m187_16limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e383m187_17limbs/femul.c127
-rw-r--r--src/Specific/solinas32_2e383m187_17limbs/femulDisplay.log80
-rw-r--r--src/Specific/solinas32_2e383m187_17limbs/fesquare.c110
-rw-r--r--src/Specific/solinas32_2e383m187_17limbs/fesquareDisplay.log80
-rw-r--r--src/Specific/solinas32_2e383m187_17limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e383m187_17limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e383m187_17limbs/freeze.c4
-rw-r--r--src/Specific/solinas32_2e383m187_17limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e383m31_15limbs/femul.c113
-rw-r--r--src/Specific/solinas32_2e383m31_15limbs/femulDisplay.log72
-rw-r--r--src/Specific/solinas32_2e383m31_16limbs/femul.c120
-rw-r--r--src/Specific/solinas32_2e383m31_16limbs/femulDisplay.log76
-rw-r--r--src/Specific/solinas32_2e383m31_16limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e383m31_16limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e383m31_16limbs/freeze.c4
-rw-r--r--src/Specific/solinas32_2e383m31_16limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e383m421_17limbs/femul.c127
-rw-r--r--src/Specific/solinas32_2e383m421_17limbs/femulDisplay.log80
-rw-r--r--src/Specific/solinas32_2e383m421_17limbs/fesquare.c110
-rw-r--r--src/Specific/solinas32_2e383m421_17limbs/fesquareDisplay.log80
-rw-r--r--src/Specific/solinas32_2e383m421_17limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e383m421_17limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e383m421_17limbs/freeze.c4
-rw-r--r--src/Specific/solinas32_2e383m421_17limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e383m421_18limbs/femul.c134
-rw-r--r--src/Specific/solinas32_2e383m421_18limbs/femulDisplay.log84
-rw-r--r--src/Specific/solinas32_2e383m421_18limbs/fesquare.c116
-rw-r--r--src/Specific/solinas32_2e383m421_18limbs/fesquareDisplay.log84
-rw-r--r--src/Specific/solinas32_2e383m421_18limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e383m421_18limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e383m421_18limbs/freeze.c4
-rw-r--r--src/Specific/solinas32_2e383m421_18limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1_18limbs/feadd.c57
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1_18limbs/freeze.c92
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/feadd.c60
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/freeze.c97
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/freezeDisplay.log8
-rw-r--r--src/Specific/solinas32_2e384m317_17limbs/femul.c127
-rw-r--r--src/Specific/solinas32_2e384m317_17limbs/femulDisplay.log80
-rw-r--r--src/Specific/solinas32_2e384m317_17limbs/fesquare.c110
-rw-r--r--src/Specific/solinas32_2e384m317_17limbs/fesquareDisplay.log80
-rw-r--r--src/Specific/solinas32_2e384m317_17limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e384m317_17limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e384m317_17limbs/freeze.c4
-rw-r--r--src/Specific/solinas32_2e384m317_17limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e389m21_15limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e389m21_15limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e389m21_15limbs/freeze.c4
-rw-r--r--src/Specific/solinas32_2e389m21_15limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e389m21_16limbs/femul.c120
-rw-r--r--src/Specific/solinas32_2e389m21_16limbs/femulDisplay.log76
-rw-r--r--src/Specific/solinas32_2e389m21_16limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e389m21_16limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e389m21_16limbs/freeze.c4
-rw-r--r--src/Specific/solinas32_2e389m21_16limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e401m31_17limbs/femul.c127
-rw-r--r--src/Specific/solinas32_2e401m31_17limbs/femulDisplay.log80
-rw-r--r--src/Specific/solinas32_2e401m31_17limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e401m31_17limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e401m31_17limbs/freeze.c4
-rw-r--r--src/Specific/solinas32_2e401m31_17limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e413m21_16limbs/femul.c120
-rw-r--r--src/Specific/solinas32_2e413m21_16limbs/femulDisplay.log76
-rw-r--r--src/Specific/solinas32_2e413m21_16limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e413m21_16limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e413m21_16limbs/freeze.c4
-rw-r--r--src/Specific/solinas32_2e413m21_16limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e413m21_17limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e413m21_17limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e413m21_17limbs/freeze.c4
-rw-r--r--src/Specific/solinas32_2e413m21_17limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e414m17_17limbs/fesquare.c110
-rw-r--r--src/Specific/solinas32_2e414m17_17limbs/fesquareDisplay.log80
-rw-r--r--src/Specific/solinas32_2e416m2e208m1_18limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e416m2e208m1_18limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e444m17_17limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e444m17_17limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e444m17_17limbs/freeze.c4
-rw-r--r--src/Specific/solinas32_2e444m17_17limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e448m2e224m1_18limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e448m2e224m1_18limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e450m2e225m1_18limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e450m2e225m1_18limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e450m2e225m1_20limbs/feadd.c63
-rw-r--r--src/Specific/solinas32_2e450m2e225m1_20limbs/fesub.c63
-rw-r--r--src/Specific/solinas32_2e450m2e225m1_20limbs/freeze.c104
-rw-r--r--src/Specific/solinas32_2e480m2e240m1_20limbs/feadd.c63
-rw-r--r--src/Specific/solinas32_2e480m2e240m1_20limbs/fesub.c63
-rw-r--r--src/Specific/solinas32_2e480m2e240m1_20limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e480m2e240m1_20limbs/freeze.c104
-rw-r--r--src/Specific/solinas32_2e488m17_20limbs/feadd.c63
-rw-r--r--src/Specific/solinas32_2e488m17_20limbs/fesub.c63
-rw-r--r--src/Specific/solinas32_2e488m17_20limbs/freeze.c104
-rw-r--r--src/Specific/solinas32_2e489m21_19limbs/fesub.c2
-rw-r--r--src/Specific/solinas32_2e489m21_19limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e489m21_19limbs/freeze.c4
-rw-r--r--src/Specific/solinas32_2e489m21_19limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e489m21_20limbs/feadd.c63
-rw-r--r--src/Specific/solinas32_2e489m21_20limbs/fesub.c63
-rw-r--r--src/Specific/solinas32_2e489m21_20limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e489m21_20limbs/freeze.c104
-rw-r--r--src/Specific/solinas32_2e489m21_20limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e495m31_20limbs/feadd.c63
-rw-r--r--src/Specific/solinas32_2e495m31_20limbs/fesub.c63
-rw-r--r--src/Specific/solinas32_2e495m31_20limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e495m31_20limbs/freeze.c104
-rw-r--r--src/Specific/solinas32_2e495m31_20limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e495m31_21limbs/feadd.c66
-rw-r--r--src/Specific/solinas32_2e495m31_21limbs/fesub.c66
-rw-r--r--src/Specific/solinas32_2e495m31_21limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas32_2e495m31_21limbs/freeze.c109
-rw-r--r--src/Specific/solinas32_2e495m31_21limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas32_2e521m1_19limbs/feadd.c60
-rw-r--r--src/Specific/solinas32_2e521m1_19limbs/fesub.c60
-rw-r--r--src/Specific/solinas32_2e521m1_19limbs/freeze.c99
-rw-r--r--src/Specific/solinas64_2e256m2e32m977_7limbs/feadd.c24
-rw-r--r--src/Specific/solinas64_2e256m2e32m977_7limbs/femul.c65
-rw-r--r--src/Specific/solinas64_2e256m2e32m977_7limbs/fesquare.c58
-rw-r--r--src/Specific/solinas64_2e256m2e32m977_7limbs/fesub.c24
-rw-r--r--src/Specific/solinas64_2e256m2e32m977_7limbs/fesubDisplay.log2
-rw-r--r--src/Specific/solinas64_2e256m2e32m977_7limbs/freeze.c39
-rw-r--r--src/Specific/solinas64_2e256m2e32m977_7limbs/freezeDisplay.log4
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/feadd.c33
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/freeze.c53
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/freezeDisplay.log8
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1_9limbs/feadd.c30
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1_9limbs/freeze.c48
173 files changed, 7908 insertions, 115 deletions
diff --git a/src/Specific/solinas32_2e192m2e64m1_10limbs/feadd.c b/src/Specific/solinas32_2e192m2e64m1_10limbs/feadd.c
new file mode 100644
index 000000000..57dd4e1af
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1_10limbs/feadd.c
@@ -0,0 +1,33 @@
+static void feadd(uint32_t out[10], const uint32_t in1[10], const uint32_t in2[10]) {
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x38 = in2[9];
+ { const uint32_t x39 = in2[8];
+ { const uint32_t x37 = in2[7];
+ { const uint32_t x35 = in2[6];
+ { const uint32_t x33 = in2[5];
+ { const uint32_t x31 = in2[4];
+ { const uint32_t x29 = in2[3];
+ { const uint32_t x27 = in2[2];
+ { const uint32_t x25 = in2[1];
+ { const uint32_t x23 = in2[0];
+ out[0] = (x5 + x23);
+ out[1] = (x7 + x25);
+ out[2] = (x9 + x27);
+ out[3] = (x11 + x29);
+ out[4] = (x13 + x31);
+ out[5] = (x15 + x33);
+ out[6] = (x17 + x35);
+ out[7] = (x19 + x37);
+ out[8] = (x21 + x39);
+ out[9] = (x20 + x38);
+ }}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e192m2e64m1_10limbs/femul.c b/src/Specific/solinas32_2e192m2e64m1_10limbs/femul.c
new file mode 100644
index 000000000..5c9f4bdd4
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1_10limbs/femul.c
@@ -0,0 +1,89 @@
+static void femul(uint32_t out[10], const uint32_t in1[10], const uint32_t in2[10]) {
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x38 = in2[9];
+ { const uint32_t x39 = in2[8];
+ { const uint32_t x37 = in2[7];
+ { const uint32_t x35 = in2[6];
+ { const uint32_t x33 = in2[5];
+ { const uint32_t x31 = in2[4];
+ { const uint32_t x29 = in2[3];
+ { const uint32_t x27 = in2[2];
+ { const uint32_t x25 = in2[1];
+ { const uint32_t x23 = in2[0];
+ { ℤ x40 = ((((uint64_t)x5 * x38) + ((0x2 * ((uint64_t)x7 * x39)) + ((0x2 * ((uint64_t)x9 * x37)) + ((0x2 * ((uint64_t)x11 * x35)) + (((uint64_t)x13 * x33) + (((uint64_t)x15 * x31) + ((0x2 * ((uint64_t)x17 * x29)) + ((0x2 * ((uint64_t)x19 * x27)) + ((0x2 * ((uint64_t)x21 * x25)) + ((uint64_t)x20 * x23)))))))))) +ℤ ((0x80 * (((uint64_t)x19 * x38) + (((uint64_t)x21 * x39) + ((uint64_t)x20 * x37)))) +ℤ ((0x4000000 *ℤ (((uint64_t)x21 * x38) + ((uint64_t)x20 * x39))) +ℤ (0x200000000000 *ℤ ((uint64_t)x20 * x38)))));
+ { uint64_t x41 = ((((uint64_t)x5 * x39) + ((0x2 * ((uint64_t)x7 * x37)) + ((0x2 * ((uint64_t)x9 * x35)) + (((uint64_t)x11 * x33) + (((uint64_t)x13 * x31) + (((uint64_t)x15 * x29) + ((0x2 * ((uint64_t)x17 * x27)) + ((0x2 * ((uint64_t)x19 * x25)) + ((uint64_t)x21 * x23))))))))) + (((uint64_t)x20 * x38) + (0x40 * ((0x2 * ((uint64_t)x17 * x38)) + ((0x2 * ((uint64_t)x19 * x39)) + ((0x2 * ((uint64_t)x21 * x37)) + (0x2 * ((uint64_t)x20 * x35))))))));
+ { uint64_t x42 = ((((uint64_t)x5 * x37) + ((0x2 * ((uint64_t)x7 * x35)) + (((uint64_t)x9 * x33) + (((uint64_t)x11 * x31) + (((uint64_t)x13 * x29) + (((uint64_t)x15 * x27) + ((0x2 * ((uint64_t)x17 * x25)) + ((uint64_t)x19 * x23)))))))) + ((((uint64_t)x21 * x38) + ((uint64_t)x20 * x39)) + (0x40 * (((uint64_t)x15 * x38) + ((0x2 * ((uint64_t)x17 * x39)) + ((0x2 * ((uint64_t)x19 * x37)) + ((0x2 * ((uint64_t)x21 * x35)) + ((uint64_t)x20 * x33))))))));
+ { uint64_t x43 = ((((uint64_t)x5 * x35) + (((uint64_t)x7 * x33) + (((uint64_t)x9 * x31) + (((uint64_t)x11 * x29) + (((uint64_t)x13 * x27) + (((uint64_t)x15 * x25) + ((uint64_t)x17 * x23))))))) + ((((uint64_t)x19 * x38) + (((uint64_t)x21 * x39) + ((uint64_t)x20 * x37))) + (0x40 * (((uint64_t)x13 * x38) + (((uint64_t)x15 * x39) + ((0x2 * ((uint64_t)x17 * x37)) + ((0x2 * ((uint64_t)x19 * x35)) + (((uint64_t)x21 * x33) + ((uint64_t)x20 * x31)))))))));
+ { uint64_t x44 = ((((uint64_t)x5 * x33) + ((0x2 * ((uint64_t)x7 * x31)) + ((0x2 * ((uint64_t)x9 * x29)) + ((0x2 * ((uint64_t)x11 * x27)) + ((0x2 * ((uint64_t)x13 * x25)) + ((uint64_t)x15 * x23)))))) + (((0x2 * ((uint64_t)x17 * x38)) + ((0x2 * ((uint64_t)x19 * x39)) + ((0x2 * ((uint64_t)x21 * x37)) + (0x2 * ((uint64_t)x20 * x35))))) + (0x80 * (((uint64_t)x11 * x38) + (((uint64_t)x13 * x39) + (((uint64_t)x15 * x37) + ((0x2 * ((uint64_t)x17 * x35)) + (((uint64_t)x19 * x33) + (((uint64_t)x21 * x31) + ((uint64_t)x20 * x29))))))))));
+ { uint64_t x45 = ((((uint64_t)x5 * x31) + ((0x2 * ((uint64_t)x7 * x29)) + ((0x2 * ((uint64_t)x9 * x27)) + ((0x2 * ((uint64_t)x11 * x25)) + ((uint64_t)x13 * x23))))) + ((((uint64_t)x15 * x38) + ((0x2 * ((uint64_t)x17 * x39)) + ((0x2 * ((uint64_t)x19 * x37)) + ((0x2 * ((uint64_t)x21 * x35)) + ((uint64_t)x20 * x33))))) + (0x80 * (((uint64_t)x9 * x38) + (((uint64_t)x11 * x39) + (((uint64_t)x13 * x37) + (((uint64_t)x15 * x35) + (((uint64_t)x17 * x33) + (((uint64_t)x19 * x31) + (((uint64_t)x21 * x29) + ((uint64_t)x20 * x27)))))))))));
+ { uint64_t x46 = ((((uint64_t)x5 * x29) + ((0x2 * ((uint64_t)x7 * x27)) + ((0x2 * ((uint64_t)x9 * x25)) + ((uint64_t)x11 * x23)))) + ((((uint64_t)x13 * x38) + (((uint64_t)x15 * x39) + ((0x2 * ((uint64_t)x17 * x37)) + ((0x2 * ((uint64_t)x19 * x35)) + (((uint64_t)x21 * x33) + ((uint64_t)x20 * x31)))))) + (0x40 * ((0x2 * ((uint64_t)x7 * x38)) + ((0x2 * ((uint64_t)x9 * x39)) + ((0x2 * ((uint64_t)x11 * x37)) + ((0x2 * ((uint64_t)x13 * x35)) + (((uint64_t)x15 * x33) + ((0x2 * ((uint64_t)x17 * x31)) + ((0x2 * ((uint64_t)x19 * x29)) + ((0x2 * ((uint64_t)x21 * x27)) + (0x2 * ((uint64_t)x20 * x25)))))))))))));
+ { uint64_t x47 = ((((uint64_t)x5 * x27) + ((0x2 * ((uint64_t)x7 * x25)) + ((uint64_t)x9 * x23))) + (((uint64_t)x11 * x38) + (((uint64_t)x13 * x39) + (((uint64_t)x15 * x37) + ((0x2 * ((uint64_t)x17 * x35)) + (((uint64_t)x19 * x33) + (((uint64_t)x21 * x31) + ((uint64_t)x20 * x29))))))));
+ { uint64_t x48 = ((((uint64_t)x5 * x25) + ((uint64_t)x7 * x23)) + (((uint64_t)x9 * x38) + (((uint64_t)x11 * x39) + (((uint64_t)x13 * x37) + (((uint64_t)x15 * x35) + (((uint64_t)x17 * x33) + (((uint64_t)x19 * x31) + (((uint64_t)x21 * x29) + ((uint64_t)x20 * x27)))))))));
+ { uint64_t x49 = (((uint64_t)x5 * x23) + ((0x2 * ((uint64_t)x7 * x38)) + ((0x2 * ((uint64_t)x9 * x39)) + ((0x2 * ((uint64_t)x11 * x37)) + ((0x2 * ((uint64_t)x13 * x35)) + (((uint64_t)x15 * x33) + ((0x2 * ((uint64_t)x17 * x31)) + ((0x2 * ((uint64_t)x19 * x29)) + ((0x2 * ((uint64_t)x21 * x27)) + (0x2 * ((uint64_t)x20 * x25)))))))))));
+ { uint32_t x50 = (uint32_t) (x47 >> 0x13);
+ { uint32_t x51 = ((uint32_t)x47 & 0x7ffff);
+ { ℤ x52 = (x40 >>ℤ 0x13);
+ { uint32_t x53 = (x40 & 0x7ffff);
+ { ℤ x54 = ((0x80000 *ℤ x52) +ℤ x53);
+ { ℤ x55 = (x54 >>ℤ 0x13);
+ { uint32_t x56 = (x54 & 0x7ffff);
+ { ℤ x57 = ((x50 + x46) +ℤ (0x40 *ℤ x55));
+ { uint64_t x58 = (x57 >> 0x13);
+ { uint32_t x59 = (x57 & 0x7ffff);
+ { ℤ x60 = (x49 +ℤ x55);
+ { uint64_t x61 = (x60 >> 0x14);
+ { uint32_t x62 = (x60 & 0xfffff);
+ { uint64_t x63 = (x58 + x45);
+ { uint64_t x64 = (x63 >> 0x13);
+ { uint32_t x65 = ((uint32_t)x63 & 0x7ffff);
+ { uint64_t x66 = (x61 + x48);
+ { uint32_t x67 = (uint32_t) (x66 >> 0x13);
+ { uint32_t x68 = ((uint32_t)x66 & 0x7ffff);
+ { uint64_t x69 = (x64 + x44);
+ { uint32_t x70 = (uint32_t) (x69 >> 0x14);
+ { uint32_t x71 = ((uint32_t)x69 & 0xfffff);
+ { uint32_t x72 = (x67 + x51);
+ { uint32_t x73 = (x72 >> 0x13);
+ { uint32_t x74 = (x72 & 0x7ffff);
+ { uint64_t x75 = (x70 + x43);
+ { uint32_t x76 = (uint32_t) (x75 >> 0x13);
+ { uint32_t x77 = ((uint32_t)x75 & 0x7ffff);
+ { uint64_t x78 = (x76 + x42);
+ { uint32_t x79 = (uint32_t) (x78 >> 0x13);
+ { uint32_t x80 = ((uint32_t)x78 & 0x7ffff);
+ { uint64_t x81 = (x79 + x41);
+ { uint32_t x82 = (uint32_t) (x81 >> 0x13);
+ { uint32_t x83 = ((uint32_t)x81 & 0x7ffff);
+ { uint32_t x84 = (x82 + x56);
+ { uint32_t x85 = (x84 >> 0x13);
+ { uint32_t x86 = (x84 & 0x7ffff);
+ { uint32_t x87 = ((0x80000 * x85) + x86);
+ { uint32_t x88 = (x87 >> 0x13);
+ { uint32_t x89 = (x87 & 0x7ffff);
+ { uint32_t x90 = ((x73 + x59) + (0x40 * x88));
+ { uint32_t x91 = (x90 >> 0x13);
+ { uint32_t x92 = (x90 & 0x7ffff);
+ { uint32_t x93 = (x62 + x88);
+ { uint32_t x94 = (x93 >> 0x14);
+ { uint32_t x95 = (x93 & 0xfffff);
+ out[0] = x95;
+ out[1] = (x94 + x68);
+ out[2] = x74;
+ out[3] = x92;
+ out[4] = (x91 + x65);
+ out[5] = x71;
+ out[6] = x77;
+ out[7] = x80;
+ out[8] = x83;
+ out[9] = x89;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e192m2e64m1_10limbs/fesquare.c b/src/Specific/solinas32_2e192m2e64m1_10limbs/fesquare.c
new file mode 100644
index 000000000..c39890fde
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1_10limbs/fesquare.c
@@ -0,0 +1,79 @@
+static void fesquare(uint32_t out[10], const uint32_t in1[10]) {
+ { const uint32_t x17 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { ℤ x19 = ((((uint64_t)x2 * x17) + ((0x2 * ((uint64_t)x4 * x18)) + ((0x2 * ((uint64_t)x6 * x16)) + ((0x2 * ((uint64_t)x8 * x14)) + (((uint64_t)x10 * x12) + (((uint64_t)x12 * x10) + ((0x2 * ((uint64_t)x14 * x8)) + ((0x2 * ((uint64_t)x16 * x6)) + ((0x2 * ((uint64_t)x18 * x4)) + ((uint64_t)x17 * x2)))))))))) +ℤ ((0x80 * (((uint64_t)x16 * x17) + (((uint64_t)x18 * x18) + ((uint64_t)x17 * x16)))) +ℤ ((0x4000000 *ℤ (((uint64_t)x18 * x17) + ((uint64_t)x17 * x18))) +ℤ (0x200000000000 *ℤ ((uint64_t)x17 * x17)))));
+ { uint64_t x20 = ((((uint64_t)x2 * x18) + ((0x2 * ((uint64_t)x4 * x16)) + ((0x2 * ((uint64_t)x6 * x14)) + (((uint64_t)x8 * x12) + (((uint64_t)x10 * x10) + (((uint64_t)x12 * x8) + ((0x2 * ((uint64_t)x14 * x6)) + ((0x2 * ((uint64_t)x16 * x4)) + ((uint64_t)x18 * x2))))))))) + (((uint64_t)x17 * x17) + (0x40 * ((0x2 * ((uint64_t)x14 * x17)) + ((0x2 * ((uint64_t)x16 * x18)) + ((0x2 * ((uint64_t)x18 * x16)) + (0x2 * ((uint64_t)x17 * x14))))))));
+ { uint64_t x21 = ((((uint64_t)x2 * x16) + ((0x2 * ((uint64_t)x4 * x14)) + (((uint64_t)x6 * x12) + (((uint64_t)x8 * x10) + (((uint64_t)x10 * x8) + (((uint64_t)x12 * x6) + ((0x2 * ((uint64_t)x14 * x4)) + ((uint64_t)x16 * x2)))))))) + ((((uint64_t)x18 * x17) + ((uint64_t)x17 * x18)) + (0x40 * (((uint64_t)x12 * x17) + ((0x2 * ((uint64_t)x14 * x18)) + ((0x2 * ((uint64_t)x16 * x16)) + ((0x2 * ((uint64_t)x18 * x14)) + ((uint64_t)x17 * x12))))))));
+ { uint64_t x22 = ((((uint64_t)x2 * x14) + (((uint64_t)x4 * x12) + (((uint64_t)x6 * x10) + (((uint64_t)x8 * x8) + (((uint64_t)x10 * x6) + (((uint64_t)x12 * x4) + ((uint64_t)x14 * x2))))))) + ((((uint64_t)x16 * x17) + (((uint64_t)x18 * x18) + ((uint64_t)x17 * x16))) + (0x40 * (((uint64_t)x10 * x17) + (((uint64_t)x12 * x18) + ((0x2 * ((uint64_t)x14 * x16)) + ((0x2 * ((uint64_t)x16 * x14)) + (((uint64_t)x18 * x12) + ((uint64_t)x17 * x10)))))))));
+ { uint64_t x23 = ((((uint64_t)x2 * x12) + ((0x2 * ((uint64_t)x4 * x10)) + ((0x2 * ((uint64_t)x6 * x8)) + ((0x2 * ((uint64_t)x8 * x6)) + ((0x2 * ((uint64_t)x10 * x4)) + ((uint64_t)x12 * x2)))))) + (((0x2 * ((uint64_t)x14 * x17)) + ((0x2 * ((uint64_t)x16 * x18)) + ((0x2 * ((uint64_t)x18 * x16)) + (0x2 * ((uint64_t)x17 * x14))))) + (0x80 * (((uint64_t)x8 * x17) + (((uint64_t)x10 * x18) + (((uint64_t)x12 * x16) + ((0x2 * ((uint64_t)x14 * x14)) + (((uint64_t)x16 * x12) + (((uint64_t)x18 * x10) + ((uint64_t)x17 * x8))))))))));
+ { uint64_t x24 = ((((uint64_t)x2 * x10) + ((0x2 * ((uint64_t)x4 * x8)) + ((0x2 * ((uint64_t)x6 * x6)) + ((0x2 * ((uint64_t)x8 * x4)) + ((uint64_t)x10 * x2))))) + ((((uint64_t)x12 * x17) + ((0x2 * ((uint64_t)x14 * x18)) + ((0x2 * ((uint64_t)x16 * x16)) + ((0x2 * ((uint64_t)x18 * x14)) + ((uint64_t)x17 * x12))))) + (0x80 * (((uint64_t)x6 * x17) + (((uint64_t)x8 * x18) + (((uint64_t)x10 * x16) + (((uint64_t)x12 * x14) + (((uint64_t)x14 * x12) + (((uint64_t)x16 * x10) + (((uint64_t)x18 * x8) + ((uint64_t)x17 * x6)))))))))));
+ { uint64_t x25 = ((((uint64_t)x2 * x8) + ((0x2 * ((uint64_t)x4 * x6)) + ((0x2 * ((uint64_t)x6 * x4)) + ((uint64_t)x8 * x2)))) + ((((uint64_t)x10 * x17) + (((uint64_t)x12 * x18) + ((0x2 * ((uint64_t)x14 * x16)) + ((0x2 * ((uint64_t)x16 * x14)) + (((uint64_t)x18 * x12) + ((uint64_t)x17 * x10)))))) + (0x40 * ((0x2 * ((uint64_t)x4 * x17)) + ((0x2 * ((uint64_t)x6 * x18)) + ((0x2 * ((uint64_t)x8 * x16)) + ((0x2 * ((uint64_t)x10 * x14)) + (((uint64_t)x12 * x12) + ((0x2 * ((uint64_t)x14 * x10)) + ((0x2 * ((uint64_t)x16 * x8)) + ((0x2 * ((uint64_t)x18 * x6)) + (0x2 * ((uint64_t)x17 * x4)))))))))))));
+ { uint64_t x26 = ((((uint64_t)x2 * x6) + ((0x2 * ((uint64_t)x4 * x4)) + ((uint64_t)x6 * x2))) + (((uint64_t)x8 * x17) + (((uint64_t)x10 * x18) + (((uint64_t)x12 * x16) + ((0x2 * ((uint64_t)x14 * x14)) + (((uint64_t)x16 * x12) + (((uint64_t)x18 * x10) + ((uint64_t)x17 * x8))))))));
+ { uint64_t x27 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (((uint64_t)x6 * x17) + (((uint64_t)x8 * x18) + (((uint64_t)x10 * x16) + (((uint64_t)x12 * x14) + (((uint64_t)x14 * x12) + (((uint64_t)x16 * x10) + (((uint64_t)x18 * x8) + ((uint64_t)x17 * x6)))))))));
+ { uint64_t x28 = (((uint64_t)x2 * x2) + ((0x2 * ((uint64_t)x4 * x17)) + ((0x2 * ((uint64_t)x6 * x18)) + ((0x2 * ((uint64_t)x8 * x16)) + ((0x2 * ((uint64_t)x10 * x14)) + (((uint64_t)x12 * x12) + ((0x2 * ((uint64_t)x14 * x10)) + ((0x2 * ((uint64_t)x16 * x8)) + ((0x2 * ((uint64_t)x18 * x6)) + (0x2 * ((uint64_t)x17 * x4)))))))))));
+ { uint32_t x29 = (uint32_t) (x26 >> 0x13);
+ { uint32_t x30 = ((uint32_t)x26 & 0x7ffff);
+ { ℤ x31 = (x19 >>ℤ 0x13);
+ { uint32_t x32 = (x19 & 0x7ffff);
+ { ℤ x33 = ((0x80000 *ℤ x31) +ℤ x32);
+ { ℤ x34 = (x33 >>ℤ 0x13);
+ { uint32_t x35 = (x33 & 0x7ffff);
+ { ℤ x36 = ((x29 + x25) +ℤ (0x40 *ℤ x34));
+ { uint64_t x37 = (x36 >> 0x13);
+ { uint32_t x38 = (x36 & 0x7ffff);
+ { ℤ x39 = (x28 +ℤ x34);
+ { uint64_t x40 = (x39 >> 0x14);
+ { uint32_t x41 = (x39 & 0xfffff);
+ { uint64_t x42 = (x37 + x24);
+ { uint64_t x43 = (x42 >> 0x13);
+ { uint32_t x44 = ((uint32_t)x42 & 0x7ffff);
+ { uint64_t x45 = (x40 + x27);
+ { uint32_t x46 = (uint32_t) (x45 >> 0x13);
+ { uint32_t x47 = ((uint32_t)x45 & 0x7ffff);
+ { uint64_t x48 = (x43 + x23);
+ { uint32_t x49 = (uint32_t) (x48 >> 0x14);
+ { uint32_t x50 = ((uint32_t)x48 & 0xfffff);
+ { uint32_t x51 = (x46 + x30);
+ { uint32_t x52 = (x51 >> 0x13);
+ { uint32_t x53 = (x51 & 0x7ffff);
+ { uint64_t x54 = (x49 + x22);
+ { uint32_t x55 = (uint32_t) (x54 >> 0x13);
+ { uint32_t x56 = ((uint32_t)x54 & 0x7ffff);
+ { uint64_t x57 = (x55 + x21);
+ { uint32_t x58 = (uint32_t) (x57 >> 0x13);
+ { uint32_t x59 = ((uint32_t)x57 & 0x7ffff);
+ { uint64_t x60 = (x58 + x20);
+ { uint32_t x61 = (uint32_t) (x60 >> 0x13);
+ { uint32_t x62 = ((uint32_t)x60 & 0x7ffff);
+ { uint32_t x63 = (x61 + x35);
+ { uint32_t x64 = (x63 >> 0x13);
+ { uint32_t x65 = (x63 & 0x7ffff);
+ { uint32_t x66 = ((0x80000 * x64) + x65);
+ { uint32_t x67 = (x66 >> 0x13);
+ { uint32_t x68 = (x66 & 0x7ffff);
+ { uint32_t x69 = ((x52 + x38) + (0x40 * x67));
+ { uint32_t x70 = (x69 >> 0x13);
+ { uint32_t x71 = (x69 & 0x7ffff);
+ { uint32_t x72 = (x41 + x67);
+ { uint32_t x73 = (x72 >> 0x14);
+ { uint32_t x74 = (x72 & 0xfffff);
+ out[0] = x74;
+ out[1] = (x73 + x47);
+ out[2] = x53;
+ out[3] = x71;
+ out[4] = (x70 + x44);
+ out[5] = x50;
+ out[6] = x56;
+ out[7] = x59;
+ out[8] = x62;
+ out[9] = x68;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e192m2e64m1_10limbs/fesub.c b/src/Specific/solinas32_2e192m2e64m1_10limbs/fesub.c
new file mode 100644
index 000000000..c9a19629d
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1_10limbs/fesub.c
@@ -0,0 +1,33 @@
+static void fesub(uint32_t out[10], const uint32_t in1[10], const uint32_t in2[10]) {
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x38 = in2[9];
+ { const uint32_t x39 = in2[8];
+ { const uint32_t x37 = in2[7];
+ { const uint32_t x35 = in2[6];
+ { const uint32_t x33 = in2[5];
+ { const uint32_t x31 = in2[4];
+ { const uint32_t x29 = in2[3];
+ { const uint32_t x27 = in2[2];
+ { const uint32_t x25 = in2[1];
+ { const uint32_t x23 = in2[0];
+ out[0] = ((0x1ffffe + x5) - x23);
+ out[1] = ((0xffffe + x7) - x25);
+ out[2] = ((0xffffe + x9) - x27);
+ out[3] = ((0xfff7e + x11) - x29);
+ out[4] = ((0xffffe + x13) - x31);
+ out[5] = ((0x1ffffe + x15) - x33);
+ out[6] = ((0xffffe + x17) - x35);
+ out[7] = ((0xffffe + x19) - x37);
+ out[8] = ((0xffffe + x21) - x39);
+ out[9] = ((0xffffe + x20) - x38);
+ }}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e192m2e64m1_10limbs/fesubDisplay.log b/src/Specific/solinas32_2e192m2e64m1_10limbs/fesubDisplay.log
index 14e7e7582..6da59487f 100644
--- a/src/Specific/solinas32_2e192m2e64m1_10limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e192m2e64m1_10limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x20, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x38, x39, x37, x35, x33, x31, x29, x27, x25, x23))%core,
- (((0xffffe + x20) - x38), ((0xffffe + x21) - x39), ((0xffffe + x19) - x37), ((0xffffe + x17) - x35), ((0x1ffffe + x15) - x33), ((0xffffe + x13) - x31), ((Const 1048446 + x11) - x29), ((0xffffe + x9) - x27), ((0xffffe + x7) - x25), ((0x1ffffe + x5) - x23)))
+ (((0xffffe + x20) - x38), ((0xffffe + x21) - x39), ((0xffffe + x19) - x37), ((0xffffe + x17) - x35), ((0x1ffffe + x15) - x33), ((0xffffe + x13) - x31), ((0xfff7e + x11) - x29), ((0xffffe + x9) - x27), ((0xffffe + x7) - x25), ((0x1ffffe + x5) - x23)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e192m2e64m1_10limbs/freeze.c b/src/Specific/solinas32_2e192m2e64m1_10limbs/freeze.c
new file mode 100644
index 000000000..72929d3e5
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1_10limbs/freeze.c
@@ -0,0 +1,54 @@
+static void freeze(uint32_t out[10], const uint32_t in1[10]) {
+ { const uint32_t x17 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x20, uint8_t x21 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xfffff);
+ { uint32_t x23, uint8_t x24 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x21, Return x4, 0x7ffff);
+ { uint32_t x26, uint8_t x27 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x24, Return x6, 0x7ffff);
+ { uint32_t x29, uint8_t x30 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x27, Return x8, 0x7ffbf);
+ { uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x30, Return x10, 0x7ffff);
+ { uint32_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x33, Return x12, 0xfffff);
+ { uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x36, Return x14, 0x7ffff);
+ { uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x16, 0x7ffff);
+ { uint32_t x44, uint8_t x45 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x42, Return x18, 0x7ffff);
+ { uint32_t x47, uint8_t x48 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x45, Return x17, 0x7ffff);
+ { uint32_t x49 = cmovznz32(x48, 0x0, 0xffffffff);
+ { uint32_t x50 = (x49 & 0xfffff);
+ { uint32_t x52, uint8_t x53 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x20, Return x50);
+ { uint32_t x54 = (x49 & 0x7ffff);
+ { uint32_t x56, uint8_t x57 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x53, Return x23, Return x54);
+ { uint32_t x58 = (x49 & 0x7ffff);
+ { uint32_t x60, uint8_t x61 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x57, Return x26, Return x58);
+ { uint32_t x62 = (x49 & 0x7ffbf);
+ { uint32_t x64, uint8_t x65 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x61, Return x29, Return x62);
+ { uint32_t x66 = (x49 & 0x7ffff);
+ { uint32_t x68, uint8_t x69 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x65, Return x32, Return x66);
+ { uint32_t x70 = (x49 & 0xfffff);
+ { uint32_t x72, uint8_t x73 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x69, Return x35, Return x70);
+ { uint32_t x74 = (x49 & 0x7ffff);
+ { uint32_t x76, uint8_t x77 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x73, Return x38, Return x74);
+ { uint32_t x78 = (x49 & 0x7ffff);
+ { uint32_t x80, uint8_t x81 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x41, Return x78);
+ { uint32_t x82 = (x49 & 0x7ffff);
+ { uint32_t x84, uint8_t x85 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x81, Return x44, Return x82);
+ { uint32_t x86 = (x49 & 0x7ffff);
+ { uint32_t x88, uint8_t _ = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x85, Return x47, Return x86);
+ out[0] = x52;
+ out[1] = x56;
+ out[2] = x60;
+ out[3] = x64;
+ out[4] = x68;
+ out[5] = x72;
+ out[6] = x76;
+ out[7] = x80;
+ out[8] = x84;
+ out[9] = x88;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e192m2e64m1_10limbs/freezeDisplay.log b/src/Specific/solinas32_2e192m2e64m1_10limbs/freezeDisplay.log
index a15e0d498..56b228e32 100644
--- a/src/Specific/solinas32_2e192m2e64m1_10limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e192m2e64m1_10limbs/freezeDisplay.log
@@ -5,7 +5,7 @@ Interp-η
uint32_t x20, uint8_t x21 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xfffff);
uint32_t x23, uint8_t x24 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x21, Return x4, 0x7ffff);
uint32_t x26, uint8_t x27 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x24, Return x6, 0x7ffff);
- uint32_t x29, uint8_t x30 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x27, Return x8, Const 524223);
+ uint32_t x29, uint8_t x30 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x27, Return x8, 0x7ffbf);
uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x30, Return x10, 0x7ffff);
uint32_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x33, Return x12, 0xfffff);
uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x36, Return x14, 0x7ffff);
@@ -19,7 +19,7 @@ Interp-η
uint32_t x56, uint8_t x57 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x53, Return x23, Return x54);
uint32_t x58 = (x49 & 0x7ffff);
uint32_t x60, uint8_t x61 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x57, Return x26, Return x58);
- uint32_t x62 = (x49 & Const 524223);
+ uint32_t x62 = (x49 & 0x7ffbf);
uint32_t x64, uint8_t x65 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x61, Return x29, Return x62);
uint32_t x66 = (x49 & 0x7ffff);
uint32_t x68, uint8_t x69 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x65, Return x32, Return x66);
diff --git a/src/Specific/solinas32_2e192m2e64m1_9limbs/feadd.c b/src/Specific/solinas32_2e192m2e64m1_9limbs/feadd.c
new file mode 100644
index 000000000..e1188fdec
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1_9limbs/feadd.c
@@ -0,0 +1,30 @@
+static void feadd(uint32_t out[9], const uint32_t in1[9], const uint32_t in2[9]) {
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x34 = in2[8];
+ { const uint32_t x35 = in2[7];
+ { const uint32_t x33 = in2[6];
+ { const uint32_t x31 = in2[5];
+ { const uint32_t x29 = in2[4];
+ { const uint32_t x27 = in2[3];
+ { const uint32_t x25 = in2[2];
+ { const uint32_t x23 = in2[1];
+ { const uint32_t x21 = in2[0];
+ out[0] = (x5 + x21);
+ out[1] = (x7 + x23);
+ out[2] = (x9 + x25);
+ out[3] = (x11 + x27);
+ out[4] = (x13 + x29);
+ out[5] = (x15 + x31);
+ out[6] = (x17 + x33);
+ out[7] = (x19 + x35);
+ out[8] = (x18 + x34);
+ }}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e192m2e64m1_9limbs/femul.c b/src/Specific/solinas32_2e192m2e64m1_9limbs/femul.c
new file mode 100644
index 000000000..07fe00892
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1_9limbs/femul.c
@@ -0,0 +1,82 @@
+static void femul(uint32_t out[9], const uint32_t in1[9], const uint32_t in2[9]) {
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x34 = in2[8];
+ { const uint32_t x35 = in2[7];
+ { const uint32_t x33 = in2[6];
+ { const uint32_t x31 = in2[5];
+ { const uint32_t x29 = in2[4];
+ { const uint32_t x27 = in2[3];
+ { const uint32_t x25 = in2[2];
+ { const uint32_t x23 = in2[1];
+ { const uint32_t x21 = in2[0];
+ { ℤ x36 = ((((uint64_t)x5 * x34) + ((0x2 * ((uint64_t)x7 * x35)) + (((uint64_t)x9 * x33) + (((uint64_t)x11 * x31) + ((0x2 * ((uint64_t)x13 * x29)) + (((uint64_t)x15 * x27) + (((uint64_t)x17 * x25) + ((0x2 * ((uint64_t)x19 * x23)) + ((uint64_t)x18 * x21))))))))) +ℤ ((((uint64_t)x17 * x34) + ((0x2 * ((uint64_t)x19 * x35)) + ((uint64_t)x18 * x33))) +ℤ ((0x200000 *ℤ ((0x2 * ((uint64_t)x19 * x34)) + (0x2 * ((uint64_t)x18 * x35)))) +ℤ (0x80000000000 *ℤ ((uint64_t)x18 * x34)))));
+ { uint64_t x37 = ((((uint64_t)x5 * x35) + (((uint64_t)x7 * x33) + (((uint64_t)x9 * x31) + (((uint64_t)x11 * x29) + (((uint64_t)x13 * x27) + (((uint64_t)x15 * x25) + (((uint64_t)x17 * x23) + ((uint64_t)x19 * x21)))))))) + (((uint64_t)x18 * x34) + (((uint64_t)x15 * x34) + (((uint64_t)x17 * x35) + (((uint64_t)x19 * x33) + ((uint64_t)x18 * x31))))));
+ { uint64_t x38 = ((((uint64_t)x5 * x33) + ((0x2 * ((uint64_t)x7 * x31)) + ((0x2 * ((uint64_t)x9 * x29)) + (((uint64_t)x11 * x27) + ((0x2 * ((uint64_t)x13 * x25)) + ((0x2 * ((uint64_t)x15 * x23)) + ((uint64_t)x17 * x21))))))) + (((0x2 * ((uint64_t)x19 * x34)) + (0x2 * ((uint64_t)x18 * x35))) + ((0x2 * ((uint64_t)x13 * x34)) + ((0x2 * ((uint64_t)x15 * x35)) + (((uint64_t)x17 * x33) + ((0x2 * ((uint64_t)x19 * x31)) + (0x2 * ((uint64_t)x18 * x29))))))));
+ { uint64_t x39 = ((((uint64_t)x5 * x31) + ((0x2 * ((uint64_t)x7 * x29)) + (((uint64_t)x9 * x27) + (((uint64_t)x11 * x25) + ((0x2 * ((uint64_t)x13 * x23)) + ((uint64_t)x15 * x21)))))) + ((((uint64_t)x17 * x34) + ((0x2 * ((uint64_t)x19 * x35)) + ((uint64_t)x18 * x33))) + (((uint64_t)x11 * x34) + ((0x2 * ((uint64_t)x13 * x35)) + (((uint64_t)x15 * x33) + (((uint64_t)x17 * x31) + ((0x2 * ((uint64_t)x19 * x29)) + ((uint64_t)x18 * x27))))))));
+ { uint64_t x40 = ((((uint64_t)x5 * x29) + (((uint64_t)x7 * x27) + (((uint64_t)x9 * x25) + (((uint64_t)x11 * x23) + ((uint64_t)x13 * x21))))) + ((((uint64_t)x15 * x34) + (((uint64_t)x17 * x35) + (((uint64_t)x19 * x33) + ((uint64_t)x18 * x31)))) + (((uint64_t)x9 * x34) + (((uint64_t)x11 * x35) + (((uint64_t)x13 * x33) + (((uint64_t)x15 * x31) + (((uint64_t)x17 * x29) + (((uint64_t)x19 * x27) + ((uint64_t)x18 * x25)))))))));
+ { uint64_t x41 = ((((uint64_t)x5 * x27) + ((0x2 * ((uint64_t)x7 * x25)) + ((0x2 * ((uint64_t)x9 * x23)) + ((uint64_t)x11 * x21)))) + (((0x2 * ((uint64_t)x13 * x34)) + ((0x2 * ((uint64_t)x15 * x35)) + (((uint64_t)x17 * x33) + ((0x2 * ((uint64_t)x19 * x31)) + (0x2 * ((uint64_t)x18 * x29)))))) + ((0x2 * ((uint64_t)x7 * x34)) + ((0x2 * ((uint64_t)x9 * x35)) + (((uint64_t)x11 * x33) + ((0x2 * ((uint64_t)x13 * x31)) + ((0x2 * ((uint64_t)x15 * x29)) + (((uint64_t)x17 * x27) + ((0x2 * ((uint64_t)x19 * x25)) + (0x2 * ((uint64_t)x18 * x23)))))))))));
+ { uint64_t x42 = ((((uint64_t)x5 * x25) + ((0x2 * ((uint64_t)x7 * x23)) + ((uint64_t)x9 * x21))) + (((uint64_t)x11 * x34) + ((0x2 * ((uint64_t)x13 * x35)) + (((uint64_t)x15 * x33) + (((uint64_t)x17 * x31) + ((0x2 * ((uint64_t)x19 * x29)) + ((uint64_t)x18 * x27)))))));
+ { uint64_t x43 = ((((uint64_t)x5 * x23) + ((uint64_t)x7 * x21)) + (((uint64_t)x9 * x34) + (((uint64_t)x11 * x35) + (((uint64_t)x13 * x33) + (((uint64_t)x15 * x31) + (((uint64_t)x17 * x29) + (((uint64_t)x19 * x27) + ((uint64_t)x18 * x25))))))));
+ { uint64_t x44 = (((uint64_t)x5 * x21) + ((0x2 * ((uint64_t)x7 * x34)) + ((0x2 * ((uint64_t)x9 * x35)) + (((uint64_t)x11 * x33) + ((0x2 * ((uint64_t)x13 * x31)) + ((0x2 * ((uint64_t)x15 * x29)) + (((uint64_t)x17 * x27) + ((0x2 * ((uint64_t)x19 * x25)) + (0x2 * ((uint64_t)x18 * x23))))))))));
+ { uint32_t x45 = (uint32_t) (x42 >> 0x15);
+ { uint32_t x46 = ((uint32_t)x42 & 0x1fffff);
+ { ℤ x47 = (x36 >>ℤ 0x15);
+ { uint32_t x48 = (x36 & 0x1fffff);
+ { ℤ x49 = ((0x200000 *ℤ x47) +ℤ x48);
+ { ℤ x50 = (x49 >>ℤ 0x15);
+ { uint32_t x51 = (x49 & 0x1fffff);
+ { ℤ x52 = ((x45 + x41) +ℤ x50);
+ { uint64_t x53 = (x52 >> 0x16);
+ { uint32_t x54 = (x52 & 0x3fffff);
+ { ℤ x55 = (x44 +ℤ x50);
+ { uint64_t x56 = (x55 >> 0x16);
+ { uint32_t x57 = (x55 & 0x3fffff);
+ { uint64_t x58 = (x53 + x40);
+ { uint32_t x59 = (uint32_t) (x58 >> 0x15);
+ { uint32_t x60 = ((uint32_t)x58 & 0x1fffff);
+ { uint64_t x61 = (x56 + x43);
+ { uint32_t x62 = (uint32_t) (x61 >> 0x15);
+ { uint32_t x63 = ((uint32_t)x61 & 0x1fffff);
+ { uint64_t x64 = (x59 + x39);
+ { uint32_t x65 = (uint32_t) (x64 >> 0x15);
+ { uint32_t x66 = ((uint32_t)x64 & 0x1fffff);
+ { uint32_t x67 = (x62 + x46);
+ { uint32_t x68 = (x67 >> 0x15);
+ { uint32_t x69 = (x67 & 0x1fffff);
+ { uint64_t x70 = (x65 + x38);
+ { uint32_t x71 = (uint32_t) (x70 >> 0x16);
+ { uint32_t x72 = ((uint32_t)x70 & 0x3fffff);
+ { uint64_t x73 = (x71 + x37);
+ { uint32_t x74 = (uint32_t) (x73 >> 0x15);
+ { uint32_t x75 = ((uint32_t)x73 & 0x1fffff);
+ { uint32_t x76 = (x74 + x51);
+ { uint32_t x77 = (x76 >> 0x15);
+ { uint32_t x78 = (x76 & 0x1fffff);
+ { uint32_t x79 = ((0x200000 * x77) + x78);
+ { uint32_t x80 = (x79 >> 0x15);
+ { uint32_t x81 = (x79 & 0x1fffff);
+ { uint32_t x82 = ((x68 + x54) + x80);
+ { uint32_t x83 = (x82 >> 0x16);
+ { uint32_t x84 = (x82 & 0x3fffff);
+ { uint32_t x85 = (x57 + x80);
+ { uint32_t x86 = (x85 >> 0x16);
+ { uint32_t x87 = (x85 & 0x3fffff);
+ out[0] = x87;
+ out[1] = (x86 + x63);
+ out[2] = x69;
+ out[3] = x84;
+ out[4] = (x83 + x60);
+ out[5] = x66;
+ out[6] = x72;
+ out[7] = x75;
+ out[8] = x81;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e192m2e64m1_9limbs/fesquare.c b/src/Specific/solinas32_2e192m2e64m1_9limbs/fesquare.c
new file mode 100644
index 000000000..8327d8ae3
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1_9limbs/fesquare.c
@@ -0,0 +1,73 @@
+static void fesquare(uint32_t out[9], const uint32_t in1[9]) {
+ { const uint32_t x15 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { ℤ x17 = ((((uint64_t)x2 * x15) + ((0x2 * ((uint64_t)x4 * x16)) + (((uint64_t)x6 * x14) + (((uint64_t)x8 * x12) + ((0x2 * ((uint64_t)x10 * x10)) + (((uint64_t)x12 * x8) + (((uint64_t)x14 * x6) + ((0x2 * ((uint64_t)x16 * x4)) + ((uint64_t)x15 * x2))))))))) +ℤ ((((uint64_t)x14 * x15) + ((0x2 * ((uint64_t)x16 * x16)) + ((uint64_t)x15 * x14))) +ℤ ((0x200000 *ℤ ((0x2 * ((uint64_t)x16 * x15)) + (0x2 * ((uint64_t)x15 * x16)))) +ℤ (0x80000000000 *ℤ ((uint64_t)x15 * x15)))));
+ { uint64_t x18 = ((((uint64_t)x2 * x16) + (((uint64_t)x4 * x14) + (((uint64_t)x6 * x12) + (((uint64_t)x8 * x10) + (((uint64_t)x10 * x8) + (((uint64_t)x12 * x6) + (((uint64_t)x14 * x4) + ((uint64_t)x16 * x2)))))))) + (((uint64_t)x15 * x15) + (((uint64_t)x12 * x15) + (((uint64_t)x14 * x16) + (((uint64_t)x16 * x14) + ((uint64_t)x15 * x12))))));
+ { uint64_t x19 = ((((uint64_t)x2 * x14) + ((0x2 * ((uint64_t)x4 * x12)) + ((0x2 * ((uint64_t)x6 * x10)) + (((uint64_t)x8 * x8) + ((0x2 * ((uint64_t)x10 * x6)) + ((0x2 * ((uint64_t)x12 * x4)) + ((uint64_t)x14 * x2))))))) + (((0x2 * ((uint64_t)x16 * x15)) + (0x2 * ((uint64_t)x15 * x16))) + ((0x2 * ((uint64_t)x10 * x15)) + ((0x2 * ((uint64_t)x12 * x16)) + (((uint64_t)x14 * x14) + ((0x2 * ((uint64_t)x16 * x12)) + (0x2 * ((uint64_t)x15 * x10))))))));
+ { uint64_t x20 = ((((uint64_t)x2 * x12) + ((0x2 * ((uint64_t)x4 * x10)) + (((uint64_t)x6 * x8) + (((uint64_t)x8 * x6) + ((0x2 * ((uint64_t)x10 * x4)) + ((uint64_t)x12 * x2)))))) + ((((uint64_t)x14 * x15) + ((0x2 * ((uint64_t)x16 * x16)) + ((uint64_t)x15 * x14))) + (((uint64_t)x8 * x15) + ((0x2 * ((uint64_t)x10 * x16)) + (((uint64_t)x12 * x14) + (((uint64_t)x14 * x12) + ((0x2 * ((uint64_t)x16 * x10)) + ((uint64_t)x15 * x8))))))));
+ { uint64_t x21 = ((((uint64_t)x2 * x10) + (((uint64_t)x4 * x8) + (((uint64_t)x6 * x6) + (((uint64_t)x8 * x4) + ((uint64_t)x10 * x2))))) + ((((uint64_t)x12 * x15) + (((uint64_t)x14 * x16) + (((uint64_t)x16 * x14) + ((uint64_t)x15 * x12)))) + (((uint64_t)x6 * x15) + (((uint64_t)x8 * x16) + (((uint64_t)x10 * x14) + (((uint64_t)x12 * x12) + (((uint64_t)x14 * x10) + (((uint64_t)x16 * x8) + ((uint64_t)x15 * x6)))))))));
+ { uint64_t x22 = ((((uint64_t)x2 * x8) + ((0x2 * ((uint64_t)x4 * x6)) + ((0x2 * ((uint64_t)x6 * x4)) + ((uint64_t)x8 * x2)))) + (((0x2 * ((uint64_t)x10 * x15)) + ((0x2 * ((uint64_t)x12 * x16)) + (((uint64_t)x14 * x14) + ((0x2 * ((uint64_t)x16 * x12)) + (0x2 * ((uint64_t)x15 * x10)))))) + ((0x2 * ((uint64_t)x4 * x15)) + ((0x2 * ((uint64_t)x6 * x16)) + (((uint64_t)x8 * x14) + ((0x2 * ((uint64_t)x10 * x12)) + ((0x2 * ((uint64_t)x12 * x10)) + (((uint64_t)x14 * x8) + ((0x2 * ((uint64_t)x16 * x6)) + (0x2 * ((uint64_t)x15 * x4)))))))))));
+ { uint64_t x23 = ((((uint64_t)x2 * x6) + ((0x2 * ((uint64_t)x4 * x4)) + ((uint64_t)x6 * x2))) + (((uint64_t)x8 * x15) + ((0x2 * ((uint64_t)x10 * x16)) + (((uint64_t)x12 * x14) + (((uint64_t)x14 * x12) + ((0x2 * ((uint64_t)x16 * x10)) + ((uint64_t)x15 * x8)))))));
+ { uint64_t x24 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (((uint64_t)x6 * x15) + (((uint64_t)x8 * x16) + (((uint64_t)x10 * x14) + (((uint64_t)x12 * x12) + (((uint64_t)x14 * x10) + (((uint64_t)x16 * x8) + ((uint64_t)x15 * x6))))))));
+ { uint64_t x25 = (((uint64_t)x2 * x2) + ((0x2 * ((uint64_t)x4 * x15)) + ((0x2 * ((uint64_t)x6 * x16)) + (((uint64_t)x8 * x14) + ((0x2 * ((uint64_t)x10 * x12)) + ((0x2 * ((uint64_t)x12 * x10)) + (((uint64_t)x14 * x8) + ((0x2 * ((uint64_t)x16 * x6)) + (0x2 * ((uint64_t)x15 * x4))))))))));
+ { uint32_t x26 = (uint32_t) (x23 >> 0x15);
+ { uint32_t x27 = ((uint32_t)x23 & 0x1fffff);
+ { ℤ x28 = (x17 >>ℤ 0x15);
+ { uint32_t x29 = (x17 & 0x1fffff);
+ { ℤ x30 = ((0x200000 *ℤ x28) +ℤ x29);
+ { ℤ x31 = (x30 >>ℤ 0x15);
+ { uint32_t x32 = (x30 & 0x1fffff);
+ { ℤ x33 = ((x26 + x22) +ℤ x31);
+ { uint64_t x34 = (x33 >> 0x16);
+ { uint32_t x35 = (x33 & 0x3fffff);
+ { ℤ x36 = (x25 +ℤ x31);
+ { uint64_t x37 = (x36 >> 0x16);
+ { uint32_t x38 = (x36 & 0x3fffff);
+ { uint64_t x39 = (x34 + x21);
+ { uint32_t x40 = (uint32_t) (x39 >> 0x15);
+ { uint32_t x41 = ((uint32_t)x39 & 0x1fffff);
+ { uint64_t x42 = (x37 + x24);
+ { uint32_t x43 = (uint32_t) (x42 >> 0x15);
+ { uint32_t x44 = ((uint32_t)x42 & 0x1fffff);
+ { uint64_t x45 = (x40 + x20);
+ { uint32_t x46 = (uint32_t) (x45 >> 0x15);
+ { uint32_t x47 = ((uint32_t)x45 & 0x1fffff);
+ { uint32_t x48 = (x43 + x27);
+ { uint32_t x49 = (x48 >> 0x15);
+ { uint32_t x50 = (x48 & 0x1fffff);
+ { uint64_t x51 = (x46 + x19);
+ { uint32_t x52 = (uint32_t) (x51 >> 0x16);
+ { uint32_t x53 = ((uint32_t)x51 & 0x3fffff);
+ { uint64_t x54 = (x52 + x18);
+ { uint32_t x55 = (uint32_t) (x54 >> 0x15);
+ { uint32_t x56 = ((uint32_t)x54 & 0x1fffff);
+ { uint32_t x57 = (x55 + x32);
+ { uint32_t x58 = (x57 >> 0x15);
+ { uint32_t x59 = (x57 & 0x1fffff);
+ { uint32_t x60 = ((0x200000 * x58) + x59);
+ { uint32_t x61 = (x60 >> 0x15);
+ { uint32_t x62 = (x60 & 0x1fffff);
+ { uint32_t x63 = ((x49 + x35) + x61);
+ { uint32_t x64 = (x63 >> 0x16);
+ { uint32_t x65 = (x63 & 0x3fffff);
+ { uint32_t x66 = (x38 + x61);
+ { uint32_t x67 = (x66 >> 0x16);
+ { uint32_t x68 = (x66 & 0x3fffff);
+ out[0] = x68;
+ out[1] = (x67 + x44);
+ out[2] = x50;
+ out[3] = x65;
+ out[4] = (x64 + x41);
+ out[5] = x47;
+ out[6] = x53;
+ out[7] = x56;
+ out[8] = x62;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e192m2e64m1_9limbs/fesub.c b/src/Specific/solinas32_2e192m2e64m1_9limbs/fesub.c
new file mode 100644
index 000000000..3adcdaf1e
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1_9limbs/fesub.c
@@ -0,0 +1,30 @@
+static void fesub(uint32_t out[9], const uint32_t in1[9], const uint32_t in2[9]) {
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x34 = in2[8];
+ { const uint32_t x35 = in2[7];
+ { const uint32_t x33 = in2[6];
+ { const uint32_t x31 = in2[5];
+ { const uint32_t x29 = in2[4];
+ { const uint32_t x27 = in2[3];
+ { const uint32_t x25 = in2[2];
+ { const uint32_t x23 = in2[1];
+ { const uint32_t x21 = in2[0];
+ out[0] = ((0x7ffffe + x5) - x21);
+ out[1] = ((0x3ffffe + x7) - x23);
+ out[2] = ((0x3ffffe + x9) - x25);
+ out[3] = ((0x7ffffc + x11) - x27);
+ out[4] = ((0x3ffffe + x13) - x29);
+ out[5] = ((0x3ffffe + x15) - x31);
+ out[6] = ((0x7ffffe + x17) - x33);
+ out[7] = ((0x3ffffe + x19) - x35);
+ out[8] = ((0x3ffffe + x18) - x34);
+ }}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e192m2e64m1_9limbs/freeze.c b/src/Specific/solinas32_2e192m2e64m1_9limbs/freeze.c
new file mode 100644
index 000000000..99c0c9266
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1_9limbs/freeze.c
@@ -0,0 +1,49 @@
+static void freeze(uint32_t out[9], const uint32_t in1[9]) {
+ { const uint32_t x15 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x18, uint8_t x19 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x3fffff);
+ { uint32_t x21, uint8_t x22 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x19, Return x4, 0x1fffff);
+ { uint32_t x24, uint8_t x25 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x22, Return x6, 0x1fffff);
+ { uint32_t x27, uint8_t x28 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x25, Return x8, 0x3ffffe);
+ { uint32_t x30, uint8_t x31 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x28, Return x10, 0x1fffff);
+ { uint32_t x33, uint8_t x34 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x31, Return x12, 0x1fffff);
+ { uint32_t x36, uint8_t x37 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x34, Return x14, 0x3fffff);
+ { uint32_t x39, uint8_t x40 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x37, Return x16, 0x1fffff);
+ { uint32_t x42, uint8_t x43 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x40, Return x15, 0x1fffff);
+ { uint32_t x44 = cmovznz32(x43, 0x0, 0xffffffff);
+ { uint32_t x45 = (x44 & 0x3fffff);
+ { uint32_t x47, uint8_t x48 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x18, Return x45);
+ { uint32_t x49 = (x44 & 0x1fffff);
+ { uint32_t x51, uint8_t x52 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x48, Return x21, Return x49);
+ { uint32_t x53 = (x44 & 0x1fffff);
+ { uint32_t x55, uint8_t x56 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x52, Return x24, Return x53);
+ { uint32_t x57 = (x44 & 0x3ffffe);
+ { uint32_t x59, uint8_t x60 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x56, Return x27, Return x57);
+ { uint32_t x61 = (x44 & 0x1fffff);
+ { uint32_t x63, uint8_t x64 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x60, Return x30, Return x61);
+ { uint32_t x65 = (x44 & 0x1fffff);
+ { uint32_t x67, uint8_t x68 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x64, Return x33, Return x65);
+ { uint32_t x69 = (x44 & 0x3fffff);
+ { uint32_t x71, uint8_t x72 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x68, Return x36, Return x69);
+ { uint32_t x73 = (x44 & 0x1fffff);
+ { uint32_t x75, uint8_t x76 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x72, Return x39, Return x73);
+ { uint32_t x77 = (x44 & 0x1fffff);
+ { uint32_t x79, uint8_t _ = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x76, Return x42, Return x77);
+ out[0] = x47;
+ out[1] = x51;
+ out[2] = x55;
+ out[3] = x59;
+ out[4] = x63;
+ out[5] = x67;
+ out[6] = x71;
+ out[7] = x75;
+ out[8] = x79;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e224m2e96p1_10limbs/feadd.c b/src/Specific/solinas32_2e224m2e96p1_10limbs/feadd.c
new file mode 100644
index 000000000..57dd4e1af
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1_10limbs/feadd.c
@@ -0,0 +1,33 @@
+static void feadd(uint32_t out[10], const uint32_t in1[10], const uint32_t in2[10]) {
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x38 = in2[9];
+ { const uint32_t x39 = in2[8];
+ { const uint32_t x37 = in2[7];
+ { const uint32_t x35 = in2[6];
+ { const uint32_t x33 = in2[5];
+ { const uint32_t x31 = in2[4];
+ { const uint32_t x29 = in2[3];
+ { const uint32_t x27 = in2[2];
+ { const uint32_t x25 = in2[1];
+ { const uint32_t x23 = in2[0];
+ out[0] = (x5 + x23);
+ out[1] = (x7 + x25);
+ out[2] = (x9 + x27);
+ out[3] = (x11 + x29);
+ out[4] = (x13 + x31);
+ out[5] = (x15 + x33);
+ out[6] = (x17 + x35);
+ out[7] = (x19 + x37);
+ out[8] = (x21 + x39);
+ out[9] = (x20 + x38);
+ }}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e224m2e96p1_10limbs/freeze.c b/src/Specific/solinas32_2e224m2e96p1_10limbs/freeze.c
new file mode 100644
index 000000000..3330e06cc
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1_10limbs/freeze.c
@@ -0,0 +1,51 @@
+static void freeze(uint32_t out[10], const uint32_t in1[10]) {
+ { const uint32_t x17 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x20, ℤ x21 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (0x0, Return x2, 0x1);
+ { uint32_t x23, ℤ x24 = Op (Syntax.SubWithGetBorrow 22 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x21, Return x4, 0x0);
+ { uint32_t x26, ℤ x27 = Op (Syntax.SubWithGetBorrow 23 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x24, Return x6, 0x0);
+ { uint32_t x29, ℤ x30 = Op (Syntax.SubWithGetBorrow 22 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x27, Return x8, 0x0);
+ { uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 22 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x30, Return x10, 0x3fffc0);
+ { uint32_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x33, Return x12, 0x7fffff);
+ { uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x36, Return x14, 0x3fffff);
+ { uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x16, 0x7fffff);
+ { uint32_t x44, uint8_t x45 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x42, Return x18, 0x3fffff);
+ { uint32_t x47, uint8_t x48 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x45, Return x17, 0x3fffff);
+ { uint32_t x49 = cmovznz32(x48, 0x0, 0xffffffff);
+ { uint8_t x50 = ((uint8_t)x49 & 0x1);
+ { uint32_t x52, uint8_t x53 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x20, Return x50);
+ { uint32_t x55, uint8_t x56 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x53, Return x23, 0x0);
+ { uint32_t x58, uint8_t x59 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x56, Return x26, 0x0);
+ { uint32_t x61, uint8_t x62 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x59, Return x29, 0x0);
+ { uint32_t x63 = (x49 & 0x3fffc0);
+ { uint32_t x65, uint8_t x66 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x62, Return x32, Return x63);
+ { uint32_t x67 = (x49 & 0x7fffff);
+ { uint32_t x69, uint8_t x70 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x66, Return x35, Return x67);
+ { uint32_t x71 = (x49 & 0x3fffff);
+ { uint32_t x73, uint8_t x74 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x70, Return x38, Return x71);
+ { uint32_t x75 = (x49 & 0x7fffff);
+ { uint32_t x77, uint8_t x78 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x74, Return x41, Return x75);
+ { uint32_t x79 = (x49 & 0x3fffff);
+ { uint32_t x81, uint8_t x82 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x78, Return x44, Return x79);
+ { uint32_t x83 = (x49 & 0x3fffff);
+ { uint32_t x85, uint8_t _ = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x82, Return x47, Return x83);
+ out[0] = x52;
+ out[1] = x55;
+ out[2] = x58;
+ out[3] = x61;
+ out[4] = x65;
+ out[5] = x69;
+ out[6] = x73;
+ out[7] = x77;
+ out[8] = x81;
+ out[9] = x85;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e224m2e96p1_10limbs/freezeDisplay.log b/src/Specific/solinas32_2e224m2e96p1_10limbs/freezeDisplay.log
index 1d62ef4b7..006a5223d 100644
--- a/src/Specific/solinas32_2e224m2e96p1_10limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e224m2e96p1_10limbs/freezeDisplay.log
@@ -6,7 +6,7 @@ Interp-η
uint32_t x23, ℤ x24 = Op (Syntax.SubWithGetBorrow 22 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x21, Return x4, 0x0);
uint32_t x26, ℤ x27 = Op (Syntax.SubWithGetBorrow 23 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x24, Return x6, 0x0);
uint32_t x29, ℤ x30 = Op (Syntax.SubWithGetBorrow 22 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x27, Return x8, 0x0);
- uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 22 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x30, Return x10, Const 4194240);
+ uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 22 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x30, Return x10, 0x3fffc0);
uint32_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x33, Return x12, 0x7fffff);
uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x36, Return x14, 0x3fffff);
uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x16, 0x7fffff);
@@ -18,7 +18,7 @@ Interp-η
uint32_t x55, uint8_t x56 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x53, Return x23, 0x0);
uint32_t x58, uint8_t x59 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x56, Return x26, 0x0);
uint32_t x61, uint8_t x62 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x59, Return x29, 0x0);
- uint32_t x63 = (x49 & Const 4194240);
+ uint32_t x63 = (x49 & 0x3fffc0);
uint32_t x65, uint8_t x66 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x62, Return x32, Return x63);
uint32_t x67 = (x49 & 0x7fffff);
uint32_t x69, uint8_t x70 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x66, Return x35, Return x67);
diff --git a/src/Specific/solinas32_2e224m2e96p1_11limbs/feadd.c b/src/Specific/solinas32_2e224m2e96p1_11limbs/feadd.c
new file mode 100644
index 000000000..1763e8727
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1_11limbs/feadd.c
@@ -0,0 +1,36 @@
+static void feadd(uint32_t out[11], const uint32_t in1[11], const uint32_t in2[11]) {
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x42 = in2[10];
+ { const uint32_t x43 = in2[9];
+ { const uint32_t x41 = in2[8];
+ { const uint32_t x39 = in2[7];
+ { const uint32_t x37 = in2[6];
+ { const uint32_t x35 = in2[5];
+ { const uint32_t x33 = in2[4];
+ { const uint32_t x31 = in2[3];
+ { const uint32_t x29 = in2[2];
+ { const uint32_t x27 = in2[1];
+ { const uint32_t x25 = in2[0];
+ out[0] = (x5 + x25);
+ out[1] = (x7 + x27);
+ out[2] = (x9 + x29);
+ out[3] = (x11 + x31);
+ out[4] = (x13 + x33);
+ out[5] = (x15 + x35);
+ out[6] = (x17 + x37);
+ out[7] = (x19 + x39);
+ out[8] = (x21 + x41);
+ out[9] = (x23 + x43);
+ out[10] = (x22 + x42);
+ }}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e224m2e96p1_11limbs/freeze.c b/src/Specific/solinas32_2e224m2e96p1_11limbs/freeze.c
new file mode 100644
index 000000000..ec20f4e1d
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1_11limbs/freeze.c
@@ -0,0 +1,56 @@
+static void freeze(uint32_t out[11], const uint32_t in1[11]) {
+ { const uint32_t x19 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x22, ℤ x23 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (0x0, Return x2, 0x1);
+ { uint32_t x25, ℤ x26 = Op (Syntax.SubWithGetBorrow 20 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x23, Return x4, 0x0);
+ { uint32_t x28, ℤ x29 = Op (Syntax.SubWithGetBorrow 21 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x26, Return x6, 0x0);
+ { uint32_t x31, ℤ x32 = Op (Syntax.SubWithGetBorrow 20 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x29, Return x8, 0x0);
+ { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 20 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x32, Return x10, 0xfc000);
+ { uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x12, 0x1fffff);
+ { uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x14, 0xfffff);
+ { uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x16, 0xfffff);
+ { uint32_t x46, uint8_t x47 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x44, Return x18, 0x1fffff);
+ { uint32_t x49, uint8_t x50 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x47, Return x20, 0xfffff);
+ { uint32_t x52, uint8_t x53 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x50, Return x19, 0xfffff);
+ { uint32_t x54 = cmovznz32(x53, 0x0, 0xffffffff);
+ { uint8_t x55 = ((uint8_t)x54 & 0x1);
+ { uint32_t x57, uint8_t x58 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x22, Return x55);
+ { uint32_t x60, uint8_t x61 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x58, Return x25, 0x0);
+ { uint32_t x63, uint8_t x64 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x61, Return x28, 0x0);
+ { uint32_t x66, uint8_t x67 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x64, Return x31, 0x0);
+ { uint32_t x68 = (x54 & 0xfc000);
+ { uint32_t x70, uint8_t x71 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x67, Return x34, Return x68);
+ { uint32_t x72 = (x54 & 0x1fffff);
+ { uint32_t x74, uint8_t x75 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x71, Return x37, Return x72);
+ { uint32_t x76 = (x54 & 0xfffff);
+ { uint32_t x78, uint8_t x79 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x75, Return x40, Return x76);
+ { uint32_t x80 = (x54 & 0xfffff);
+ { uint32_t x82, uint8_t x83 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x79, Return x43, Return x80);
+ { uint32_t x84 = (x54 & 0x1fffff);
+ { uint32_t x86, uint8_t x87 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x46, Return x84);
+ { uint32_t x88 = (x54 & 0xfffff);
+ { uint32_t x90, uint8_t x91 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x87, Return x49, Return x88);
+ { uint32_t x92 = (x54 & 0xfffff);
+ { uint32_t x94, uint8_t _ = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x91, Return x52, Return x92);
+ out[0] = x57;
+ out[1] = x60;
+ out[2] = x63;
+ out[3] = x66;
+ out[4] = x70;
+ out[5] = x74;
+ out[6] = x78;
+ out[7] = x82;
+ out[8] = x86;
+ out[9] = x90;
+ out[10] = x94;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e224m2e96p1_11limbs/freezeDisplay.log b/src/Specific/solinas32_2e224m2e96p1_11limbs/freezeDisplay.log
index 0a24b9869..28c024f17 100644
--- a/src/Specific/solinas32_2e224m2e96p1_11limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e224m2e96p1_11limbs/freezeDisplay.log
@@ -6,7 +6,7 @@ Interp-η
uint32_t x25, ℤ x26 = Op (Syntax.SubWithGetBorrow 20 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x23, Return x4, 0x0);
uint32_t x28, ℤ x29 = Op (Syntax.SubWithGetBorrow 21 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x26, Return x6, 0x0);
uint32_t x31, ℤ x32 = Op (Syntax.SubWithGetBorrow 20 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x29, Return x8, 0x0);
- uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 20 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x32, Return x10, Const 1032192);
+ uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 20 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x32, Return x10, 0xfc000);
uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x12, 0x1fffff);
uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x14, 0xfffff);
uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x16, 0xfffff);
@@ -19,7 +19,7 @@ Interp-η
uint32_t x60, uint8_t x61 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x58, Return x25, 0x0);
uint32_t x63, uint8_t x64 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x61, Return x28, 0x0);
uint32_t x66, uint8_t x67 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x64, Return x31, 0x0);
- uint32_t x68 = (x54 & Const 1032192);
+ uint32_t x68 = (x54 & 0xfc000);
uint32_t x70, uint8_t x71 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x67, Return x34, Return x68);
uint32_t x72 = (x54 & 0x1fffff);
uint32_t x74, uint8_t x75 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x71, Return x37, Return x72);
diff --git a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/feadd.c b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/feadd.c
new file mode 100644
index 000000000..1763e8727
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/feadd.c
@@ -0,0 +1,36 @@
+static void feadd(uint32_t out[11], const uint32_t in1[11], const uint32_t in2[11]) {
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x42 = in2[10];
+ { const uint32_t x43 = in2[9];
+ { const uint32_t x41 = in2[8];
+ { const uint32_t x39 = in2[7];
+ { const uint32_t x37 = in2[6];
+ { const uint32_t x35 = in2[5];
+ { const uint32_t x33 = in2[4];
+ { const uint32_t x31 = in2[3];
+ { const uint32_t x29 = in2[2];
+ { const uint32_t x27 = in2[1];
+ { const uint32_t x25 = in2[0];
+ out[0] = (x5 + x25);
+ out[1] = (x7 + x27);
+ out[2] = (x9 + x29);
+ out[3] = (x11 + x31);
+ out[4] = (x13 + x33);
+ out[5] = (x15 + x35);
+ out[6] = (x17 + x37);
+ out[7] = (x19 + x39);
+ out[8] = (x21 + x41);
+ out[9] = (x23 + x43);
+ out[10] = (x22 + x42);
+ }}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/freeze.c b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/freeze.c
new file mode 100644
index 000000000..2e70bcf61
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/freeze.c
@@ -0,0 +1,56 @@
+static void freeze(uint32_t out[11], const uint32_t in1[11]) {
+ { const uint32_t x19 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x22, uint8_t x23 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xffffff);
+ { uint32_t x25, uint8_t x26 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x23, Return x4, 0x7fffff);
+ { uint32_t x28, uint8_t x29 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x26, Return x6, 0x7fffff);
+ { uint32_t x31, uint8_t x32 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x29, Return x8, 0xffffff);
+ { uint32_t x34, ℤ x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x32, Return x10, 0x3);
+ { uint32_t x37, ℤ x38 = Op (Syntax.SubWithGetBorrow 23 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x35, Return x12, 0x0);
+ { uint32_t x40, ℤ x41 = Op (Syntax.SubWithGetBorrow 23 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x38, Return x14, 0x0);
+ { uint32_t x43, ℤ x44 = Op (Syntax.SubWithGetBorrow 24 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x41, Return x16, 0x0);
+ { uint32_t x46, ℤ x47 = Op (Syntax.SubWithGetBorrow 23 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x44, Return x18, 0x20);
+ { uint32_t x49, uint8_t x50 = Op (Syntax.SubWithGetBorrow 23 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x47, Return x20, 0x7fc000);
+ { uint32_t x52, uint8_t x53 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x50, Return x19, 0x7fffff);
+ { uint32_t x54 = cmovznz32(x53, 0x0, 0xffffffff);
+ { uint32_t x55 = (x54 & 0xffffff);
+ { uint32_t x57, uint8_t x58 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x22, Return x55);
+ { uint32_t x59 = (x54 & 0x7fffff);
+ { uint32_t x61, uint8_t x62 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x58, Return x25, Return x59);
+ { uint32_t x63 = (x54 & 0x7fffff);
+ { uint32_t x65, uint8_t x66 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x62, Return x28, Return x63);
+ { uint32_t x67 = (x54 & 0xffffff);
+ { uint32_t x69, uint8_t x70 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x66, Return x31, Return x67);
+ { uint8_t x71 = ((uint8_t)x54 & 0x3);
+ { uint32_t x73, uint8_t x74 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x70, Return x34, Return x71);
+ { uint32_t x76, uint8_t x77 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x74, Return x37, 0x0);
+ { uint32_t x79, uint8_t x80 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x40, 0x0);
+ { uint32_t x82, uint8_t x83 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x43, 0x0);
+ { uint8_t x84 = ((uint8_t)x54 & 0x20);
+ { uint32_t x86, uint8_t x87 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x46, Return x84);
+ { uint32_t x88 = (x54 & 0x7fc000);
+ { uint32_t x90, uint8_t x91 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x87, Return x49, Return x88);
+ { uint32_t x92 = (x54 & 0x7fffff);
+ { uint32_t x94, uint8_t _ = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x91, Return x52, Return x92);
+ out[0] = x57;
+ out[1] = x61;
+ out[2] = x65;
+ out[3] = x69;
+ out[4] = x73;
+ out[5] = x76;
+ out[6] = x79;
+ out[7] = x82;
+ out[8] = x86;
+ out[9] = x90;
+ out[10] = x94;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/freezeDisplay.log b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/freezeDisplay.log
index 2ee7320e4..95abce37b 100644
--- a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1_11limbs/freezeDisplay.log
@@ -11,7 +11,7 @@ Interp-η
uint32_t x40, ℤ x41 = Op (Syntax.SubWithGetBorrow 23 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x38, Return x14, 0x0);
uint32_t x43, ℤ x44 = Op (Syntax.SubWithGetBorrow 24 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x41, Return x16, 0x0);
uint32_t x46, ℤ x47 = Op (Syntax.SubWithGetBorrow 23 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x44, Return x18, 0x20);
- uint32_t x49, uint8_t x50 = Op (Syntax.SubWithGetBorrow 23 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x47, Return x20, Const 8372224);
+ uint32_t x49, uint8_t x50 = Op (Syntax.SubWithGetBorrow 23 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x47, Return x20, 0x7fc000);
uint32_t x52, uint8_t x53 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x50, Return x19, 0x7fffff);
uint32_t x54 = cmovznz32(x53, 0x0, 0xffffffff);
uint32_t x55 = (x54 & 0xffffff);
@@ -29,7 +29,7 @@ Interp-η
uint32_t x82, uint8_t x83 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x43, 0x0);
uint8_t x84 = ((uint8_t)x54 & 0x20);
uint32_t x86, uint8_t x87 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x46, Return x84);
- uint32_t x88 = (x54 & Const 8372224);
+ uint32_t x88 = (x54 & 0x7fc000);
uint32_t x90, uint8_t x91 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x87, Return x49, Return x88);
uint32_t x92 = (x54 & 0x7fffff);
uint32_t x94, uint8_t _ = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x91, Return x52, Return x92);
diff --git a/src/Specific/solinas32_2e256m2e32m977_13limbs/feadd.c b/src/Specific/solinas32_2e256m2e32m977_13limbs/feadd.c
new file mode 100644
index 000000000..dbbe1da57
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977_13limbs/feadd.c
@@ -0,0 +1,42 @@
+static void feadd(uint32_t out[13], const uint32_t in1[13], const uint32_t in2[13]) {
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x50 = in2[12];
+ { const uint32_t x51 = in2[11];
+ { const uint32_t x49 = in2[10];
+ { const uint32_t x47 = in2[9];
+ { const uint32_t x45 = in2[8];
+ { const uint32_t x43 = in2[7];
+ { const uint32_t x41 = in2[6];
+ { const uint32_t x39 = in2[5];
+ { const uint32_t x37 = in2[4];
+ { const uint32_t x35 = in2[3];
+ { const uint32_t x33 = in2[2];
+ { const uint32_t x31 = in2[1];
+ { const uint32_t x29 = in2[0];
+ out[0] = (x5 + x29);
+ out[1] = (x7 + x31);
+ out[2] = (x9 + x33);
+ out[3] = (x11 + x35);
+ out[4] = (x13 + x37);
+ out[5] = (x15 + x39);
+ out[6] = (x17 + x41);
+ out[7] = (x19 + x43);
+ out[8] = (x21 + x45);
+ out[9] = (x23 + x47);
+ out[10] = (x25 + x49);
+ out[11] = (x27 + x51);
+ out[12] = (x26 + x50);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e256m2e32m977_13limbs/femul.c b/src/Specific/solinas32_2e256m2e32m977_13limbs/femul.c
new file mode 100644
index 000000000..787323fb8
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977_13limbs/femul.c
@@ -0,0 +1,110 @@
+static void femul(uint32_t out[13], const uint32_t in1[13], const uint32_t in2[13]) {
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x50 = in2[12];
+ { const uint32_t x51 = in2[11];
+ { const uint32_t x49 = in2[10];
+ { const uint32_t x47 = in2[9];
+ { const uint32_t x45 = in2[8];
+ { const uint32_t x43 = in2[7];
+ { const uint32_t x41 = in2[6];
+ { const uint32_t x39 = in2[5];
+ { const uint32_t x37 = in2[4];
+ { const uint32_t x35 = in2[3];
+ { const uint32_t x33 = in2[2];
+ { const uint32_t x31 = in2[1];
+ { const uint32_t x29 = in2[0];
+ { uint64_t x52 = ((((uint64_t)x5 * x50) + (((uint64_t)x7 * x51) + (((uint64_t)x9 * x49) + ((0x2 * ((uint64_t)x11 * x47)) + (((uint64_t)x13 * x45) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + (((uint64_t)x19 * x39) + (((uint64_t)x21 * x37) + ((0x2 * ((uint64_t)x23 * x35)) + (((uint64_t)x25 * x33) + (((uint64_t)x27 * x31) + ((uint64_t)x26 * x29))))))))))))) + (0x1000 * (0x2 * ((uint64_t)x26 * x50))));
+ { uint64_t x53 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + ((0x2 * ((uint64_t)x9 * x47)) + ((0x2 * ((uint64_t)x11 * x45)) + (((uint64_t)x13 * x43) + ((0x2 * ((uint64_t)x15 * x41)) + ((0x2 * ((uint64_t)x17 * x39)) + (((uint64_t)x19 * x37) + ((0x2 * ((uint64_t)x21 * x35)) + ((0x2 * ((uint64_t)x23 * x33)) + (((uint64_t)x25 * x31) + ((uint64_t)x27 * x29)))))))))))) + ((0x3d1 * (0x2 * ((uint64_t)x26 * x50))) + (0x1000 * ((0x2 * ((uint64_t)x27 * x50)) + (0x2 * ((uint64_t)x26 * x51))))));
+ { uint64_t x54 = ((((uint64_t)x5 * x49) + ((0x2 * ((uint64_t)x7 * x47)) + ((0x2 * ((uint64_t)x9 * x45)) + ((0x2 * ((uint64_t)x11 * x43)) + ((0x2 * ((uint64_t)x13 * x41)) + ((0x2 * ((uint64_t)x15 * x39)) + ((0x2 * ((uint64_t)x17 * x37)) + ((0x2 * ((uint64_t)x19 * x35)) + ((0x2 * ((uint64_t)x21 * x33)) + ((0x2 * ((uint64_t)x23 * x31)) + ((uint64_t)x25 * x29))))))))))) + ((0x3d1 * ((0x2 * ((uint64_t)x27 * x50)) + (0x2 * ((uint64_t)x26 * x51)))) + (0x2000 * (((uint64_t)x25 * x50) + (((uint64_t)x27 * x51) + ((uint64_t)x26 * x49))))));
+ { uint64_t x55 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + ((0x2 * ((uint64_t)x11 * x41)) + (((uint64_t)x13 * x39) + (((uint64_t)x15 * x37) + ((0x2 * ((uint64_t)x17 * x35)) + (((uint64_t)x19 * x33) + (((uint64_t)x21 * x31) + ((uint64_t)x23 * x29)))))))))) + ((0x3d1 * (((uint64_t)x25 * x50) + (((uint64_t)x27 * x51) + ((uint64_t)x26 * x49)))) + (0x1000 * ((0x2 * ((uint64_t)x23 * x50)) + (((uint64_t)x25 * x51) + (((uint64_t)x27 * x49) + (0x2 * ((uint64_t)x26 * x47))))))));
+ { uint64_t x56 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + ((0x2 * ((uint64_t)x11 * x39)) + (((uint64_t)x13 * x37) + ((0x2 * ((uint64_t)x15 * x35)) + ((0x2 * ((uint64_t)x17 * x33)) + (((uint64_t)x19 * x31) + ((uint64_t)x21 * x29))))))))) + ((0x3d1 * ((0x2 * ((uint64_t)x23 * x50)) + (((uint64_t)x25 * x51) + (((uint64_t)x27 * x49) + (0x2 * ((uint64_t)x26 * x47)))))) + (0x1000 * ((0x2 * ((uint64_t)x21 * x50)) + ((0x2 * ((uint64_t)x23 * x51)) + (((uint64_t)x25 * x49) + ((0x2 * ((uint64_t)x27 * x47)) + (0x2 * ((uint64_t)x26 * x45)))))))));
+ { uint64_t x57 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((0x2 * ((uint64_t)x11 * x37)) + ((0x2 * ((uint64_t)x13 * x35)) + ((0x2 * ((uint64_t)x15 * x33)) + ((0x2 * ((uint64_t)x17 * x31)) + ((uint64_t)x19 * x29)))))))) + ((0x3d1 * ((0x2 * ((uint64_t)x21 * x50)) + ((0x2 * ((uint64_t)x23 * x51)) + (((uint64_t)x25 * x49) + ((0x2 * ((uint64_t)x27 * x47)) + (0x2 * ((uint64_t)x26 * x45))))))) + (0x2000 * (((uint64_t)x19 * x50) + (((uint64_t)x21 * x51) + (((uint64_t)x23 * x49) + (((uint64_t)x25 * x47) + (((uint64_t)x27 * x45) + ((uint64_t)x26 * x43)))))))));
+ { uint64_t x58 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + ((0x2 * ((uint64_t)x11 * x35)) + (((uint64_t)x13 * x33) + (((uint64_t)x15 * x31) + ((uint64_t)x17 * x29))))))) + ((0x3d1 * (((uint64_t)x19 * x50) + (((uint64_t)x21 * x51) + (((uint64_t)x23 * x49) + (((uint64_t)x25 * x47) + (((uint64_t)x27 * x45) + ((uint64_t)x26 * x43))))))) + (0x1000 * ((0x2 * ((uint64_t)x17 * x50)) + (((uint64_t)x19 * x51) + (((uint64_t)x21 * x49) + ((0x2 * ((uint64_t)x23 * x47)) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + (0x2 * ((uint64_t)x26 * x41)))))))))));
+ { uint64_t x59 = ((((uint64_t)x5 * x39) + (((uint64_t)x7 * x37) + ((0x2 * ((uint64_t)x9 * x35)) + ((0x2 * ((uint64_t)x11 * x33)) + (((uint64_t)x13 * x31) + ((uint64_t)x15 * x29)))))) + ((0x3d1 * ((0x2 * ((uint64_t)x17 * x50)) + (((uint64_t)x19 * x51) + (((uint64_t)x21 * x49) + ((0x2 * ((uint64_t)x23 * x47)) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + (0x2 * ((uint64_t)x26 * x41))))))))) + (0x1000 * ((0x2 * ((uint64_t)x15 * x50)) + ((0x2 * ((uint64_t)x17 * x51)) + (((uint64_t)x19 * x49) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + (((uint64_t)x25 * x43) + ((0x2 * ((uint64_t)x27 * x41)) + (0x2 * ((uint64_t)x26 * x39))))))))))));
+ { uint64_t x60 = ((((uint64_t)x5 * x37) + ((0x2 * ((uint64_t)x7 * x35)) + ((0x2 * ((uint64_t)x9 * x33)) + ((0x2 * ((uint64_t)x11 * x31)) + ((uint64_t)x13 * x29))))) + ((0x3d1 * ((0x2 * ((uint64_t)x15 * x50)) + ((0x2 * ((uint64_t)x17 * x51)) + (((uint64_t)x19 * x49) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + (((uint64_t)x25 * x43) + ((0x2 * ((uint64_t)x27 * x41)) + (0x2 * ((uint64_t)x26 * x39)))))))))) + (0x2000 * (((uint64_t)x13 * x50) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + ((uint64_t)x26 * x37))))))))))));
+ { uint64_t x61 = ((((uint64_t)x5 * x35) + (((uint64_t)x7 * x33) + (((uint64_t)x9 * x31) + ((uint64_t)x11 * x29)))) + ((0x3d1 * (((uint64_t)x13 * x50) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + ((uint64_t)x26 * x37)))))))))) + (0x1000 * ((0x2 * ((uint64_t)x11 * x50)) + (((uint64_t)x13 * x51) + (((uint64_t)x15 * x49) + ((0x2 * ((uint64_t)x17 * x47)) + (((uint64_t)x19 * x45) + (((uint64_t)x21 * x43) + ((0x2 * ((uint64_t)x23 * x41)) + (((uint64_t)x25 * x39) + (((uint64_t)x27 * x37) + (0x2 * ((uint64_t)x26 * x35))))))))))))));
+ { uint64_t x62 = ((((uint64_t)x5 * x33) + (((uint64_t)x7 * x31) + ((uint64_t)x9 * x29))) + ((0x3d1 * ((0x2 * ((uint64_t)x11 * x50)) + (((uint64_t)x13 * x51) + (((uint64_t)x15 * x49) + ((0x2 * ((uint64_t)x17 * x47)) + (((uint64_t)x19 * x45) + (((uint64_t)x21 * x43) + ((0x2 * ((uint64_t)x23 * x41)) + (((uint64_t)x25 * x39) + (((uint64_t)x27 * x37) + (0x2 * ((uint64_t)x26 * x35)))))))))))) + (0x1000 * ((0x2 * ((uint64_t)x9 * x50)) + ((0x2 * ((uint64_t)x11 * x51)) + (((uint64_t)x13 * x49) + ((0x2 * ((uint64_t)x15 * x47)) + ((0x2 * ((uint64_t)x17 * x45)) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + ((0x2 * ((uint64_t)x23 * x39)) + (((uint64_t)x25 * x37) + ((0x2 * ((uint64_t)x27 * x35)) + (0x2 * ((uint64_t)x26 * x33)))))))))))))));
+ { uint64_t x63 = ((((uint64_t)x5 * x31) + ((uint64_t)x7 * x29)) + ((0x3d1 * ((0x2 * ((uint64_t)x9 * x50)) + ((0x2 * ((uint64_t)x11 * x51)) + (((uint64_t)x13 * x49) + ((0x2 * ((uint64_t)x15 * x47)) + ((0x2 * ((uint64_t)x17 * x45)) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + ((0x2 * ((uint64_t)x23 * x39)) + (((uint64_t)x25 * x37) + ((0x2 * ((uint64_t)x27 * x35)) + (0x2 * ((uint64_t)x26 * x33))))))))))))) + (0x1000 * ((0x2 * ((uint64_t)x7 * x50)) + ((0x2 * ((uint64_t)x9 * x51)) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + ((0x2 * ((uint64_t)x21 * x39)) + ((0x2 * ((uint64_t)x23 * x37)) + ((0x2 * ((uint64_t)x25 * x35)) + ((0x2 * ((uint64_t)x27 * x33)) + (0x2 * ((uint64_t)x26 * x31))))))))))))))));
+ { uint64_t x64 = (((uint64_t)x5 * x29) + (0x3d1 * ((0x2 * ((uint64_t)x7 * x50)) + ((0x2 * ((uint64_t)x9 * x51)) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + ((0x2 * ((uint64_t)x21 * x39)) + ((0x2 * ((uint64_t)x23 * x37)) + ((0x2 * ((uint64_t)x25 * x35)) + ((0x2 * ((uint64_t)x27 * x33)) + (0x2 * ((uint64_t)x26 * x31)))))))))))))));
+ { uint64_t x65 = (x64 >> 0x14);
+ { uint32_t x66 = ((uint32_t)x64 & 0xfffff);
+ { uint64_t x67 = (x52 >> 0x13);
+ { uint32_t x68 = ((uint32_t)x52 & 0x7ffff);
+ { uint64_t x69 = ((0x80000 * x67) + x68);
+ { uint64_t x70 = (x69 >> 0x13);
+ { uint32_t x71 = ((uint32_t)x69 & 0x7ffff);
+ { uint64_t x72 = ((x65 + x63) + (0x1000 * x70));
+ { uint64_t x73 = (x72 >> 0x14);
+ { uint32_t x74 = ((uint32_t)x72 & 0xfffff);
+ { uint64_t x75 = (x66 + (0x3d1 * x70));
+ { uint32_t x76 = (uint32_t) (x75 >> 0x14);
+ { uint32_t x77 = ((uint32_t)x75 & 0xfffff);
+ { uint64_t x78 = (x73 + x62);
+ { uint64_t x79 = (x78 >> 0x14);
+ { uint32_t x80 = ((uint32_t)x78 & 0xfffff);
+ { uint64_t x81 = (x79 + x61);
+ { uint64_t x82 = (x81 >> 0x13);
+ { uint32_t x83 = ((uint32_t)x81 & 0x7ffff);
+ { uint64_t x84 = (x82 + x60);
+ { uint64_t x85 = (x84 >> 0x14);
+ { uint32_t x86 = ((uint32_t)x84 & 0xfffff);
+ { uint64_t x87 = (x85 + x59);
+ { uint64_t x88 = (x87 >> 0x14);
+ { uint32_t x89 = ((uint32_t)x87 & 0xfffff);
+ { uint64_t x90 = (x88 + x58);
+ { uint64_t x91 = (x90 >> 0x13);
+ { uint32_t x92 = ((uint32_t)x90 & 0x7ffff);
+ { uint64_t x93 = (x91 + x57);
+ { uint64_t x94 = (x93 >> 0x14);
+ { uint32_t x95 = ((uint32_t)x93 & 0xfffff);
+ { uint64_t x96 = (x94 + x56);
+ { uint64_t x97 = (x96 >> 0x14);
+ { uint32_t x98 = ((uint32_t)x96 & 0xfffff);
+ { uint64_t x99 = (x97 + x55);
+ { uint64_t x100 = (x99 >> 0x13);
+ { uint32_t x101 = ((uint32_t)x99 & 0x7ffff);
+ { uint64_t x102 = (x100 + x54);
+ { uint64_t x103 = (x102 >> 0x14);
+ { uint32_t x104 = ((uint32_t)x102 & 0xfffff);
+ { uint64_t x105 = (x103 + x53);
+ { uint64_t x106 = (x105 >> 0x14);
+ { uint32_t x107 = ((uint32_t)x105 & 0xfffff);
+ { uint64_t x108 = (x106 + x71);
+ { uint32_t x109 = (uint32_t) (x108 >> 0x13);
+ { uint32_t x110 = ((uint32_t)x108 & 0x7ffff);
+ { uint64_t x111 = (((uint64_t)0x80000 * x109) + x110);
+ { uint32_t x112 = (uint32_t) (x111 >> 0x13);
+ { uint32_t x113 = ((uint32_t)x111 & 0x7ffff);
+ { uint32_t x114 = ((x76 + x74) + (0x1000 * x112));
+ { uint32_t x115 = (x114 >> 0x14);
+ { uint32_t x116 = (x114 & 0xfffff);
+ { uint32_t x117 = (x77 + (0x3d1 * x112));
+ { uint32_t x118 = (x117 >> 0x14);
+ { uint32_t x119 = (x117 & 0xfffff);
+ out[0] = x119;
+ out[1] = (x118 + x116);
+ out[2] = (x115 + x80);
+ out[3] = x83;
+ out[4] = x86;
+ out[5] = x89;
+ out[6] = x92;
+ out[7] = x95;
+ out[8] = x98;
+ out[9] = x101;
+ out[10] = x104;
+ out[11] = x107;
+ out[12] = x113;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e256m2e32m977_13limbs/fesquare.c b/src/Specific/solinas32_2e256m2e32m977_13limbs/fesquare.c
new file mode 100644
index 000000000..3952acd13
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977_13limbs/fesquare.c
@@ -0,0 +1,97 @@
+static void fesquare(uint32_t out[13], const uint32_t in1[13]) {
+ { const uint32_t x23 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint64_t x25 = ((((uint64_t)x2 * x23) + (((uint64_t)x4 * x24) + (((uint64_t)x6 * x22) + ((0x2 * ((uint64_t)x8 * x20)) + (((uint64_t)x10 * x18) + (((uint64_t)x12 * x16) + ((0x2 * ((uint64_t)x14 * x14)) + (((uint64_t)x16 * x12) + (((uint64_t)x18 * x10) + ((0x2 * ((uint64_t)x20 * x8)) + (((uint64_t)x22 * x6) + (((uint64_t)x24 * x4) + ((uint64_t)x23 * x2))))))))))))) + (0x1000 * (0x2 * ((uint64_t)x23 * x23))));
+ { uint64_t x26 = ((((uint64_t)x2 * x24) + (((uint64_t)x4 * x22) + ((0x2 * ((uint64_t)x6 * x20)) + ((0x2 * ((uint64_t)x8 * x18)) + (((uint64_t)x10 * x16) + ((0x2 * ((uint64_t)x12 * x14)) + ((0x2 * ((uint64_t)x14 * x12)) + (((uint64_t)x16 * x10) + ((0x2 * ((uint64_t)x18 * x8)) + ((0x2 * ((uint64_t)x20 * x6)) + (((uint64_t)x22 * x4) + ((uint64_t)x24 * x2)))))))))))) + ((0x3d1 * (0x2 * ((uint64_t)x23 * x23))) + (0x1000 * ((0x2 * ((uint64_t)x24 * x23)) + (0x2 * ((uint64_t)x23 * x24))))));
+ { uint64_t x27 = ((((uint64_t)x2 * x22) + ((0x2 * ((uint64_t)x4 * x20)) + ((0x2 * ((uint64_t)x6 * x18)) + ((0x2 * ((uint64_t)x8 * x16)) + ((0x2 * ((uint64_t)x10 * x14)) + ((0x2 * ((uint64_t)x12 * x12)) + ((0x2 * ((uint64_t)x14 * x10)) + ((0x2 * ((uint64_t)x16 * x8)) + ((0x2 * ((uint64_t)x18 * x6)) + ((0x2 * ((uint64_t)x20 * x4)) + ((uint64_t)x22 * x2))))))))))) + ((0x3d1 * ((0x2 * ((uint64_t)x24 * x23)) + (0x2 * ((uint64_t)x23 * x24)))) + (0x2000 * (((uint64_t)x22 * x23) + (((uint64_t)x24 * x24) + ((uint64_t)x23 * x22))))));
+ { uint64_t x28 = ((((uint64_t)x2 * x20) + (((uint64_t)x4 * x18) + (((uint64_t)x6 * x16) + ((0x2 * ((uint64_t)x8 * x14)) + (((uint64_t)x10 * x12) + (((uint64_t)x12 * x10) + ((0x2 * ((uint64_t)x14 * x8)) + (((uint64_t)x16 * x6) + (((uint64_t)x18 * x4) + ((uint64_t)x20 * x2)))))))))) + ((0x3d1 * (((uint64_t)x22 * x23) + (((uint64_t)x24 * x24) + ((uint64_t)x23 * x22)))) + (0x1000 * ((0x2 * ((uint64_t)x20 * x23)) + (((uint64_t)x22 * x24) + (((uint64_t)x24 * x22) + (0x2 * ((uint64_t)x23 * x20))))))));
+ { uint64_t x29 = ((((uint64_t)x2 * x18) + (((uint64_t)x4 * x16) + ((0x2 * ((uint64_t)x6 * x14)) + ((0x2 * ((uint64_t)x8 * x12)) + (((uint64_t)x10 * x10) + ((0x2 * ((uint64_t)x12 * x8)) + ((0x2 * ((uint64_t)x14 * x6)) + (((uint64_t)x16 * x4) + ((uint64_t)x18 * x2))))))))) + ((0x3d1 * ((0x2 * ((uint64_t)x20 * x23)) + (((uint64_t)x22 * x24) + (((uint64_t)x24 * x22) + (0x2 * ((uint64_t)x23 * x20)))))) + (0x1000 * ((0x2 * ((uint64_t)x18 * x23)) + ((0x2 * ((uint64_t)x20 * x24)) + (((uint64_t)x22 * x22) + ((0x2 * ((uint64_t)x24 * x20)) + (0x2 * ((uint64_t)x23 * x18)))))))));
+ { uint64_t x30 = ((((uint64_t)x2 * x16) + ((0x2 * ((uint64_t)x4 * x14)) + ((0x2 * ((uint64_t)x6 * x12)) + ((0x2 * ((uint64_t)x8 * x10)) + ((0x2 * ((uint64_t)x10 * x8)) + ((0x2 * ((uint64_t)x12 * x6)) + ((0x2 * ((uint64_t)x14 * x4)) + ((uint64_t)x16 * x2)))))))) + ((0x3d1 * ((0x2 * ((uint64_t)x18 * x23)) + ((0x2 * ((uint64_t)x20 * x24)) + (((uint64_t)x22 * x22) + ((0x2 * ((uint64_t)x24 * x20)) + (0x2 * ((uint64_t)x23 * x18))))))) + (0x2000 * (((uint64_t)x16 * x23) + (((uint64_t)x18 * x24) + (((uint64_t)x20 * x22) + (((uint64_t)x22 * x20) + (((uint64_t)x24 * x18) + ((uint64_t)x23 * x16)))))))));
+ { uint64_t x31 = ((((uint64_t)x2 * x14) + (((uint64_t)x4 * x12) + (((uint64_t)x6 * x10) + ((0x2 * ((uint64_t)x8 * x8)) + (((uint64_t)x10 * x6) + (((uint64_t)x12 * x4) + ((uint64_t)x14 * x2))))))) + ((0x3d1 * (((uint64_t)x16 * x23) + (((uint64_t)x18 * x24) + (((uint64_t)x20 * x22) + (((uint64_t)x22 * x20) + (((uint64_t)x24 * x18) + ((uint64_t)x23 * x16))))))) + (0x1000 * ((0x2 * ((uint64_t)x14 * x23)) + (((uint64_t)x16 * x24) + (((uint64_t)x18 * x22) + ((0x2 * ((uint64_t)x20 * x20)) + (((uint64_t)x22 * x18) + (((uint64_t)x24 * x16) + (0x2 * ((uint64_t)x23 * x14)))))))))));
+ { uint64_t x32 = ((((uint64_t)x2 * x12) + (((uint64_t)x4 * x10) + ((0x2 * ((uint64_t)x6 * x8)) + ((0x2 * ((uint64_t)x8 * x6)) + (((uint64_t)x10 * x4) + ((uint64_t)x12 * x2)))))) + ((0x3d1 * ((0x2 * ((uint64_t)x14 * x23)) + (((uint64_t)x16 * x24) + (((uint64_t)x18 * x22) + ((0x2 * ((uint64_t)x20 * x20)) + (((uint64_t)x22 * x18) + (((uint64_t)x24 * x16) + (0x2 * ((uint64_t)x23 * x14))))))))) + (0x1000 * ((0x2 * ((uint64_t)x12 * x23)) + ((0x2 * ((uint64_t)x14 * x24)) + (((uint64_t)x16 * x22) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + (((uint64_t)x22 * x16) + ((0x2 * ((uint64_t)x24 * x14)) + (0x2 * ((uint64_t)x23 * x12))))))))))));
+ { uint64_t x33 = ((((uint64_t)x2 * x10) + ((0x2 * ((uint64_t)x4 * x8)) + ((0x2 * ((uint64_t)x6 * x6)) + ((0x2 * ((uint64_t)x8 * x4)) + ((uint64_t)x10 * x2))))) + ((0x3d1 * ((0x2 * ((uint64_t)x12 * x23)) + ((0x2 * ((uint64_t)x14 * x24)) + (((uint64_t)x16 * x22) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + (((uint64_t)x22 * x16) + ((0x2 * ((uint64_t)x24 * x14)) + (0x2 * ((uint64_t)x23 * x12)))))))))) + (0x2000 * (((uint64_t)x10 * x23) + (((uint64_t)x12 * x24) + (((uint64_t)x14 * x22) + (((uint64_t)x16 * x20) + (((uint64_t)x18 * x18) + (((uint64_t)x20 * x16) + (((uint64_t)x22 * x14) + (((uint64_t)x24 * x12) + ((uint64_t)x23 * x10))))))))))));
+ { uint64_t x34 = ((((uint64_t)x2 * x8) + (((uint64_t)x4 * x6) + (((uint64_t)x6 * x4) + ((uint64_t)x8 * x2)))) + ((0x3d1 * (((uint64_t)x10 * x23) + (((uint64_t)x12 * x24) + (((uint64_t)x14 * x22) + (((uint64_t)x16 * x20) + (((uint64_t)x18 * x18) + (((uint64_t)x20 * x16) + (((uint64_t)x22 * x14) + (((uint64_t)x24 * x12) + ((uint64_t)x23 * x10)))))))))) + (0x1000 * ((0x2 * ((uint64_t)x8 * x23)) + (((uint64_t)x10 * x24) + (((uint64_t)x12 * x22) + ((0x2 * ((uint64_t)x14 * x20)) + (((uint64_t)x16 * x18) + (((uint64_t)x18 * x16) + ((0x2 * ((uint64_t)x20 * x14)) + (((uint64_t)x22 * x12) + (((uint64_t)x24 * x10) + (0x2 * ((uint64_t)x23 * x8))))))))))))));
+ { uint64_t x35 = ((((uint64_t)x2 * x6) + (((uint64_t)x4 * x4) + ((uint64_t)x6 * x2))) + ((0x3d1 * ((0x2 * ((uint64_t)x8 * x23)) + (((uint64_t)x10 * x24) + (((uint64_t)x12 * x22) + ((0x2 * ((uint64_t)x14 * x20)) + (((uint64_t)x16 * x18) + (((uint64_t)x18 * x16) + ((0x2 * ((uint64_t)x20 * x14)) + (((uint64_t)x22 * x12) + (((uint64_t)x24 * x10) + (0x2 * ((uint64_t)x23 * x8)))))))))))) + (0x1000 * ((0x2 * ((uint64_t)x6 * x23)) + ((0x2 * ((uint64_t)x8 * x24)) + (((uint64_t)x10 * x22) + ((0x2 * ((uint64_t)x12 * x20)) + ((0x2 * ((uint64_t)x14 * x18)) + (((uint64_t)x16 * x16) + ((0x2 * ((uint64_t)x18 * x14)) + ((0x2 * ((uint64_t)x20 * x12)) + (((uint64_t)x22 * x10) + ((0x2 * ((uint64_t)x24 * x8)) + (0x2 * ((uint64_t)x23 * x6)))))))))))))));
+ { uint64_t x36 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + ((0x3d1 * ((0x2 * ((uint64_t)x6 * x23)) + ((0x2 * ((uint64_t)x8 * x24)) + (((uint64_t)x10 * x22) + ((0x2 * ((uint64_t)x12 * x20)) + ((0x2 * ((uint64_t)x14 * x18)) + (((uint64_t)x16 * x16) + ((0x2 * ((uint64_t)x18 * x14)) + ((0x2 * ((uint64_t)x20 * x12)) + (((uint64_t)x22 * x10) + ((0x2 * ((uint64_t)x24 * x8)) + (0x2 * ((uint64_t)x23 * x6))))))))))))) + (0x1000 * ((0x2 * ((uint64_t)x4 * x23)) + ((0x2 * ((uint64_t)x6 * x24)) + ((0x2 * ((uint64_t)x8 * x22)) + ((0x2 * ((uint64_t)x10 * x20)) + ((0x2 * ((uint64_t)x12 * x18)) + ((0x2 * ((uint64_t)x14 * x16)) + ((0x2 * ((uint64_t)x16 * x14)) + ((0x2 * ((uint64_t)x18 * x12)) + ((0x2 * ((uint64_t)x20 * x10)) + ((0x2 * ((uint64_t)x22 * x8)) + ((0x2 * ((uint64_t)x24 * x6)) + (0x2 * ((uint64_t)x23 * x4))))))))))))))));
+ { uint64_t x37 = (((uint64_t)x2 * x2) + (0x3d1 * ((0x2 * ((uint64_t)x4 * x23)) + ((0x2 * ((uint64_t)x6 * x24)) + ((0x2 * ((uint64_t)x8 * x22)) + ((0x2 * ((uint64_t)x10 * x20)) + ((0x2 * ((uint64_t)x12 * x18)) + ((0x2 * ((uint64_t)x14 * x16)) + ((0x2 * ((uint64_t)x16 * x14)) + ((0x2 * ((uint64_t)x18 * x12)) + ((0x2 * ((uint64_t)x20 * x10)) + ((0x2 * ((uint64_t)x22 * x8)) + ((0x2 * ((uint64_t)x24 * x6)) + (0x2 * ((uint64_t)x23 * x4)))))))))))))));
+ { uint64_t x38 = (x37 >> 0x14);
+ { uint32_t x39 = ((uint32_t)x37 & 0xfffff);
+ { uint64_t x40 = (x25 >> 0x13);
+ { uint32_t x41 = ((uint32_t)x25 & 0x7ffff);
+ { uint64_t x42 = ((0x80000 * x40) + x41);
+ { uint64_t x43 = (x42 >> 0x13);
+ { uint32_t x44 = ((uint32_t)x42 & 0x7ffff);
+ { uint64_t x45 = ((x38 + x36) + (0x1000 * x43));
+ { uint64_t x46 = (x45 >> 0x14);
+ { uint32_t x47 = ((uint32_t)x45 & 0xfffff);
+ { uint64_t x48 = (x39 + (0x3d1 * x43));
+ { uint32_t x49 = (uint32_t) (x48 >> 0x14);
+ { uint32_t x50 = ((uint32_t)x48 & 0xfffff);
+ { uint64_t x51 = (x46 + x35);
+ { uint64_t x52 = (x51 >> 0x14);
+ { uint32_t x53 = ((uint32_t)x51 & 0xfffff);
+ { uint64_t x54 = (x52 + x34);
+ { uint64_t x55 = (x54 >> 0x13);
+ { uint32_t x56 = ((uint32_t)x54 & 0x7ffff);
+ { uint64_t x57 = (x55 + x33);
+ { uint64_t x58 = (x57 >> 0x14);
+ { uint32_t x59 = ((uint32_t)x57 & 0xfffff);
+ { uint64_t x60 = (x58 + x32);
+ { uint64_t x61 = (x60 >> 0x14);
+ { uint32_t x62 = ((uint32_t)x60 & 0xfffff);
+ { uint64_t x63 = (x61 + x31);
+ { uint64_t x64 = (x63 >> 0x13);
+ { uint32_t x65 = ((uint32_t)x63 & 0x7ffff);
+ { uint64_t x66 = (x64 + x30);
+ { uint64_t x67 = (x66 >> 0x14);
+ { uint32_t x68 = ((uint32_t)x66 & 0xfffff);
+ { uint64_t x69 = (x67 + x29);
+ { uint64_t x70 = (x69 >> 0x14);
+ { uint32_t x71 = ((uint32_t)x69 & 0xfffff);
+ { uint64_t x72 = (x70 + x28);
+ { uint64_t x73 = (x72 >> 0x13);
+ { uint32_t x74 = ((uint32_t)x72 & 0x7ffff);
+ { uint64_t x75 = (x73 + x27);
+ { uint64_t x76 = (x75 >> 0x14);
+ { uint32_t x77 = ((uint32_t)x75 & 0xfffff);
+ { uint64_t x78 = (x76 + x26);
+ { uint64_t x79 = (x78 >> 0x14);
+ { uint32_t x80 = ((uint32_t)x78 & 0xfffff);
+ { uint64_t x81 = (x79 + x44);
+ { uint32_t x82 = (uint32_t) (x81 >> 0x13);
+ { uint32_t x83 = ((uint32_t)x81 & 0x7ffff);
+ { uint64_t x84 = (((uint64_t)0x80000 * x82) + x83);
+ { uint32_t x85 = (uint32_t) (x84 >> 0x13);
+ { uint32_t x86 = ((uint32_t)x84 & 0x7ffff);
+ { uint32_t x87 = ((x49 + x47) + (0x1000 * x85));
+ { uint32_t x88 = (x87 >> 0x14);
+ { uint32_t x89 = (x87 & 0xfffff);
+ { uint32_t x90 = (x50 + (0x3d1 * x85));
+ { uint32_t x91 = (x90 >> 0x14);
+ { uint32_t x92 = (x90 & 0xfffff);
+ out[0] = x92;
+ out[1] = (x91 + x89);
+ out[2] = (x88 + x53);
+ out[3] = x56;
+ out[4] = x59;
+ out[5] = x62;
+ out[6] = x65;
+ out[7] = x68;
+ out[8] = x71;
+ out[9] = x74;
+ out[10] = x77;
+ out[11] = x80;
+ out[12] = x86;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e256m2e32m977_13limbs/fesub.c b/src/Specific/solinas32_2e256m2e32m977_13limbs/fesub.c
new file mode 100644
index 000000000..f6db2564b
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977_13limbs/fesub.c
@@ -0,0 +1,42 @@
+static void fesub(uint32_t out[13], const uint32_t in1[13], const uint32_t in2[13]) {
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x50 = in2[12];
+ { const uint32_t x51 = in2[11];
+ { const uint32_t x49 = in2[10];
+ { const uint32_t x47 = in2[9];
+ { const uint32_t x45 = in2[8];
+ { const uint32_t x43 = in2[7];
+ { const uint32_t x41 = in2[6];
+ { const uint32_t x39 = in2[5];
+ { const uint32_t x37 = in2[4];
+ { const uint32_t x35 = in2[3];
+ { const uint32_t x33 = in2[2];
+ { const uint32_t x31 = in2[1];
+ { const uint32_t x29 = in2[0];
+ out[0] = ((0x1ff85e + x5) - x29);
+ out[1] = ((0x1fdffe + x7) - x31);
+ out[2] = ((0x1ffffe + x9) - x33);
+ out[3] = ((0xffffe + x11) - x35);
+ out[4] = ((0x1ffffe + x13) - x37);
+ out[5] = ((0x1ffffe + x15) - x39);
+ out[6] = ((0xffffe + x17) - x41);
+ out[7] = ((0x1ffffe + x19) - x43);
+ out[8] = ((0x1ffffe + x21) - x45);
+ out[9] = ((0xffffe + x23) - x47);
+ out[10] = ((0x1ffffe + x25) - x49);
+ out[11] = ((0x1ffffe + x27) - x51);
+ out[12] = ((0xffffe + x26) - x50);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e256m2e32m977_13limbs/fesubDisplay.log b/src/Specific/solinas32_2e256m2e32m977_13limbs/fesubDisplay.log
index 4b4557fcb..f94c553fe 100644
--- a/src/Specific/solinas32_2e256m2e32m977_13limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e256m2e32m977_13limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x26, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x50, x51, x49, x47, x45, x43, x41, x39, x37, x35, x33, x31, x29))%core,
- (((0xffffe + x26) - x50), ((0x1ffffe + x27) - x51), ((0x1ffffe + x25) - x49), ((0xffffe + x23) - x47), ((0x1ffffe + x21) - x45), ((0x1ffffe + x19) - x43), ((0xffffe + x17) - x41), ((0x1ffffe + x15) - x39), ((0x1ffffe + x13) - x37), ((0xffffe + x11) - x35), ((0x1ffffe + x9) - x33), ((Const 2088958 + x7) - x31), ((Const 2095198 + x5) - x29)))
+ (((0xffffe + x26) - x50), ((0x1ffffe + x27) - x51), ((0x1ffffe + x25) - x49), ((0xffffe + x23) - x47), ((0x1ffffe + x21) - x45), ((0x1ffffe + x19) - x43), ((0xffffe + x17) - x41), ((0x1ffffe + x15) - x39), ((0x1ffffe + x13) - x37), ((0xffffe + x11) - x35), ((0x1ffffe + x9) - x33), ((0x1fdffe + x7) - x31), ((0x1ff85e + x5) - x29)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e256m2e32m977_13limbs/freeze.c b/src/Specific/solinas32_2e256m2e32m977_13limbs/freeze.c
new file mode 100644
index 000000000..3e0ce48d1
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977_13limbs/freeze.c
@@ -0,0 +1,69 @@
+static void freeze(uint32_t out[13], const uint32_t in1[13]) {
+ { const uint32_t x23 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x26, uint8_t x27 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xffc2f);
+ { uint32_t x29, uint8_t x30 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x27, Return x4, 0xfefff);
+ { uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x30, Return x6, 0xfffff);
+ { uint32_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x33, Return x8, 0x7ffff);
+ { uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x36, Return x10, 0xfffff);
+ { uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x12, 0xfffff);
+ { uint32_t x44, uint8_t x45 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x42, Return x14, 0x7ffff);
+ { uint32_t x47, uint8_t x48 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x45, Return x16, 0xfffff);
+ { uint32_t x50, uint8_t x51 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x48, Return x18, 0xfffff);
+ { uint32_t x53, uint8_t x54 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x51, Return x20, 0x7ffff);
+ { uint32_t x56, uint8_t x57 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x54, Return x22, 0xfffff);
+ { uint32_t x59, uint8_t x60 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x57, Return x24, 0xfffff);
+ { uint32_t x62, uint8_t x63 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x60, Return x23, 0x7ffff);
+ { uint32_t x64 = cmovznz32(x63, 0x0, 0xffffffff);
+ { uint32_t x65 = (x64 & 0xffc2f);
+ { uint32_t x67, uint8_t x68 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x26, Return x65);
+ { uint32_t x69 = (x64 & 0xfefff);
+ { uint32_t x71, uint8_t x72 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x68, Return x29, Return x69);
+ { uint32_t x73 = (x64 & 0xfffff);
+ { uint32_t x75, uint8_t x76 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x72, Return x32, Return x73);
+ { uint32_t x77 = (x64 & 0x7ffff);
+ { uint32_t x79, uint8_t x80 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x76, Return x35, Return x77);
+ { uint32_t x81 = (x64 & 0xfffff);
+ { uint32_t x83, uint8_t x84 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x38, Return x81);
+ { uint32_t x85 = (x64 & 0xfffff);
+ { uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x84, Return x41, Return x85);
+ { uint32_t x89 = (x64 & 0x7ffff);
+ { uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x44, Return x89);
+ { uint32_t x93 = (x64 & 0xfffff);
+ { uint32_t x95, uint8_t x96 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x92, Return x47, Return x93);
+ { uint32_t x97 = (x64 & 0xfffff);
+ { uint32_t x99, uint8_t x100 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x96, Return x50, Return x97);
+ { uint32_t x101 = (x64 & 0x7ffff);
+ { uint32_t x103, uint8_t x104 = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x100, Return x53, Return x101);
+ { uint32_t x105 = (x64 & 0xfffff);
+ { uint32_t x107, uint8_t x108 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x104, Return x56, Return x105);
+ { uint32_t x109 = (x64 & 0xfffff);
+ { uint32_t x111, uint8_t x112 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x108, Return x59, Return x109);
+ { uint32_t x113 = (x64 & 0x7ffff);
+ { uint32_t x115, uint8_t _ = Op (Syntax.AddWithGetCarry 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x112, Return x62, Return x113);
+ out[0] = x67;
+ out[1] = x71;
+ out[2] = x75;
+ out[3] = x79;
+ out[4] = x83;
+ out[5] = x87;
+ out[6] = x91;
+ out[7] = x95;
+ out[8] = x99;
+ out[9] = x103;
+ out[10] = x107;
+ out[11] = x111;
+ out[12] = x115;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e256m2e32m977_13limbs/freezeDisplay.log b/src/Specific/solinas32_2e256m2e32m977_13limbs/freezeDisplay.log
index 297f966b5..efc340afa 100644
--- a/src/Specific/solinas32_2e256m2e32m977_13limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e256m2e32m977_13limbs/freezeDisplay.log
@@ -2,8 +2,8 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x23, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x26, uint8_t x27 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 1047599);
- uint32_t x29, uint8_t x30 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x27, Return x4, Const 1044479);
+ uint32_t x26, uint8_t x27 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xffc2f);
+ uint32_t x29, uint8_t x30 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x27, Return x4, 0xfefff);
uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x30, Return x6, 0xfffff);
uint32_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x33, Return x8, 0x7ffff);
uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x36, Return x10, 0xfffff);
@@ -16,9 +16,9 @@ Interp-η
uint32_t x59, uint8_t x60 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x57, Return x24, 0xfffff);
uint32_t x62, uint8_t x63 = Op (Syntax.SubWithGetBorrow 19 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x60, Return x23, 0x7ffff);
uint32_t x64 = cmovznz32(x63, 0x0, 0xffffffff);
- uint32_t x65 = (x64 & Const 1047599);
+ uint32_t x65 = (x64 & 0xffc2f);
uint32_t x67, uint8_t x68 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x26, Return x65);
- uint32_t x69 = (x64 & Const 1044479);
+ uint32_t x69 = (x64 & 0xfefff);
uint32_t x71, uint8_t x72 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x68, Return x29, Return x69);
uint32_t x73 = (x64 & 0xfffff);
uint32_t x75, uint8_t x76 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x72, Return x32, Return x73);
diff --git a/src/Specific/solinas32_2e322m2e161m1_12limbs/femul.c b/src/Specific/solinas32_2e322m2e161m1_12limbs/femul.c
new file mode 100644
index 000000000..842945eca
--- /dev/null
+++ b/src/Specific/solinas32_2e322m2e161m1_12limbs/femul.c
@@ -0,0 +1,113 @@
+static void femul(uint32_t out[12], const uint32_t in1[12], const uint32_t in2[12]) {
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x46 = in2[11];
+ { const uint32_t x47 = in2[10];
+ { const uint32_t x45 = in2[9];
+ { const uint32_t x43 = in2[8];
+ { const uint32_t x41 = in2[7];
+ { const uint32_t x39 = in2[6];
+ { const uint32_t x37 = in2[5];
+ { const uint32_t x35 = in2[4];
+ { const uint32_t x33 = in2[3];
+ { const uint32_t x31 = in2[2];
+ { const uint32_t x29 = in2[1];
+ { const uint32_t x27 = in2[0];
+ { uint64_t x48 = ((0x2 * ((uint64_t)(x15 + x24) * (x37 + x46))) - (0x2 * ((uint64_t)x15 * x37)));
+ { uint64_t x49 = (((0x2 * ((uint64_t)(x13 + x25) * (x37 + x46))) + (0x2 * ((uint64_t)(x15 + x24) * (x35 + x47)))) - ((0x2 * ((uint64_t)x13 * x37)) + (0x2 * ((uint64_t)x15 * x35))));
+ { uint64_t x50 = (((0x2 * ((uint64_t)(x11 + x23) * (x37 + x46))) + ((0x2 * ((uint64_t)(x13 + x25) * (x35 + x47))) + (0x2 * ((uint64_t)(x15 + x24) * (x33 + x45))))) - ((0x2 * ((uint64_t)x11 * x37)) + ((0x2 * ((uint64_t)x13 * x35)) + (0x2 * ((uint64_t)x15 * x33)))));
+ { uint64_t x51 = (((0x2 * ((uint64_t)(x9 + x21) * (x37 + x46))) + ((0x2 * ((uint64_t)(x11 + x23) * (x35 + x47))) + ((0x2 * ((uint64_t)(x13 + x25) * (x33 + x45))) + (0x2 * ((uint64_t)(x15 + x24) * (x31 + x43)))))) - ((0x2 * ((uint64_t)x9 * x37)) + ((0x2 * ((uint64_t)x11 * x35)) + ((0x2 * ((uint64_t)x13 * x33)) + (0x2 * ((uint64_t)x15 * x31))))));
+ { uint64_t x52 = (((0x2 * ((uint64_t)(x7 + x19) * (x37 + x46))) + ((0x2 * ((uint64_t)(x9 + x21) * (x35 + x47))) + ((0x2 * ((uint64_t)(x11 + x23) * (x33 + x45))) + ((0x2 * ((uint64_t)(x13 + x25) * (x31 + x43))) + (0x2 * ((uint64_t)(x15 + x24) * (x29 + x41))))))) - ((0x2 * ((uint64_t)x7 * x37)) + ((0x2 * ((uint64_t)x9 * x35)) + ((0x2 * ((uint64_t)x11 * x33)) + ((0x2 * ((uint64_t)x13 * x31)) + (0x2 * ((uint64_t)x15 * x29)))))));
+ { uint64_t x53 = ((((uint64_t)(x5 + x17) * (x37 + x46)) + (((uint64_t)(x7 + x19) * (x35 + x47)) + (((uint64_t)(x9 + x21) * (x33 + x45)) + (((uint64_t)(x11 + x23) * (x31 + x43)) + (((uint64_t)(x13 + x25) * (x29 + x41)) + ((uint64_t)(x15 + x24) * (x27 + x39))))))) - (((uint64_t)x5 * x37) + (((uint64_t)x7 * x35) + (((uint64_t)x9 * x33) + (((uint64_t)x11 * x31) + (((uint64_t)x13 * x29) + ((uint64_t)x15 * x27)))))));
+ { uint64_t x54 = ((((uint64_t)(x5 + x17) * (x35 + x47)) + (((uint64_t)(x7 + x19) * (x33 + x45)) + (((uint64_t)(x9 + x21) * (x31 + x43)) + (((uint64_t)(x11 + x23) * (x29 + x41)) + ((uint64_t)(x13 + x25) * (x27 + x39)))))) - (((uint64_t)x5 * x35) + (((uint64_t)x7 * x33) + (((uint64_t)x9 * x31) + (((uint64_t)x11 * x29) + ((uint64_t)x13 * x27))))));
+ { uint64_t x55 = ((((uint64_t)(x5 + x17) * (x33 + x45)) + (((uint64_t)(x7 + x19) * (x31 + x43)) + (((uint64_t)(x9 + x21) * (x29 + x41)) + ((uint64_t)(x11 + x23) * (x27 + x39))))) - (((uint64_t)x5 * x33) + (((uint64_t)x7 * x31) + (((uint64_t)x9 * x29) + ((uint64_t)x11 * x27)))));
+ { uint64_t x56 = ((((uint64_t)(x5 + x17) * (x31 + x43)) + (((uint64_t)(x7 + x19) * (x29 + x41)) + ((uint64_t)(x9 + x21) * (x27 + x39)))) - (((uint64_t)x5 * x31) + (((uint64_t)x7 * x29) + ((uint64_t)x9 * x27))));
+ { uint64_t x57 = ((((uint64_t)(x5 + x17) * (x29 + x41)) + ((uint64_t)(x7 + x19) * (x27 + x39))) - (((uint64_t)x5 * x29) + ((uint64_t)x7 * x27)));
+ { uint64_t x58 = (((uint64_t)(x5 + x17) * (x27 + x39)) - ((uint64_t)x5 * x27));
+ { uint64_t x59 = ((((0x2 * ((uint64_t)x15 * x37)) + (0x2 * ((uint64_t)x24 * x46))) + x54) + x48);
+ { uint64_t x60 = (((((0x2 * ((uint64_t)x13 * x37)) + (0x2 * ((uint64_t)x15 * x35))) + ((0x2 * ((uint64_t)x25 * x46)) + (0x2 * ((uint64_t)x24 * x47)))) + x55) + x49);
+ { uint64_t x61 = (((((0x2 * ((uint64_t)x11 * x37)) + ((0x2 * ((uint64_t)x13 * x35)) + (0x2 * ((uint64_t)x15 * x33)))) + ((0x2 * ((uint64_t)x23 * x46)) + ((0x2 * ((uint64_t)x25 * x47)) + (0x2 * ((uint64_t)x24 * x45))))) + x56) + x50);
+ { uint64_t x62 = (((((0x2 * ((uint64_t)x9 * x37)) + ((0x2 * ((uint64_t)x11 * x35)) + ((0x2 * ((uint64_t)x13 * x33)) + (0x2 * ((uint64_t)x15 * x31))))) + ((0x2 * ((uint64_t)x21 * x46)) + ((0x2 * ((uint64_t)x23 * x47)) + ((0x2 * ((uint64_t)x25 * x45)) + (0x2 * ((uint64_t)x24 * x43)))))) + x57) + x51);
+ { uint64_t x63 = (((((0x2 * ((uint64_t)x7 * x37)) + ((0x2 * ((uint64_t)x9 * x35)) + ((0x2 * ((uint64_t)x11 * x33)) + ((0x2 * ((uint64_t)x13 * x31)) + (0x2 * ((uint64_t)x15 * x29)))))) + ((0x2 * ((uint64_t)x19 * x46)) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + ((0x2 * ((uint64_t)x25 * x43)) + (0x2 * ((uint64_t)x24 * x41))))))) + x58) + x52);
+ { uint64_t x64 = ((((uint64_t)x5 * x37) + (((uint64_t)x7 * x35) + (((uint64_t)x9 * x33) + (((uint64_t)x11 * x31) + (((uint64_t)x13 * x29) + ((uint64_t)x15 * x27)))))) + (((uint64_t)x17 * x46) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + ((uint64_t)x24 * x39)))))));
+ { uint64_t x65 = (((((uint64_t)x5 * x35) + (((uint64_t)x7 * x33) + (((uint64_t)x9 * x31) + (((uint64_t)x11 * x29) + ((uint64_t)x13 * x27))))) + (((uint64_t)x17 * x47) + (((uint64_t)x19 * x45) + (((uint64_t)x21 * x43) + (((uint64_t)x23 * x41) + ((uint64_t)x25 * x39)))))) + x48);
+ { uint64_t x66 = (((((uint64_t)x5 * x33) + (((uint64_t)x7 * x31) + (((uint64_t)x9 * x29) + ((uint64_t)x11 * x27)))) + (((uint64_t)x17 * x45) + (((uint64_t)x19 * x43) + (((uint64_t)x21 * x41) + ((uint64_t)x23 * x39))))) + x49);
+ { uint64_t x67 = (((((uint64_t)x5 * x31) + (((uint64_t)x7 * x29) + ((uint64_t)x9 * x27))) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + ((uint64_t)x21 * x39)))) + x50);
+ { uint64_t x68 = (((((uint64_t)x5 * x29) + ((uint64_t)x7 * x27)) + (((uint64_t)x17 * x41) + ((uint64_t)x19 * x39))) + x51);
+ { uint64_t x69 = ((((uint64_t)x5 * x27) + ((uint64_t)x17 * x39)) + x52);
+ { uint64_t x70 = (x64 >> 0x1a);
+ { uint32_t x71 = ((uint32_t)x64 & 0x3ffffff);
+ { uint64_t x72 = (x53 >> 0x1a);
+ { uint32_t x73 = ((uint32_t)x53 & 0x3ffffff);
+ { uint64_t x74 = ((0x4000000 * x72) + x73);
+ { uint64_t x75 = (x74 >> 0x1a);
+ { uint32_t x76 = ((uint32_t)x74 & 0x3ffffff);
+ { uint64_t x77 = ((x70 + x63) + x75);
+ { uint64_t x78 = (x77 >> 0x1b);
+ { uint32_t x79 = ((uint32_t)x77 & 0x7ffffff);
+ { uint64_t x80 = (x69 + x75);
+ { uint64_t x81 = (x80 >> 0x1b);
+ { uint32_t x82 = ((uint32_t)x80 & 0x7ffffff);
+ { uint64_t x83 = (x78 + x62);
+ { uint64_t x84 = (x83 >> 0x1b);
+ { uint32_t x85 = ((uint32_t)x83 & 0x7ffffff);
+ { uint64_t x86 = (x81 + x68);
+ { uint64_t x87 = (x86 >> 0x1b);
+ { uint32_t x88 = ((uint32_t)x86 & 0x7ffffff);
+ { uint64_t x89 = (x84 + x61);
+ { uint64_t x90 = (x89 >> 0x1b);
+ { uint32_t x91 = ((uint32_t)x89 & 0x7ffffff);
+ { uint64_t x92 = (x87 + x67);
+ { uint64_t x93 = (x92 >> 0x1b);
+ { uint32_t x94 = ((uint32_t)x92 & 0x7ffffff);
+ { uint64_t x95 = (x90 + x60);
+ { uint64_t x96 = (x95 >> 0x1b);
+ { uint32_t x97 = ((uint32_t)x95 & 0x7ffffff);
+ { uint64_t x98 = (x93 + x66);
+ { uint64_t x99 = (x98 >> 0x1b);
+ { uint32_t x100 = ((uint32_t)x98 & 0x7ffffff);
+ { uint64_t x101 = (x96 + x59);
+ { uint64_t x102 = (x101 >> 0x1b);
+ { uint32_t x103 = ((uint32_t)x101 & 0x7ffffff);
+ { uint64_t x104 = (x99 + x65);
+ { uint64_t x105 = (x104 >> 0x1b);
+ { uint32_t x106 = ((uint32_t)x104 & 0x7ffffff);
+ { uint64_t x107 = (x102 + x76);
+ { uint32_t x108 = (uint32_t) (x107 >> 0x1a);
+ { uint32_t x109 = ((uint32_t)x107 & 0x3ffffff);
+ { uint64_t x110 = (x105 + x71);
+ { uint32_t x111 = (uint32_t) (x110 >> 0x1a);
+ { uint32_t x112 = ((uint32_t)x110 & 0x3ffffff);
+ { uint64_t x113 = (((uint64_t)0x4000000 * x108) + x109);
+ { uint32_t x114 = (uint32_t) (x113 >> 0x1a);
+ { uint32_t x115 = ((uint32_t)x113 & 0x3ffffff);
+ { uint32_t x116 = ((x111 + x79) + x114);
+ { uint32_t x117 = (x116 >> 0x1b);
+ { uint32_t x118 = (x116 & 0x7ffffff);
+ { uint32_t x119 = (x82 + x114);
+ { uint32_t x120 = (x119 >> 0x1b);
+ { uint32_t x121 = (x119 & 0x7ffffff);
+ out[0] = x121;
+ out[1] = (x120 + x88);
+ out[2] = x94;
+ out[3] = x100;
+ out[4] = x106;
+ out[5] = x112;
+ out[6] = x118;
+ out[7] = (x117 + x85);
+ out[8] = x91;
+ out[9] = x97;
+ out[10] = x103;
+ out[11] = x115;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e322m2e161m1_12limbs/femulDisplay.log b/src/Specific/solinas32_2e322m2e161m1_12limbs/femulDisplay.log
new file mode 100644
index 000000000..19439716d
--- /dev/null
+++ b/src/Specific/solinas32_2e322m2e161m1_12limbs/femulDisplay.log
@@ -0,0 +1,81 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x24, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x46, x47, x45, x43, x41, x39, x37, x35, x33, x31, x29, x27))%core,
+ uint64_t x48 = ((0x2 * ((uint64_t)(x15 + x24) * (x37 + x46))) - (0x2 * ((uint64_t)x15 * x37)));
+ uint64_t x49 = (((0x2 * ((uint64_t)(x13 + x25) * (x37 + x46))) + (0x2 * ((uint64_t)(x15 + x24) * (x35 + x47)))) - ((0x2 * ((uint64_t)x13 * x37)) + (0x2 * ((uint64_t)x15 * x35))));
+ uint64_t x50 = (((0x2 * ((uint64_t)(x11 + x23) * (x37 + x46))) + ((0x2 * ((uint64_t)(x13 + x25) * (x35 + x47))) + (0x2 * ((uint64_t)(x15 + x24) * (x33 + x45))))) - ((0x2 * ((uint64_t)x11 * x37)) + ((0x2 * ((uint64_t)x13 * x35)) + (0x2 * ((uint64_t)x15 * x33)))));
+ uint64_t x51 = (((0x2 * ((uint64_t)(x9 + x21) * (x37 + x46))) + ((0x2 * ((uint64_t)(x11 + x23) * (x35 + x47))) + ((0x2 * ((uint64_t)(x13 + x25) * (x33 + x45))) + (0x2 * ((uint64_t)(x15 + x24) * (x31 + x43)))))) - ((0x2 * ((uint64_t)x9 * x37)) + ((0x2 * ((uint64_t)x11 * x35)) + ((0x2 * ((uint64_t)x13 * x33)) + (0x2 * ((uint64_t)x15 * x31))))));
+ uint64_t x52 = (((0x2 * ((uint64_t)(x7 + x19) * (x37 + x46))) + ((0x2 * ((uint64_t)(x9 + x21) * (x35 + x47))) + ((0x2 * ((uint64_t)(x11 + x23) * (x33 + x45))) + ((0x2 * ((uint64_t)(x13 + x25) * (x31 + x43))) + (0x2 * ((uint64_t)(x15 + x24) * (x29 + x41))))))) - ((0x2 * ((uint64_t)x7 * x37)) + ((0x2 * ((uint64_t)x9 * x35)) + ((0x2 * ((uint64_t)x11 * x33)) + ((0x2 * ((uint64_t)x13 * x31)) + (0x2 * ((uint64_t)x15 * x29)))))));
+ uint64_t x53 = ((((uint64_t)(x5 + x17) * (x37 + x46)) + (((uint64_t)(x7 + x19) * (x35 + x47)) + (((uint64_t)(x9 + x21) * (x33 + x45)) + (((uint64_t)(x11 + x23) * (x31 + x43)) + (((uint64_t)(x13 + x25) * (x29 + x41)) + ((uint64_t)(x15 + x24) * (x27 + x39))))))) - (((uint64_t)x5 * x37) + (((uint64_t)x7 * x35) + (((uint64_t)x9 * x33) + (((uint64_t)x11 * x31) + (((uint64_t)x13 * x29) + ((uint64_t)x15 * x27)))))));
+ uint64_t x54 = ((((uint64_t)(x5 + x17) * (x35 + x47)) + (((uint64_t)(x7 + x19) * (x33 + x45)) + (((uint64_t)(x9 + x21) * (x31 + x43)) + (((uint64_t)(x11 + x23) * (x29 + x41)) + ((uint64_t)(x13 + x25) * (x27 + x39)))))) - (((uint64_t)x5 * x35) + (((uint64_t)x7 * x33) + (((uint64_t)x9 * x31) + (((uint64_t)x11 * x29) + ((uint64_t)x13 * x27))))));
+ uint64_t x55 = ((((uint64_t)(x5 + x17) * (x33 + x45)) + (((uint64_t)(x7 + x19) * (x31 + x43)) + (((uint64_t)(x9 + x21) * (x29 + x41)) + ((uint64_t)(x11 + x23) * (x27 + x39))))) - (((uint64_t)x5 * x33) + (((uint64_t)x7 * x31) + (((uint64_t)x9 * x29) + ((uint64_t)x11 * x27)))));
+ uint64_t x56 = ((((uint64_t)(x5 + x17) * (x31 + x43)) + (((uint64_t)(x7 + x19) * (x29 + x41)) + ((uint64_t)(x9 + x21) * (x27 + x39)))) - (((uint64_t)x5 * x31) + (((uint64_t)x7 * x29) + ((uint64_t)x9 * x27))));
+ uint64_t x57 = ((((uint64_t)(x5 + x17) * (x29 + x41)) + ((uint64_t)(x7 + x19) * (x27 + x39))) - (((uint64_t)x5 * x29) + ((uint64_t)x7 * x27)));
+ uint64_t x58 = (((uint64_t)(x5 + x17) * (x27 + x39)) - ((uint64_t)x5 * x27));
+ uint64_t x59 = ((((0x2 * ((uint64_t)x15 * x37)) + (0x2 * ((uint64_t)x24 * x46))) + x54) + x48);
+ uint64_t x60 = (((((0x2 * ((uint64_t)x13 * x37)) + (0x2 * ((uint64_t)x15 * x35))) + ((0x2 * ((uint64_t)x25 * x46)) + (0x2 * ((uint64_t)x24 * x47)))) + x55) + x49);
+ uint64_t x61 = (((((0x2 * ((uint64_t)x11 * x37)) + ((0x2 * ((uint64_t)x13 * x35)) + (0x2 * ((uint64_t)x15 * x33)))) + ((0x2 * ((uint64_t)x23 * x46)) + ((0x2 * ((uint64_t)x25 * x47)) + (0x2 * ((uint64_t)x24 * x45))))) + x56) + x50);
+ uint64_t x62 = (((((0x2 * ((uint64_t)x9 * x37)) + ((0x2 * ((uint64_t)x11 * x35)) + ((0x2 * ((uint64_t)x13 * x33)) + (0x2 * ((uint64_t)x15 * x31))))) + ((0x2 * ((uint64_t)x21 * x46)) + ((0x2 * ((uint64_t)x23 * x47)) + ((0x2 * ((uint64_t)x25 * x45)) + (0x2 * ((uint64_t)x24 * x43)))))) + x57) + x51);
+ uint64_t x63 = (((((0x2 * ((uint64_t)x7 * x37)) + ((0x2 * ((uint64_t)x9 * x35)) + ((0x2 * ((uint64_t)x11 * x33)) + ((0x2 * ((uint64_t)x13 * x31)) + (0x2 * ((uint64_t)x15 * x29)))))) + ((0x2 * ((uint64_t)x19 * x46)) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + ((0x2 * ((uint64_t)x25 * x43)) + (0x2 * ((uint64_t)x24 * x41))))))) + x58) + x52);
+ uint64_t x64 = ((((uint64_t)x5 * x37) + (((uint64_t)x7 * x35) + (((uint64_t)x9 * x33) + (((uint64_t)x11 * x31) + (((uint64_t)x13 * x29) + ((uint64_t)x15 * x27)))))) + (((uint64_t)x17 * x46) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + ((uint64_t)x24 * x39)))))));
+ uint64_t x65 = (((((uint64_t)x5 * x35) + (((uint64_t)x7 * x33) + (((uint64_t)x9 * x31) + (((uint64_t)x11 * x29) + ((uint64_t)x13 * x27))))) + (((uint64_t)x17 * x47) + (((uint64_t)x19 * x45) + (((uint64_t)x21 * x43) + (((uint64_t)x23 * x41) + ((uint64_t)x25 * x39)))))) + x48);
+ uint64_t x66 = (((((uint64_t)x5 * x33) + (((uint64_t)x7 * x31) + (((uint64_t)x9 * x29) + ((uint64_t)x11 * x27)))) + (((uint64_t)x17 * x45) + (((uint64_t)x19 * x43) + (((uint64_t)x21 * x41) + ((uint64_t)x23 * x39))))) + x49);
+ uint64_t x67 = (((((uint64_t)x5 * x31) + (((uint64_t)x7 * x29) + ((uint64_t)x9 * x27))) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + ((uint64_t)x21 * x39)))) + x50);
+ uint64_t x68 = (((((uint64_t)x5 * x29) + ((uint64_t)x7 * x27)) + (((uint64_t)x17 * x41) + ((uint64_t)x19 * x39))) + x51);
+ uint64_t x69 = ((((uint64_t)x5 * x27) + ((uint64_t)x17 * x39)) + x52);
+ uint64_t x70 = (x64 >> 0x1a);
+ uint32_t x71 = ((uint32_t)x64 & 0x3ffffff);
+ uint64_t x72 = (x53 >> 0x1a);
+ uint32_t x73 = ((uint32_t)x53 & 0x3ffffff);
+ uint64_t x74 = ((0x4000000 * x72) + x73);
+ uint64_t x75 = (x74 >> 0x1a);
+ uint32_t x76 = ((uint32_t)x74 & 0x3ffffff);
+ uint64_t x77 = ((x70 + x63) + x75);
+ uint64_t x78 = (x77 >> 0x1b);
+ uint32_t x79 = ((uint32_t)x77 & 0x7ffffff);
+ uint64_t x80 = (x69 + x75);
+ uint64_t x81 = (x80 >> 0x1b);
+ uint32_t x82 = ((uint32_t)x80 & 0x7ffffff);
+ uint64_t x83 = (x78 + x62);
+ uint64_t x84 = (x83 >> 0x1b);
+ uint32_t x85 = ((uint32_t)x83 & 0x7ffffff);
+ uint64_t x86 = (x81 + x68);
+ uint64_t x87 = (x86 >> 0x1b);
+ uint32_t x88 = ((uint32_t)x86 & 0x7ffffff);
+ uint64_t x89 = (x84 + x61);
+ uint64_t x90 = (x89 >> 0x1b);
+ uint32_t x91 = ((uint32_t)x89 & 0x7ffffff);
+ uint64_t x92 = (x87 + x67);
+ uint64_t x93 = (x92 >> 0x1b);
+ uint32_t x94 = ((uint32_t)x92 & 0x7ffffff);
+ uint64_t x95 = (x90 + x60);
+ uint64_t x96 = (x95 >> 0x1b);
+ uint32_t x97 = ((uint32_t)x95 & 0x7ffffff);
+ uint64_t x98 = (x93 + x66);
+ uint64_t x99 = (x98 >> 0x1b);
+ uint32_t x100 = ((uint32_t)x98 & 0x7ffffff);
+ uint64_t x101 = (x96 + x59);
+ uint64_t x102 = (x101 >> 0x1b);
+ uint32_t x103 = ((uint32_t)x101 & 0x7ffffff);
+ uint64_t x104 = (x99 + x65);
+ uint64_t x105 = (x104 >> 0x1b);
+ uint32_t x106 = ((uint32_t)x104 & 0x7ffffff);
+ uint64_t x107 = (x102 + x76);
+ uint32_t x108 = (uint32_t) (x107 >> 0x1a);
+ uint32_t x109 = ((uint32_t)x107 & 0x3ffffff);
+ uint64_t x110 = (x105 + x71);
+ uint32_t x111 = (uint32_t) (x110 >> 0x1a);
+ uint32_t x112 = ((uint32_t)x110 & 0x3ffffff);
+ uint64_t x113 = (((uint64_t)0x4000000 * x108) + x109);
+ uint32_t x114 = (uint32_t) (x113 >> 0x1a);
+ uint32_t x115 = ((uint32_t)x113 & 0x3ffffff);
+ uint32_t x116 = ((x111 + x79) + x114);
+ uint32_t x117 = (x116 >> 0x1b);
+ uint32_t x118 = (x116 & 0x7ffffff);
+ uint32_t x119 = (x82 + x114);
+ uint32_t x120 = (x119 >> 0x1b);
+ uint32_t x121 = (x119 & 0x7ffffff);
+ return (Return x115, Return x103, Return x97, Return x91, (x117 + x85), Return x118, Return x112, Return x106, Return x100, Return x94, (x120 + x88), Return x121))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e379m19_15limbs/femul.c b/src/Specific/solinas32_2e379m19_15limbs/femul.c
new file mode 100644
index 000000000..21a92f9cb
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19_15limbs/femul.c
@@ -0,0 +1,113 @@
+static void femul(uint32_t out[15], const uint32_t in1[15], const uint32_t in2[15]) {
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x58 = in2[14];
+ { const uint32_t x59 = in2[13];
+ { const uint32_t x57 = in2[12];
+ { const uint32_t x55 = in2[11];
+ { const uint32_t x53 = in2[10];
+ { const uint32_t x51 = in2[9];
+ { const uint32_t x49 = in2[8];
+ { const uint32_t x47 = in2[7];
+ { const uint32_t x45 = in2[6];
+ { const uint32_t x43 = in2[5];
+ { const uint32_t x41 = in2[4];
+ { const uint32_t x39 = in2[3];
+ { const uint32_t x37 = in2[2];
+ { const uint32_t x35 = in2[1];
+ { const uint32_t x33 = in2[0];
+ { uint64_t x60 = (((uint64_t)x5 * x58) + ((0x2 * ((uint64_t)x7 * x59)) + ((0x2 * ((uint64_t)x9 * x57)) + (((uint64_t)x11 * x55) + ((0x2 * ((uint64_t)x13 * x53)) + ((0x2 * ((uint64_t)x15 * x51)) + ((0x2 * ((uint64_t)x17 * x49)) + (((uint64_t)x19 * x47) + ((0x2 * ((uint64_t)x21 * x45)) + ((0x2 * ((uint64_t)x23 * x43)) + ((0x2 * ((uint64_t)x25 * x41)) + (((uint64_t)x27 * x39) + ((0x2 * ((uint64_t)x29 * x37)) + ((0x2 * ((uint64_t)x31 * x35)) + ((uint64_t)x30 * x33)))))))))))))));
+ { uint64_t x61 = ((((uint64_t)x5 * x59) + ((0x2 * ((uint64_t)x7 * x57)) + (((uint64_t)x9 * x55) + (((uint64_t)x11 * x53) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + (((uint64_t)x17 * x47) + (((uint64_t)x19 * x45) + ((0x2 * ((uint64_t)x21 * x43)) + ((0x2 * ((uint64_t)x23 * x41)) + (((uint64_t)x25 * x39) + (((uint64_t)x27 * x37) + ((0x2 * ((uint64_t)x29 * x35)) + ((uint64_t)x31 * x33)))))))))))))) + (0x13 * ((uint64_t)x30 * x58)));
+ { uint64_t x62 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + (((uint64_t)x9 * x53) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + (((uint64_t)x17 * x45) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + (((uint64_t)x23 * x39) + (((uint64_t)x25 * x37) + (((uint64_t)x27 * x35) + ((uint64_t)x29 * x33))))))))))))) + (0x13 * (((uint64_t)x31 * x58) + ((uint64_t)x30 * x59))));
+ { uint64_t x63 = ((((uint64_t)x5 * x55) + ((0x2 * ((uint64_t)x7 * x53)) + ((0x2 * ((uint64_t)x9 * x51)) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + ((0x2 * ((uint64_t)x21 * x39)) + ((0x2 * ((uint64_t)x23 * x37)) + ((0x2 * ((uint64_t)x25 * x35)) + ((uint64_t)x27 * x33)))))))))))) + (0x13 * ((0x2 * ((uint64_t)x29 * x58)) + ((0x2 * ((uint64_t)x31 * x59)) + (0x2 * ((uint64_t)x30 * x57))))));
+ { uint64_t x64 = ((((uint64_t)x5 * x53) + ((0x2 * ((uint64_t)x7 * x51)) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + ((0x2 * ((uint64_t)x15 * x43)) + ((0x2 * ((uint64_t)x17 * x41)) + (((uint64_t)x19 * x39) + ((0x2 * ((uint64_t)x21 * x37)) + ((0x2 * ((uint64_t)x23 * x35)) + ((uint64_t)x25 * x33))))))))))) + (0x13 * (((uint64_t)x27 * x58) + ((0x2 * ((uint64_t)x29 * x59)) + ((0x2 * ((uint64_t)x31 * x57)) + ((uint64_t)x30 * x55))))));
+ { uint64_t x65 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + (((uint64_t)x17 * x39) + (((uint64_t)x19 * x37) + ((0x2 * ((uint64_t)x21 * x35)) + ((uint64_t)x23 * x33)))))))))) + (0x13 * (((uint64_t)x25 * x58) + (((uint64_t)x27 * x59) + ((0x2 * ((uint64_t)x29 * x57)) + (((uint64_t)x31 * x55) + ((uint64_t)x30 * x53)))))));
+ { uint64_t x66 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + (((uint64_t)x9 * x45) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + (((uint64_t)x15 * x39) + (((uint64_t)x17 * x37) + (((uint64_t)x19 * x35) + ((uint64_t)x21 * x33))))))))) + (0x13 * (((uint64_t)x23 * x58) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + (((uint64_t)x29 * x55) + (((uint64_t)x31 * x53) + ((uint64_t)x30 * x51))))))));
+ { uint64_t x67 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((0x2 * ((uint64_t)x15 * x37)) + ((0x2 * ((uint64_t)x17 * x35)) + ((uint64_t)x19 * x33)))))))) + (0x13 * ((0x2 * ((uint64_t)x21 * x58)) + ((0x2 * ((uint64_t)x23 * x59)) + ((0x2 * ((uint64_t)x25 * x57)) + (((uint64_t)x27 * x55) + ((0x2 * ((uint64_t)x29 * x53)) + ((0x2 * ((uint64_t)x31 * x51)) + (0x2 * ((uint64_t)x30 * x49))))))))));
+ { uint64_t x68 = ((((uint64_t)x5 * x45) + ((0x2 * ((uint64_t)x7 * x43)) + ((0x2 * ((uint64_t)x9 * x41)) + (((uint64_t)x11 * x39) + ((0x2 * ((uint64_t)x13 * x37)) + ((0x2 * ((uint64_t)x15 * x35)) + ((uint64_t)x17 * x33))))))) + (0x13 * (((uint64_t)x19 * x58) + ((0x2 * ((uint64_t)x21 * x59)) + ((0x2 * ((uint64_t)x23 * x57)) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + ((0x2 * ((uint64_t)x29 * x51)) + ((0x2 * ((uint64_t)x31 * x49)) + ((uint64_t)x30 * x47))))))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + (((uint64_t)x9 * x39) + (((uint64_t)x11 * x37) + ((0x2 * ((uint64_t)x13 * x35)) + ((uint64_t)x15 * x33)))))) + (0x13 * (((uint64_t)x17 * x58) + (((uint64_t)x19 * x59) + ((0x2 * ((uint64_t)x21 * x57)) + (((uint64_t)x23 * x55) + (((uint64_t)x25 * x53) + (((uint64_t)x27 * x51) + ((0x2 * ((uint64_t)x29 * x49)) + (((uint64_t)x31 * x47) + ((uint64_t)x30 * x45)))))))))));
+ { uint64_t x70 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + (((uint64_t)x11 * x35) + ((uint64_t)x13 * x33))))) + (0x13 * (((uint64_t)x15 * x58) + (((uint64_t)x17 * x59) + (((uint64_t)x19 * x57) + (((uint64_t)x21 * x55) + (((uint64_t)x23 * x53) + (((uint64_t)x25 * x51) + (((uint64_t)x27 * x49) + (((uint64_t)x29 * x47) + (((uint64_t)x31 * x45) + ((uint64_t)x30 * x43))))))))))));
+ { uint64_t x71 = ((((uint64_t)x5 * x39) + ((0x2 * ((uint64_t)x7 * x37)) + ((0x2 * ((uint64_t)x9 * x35)) + ((uint64_t)x11 * x33)))) + (0x13 * ((0x2 * ((uint64_t)x13 * x58)) + ((0x2 * ((uint64_t)x15 * x59)) + ((0x2 * ((uint64_t)x17 * x57)) + (((uint64_t)x19 * x55) + ((0x2 * ((uint64_t)x21 * x53)) + ((0x2 * ((uint64_t)x23 * x51)) + ((0x2 * ((uint64_t)x25 * x49)) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + ((0x2 * ((uint64_t)x31 * x43)) + (0x2 * ((uint64_t)x30 * x41))))))))))))));
+ { uint64_t x72 = ((((uint64_t)x5 * x37) + ((0x2 * ((uint64_t)x7 * x35)) + ((uint64_t)x9 * x33))) + (0x13 * (((uint64_t)x11 * x58) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + (((uint64_t)x17 * x55) + (((uint64_t)x19 * x53) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + (((uint64_t)x25 * x47) + (((uint64_t)x27 * x45) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((uint64_t)x30 * x39))))))))))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x35) + ((uint64_t)x7 * x33)) + (0x13 * (((uint64_t)x9 * x58) + (((uint64_t)x11 * x59) + ((0x2 * ((uint64_t)x13 * x57)) + (((uint64_t)x15 * x55) + (((uint64_t)x17 * x53) + (((uint64_t)x19 * x51) + ((0x2 * ((uint64_t)x21 * x49)) + (((uint64_t)x23 * x47) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + ((uint64_t)x30 * x37)))))))))))))));
+ { uint64_t x74 = (((uint64_t)x5 * x33) + (0x13 * ((0x2 * ((uint64_t)x7 * x58)) + ((0x2 * ((uint64_t)x9 * x59)) + ((0x2 * ((uint64_t)x11 * x57)) + ((0x2 * ((uint64_t)x13 * x55)) + ((0x2 * ((uint64_t)x15 * x53)) + ((0x2 * ((uint64_t)x17 * x51)) + ((0x2 * ((uint64_t)x19 * x49)) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + ((0x2 * ((uint64_t)x25 * x43)) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + ((0x2 * ((uint64_t)x31 * x37)) + (0x2 * ((uint64_t)x30 * x35)))))))))))))))));
+ { uint64_t x75 = (x74 >> 0x1a);
+ { uint32_t x76 = ((uint32_t)x74 & 0x3ffffff);
+ { uint64_t x77 = (x75 + x73);
+ { uint64_t x78 = (x77 >> 0x19);
+ { uint32_t x79 = ((uint32_t)x77 & 0x1ffffff);
+ { uint64_t x80 = (x78 + x72);
+ { uint64_t x81 = (x80 >> 0x19);
+ { uint32_t x82 = ((uint32_t)x80 & 0x1ffffff);
+ { uint64_t x83 = (x81 + x71);
+ { uint64_t x84 = (x83 >> 0x1a);
+ { uint32_t x85 = ((uint32_t)x83 & 0x3ffffff);
+ { uint64_t x86 = (x84 + x70);
+ { uint64_t x87 = (x86 >> 0x19);
+ { uint32_t x88 = ((uint32_t)x86 & 0x1ffffff);
+ { uint64_t x89 = (x87 + x69);
+ { uint64_t x90 = (x89 >> 0x19);
+ { uint32_t x91 = ((uint32_t)x89 & 0x1ffffff);
+ { uint64_t x92 = (x90 + x68);
+ { uint64_t x93 = (x92 >> 0x19);
+ { uint32_t x94 = ((uint32_t)x92 & 0x1ffffff);
+ { uint64_t x95 = (x93 + x67);
+ { uint64_t x96 = (x95 >> 0x1a);
+ { uint32_t x97 = ((uint32_t)x95 & 0x3ffffff);
+ { uint64_t x98 = (x96 + x66);
+ { uint64_t x99 = (x98 >> 0x19);
+ { uint32_t x100 = ((uint32_t)x98 & 0x1ffffff);
+ { uint64_t x101 = (x99 + x65);
+ { uint64_t x102 = (x101 >> 0x19);
+ { uint32_t x103 = ((uint32_t)x101 & 0x1ffffff);
+ { uint64_t x104 = (x102 + x64);
+ { uint64_t x105 = (x104 >> 0x19);
+ { uint32_t x106 = ((uint32_t)x104 & 0x1ffffff);
+ { uint64_t x107 = (x105 + x63);
+ { uint64_t x108 = (x107 >> 0x1a);
+ { uint32_t x109 = ((uint32_t)x107 & 0x3ffffff);
+ { uint64_t x110 = (x108 + x62);
+ { uint64_t x111 = (x110 >> 0x19);
+ { uint32_t x112 = ((uint32_t)x110 & 0x1ffffff);
+ { uint64_t x113 = (x111 + x61);
+ { uint64_t x114 = (x113 >> 0x19);
+ { uint32_t x115 = ((uint32_t)x113 & 0x1ffffff);
+ { uint64_t x116 = (x114 + x60);
+ { uint64_t x117 = (x116 >> 0x19);
+ { uint32_t x118 = ((uint32_t)x116 & 0x1ffffff);
+ { uint64_t x119 = (x76 + (0x13 * x117));
+ { uint32_t x120 = (uint32_t) (x119 >> 0x1a);
+ { uint32_t x121 = ((uint32_t)x119 & 0x3ffffff);
+ { uint32_t x122 = (x120 + x79);
+ { uint32_t x123 = (x122 >> 0x19);
+ { uint32_t x124 = (x122 & 0x1ffffff);
+ out[0] = x121;
+ out[1] = x124;
+ out[2] = (x123 + x82);
+ out[3] = x85;
+ out[4] = x88;
+ out[5] = x91;
+ out[6] = x94;
+ out[7] = x97;
+ out[8] = x100;
+ out[9] = x103;
+ out[10] = x106;
+ out[11] = x109;
+ out[12] = x112;
+ out[13] = x115;
+ out[14] = x118;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e379m19_15limbs/femulDisplay.log b/src/Specific/solinas32_2e379m19_15limbs/femulDisplay.log
new file mode 100644
index 000000000..4a2320efa
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19_15limbs/femulDisplay.log
@@ -0,0 +1,72 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x30, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x58, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35, x33))%core,
+ uint64_t x60 = (((uint64_t)x5 * x58) + ((0x2 * ((uint64_t)x7 * x59)) + ((0x2 * ((uint64_t)x9 * x57)) + (((uint64_t)x11 * x55) + ((0x2 * ((uint64_t)x13 * x53)) + ((0x2 * ((uint64_t)x15 * x51)) + ((0x2 * ((uint64_t)x17 * x49)) + (((uint64_t)x19 * x47) + ((0x2 * ((uint64_t)x21 * x45)) + ((0x2 * ((uint64_t)x23 * x43)) + ((0x2 * ((uint64_t)x25 * x41)) + (((uint64_t)x27 * x39) + ((0x2 * ((uint64_t)x29 * x37)) + ((0x2 * ((uint64_t)x31 * x35)) + ((uint64_t)x30 * x33)))))))))))))));
+ uint64_t x61 = ((((uint64_t)x5 * x59) + ((0x2 * ((uint64_t)x7 * x57)) + (((uint64_t)x9 * x55) + (((uint64_t)x11 * x53) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + (((uint64_t)x17 * x47) + (((uint64_t)x19 * x45) + ((0x2 * ((uint64_t)x21 * x43)) + ((0x2 * ((uint64_t)x23 * x41)) + (((uint64_t)x25 * x39) + (((uint64_t)x27 * x37) + ((0x2 * ((uint64_t)x29 * x35)) + ((uint64_t)x31 * x33)))))))))))))) + (0x13 * ((uint64_t)x30 * x58)));
+ uint64_t x62 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + (((uint64_t)x9 * x53) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + (((uint64_t)x17 * x45) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + (((uint64_t)x23 * x39) + (((uint64_t)x25 * x37) + (((uint64_t)x27 * x35) + ((uint64_t)x29 * x33))))))))))))) + (0x13 * (((uint64_t)x31 * x58) + ((uint64_t)x30 * x59))));
+ uint64_t x63 = ((((uint64_t)x5 * x55) + ((0x2 * ((uint64_t)x7 * x53)) + ((0x2 * ((uint64_t)x9 * x51)) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + ((0x2 * ((uint64_t)x21 * x39)) + ((0x2 * ((uint64_t)x23 * x37)) + ((0x2 * ((uint64_t)x25 * x35)) + ((uint64_t)x27 * x33)))))))))))) + (0x13 * ((0x2 * ((uint64_t)x29 * x58)) + ((0x2 * ((uint64_t)x31 * x59)) + (0x2 * ((uint64_t)x30 * x57))))));
+ uint64_t x64 = ((((uint64_t)x5 * x53) + ((0x2 * ((uint64_t)x7 * x51)) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + ((0x2 * ((uint64_t)x15 * x43)) + ((0x2 * ((uint64_t)x17 * x41)) + (((uint64_t)x19 * x39) + ((0x2 * ((uint64_t)x21 * x37)) + ((0x2 * ((uint64_t)x23 * x35)) + ((uint64_t)x25 * x33))))))))))) + (0x13 * (((uint64_t)x27 * x58) + ((0x2 * ((uint64_t)x29 * x59)) + ((0x2 * ((uint64_t)x31 * x57)) + ((uint64_t)x30 * x55))))));
+ uint64_t x65 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + (((uint64_t)x17 * x39) + (((uint64_t)x19 * x37) + ((0x2 * ((uint64_t)x21 * x35)) + ((uint64_t)x23 * x33)))))))))) + (0x13 * (((uint64_t)x25 * x58) + (((uint64_t)x27 * x59) + ((0x2 * ((uint64_t)x29 * x57)) + (((uint64_t)x31 * x55) + ((uint64_t)x30 * x53)))))));
+ uint64_t x66 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + (((uint64_t)x9 * x45) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + (((uint64_t)x15 * x39) + (((uint64_t)x17 * x37) + (((uint64_t)x19 * x35) + ((uint64_t)x21 * x33))))))))) + (0x13 * (((uint64_t)x23 * x58) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + (((uint64_t)x29 * x55) + (((uint64_t)x31 * x53) + ((uint64_t)x30 * x51))))))));
+ uint64_t x67 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((0x2 * ((uint64_t)x15 * x37)) + ((0x2 * ((uint64_t)x17 * x35)) + ((uint64_t)x19 * x33)))))))) + (0x13 * ((0x2 * ((uint64_t)x21 * x58)) + ((0x2 * ((uint64_t)x23 * x59)) + ((0x2 * ((uint64_t)x25 * x57)) + (((uint64_t)x27 * x55) + ((0x2 * ((uint64_t)x29 * x53)) + ((0x2 * ((uint64_t)x31 * x51)) + (0x2 * ((uint64_t)x30 * x49))))))))));
+ uint64_t x68 = ((((uint64_t)x5 * x45) + ((0x2 * ((uint64_t)x7 * x43)) + ((0x2 * ((uint64_t)x9 * x41)) + (((uint64_t)x11 * x39) + ((0x2 * ((uint64_t)x13 * x37)) + ((0x2 * ((uint64_t)x15 * x35)) + ((uint64_t)x17 * x33))))))) + (0x13 * (((uint64_t)x19 * x58) + ((0x2 * ((uint64_t)x21 * x59)) + ((0x2 * ((uint64_t)x23 * x57)) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + ((0x2 * ((uint64_t)x29 * x51)) + ((0x2 * ((uint64_t)x31 * x49)) + ((uint64_t)x30 * x47))))))))));
+ uint64_t x69 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + (((uint64_t)x9 * x39) + (((uint64_t)x11 * x37) + ((0x2 * ((uint64_t)x13 * x35)) + ((uint64_t)x15 * x33)))))) + (0x13 * (((uint64_t)x17 * x58) + (((uint64_t)x19 * x59) + ((0x2 * ((uint64_t)x21 * x57)) + (((uint64_t)x23 * x55) + (((uint64_t)x25 * x53) + (((uint64_t)x27 * x51) + ((0x2 * ((uint64_t)x29 * x49)) + (((uint64_t)x31 * x47) + ((uint64_t)x30 * x45)))))))))));
+ uint64_t x70 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + (((uint64_t)x11 * x35) + ((uint64_t)x13 * x33))))) + (0x13 * (((uint64_t)x15 * x58) + (((uint64_t)x17 * x59) + (((uint64_t)x19 * x57) + (((uint64_t)x21 * x55) + (((uint64_t)x23 * x53) + (((uint64_t)x25 * x51) + (((uint64_t)x27 * x49) + (((uint64_t)x29 * x47) + (((uint64_t)x31 * x45) + ((uint64_t)x30 * x43))))))))))));
+ uint64_t x71 = ((((uint64_t)x5 * x39) + ((0x2 * ((uint64_t)x7 * x37)) + ((0x2 * ((uint64_t)x9 * x35)) + ((uint64_t)x11 * x33)))) + (0x13 * ((0x2 * ((uint64_t)x13 * x58)) + ((0x2 * ((uint64_t)x15 * x59)) + ((0x2 * ((uint64_t)x17 * x57)) + (((uint64_t)x19 * x55) + ((0x2 * ((uint64_t)x21 * x53)) + ((0x2 * ((uint64_t)x23 * x51)) + ((0x2 * ((uint64_t)x25 * x49)) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + ((0x2 * ((uint64_t)x31 * x43)) + (0x2 * ((uint64_t)x30 * x41))))))))))))));
+ uint64_t x72 = ((((uint64_t)x5 * x37) + ((0x2 * ((uint64_t)x7 * x35)) + ((uint64_t)x9 * x33))) + (0x13 * (((uint64_t)x11 * x58) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + (((uint64_t)x17 * x55) + (((uint64_t)x19 * x53) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + (((uint64_t)x25 * x47) + (((uint64_t)x27 * x45) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((uint64_t)x30 * x39))))))))))))));
+ uint64_t x73 = ((((uint64_t)x5 * x35) + ((uint64_t)x7 * x33)) + (0x13 * (((uint64_t)x9 * x58) + (((uint64_t)x11 * x59) + ((0x2 * ((uint64_t)x13 * x57)) + (((uint64_t)x15 * x55) + (((uint64_t)x17 * x53) + (((uint64_t)x19 * x51) + ((0x2 * ((uint64_t)x21 * x49)) + (((uint64_t)x23 * x47) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + ((uint64_t)x30 * x37)))))))))))))));
+ uint64_t x74 = (((uint64_t)x5 * x33) + (0x13 * ((0x2 * ((uint64_t)x7 * x58)) + ((0x2 * ((uint64_t)x9 * x59)) + ((0x2 * ((uint64_t)x11 * x57)) + ((0x2 * ((uint64_t)x13 * x55)) + ((0x2 * ((uint64_t)x15 * x53)) + ((0x2 * ((uint64_t)x17 * x51)) + ((0x2 * ((uint64_t)x19 * x49)) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + ((0x2 * ((uint64_t)x25 * x43)) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + ((0x2 * ((uint64_t)x31 * x37)) + (0x2 * ((uint64_t)x30 * x35)))))))))))))))));
+ uint64_t x75 = (x74 >> 0x1a);
+ uint32_t x76 = ((uint32_t)x74 & 0x3ffffff);
+ uint64_t x77 = (x75 + x73);
+ uint64_t x78 = (x77 >> 0x19);
+ uint32_t x79 = ((uint32_t)x77 & 0x1ffffff);
+ uint64_t x80 = (x78 + x72);
+ uint64_t x81 = (x80 >> 0x19);
+ uint32_t x82 = ((uint32_t)x80 & 0x1ffffff);
+ uint64_t x83 = (x81 + x71);
+ uint64_t x84 = (x83 >> 0x1a);
+ uint32_t x85 = ((uint32_t)x83 & 0x3ffffff);
+ uint64_t x86 = (x84 + x70);
+ uint64_t x87 = (x86 >> 0x19);
+ uint32_t x88 = ((uint32_t)x86 & 0x1ffffff);
+ uint64_t x89 = (x87 + x69);
+ uint64_t x90 = (x89 >> 0x19);
+ uint32_t x91 = ((uint32_t)x89 & 0x1ffffff);
+ uint64_t x92 = (x90 + x68);
+ uint64_t x93 = (x92 >> 0x19);
+ uint32_t x94 = ((uint32_t)x92 & 0x1ffffff);
+ uint64_t x95 = (x93 + x67);
+ uint64_t x96 = (x95 >> 0x1a);
+ uint32_t x97 = ((uint32_t)x95 & 0x3ffffff);
+ uint64_t x98 = (x96 + x66);
+ uint64_t x99 = (x98 >> 0x19);
+ uint32_t x100 = ((uint32_t)x98 & 0x1ffffff);
+ uint64_t x101 = (x99 + x65);
+ uint64_t x102 = (x101 >> 0x19);
+ uint32_t x103 = ((uint32_t)x101 & 0x1ffffff);
+ uint64_t x104 = (x102 + x64);
+ uint64_t x105 = (x104 >> 0x19);
+ uint32_t x106 = ((uint32_t)x104 & 0x1ffffff);
+ uint64_t x107 = (x105 + x63);
+ uint64_t x108 = (x107 >> 0x1a);
+ uint32_t x109 = ((uint32_t)x107 & 0x3ffffff);
+ uint64_t x110 = (x108 + x62);
+ uint64_t x111 = (x110 >> 0x19);
+ uint32_t x112 = ((uint32_t)x110 & 0x1ffffff);
+ uint64_t x113 = (x111 + x61);
+ uint64_t x114 = (x113 >> 0x19);
+ uint32_t x115 = ((uint32_t)x113 & 0x1ffffff);
+ uint64_t x116 = (x114 + x60);
+ uint64_t x117 = (x116 >> 0x19);
+ uint32_t x118 = ((uint32_t)x116 & 0x1ffffff);
+ uint64_t x119 = (x76 + (0x13 * x117));
+ uint32_t x120 = (uint32_t) (x119 >> 0x1a);
+ uint32_t x121 = ((uint32_t)x119 & 0x3ffffff);
+ uint32_t x122 = (x120 + x79);
+ uint32_t x123 = (x122 >> 0x19);
+ uint32_t x124 = (x122 & 0x1ffffff);
+ return (Return x118, Return x115, Return x112, Return x109, Return x106, Return x103, Return x100, Return x97, Return x94, Return x91, Return x88, Return x85, (x123 + x82), Return x124, Return x121))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e379m19_16limbs/femul.c b/src/Specific/solinas32_2e379m19_16limbs/femul.c
new file mode 100644
index 000000000..adc2d5136
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19_16limbs/femul.c
@@ -0,0 +1,120 @@
+static void femul(uint32_t out[16], const uint32_t in1[16], const uint32_t in2[16]) {
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x62 = in2[15];
+ { const uint32_t x63 = in2[14];
+ { const uint32_t x61 = in2[13];
+ { const uint32_t x59 = in2[12];
+ { const uint32_t x57 = in2[11];
+ { const uint32_t x55 = in2[10];
+ { const uint32_t x53 = in2[9];
+ { const uint32_t x51 = in2[8];
+ { const uint32_t x49 = in2[7];
+ { const uint32_t x47 = in2[6];
+ { const uint32_t x45 = in2[5];
+ { const uint32_t x43 = in2[4];
+ { const uint32_t x41 = in2[3];
+ { const uint32_t x39 = in2[2];
+ { const uint32_t x37 = in2[1];
+ { const uint32_t x35 = in2[0];
+ { uint64_t x64 = (((uint64_t)x5 * x62) + (((uint64_t)x7 * x63) + (((uint64_t)x9 * x61) + ((0x2 * ((uint64_t)x11 * x59)) + (((uint64_t)x13 * x57) + (((uint64_t)x15 * x55) + ((0x2 * ((uint64_t)x17 * x53)) + (((uint64_t)x19 * x51) + (((uint64_t)x21 * x49) + ((0x2 * ((uint64_t)x23 * x47)) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + (((uint64_t)x33 * x37) + ((uint64_t)x32 * x35))))))))))))))));
+ { uint64_t x65 = ((((uint64_t)x5 * x63) + (((uint64_t)x7 * x61) + ((0x2 * ((uint64_t)x9 * x59)) + ((0x2 * ((uint64_t)x11 * x57)) + (((uint64_t)x13 * x55) + ((0x2 * ((uint64_t)x15 * x53)) + ((0x2 * ((uint64_t)x17 * x51)) + (((uint64_t)x19 * x49) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + (((uint64_t)x25 * x43) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + (((uint64_t)x31 * x37) + ((uint64_t)x33 * x35))))))))))))))) + (0x13 * (0x2 * ((uint64_t)x32 * x62))));
+ { uint64_t x66 = ((((uint64_t)x5 * x61) + ((0x2 * ((uint64_t)x7 * x59)) + ((0x2 * ((uint64_t)x9 * x57)) + ((0x2 * ((uint64_t)x11 * x55)) + ((0x2 * ((uint64_t)x13 * x53)) + ((0x2 * ((uint64_t)x15 * x51)) + ((0x2 * ((uint64_t)x17 * x49)) + ((0x2 * ((uint64_t)x19 * x47)) + ((0x2 * ((uint64_t)x21 * x45)) + ((0x2 * ((uint64_t)x23 * x43)) + ((0x2 * ((uint64_t)x25 * x41)) + ((0x2 * ((uint64_t)x27 * x39)) + ((0x2 * ((uint64_t)x29 * x37)) + ((uint64_t)x31 * x35)))))))))))))) + (0x13 * ((0x2 * ((uint64_t)x33 * x62)) + (0x2 * ((uint64_t)x32 * x63)))));
+ { uint64_t x67 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + (((uint64_t)x9 * x55) + ((0x2 * ((uint64_t)x11 * x53)) + (((uint64_t)x13 * x51) + (((uint64_t)x15 * x49) + ((0x2 * ((uint64_t)x17 * x47)) + (((uint64_t)x19 * x45) + (((uint64_t)x21 * x43) + ((0x2 * ((uint64_t)x23 * x41)) + (((uint64_t)x25 * x39) + (((uint64_t)x27 * x37) + ((uint64_t)x29 * x35))))))))))))) + (0x13 * (((uint64_t)x31 * x62) + (((uint64_t)x33 * x63) + ((uint64_t)x32 * x61)))));
+ { uint64_t x68 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + ((0x2 * ((uint64_t)x9 * x53)) + ((0x2 * ((uint64_t)x11 * x51)) + (((uint64_t)x13 * x49) + ((0x2 * ((uint64_t)x15 * x47)) + ((0x2 * ((uint64_t)x17 * x45)) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + ((0x2 * ((uint64_t)x23 * x39)) + (((uint64_t)x25 * x37) + ((uint64_t)x27 * x35)))))))))))) + (0x13 * ((0x2 * ((uint64_t)x29 * x62)) + (((uint64_t)x31 * x63) + (((uint64_t)x33 * x61) + (0x2 * ((uint64_t)x32 * x59)))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x55) + ((0x2 * ((uint64_t)x7 * x53)) + ((0x2 * ((uint64_t)x9 * x51)) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + ((0x2 * ((uint64_t)x21 * x39)) + ((0x2 * ((uint64_t)x23 * x37)) + ((uint64_t)x25 * x35))))))))))) + (0x13 * ((0x2 * ((uint64_t)x27 * x62)) + ((0x2 * ((uint64_t)x29 * x63)) + (((uint64_t)x31 * x61) + ((0x2 * ((uint64_t)x33 * x59)) + (0x2 * ((uint64_t)x32 * x57))))))));
+ { uint64_t x70 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + (((uint64_t)x9 * x49) + ((0x2 * ((uint64_t)x11 * x47)) + (((uint64_t)x13 * x45) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + (((uint64_t)x19 * x39) + (((uint64_t)x21 * x37) + ((uint64_t)x23 * x35)))))))))) + (0x13 * (((uint64_t)x25 * x62) + (((uint64_t)x27 * x63) + (((uint64_t)x29 * x61) + (((uint64_t)x31 * x59) + (((uint64_t)x33 * x57) + ((uint64_t)x32 * x55))))))));
+ { uint64_t x71 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + ((0x2 * ((uint64_t)x9 * x47)) + ((0x2 * ((uint64_t)x11 * x45)) + (((uint64_t)x13 * x43) + ((0x2 * ((uint64_t)x15 * x41)) + ((0x2 * ((uint64_t)x17 * x39)) + (((uint64_t)x19 * x37) + ((uint64_t)x21 * x35))))))))) + (0x13 * ((0x2 * ((uint64_t)x23 * x62)) + (((uint64_t)x25 * x63) + (((uint64_t)x27 * x61) + ((0x2 * ((uint64_t)x29 * x59)) + (((uint64_t)x31 * x57) + (((uint64_t)x33 * x55) + (0x2 * ((uint64_t)x32 * x53))))))))));
+ { uint64_t x72 = ((((uint64_t)x5 * x49) + ((0x2 * ((uint64_t)x7 * x47)) + ((0x2 * ((uint64_t)x9 * x45)) + ((0x2 * ((uint64_t)x11 * x43)) + ((0x2 * ((uint64_t)x13 * x41)) + ((0x2 * ((uint64_t)x15 * x39)) + ((0x2 * ((uint64_t)x17 * x37)) + ((uint64_t)x19 * x35)))))))) + (0x13 * ((0x2 * ((uint64_t)x21 * x62)) + ((0x2 * ((uint64_t)x23 * x63)) + (((uint64_t)x25 * x61) + ((0x2 * ((uint64_t)x27 * x59)) + ((0x2 * ((uint64_t)x29 * x57)) + (((uint64_t)x31 * x55) + ((0x2 * ((uint64_t)x33 * x53)) + (0x2 * ((uint64_t)x32 * x51)))))))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + ((0x2 * ((uint64_t)x11 * x41)) + (((uint64_t)x13 * x39) + (((uint64_t)x15 * x37) + ((uint64_t)x17 * x35))))))) + (0x13 * (((uint64_t)x19 * x62) + (((uint64_t)x21 * x63) + (((uint64_t)x23 * x61) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + (((uint64_t)x29 * x55) + (((uint64_t)x31 * x53) + (((uint64_t)x33 * x51) + ((uint64_t)x32 * x49)))))))))));
+ { uint64_t x74 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + ((0x2 * ((uint64_t)x11 * x39)) + (((uint64_t)x13 * x37) + ((uint64_t)x15 * x35)))))) + (0x13 * ((0x2 * ((uint64_t)x17 * x62)) + (((uint64_t)x19 * x63) + (((uint64_t)x21 * x61) + ((0x2 * ((uint64_t)x23 * x59)) + (((uint64_t)x25 * x57) + (((uint64_t)x27 * x55) + ((0x2 * ((uint64_t)x29 * x53)) + (((uint64_t)x31 * x51) + (((uint64_t)x33 * x49) + (0x2 * ((uint64_t)x32 * x47)))))))))))));
+ { uint64_t x75 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((0x2 * ((uint64_t)x11 * x37)) + ((uint64_t)x13 * x35))))) + (0x13 * ((0x2 * ((uint64_t)x15 * x62)) + ((0x2 * ((uint64_t)x17 * x63)) + (((uint64_t)x19 * x61) + ((0x2 * ((uint64_t)x21 * x59)) + ((0x2 * ((uint64_t)x23 * x57)) + (((uint64_t)x25 * x55) + ((0x2 * ((uint64_t)x27 * x53)) + ((0x2 * ((uint64_t)x29 * x51)) + (((uint64_t)x31 * x49) + ((0x2 * ((uint64_t)x33 * x47)) + (0x2 * ((uint64_t)x32 * x45))))))))))))));
+ { uint64_t x76 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + ((uint64_t)x11 * x35)))) + (0x13 * (((uint64_t)x13 * x62) + (((uint64_t)x15 * x63) + (((uint64_t)x17 * x61) + (((uint64_t)x19 * x59) + (((uint64_t)x21 * x57) + (((uint64_t)x23 * x55) + (((uint64_t)x25 * x53) + (((uint64_t)x27 * x51) + (((uint64_t)x29 * x49) + (((uint64_t)x31 * x47) + (((uint64_t)x33 * x45) + ((uint64_t)x32 * x43))))))))))))));
+ { uint64_t x77 = ((((uint64_t)x5 * x39) + (((uint64_t)x7 * x37) + ((uint64_t)x9 * x35))) + (0x13 * ((0x2 * ((uint64_t)x11 * x62)) + (((uint64_t)x13 * x63) + (((uint64_t)x15 * x61) + ((0x2 * ((uint64_t)x17 * x59)) + (((uint64_t)x19 * x57) + (((uint64_t)x21 * x55) + ((0x2 * ((uint64_t)x23 * x53)) + (((uint64_t)x25 * x51) + (((uint64_t)x27 * x49) + ((0x2 * ((uint64_t)x29 * x47)) + (((uint64_t)x31 * x45) + (((uint64_t)x33 * x43) + (0x2 * ((uint64_t)x32 * x41))))))))))))))));
+ { uint64_t x78 = ((((uint64_t)x5 * x37) + ((uint64_t)x7 * x35)) + (0x13 * ((0x2 * ((uint64_t)x9 * x62)) + ((0x2 * ((uint64_t)x11 * x63)) + (((uint64_t)x13 * x61) + ((0x2 * ((uint64_t)x15 * x59)) + ((0x2 * ((uint64_t)x17 * x57)) + (((uint64_t)x19 * x55) + ((0x2 * ((uint64_t)x21 * x53)) + ((0x2 * ((uint64_t)x23 * x51)) + (((uint64_t)x25 * x49) + ((0x2 * ((uint64_t)x27 * x47)) + ((0x2 * ((uint64_t)x29 * x45)) + (((uint64_t)x31 * x43) + ((0x2 * ((uint64_t)x33 * x41)) + (0x2 * ((uint64_t)x32 * x39)))))))))))))))));
+ { uint64_t x79 = (((uint64_t)x5 * x35) + (0x13 * ((0x2 * ((uint64_t)x7 * x62)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + (0x2 * ((uint64_t)x32 * x37))))))))))))))))));
+ { uint64_t x80 = (x79 >> 0x18);
+ { uint32_t x81 = ((uint32_t)x79 & 0xffffff);
+ { uint64_t x82 = (x80 + x78);
+ { uint64_t x83 = (x82 >> 0x18);
+ { uint32_t x84 = ((uint32_t)x82 & 0xffffff);
+ { uint64_t x85 = (x83 + x77);
+ { uint64_t x86 = (x85 >> 0x18);
+ { uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ { uint64_t x88 = (x86 + x76);
+ { uint64_t x89 = (x88 >> 0x17);
+ { uint32_t x90 = ((uint32_t)x88 & 0x7fffff);
+ { uint64_t x91 = (x89 + x75);
+ { uint64_t x92 = (x91 >> 0x18);
+ { uint32_t x93 = ((uint32_t)x91 & 0xffffff);
+ { uint64_t x94 = (x92 + x74);
+ { uint64_t x95 = (x94 >> 0x18);
+ { uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ { uint64_t x97 = (x95 + x73);
+ { uint64_t x98 = (x97 >> 0x17);
+ { uint32_t x99 = ((uint32_t)x97 & 0x7fffff);
+ { uint64_t x100 = (x98 + x72);
+ { uint64_t x101 = (x100 >> 0x18);
+ { uint32_t x102 = ((uint32_t)x100 & 0xffffff);
+ { uint64_t x103 = (x101 + x71);
+ { uint64_t x104 = (x103 >> 0x18);
+ { uint32_t x105 = ((uint32_t)x103 & 0xffffff);
+ { uint64_t x106 = (x104 + x70);
+ { uint64_t x107 = (x106 >> 0x17);
+ { uint32_t x108 = ((uint32_t)x106 & 0x7fffff);
+ { uint64_t x109 = (x107 + x69);
+ { uint64_t x110 = (x109 >> 0x18);
+ { uint32_t x111 = ((uint32_t)x109 & 0xffffff);
+ { uint64_t x112 = (x110 + x68);
+ { uint64_t x113 = (x112 >> 0x18);
+ { uint32_t x114 = ((uint32_t)x112 & 0xffffff);
+ { uint64_t x115 = (x113 + x67);
+ { uint64_t x116 = (x115 >> 0x17);
+ { uint32_t x117 = ((uint32_t)x115 & 0x7fffff);
+ { uint64_t x118 = (x116 + x66);
+ { uint64_t x119 = (x118 >> 0x18);
+ { uint32_t x120 = ((uint32_t)x118 & 0xffffff);
+ { uint64_t x121 = (x119 + x65);
+ { uint64_t x122 = (x121 >> 0x18);
+ { uint32_t x123 = ((uint32_t)x121 & 0xffffff);
+ { uint64_t x124 = (x122 + x64);
+ { uint64_t x125 = (x124 >> 0x17);
+ { uint32_t x126 = ((uint32_t)x124 & 0x7fffff);
+ { uint64_t x127 = (x81 + (0x13 * x125));
+ { uint32_t x128 = (uint32_t) (x127 >> 0x18);
+ { uint32_t x129 = ((uint32_t)x127 & 0xffffff);
+ { uint32_t x130 = (x128 + x84);
+ { uint32_t x131 = (x130 >> 0x18);
+ { uint32_t x132 = (x130 & 0xffffff);
+ out[0] = x129;
+ out[1] = x132;
+ out[2] = (x131 + x87);
+ out[3] = x90;
+ out[4] = x93;
+ out[5] = x96;
+ out[6] = x99;
+ out[7] = x102;
+ out[8] = x105;
+ out[9] = x108;
+ out[10] = x111;
+ out[11] = x114;
+ out[12] = x117;
+ out[13] = x120;
+ out[14] = x123;
+ out[15] = x126;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e379m19_16limbs/femulDisplay.log b/src/Specific/solinas32_2e379m19_16limbs/femulDisplay.log
new file mode 100644
index 000000000..79f7def10
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19_16limbs/femulDisplay.log
@@ -0,0 +1,76 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x32, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x62, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35))%core,
+ uint64_t x64 = (((uint64_t)x5 * x62) + (((uint64_t)x7 * x63) + (((uint64_t)x9 * x61) + ((0x2 * ((uint64_t)x11 * x59)) + (((uint64_t)x13 * x57) + (((uint64_t)x15 * x55) + ((0x2 * ((uint64_t)x17 * x53)) + (((uint64_t)x19 * x51) + (((uint64_t)x21 * x49) + ((0x2 * ((uint64_t)x23 * x47)) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + (((uint64_t)x33 * x37) + ((uint64_t)x32 * x35))))))))))))))));
+ uint64_t x65 = ((((uint64_t)x5 * x63) + (((uint64_t)x7 * x61) + ((0x2 * ((uint64_t)x9 * x59)) + ((0x2 * ((uint64_t)x11 * x57)) + (((uint64_t)x13 * x55) + ((0x2 * ((uint64_t)x15 * x53)) + ((0x2 * ((uint64_t)x17 * x51)) + (((uint64_t)x19 * x49) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + (((uint64_t)x25 * x43) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + (((uint64_t)x31 * x37) + ((uint64_t)x33 * x35))))))))))))))) + (0x13 * (0x2 * ((uint64_t)x32 * x62))));
+ uint64_t x66 = ((((uint64_t)x5 * x61) + ((0x2 * ((uint64_t)x7 * x59)) + ((0x2 * ((uint64_t)x9 * x57)) + ((0x2 * ((uint64_t)x11 * x55)) + ((0x2 * ((uint64_t)x13 * x53)) + ((0x2 * ((uint64_t)x15 * x51)) + ((0x2 * ((uint64_t)x17 * x49)) + ((0x2 * ((uint64_t)x19 * x47)) + ((0x2 * ((uint64_t)x21 * x45)) + ((0x2 * ((uint64_t)x23 * x43)) + ((0x2 * ((uint64_t)x25 * x41)) + ((0x2 * ((uint64_t)x27 * x39)) + ((0x2 * ((uint64_t)x29 * x37)) + ((uint64_t)x31 * x35)))))))))))))) + (0x13 * ((0x2 * ((uint64_t)x33 * x62)) + (0x2 * ((uint64_t)x32 * x63)))));
+ uint64_t x67 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + (((uint64_t)x9 * x55) + ((0x2 * ((uint64_t)x11 * x53)) + (((uint64_t)x13 * x51) + (((uint64_t)x15 * x49) + ((0x2 * ((uint64_t)x17 * x47)) + (((uint64_t)x19 * x45) + (((uint64_t)x21 * x43) + ((0x2 * ((uint64_t)x23 * x41)) + (((uint64_t)x25 * x39) + (((uint64_t)x27 * x37) + ((uint64_t)x29 * x35))))))))))))) + (0x13 * (((uint64_t)x31 * x62) + (((uint64_t)x33 * x63) + ((uint64_t)x32 * x61)))));
+ uint64_t x68 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + ((0x2 * ((uint64_t)x9 * x53)) + ((0x2 * ((uint64_t)x11 * x51)) + (((uint64_t)x13 * x49) + ((0x2 * ((uint64_t)x15 * x47)) + ((0x2 * ((uint64_t)x17 * x45)) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + ((0x2 * ((uint64_t)x23 * x39)) + (((uint64_t)x25 * x37) + ((uint64_t)x27 * x35)))))))))))) + (0x13 * ((0x2 * ((uint64_t)x29 * x62)) + (((uint64_t)x31 * x63) + (((uint64_t)x33 * x61) + (0x2 * ((uint64_t)x32 * x59)))))));
+ uint64_t x69 = ((((uint64_t)x5 * x55) + ((0x2 * ((uint64_t)x7 * x53)) + ((0x2 * ((uint64_t)x9 * x51)) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + ((0x2 * ((uint64_t)x21 * x39)) + ((0x2 * ((uint64_t)x23 * x37)) + ((uint64_t)x25 * x35))))))))))) + (0x13 * ((0x2 * ((uint64_t)x27 * x62)) + ((0x2 * ((uint64_t)x29 * x63)) + (((uint64_t)x31 * x61) + ((0x2 * ((uint64_t)x33 * x59)) + (0x2 * ((uint64_t)x32 * x57))))))));
+ uint64_t x70 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + (((uint64_t)x9 * x49) + ((0x2 * ((uint64_t)x11 * x47)) + (((uint64_t)x13 * x45) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + (((uint64_t)x19 * x39) + (((uint64_t)x21 * x37) + ((uint64_t)x23 * x35)))))))))) + (0x13 * (((uint64_t)x25 * x62) + (((uint64_t)x27 * x63) + (((uint64_t)x29 * x61) + (((uint64_t)x31 * x59) + (((uint64_t)x33 * x57) + ((uint64_t)x32 * x55))))))));
+ uint64_t x71 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + ((0x2 * ((uint64_t)x9 * x47)) + ((0x2 * ((uint64_t)x11 * x45)) + (((uint64_t)x13 * x43) + ((0x2 * ((uint64_t)x15 * x41)) + ((0x2 * ((uint64_t)x17 * x39)) + (((uint64_t)x19 * x37) + ((uint64_t)x21 * x35))))))))) + (0x13 * ((0x2 * ((uint64_t)x23 * x62)) + (((uint64_t)x25 * x63) + (((uint64_t)x27 * x61) + ((0x2 * ((uint64_t)x29 * x59)) + (((uint64_t)x31 * x57) + (((uint64_t)x33 * x55) + (0x2 * ((uint64_t)x32 * x53))))))))));
+ uint64_t x72 = ((((uint64_t)x5 * x49) + ((0x2 * ((uint64_t)x7 * x47)) + ((0x2 * ((uint64_t)x9 * x45)) + ((0x2 * ((uint64_t)x11 * x43)) + ((0x2 * ((uint64_t)x13 * x41)) + ((0x2 * ((uint64_t)x15 * x39)) + ((0x2 * ((uint64_t)x17 * x37)) + ((uint64_t)x19 * x35)))))))) + (0x13 * ((0x2 * ((uint64_t)x21 * x62)) + ((0x2 * ((uint64_t)x23 * x63)) + (((uint64_t)x25 * x61) + ((0x2 * ((uint64_t)x27 * x59)) + ((0x2 * ((uint64_t)x29 * x57)) + (((uint64_t)x31 * x55) + ((0x2 * ((uint64_t)x33 * x53)) + (0x2 * ((uint64_t)x32 * x51)))))))))));
+ uint64_t x73 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + ((0x2 * ((uint64_t)x11 * x41)) + (((uint64_t)x13 * x39) + (((uint64_t)x15 * x37) + ((uint64_t)x17 * x35))))))) + (0x13 * (((uint64_t)x19 * x62) + (((uint64_t)x21 * x63) + (((uint64_t)x23 * x61) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + (((uint64_t)x29 * x55) + (((uint64_t)x31 * x53) + (((uint64_t)x33 * x51) + ((uint64_t)x32 * x49)))))))))));
+ uint64_t x74 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + ((0x2 * ((uint64_t)x11 * x39)) + (((uint64_t)x13 * x37) + ((uint64_t)x15 * x35)))))) + (0x13 * ((0x2 * ((uint64_t)x17 * x62)) + (((uint64_t)x19 * x63) + (((uint64_t)x21 * x61) + ((0x2 * ((uint64_t)x23 * x59)) + (((uint64_t)x25 * x57) + (((uint64_t)x27 * x55) + ((0x2 * ((uint64_t)x29 * x53)) + (((uint64_t)x31 * x51) + (((uint64_t)x33 * x49) + (0x2 * ((uint64_t)x32 * x47)))))))))))));
+ uint64_t x75 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((0x2 * ((uint64_t)x11 * x37)) + ((uint64_t)x13 * x35))))) + (0x13 * ((0x2 * ((uint64_t)x15 * x62)) + ((0x2 * ((uint64_t)x17 * x63)) + (((uint64_t)x19 * x61) + ((0x2 * ((uint64_t)x21 * x59)) + ((0x2 * ((uint64_t)x23 * x57)) + (((uint64_t)x25 * x55) + ((0x2 * ((uint64_t)x27 * x53)) + ((0x2 * ((uint64_t)x29 * x51)) + (((uint64_t)x31 * x49) + ((0x2 * ((uint64_t)x33 * x47)) + (0x2 * ((uint64_t)x32 * x45))))))))))))));
+ uint64_t x76 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + ((uint64_t)x11 * x35)))) + (0x13 * (((uint64_t)x13 * x62) + (((uint64_t)x15 * x63) + (((uint64_t)x17 * x61) + (((uint64_t)x19 * x59) + (((uint64_t)x21 * x57) + (((uint64_t)x23 * x55) + (((uint64_t)x25 * x53) + (((uint64_t)x27 * x51) + (((uint64_t)x29 * x49) + (((uint64_t)x31 * x47) + (((uint64_t)x33 * x45) + ((uint64_t)x32 * x43))))))))))))));
+ uint64_t x77 = ((((uint64_t)x5 * x39) + (((uint64_t)x7 * x37) + ((uint64_t)x9 * x35))) + (0x13 * ((0x2 * ((uint64_t)x11 * x62)) + (((uint64_t)x13 * x63) + (((uint64_t)x15 * x61) + ((0x2 * ((uint64_t)x17 * x59)) + (((uint64_t)x19 * x57) + (((uint64_t)x21 * x55) + ((0x2 * ((uint64_t)x23 * x53)) + (((uint64_t)x25 * x51) + (((uint64_t)x27 * x49) + ((0x2 * ((uint64_t)x29 * x47)) + (((uint64_t)x31 * x45) + (((uint64_t)x33 * x43) + (0x2 * ((uint64_t)x32 * x41))))))))))))))));
+ uint64_t x78 = ((((uint64_t)x5 * x37) + ((uint64_t)x7 * x35)) + (0x13 * ((0x2 * ((uint64_t)x9 * x62)) + ((0x2 * ((uint64_t)x11 * x63)) + (((uint64_t)x13 * x61) + ((0x2 * ((uint64_t)x15 * x59)) + ((0x2 * ((uint64_t)x17 * x57)) + (((uint64_t)x19 * x55) + ((0x2 * ((uint64_t)x21 * x53)) + ((0x2 * ((uint64_t)x23 * x51)) + (((uint64_t)x25 * x49) + ((0x2 * ((uint64_t)x27 * x47)) + ((0x2 * ((uint64_t)x29 * x45)) + (((uint64_t)x31 * x43) + ((0x2 * ((uint64_t)x33 * x41)) + (0x2 * ((uint64_t)x32 * x39)))))))))))))))));
+ uint64_t x79 = (((uint64_t)x5 * x35) + (0x13 * ((0x2 * ((uint64_t)x7 * x62)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + (0x2 * ((uint64_t)x32 * x37))))))))))))))))));
+ uint64_t x80 = (x79 >> 0x18);
+ uint32_t x81 = ((uint32_t)x79 & 0xffffff);
+ uint64_t x82 = (x80 + x78);
+ uint64_t x83 = (x82 >> 0x18);
+ uint32_t x84 = ((uint32_t)x82 & 0xffffff);
+ uint64_t x85 = (x83 + x77);
+ uint64_t x86 = (x85 >> 0x18);
+ uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ uint64_t x88 = (x86 + x76);
+ uint64_t x89 = (x88 >> 0x17);
+ uint32_t x90 = ((uint32_t)x88 & 0x7fffff);
+ uint64_t x91 = (x89 + x75);
+ uint64_t x92 = (x91 >> 0x18);
+ uint32_t x93 = ((uint32_t)x91 & 0xffffff);
+ uint64_t x94 = (x92 + x74);
+ uint64_t x95 = (x94 >> 0x18);
+ uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ uint64_t x97 = (x95 + x73);
+ uint64_t x98 = (x97 >> 0x17);
+ uint32_t x99 = ((uint32_t)x97 & 0x7fffff);
+ uint64_t x100 = (x98 + x72);
+ uint64_t x101 = (x100 >> 0x18);
+ uint32_t x102 = ((uint32_t)x100 & 0xffffff);
+ uint64_t x103 = (x101 + x71);
+ uint64_t x104 = (x103 >> 0x18);
+ uint32_t x105 = ((uint32_t)x103 & 0xffffff);
+ uint64_t x106 = (x104 + x70);
+ uint64_t x107 = (x106 >> 0x17);
+ uint32_t x108 = ((uint32_t)x106 & 0x7fffff);
+ uint64_t x109 = (x107 + x69);
+ uint64_t x110 = (x109 >> 0x18);
+ uint32_t x111 = ((uint32_t)x109 & 0xffffff);
+ uint64_t x112 = (x110 + x68);
+ uint64_t x113 = (x112 >> 0x18);
+ uint32_t x114 = ((uint32_t)x112 & 0xffffff);
+ uint64_t x115 = (x113 + x67);
+ uint64_t x116 = (x115 >> 0x17);
+ uint32_t x117 = ((uint32_t)x115 & 0x7fffff);
+ uint64_t x118 = (x116 + x66);
+ uint64_t x119 = (x118 >> 0x18);
+ uint32_t x120 = ((uint32_t)x118 & 0xffffff);
+ uint64_t x121 = (x119 + x65);
+ uint64_t x122 = (x121 >> 0x18);
+ uint32_t x123 = ((uint32_t)x121 & 0xffffff);
+ uint64_t x124 = (x122 + x64);
+ uint64_t x125 = (x124 >> 0x17);
+ uint32_t x126 = ((uint32_t)x124 & 0x7fffff);
+ uint64_t x127 = (x81 + (0x13 * x125));
+ uint32_t x128 = (uint32_t) (x127 >> 0x18);
+ uint32_t x129 = ((uint32_t)x127 & 0xffffff);
+ uint32_t x130 = (x128 + x84);
+ uint32_t x131 = (x130 >> 0x18);
+ uint32_t x132 = (x130 & 0xffffff);
+ return (Return x126, Return x123, Return x120, Return x117, Return x114, Return x111, Return x108, Return x105, Return x102, Return x99, Return x96, Return x93, Return x90, (x131 + x87), Return x132, Return x129))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e382m105_16limbs/femul.c b/src/Specific/solinas32_2e382m105_16limbs/femul.c
new file mode 100644
index 000000000..000c5addd
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105_16limbs/femul.c
@@ -0,0 +1,120 @@
+static void femul(uint32_t out[16], const uint32_t in1[16], const uint32_t in2[16]) {
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x62 = in2[15];
+ { const uint32_t x63 = in2[14];
+ { const uint32_t x61 = in2[13];
+ { const uint32_t x59 = in2[12];
+ { const uint32_t x57 = in2[11];
+ { const uint32_t x55 = in2[10];
+ { const uint32_t x53 = in2[9];
+ { const uint32_t x51 = in2[8];
+ { const uint32_t x49 = in2[7];
+ { const uint32_t x47 = in2[6];
+ { const uint32_t x45 = in2[5];
+ { const uint32_t x43 = in2[4];
+ { const uint32_t x41 = in2[3];
+ { const uint32_t x39 = in2[2];
+ { const uint32_t x37 = in2[1];
+ { const uint32_t x35 = in2[0];
+ { uint64_t x64 = (((uint64_t)x5 * x62) + (((uint64_t)x7 * x63) + (((uint64_t)x9 * x61) + (((uint64_t)x11 * x59) + (((uint64_t)x13 * x57) + (((uint64_t)x15 * x55) + (((uint64_t)x17 * x53) + (((uint64_t)x19 * x51) + (((uint64_t)x21 * x49) + (((uint64_t)x23 * x47) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + (((uint64_t)x29 * x41) + (((uint64_t)x31 * x39) + (((uint64_t)x33 * x37) + ((uint64_t)x32 * x35))))))))))))))));
+ { uint64_t x65 = ((((uint64_t)x5 * x63) + (((uint64_t)x7 * x61) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + (((uint64_t)x13 * x55) + (((uint64_t)x15 * x53) + (((uint64_t)x17 * x51) + ((0x2 * ((uint64_t)x19 * x49)) + (((uint64_t)x21 * x47) + (((uint64_t)x23 * x45) + (((uint64_t)x25 * x43) + (((uint64_t)x27 * x41) + (((uint64_t)x29 * x39) + (((uint64_t)x31 * x37) + ((uint64_t)x33 * x35))))))))))))))) + (0x69 * (0x2 * ((uint64_t)x32 * x62))));
+ { uint64_t x66 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + ((0x2 * ((uint64_t)x17 * x49)) + ((0x2 * ((uint64_t)x19 * x47)) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + (((uint64_t)x29 * x37) + ((uint64_t)x31 * x35)))))))))))))) + (0x69 * ((0x2 * ((uint64_t)x33 * x62)) + (0x2 * ((uint64_t)x32 * x63)))));
+ { uint64_t x67 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + (((uint64_t)x9 * x55) + (((uint64_t)x11 * x53) + (((uint64_t)x13 * x51) + ((0x2 * ((uint64_t)x15 * x49)) + ((0x2 * ((uint64_t)x17 * x47)) + ((0x2 * ((uint64_t)x19 * x45)) + (((uint64_t)x21 * x43) + (((uint64_t)x23 * x41) + (((uint64_t)x25 * x39) + (((uint64_t)x27 * x37) + ((uint64_t)x29 * x35))))))))))))) + (0x69 * ((0x2 * ((uint64_t)x31 * x62)) + ((0x2 * ((uint64_t)x33 * x63)) + (0x2 * ((uint64_t)x32 * x61))))));
+ { uint64_t x68 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + (((uint64_t)x9 * x53) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + ((0x2 * ((uint64_t)x15 * x47)) + ((0x2 * ((uint64_t)x17 * x45)) + ((0x2 * ((uint64_t)x19 * x43)) + (((uint64_t)x21 * x41) + (((uint64_t)x23 * x39) + (((uint64_t)x25 * x37) + ((uint64_t)x27 * x35)))))))))))) + (0x69 * ((0x2 * ((uint64_t)x29 * x62)) + ((0x2 * ((uint64_t)x31 * x63)) + ((0x2 * ((uint64_t)x33 * x61)) + (0x2 * ((uint64_t)x32 * x59)))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + (((uint64_t)x21 * x39) + (((uint64_t)x23 * x37) + ((uint64_t)x25 * x35))))))))))) + (0x69 * ((0x2 * ((uint64_t)x27 * x62)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + ((0x2 * ((uint64_t)x33 * x59)) + (0x2 * ((uint64_t)x32 * x57))))))));
+ { uint64_t x70 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + ((0x2 * ((uint64_t)x9 * x49)) + ((0x2 * ((uint64_t)x11 * x47)) + ((0x2 * ((uint64_t)x13 * x45)) + ((0x2 * ((uint64_t)x15 * x43)) + ((0x2 * ((uint64_t)x17 * x41)) + ((0x2 * ((uint64_t)x19 * x39)) + (((uint64_t)x21 * x37) + ((uint64_t)x23 * x35)))))))))) + (0x69 * ((0x2 * ((uint64_t)x25 * x62)) + ((0x2 * ((uint64_t)x27 * x63)) + ((0x2 * ((uint64_t)x29 * x61)) + ((0x2 * ((uint64_t)x31 * x59)) + ((0x2 * ((uint64_t)x33 * x57)) + (0x2 * ((uint64_t)x32 * x55)))))))));
+ { uint64_t x71 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + ((0x2 * ((uint64_t)x9 * x47)) + ((0x2 * ((uint64_t)x11 * x45)) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + ((0x2 * ((uint64_t)x17 * x39)) + ((0x2 * ((uint64_t)x19 * x37)) + ((uint64_t)x21 * x35))))))))) + (0x69 * ((0x2 * ((uint64_t)x23 * x62)) + ((0x2 * ((uint64_t)x25 * x63)) + ((0x2 * ((uint64_t)x27 * x61)) + ((0x2 * ((uint64_t)x29 * x59)) + ((0x2 * ((uint64_t)x31 * x57)) + ((0x2 * ((uint64_t)x33 * x55)) + (0x2 * ((uint64_t)x32 * x53))))))))));
+ { uint64_t x72 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + (((uint64_t)x9 * x45) + (((uint64_t)x11 * x43) + (((uint64_t)x13 * x41) + (((uint64_t)x15 * x39) + (((uint64_t)x17 * x37) + ((uint64_t)x19 * x35)))))))) + (0x69 * (((uint64_t)x21 * x62) + (((uint64_t)x23 * x63) + (((uint64_t)x25 * x61) + (((uint64_t)x27 * x59) + (((uint64_t)x29 * x57) + (((uint64_t)x31 * x55) + (((uint64_t)x33 * x53) + ((uint64_t)x32 * x51))))))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + (((uint64_t)x11 * x41) + (((uint64_t)x13 * x39) + (((uint64_t)x15 * x37) + ((uint64_t)x17 * x35))))))) + (0x69 * ((0x2 * ((uint64_t)x19 * x62)) + (((uint64_t)x21 * x63) + (((uint64_t)x23 * x61) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + (((uint64_t)x29 * x55) + (((uint64_t)x31 * x53) + (((uint64_t)x33 * x51) + (0x2 * ((uint64_t)x32 * x49))))))))))));
+ { uint64_t x74 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + (((uint64_t)x9 * x41) + (((uint64_t)x11 * x39) + (((uint64_t)x13 * x37) + ((uint64_t)x15 * x35)))))) + (0x69 * ((0x2 * ((uint64_t)x17 * x62)) + ((0x2 * ((uint64_t)x19 * x63)) + (((uint64_t)x21 * x61) + (((uint64_t)x23 * x59) + (((uint64_t)x25 * x57) + (((uint64_t)x27 * x55) + (((uint64_t)x29 * x53) + (((uint64_t)x31 * x51) + ((0x2 * ((uint64_t)x33 * x49)) + (0x2 * ((uint64_t)x32 * x47)))))))))))));
+ { uint64_t x75 = ((((uint64_t)x5 * x43) + (((uint64_t)x7 * x41) + (((uint64_t)x9 * x39) + (((uint64_t)x11 * x37) + ((uint64_t)x13 * x35))))) + (0x69 * ((0x2 * ((uint64_t)x15 * x62)) + ((0x2 * ((uint64_t)x17 * x63)) + ((0x2 * ((uint64_t)x19 * x61)) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + (((uint64_t)x29 * x51) + ((0x2 * ((uint64_t)x31 * x49)) + ((0x2 * ((uint64_t)x33 * x47)) + (0x2 * ((uint64_t)x32 * x45))))))))))))));
+ { uint64_t x76 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + ((uint64_t)x11 * x35)))) + (0x69 * ((0x2 * ((uint64_t)x13 * x62)) + ((0x2 * ((uint64_t)x15 * x63)) + ((0x2 * ((uint64_t)x17 * x61)) + ((0x2 * ((uint64_t)x19 * x59)) + (((uint64_t)x21 * x57) + (((uint64_t)x23 * x55) + (((uint64_t)x25 * x53) + (((uint64_t)x27 * x51) + ((0x2 * ((uint64_t)x29 * x49)) + ((0x2 * ((uint64_t)x31 * x47)) + ((0x2 * ((uint64_t)x33 * x45)) + (0x2 * ((uint64_t)x32 * x43)))))))))))))));
+ { uint64_t x77 = ((((uint64_t)x5 * x39) + (((uint64_t)x7 * x37) + ((uint64_t)x9 * x35))) + (0x69 * ((0x2 * ((uint64_t)x11 * x62)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + (((uint64_t)x21 * x55) + (((uint64_t)x23 * x53) + (((uint64_t)x25 * x51) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + (0x2 * ((uint64_t)x32 * x41))))))))))))))));
+ { uint64_t x78 = ((((uint64_t)x5 * x37) + ((uint64_t)x7 * x35)) + (0x69 * ((0x2 * ((uint64_t)x9 * x62)) + ((0x2 * ((uint64_t)x11 * x63)) + ((0x2 * ((uint64_t)x13 * x61)) + ((0x2 * ((uint64_t)x15 * x59)) + ((0x2 * ((uint64_t)x17 * x57)) + ((0x2 * ((uint64_t)x19 * x55)) + (((uint64_t)x21 * x53) + (((uint64_t)x23 * x51) + ((0x2 * ((uint64_t)x25 * x49)) + ((0x2 * ((uint64_t)x27 * x47)) + ((0x2 * ((uint64_t)x29 * x45)) + ((0x2 * ((uint64_t)x31 * x43)) + ((0x2 * ((uint64_t)x33 * x41)) + (0x2 * ((uint64_t)x32 * x39)))))))))))))))));
+ { uint64_t x79 = (((uint64_t)x5 * x35) + (0x69 * ((0x2 * ((uint64_t)x7 * x62)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + (((uint64_t)x21 * x51) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + (0x2 * ((uint64_t)x32 * x37))))))))))))))))));
+ { uint64_t x80 = (x79 >> 0x18);
+ { uint32_t x81 = ((uint32_t)x79 & 0xffffff);
+ { uint64_t x82 = (x80 + x78);
+ { uint64_t x83 = (x82 >> 0x18);
+ { uint32_t x84 = ((uint32_t)x82 & 0xffffff);
+ { uint64_t x85 = (x83 + x77);
+ { uint64_t x86 = (x85 >> 0x18);
+ { uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ { uint64_t x88 = (x86 + x76);
+ { uint64_t x89 = (x88 >> 0x18);
+ { uint32_t x90 = ((uint32_t)x88 & 0xffffff);
+ { uint64_t x91 = (x89 + x75);
+ { uint64_t x92 = (x91 >> 0x18);
+ { uint32_t x93 = ((uint32_t)x91 & 0xffffff);
+ { uint64_t x94 = (x92 + x74);
+ { uint64_t x95 = (x94 >> 0x18);
+ { uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ { uint64_t x97 = (x95 + x73);
+ { uint64_t x98 = (x97 >> 0x18);
+ { uint32_t x99 = ((uint32_t)x97 & 0xffffff);
+ { uint64_t x100 = (x98 + x72);
+ { uint64_t x101 = (x100 >> 0x17);
+ { uint32_t x102 = ((uint32_t)x100 & 0x7fffff);
+ { uint64_t x103 = (x101 + x71);
+ { uint64_t x104 = (x103 >> 0x18);
+ { uint32_t x105 = ((uint32_t)x103 & 0xffffff);
+ { uint64_t x106 = (x104 + x70);
+ { uint64_t x107 = (x106 >> 0x18);
+ { uint32_t x108 = ((uint32_t)x106 & 0xffffff);
+ { uint64_t x109 = (x107 + x69);
+ { uint64_t x110 = (x109 >> 0x18);
+ { uint32_t x111 = ((uint32_t)x109 & 0xffffff);
+ { uint64_t x112 = (x110 + x68);
+ { uint64_t x113 = (x112 >> 0x18);
+ { uint32_t x114 = ((uint32_t)x112 & 0xffffff);
+ { uint64_t x115 = (x113 + x67);
+ { uint64_t x116 = (x115 >> 0x18);
+ { uint32_t x117 = ((uint32_t)x115 & 0xffffff);
+ { uint64_t x118 = (x116 + x66);
+ { uint64_t x119 = (x118 >> 0x18);
+ { uint32_t x120 = ((uint32_t)x118 & 0xffffff);
+ { uint64_t x121 = (x119 + x65);
+ { uint64_t x122 = (x121 >> 0x18);
+ { uint32_t x123 = ((uint32_t)x121 & 0xffffff);
+ { uint64_t x124 = (x122 + x64);
+ { uint64_t x125 = (x124 >> 0x17);
+ { uint32_t x126 = ((uint32_t)x124 & 0x7fffff);
+ { uint64_t x127 = (x81 + (0x69 * x125));
+ { uint32_t x128 = (uint32_t) (x127 >> 0x18);
+ { uint32_t x129 = ((uint32_t)x127 & 0xffffff);
+ { uint32_t x130 = (x128 + x84);
+ { uint32_t x131 = (x130 >> 0x18);
+ { uint32_t x132 = (x130 & 0xffffff);
+ out[0] = x129;
+ out[1] = x132;
+ out[2] = (x131 + x87);
+ out[3] = x90;
+ out[4] = x93;
+ out[5] = x96;
+ out[6] = x99;
+ out[7] = x102;
+ out[8] = x105;
+ out[9] = x108;
+ out[10] = x111;
+ out[11] = x114;
+ out[12] = x117;
+ out[13] = x120;
+ out[14] = x123;
+ out[15] = x126;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e382m105_16limbs/femulDisplay.log b/src/Specific/solinas32_2e382m105_16limbs/femulDisplay.log
new file mode 100644
index 000000000..4788b52da
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105_16limbs/femulDisplay.log
@@ -0,0 +1,76 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x32, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x62, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35))%core,
+ uint64_t x64 = (((uint64_t)x5 * x62) + (((uint64_t)x7 * x63) + (((uint64_t)x9 * x61) + (((uint64_t)x11 * x59) + (((uint64_t)x13 * x57) + (((uint64_t)x15 * x55) + (((uint64_t)x17 * x53) + (((uint64_t)x19 * x51) + (((uint64_t)x21 * x49) + (((uint64_t)x23 * x47) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + (((uint64_t)x29 * x41) + (((uint64_t)x31 * x39) + (((uint64_t)x33 * x37) + ((uint64_t)x32 * x35))))))))))))))));
+ uint64_t x65 = ((((uint64_t)x5 * x63) + (((uint64_t)x7 * x61) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + (((uint64_t)x13 * x55) + (((uint64_t)x15 * x53) + (((uint64_t)x17 * x51) + ((0x2 * ((uint64_t)x19 * x49)) + (((uint64_t)x21 * x47) + (((uint64_t)x23 * x45) + (((uint64_t)x25 * x43) + (((uint64_t)x27 * x41) + (((uint64_t)x29 * x39) + (((uint64_t)x31 * x37) + ((uint64_t)x33 * x35))))))))))))))) + (0x69 * (0x2 * ((uint64_t)x32 * x62))));
+ uint64_t x66 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + ((0x2 * ((uint64_t)x17 * x49)) + ((0x2 * ((uint64_t)x19 * x47)) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + (((uint64_t)x29 * x37) + ((uint64_t)x31 * x35)))))))))))))) + (0x69 * ((0x2 * ((uint64_t)x33 * x62)) + (0x2 * ((uint64_t)x32 * x63)))));
+ uint64_t x67 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + (((uint64_t)x9 * x55) + (((uint64_t)x11 * x53) + (((uint64_t)x13 * x51) + ((0x2 * ((uint64_t)x15 * x49)) + ((0x2 * ((uint64_t)x17 * x47)) + ((0x2 * ((uint64_t)x19 * x45)) + (((uint64_t)x21 * x43) + (((uint64_t)x23 * x41) + (((uint64_t)x25 * x39) + (((uint64_t)x27 * x37) + ((uint64_t)x29 * x35))))))))))))) + (0x69 * ((0x2 * ((uint64_t)x31 * x62)) + ((0x2 * ((uint64_t)x33 * x63)) + (0x2 * ((uint64_t)x32 * x61))))));
+ uint64_t x68 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + (((uint64_t)x9 * x53) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + ((0x2 * ((uint64_t)x15 * x47)) + ((0x2 * ((uint64_t)x17 * x45)) + ((0x2 * ((uint64_t)x19 * x43)) + (((uint64_t)x21 * x41) + (((uint64_t)x23 * x39) + (((uint64_t)x25 * x37) + ((uint64_t)x27 * x35)))))))))))) + (0x69 * ((0x2 * ((uint64_t)x29 * x62)) + ((0x2 * ((uint64_t)x31 * x63)) + ((0x2 * ((uint64_t)x33 * x61)) + (0x2 * ((uint64_t)x32 * x59)))))));
+ uint64_t x69 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + (((uint64_t)x21 * x39) + (((uint64_t)x23 * x37) + ((uint64_t)x25 * x35))))))))))) + (0x69 * ((0x2 * ((uint64_t)x27 * x62)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + ((0x2 * ((uint64_t)x33 * x59)) + (0x2 * ((uint64_t)x32 * x57))))))));
+ uint64_t x70 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + ((0x2 * ((uint64_t)x9 * x49)) + ((0x2 * ((uint64_t)x11 * x47)) + ((0x2 * ((uint64_t)x13 * x45)) + ((0x2 * ((uint64_t)x15 * x43)) + ((0x2 * ((uint64_t)x17 * x41)) + ((0x2 * ((uint64_t)x19 * x39)) + (((uint64_t)x21 * x37) + ((uint64_t)x23 * x35)))))))))) + (0x69 * ((0x2 * ((uint64_t)x25 * x62)) + ((0x2 * ((uint64_t)x27 * x63)) + ((0x2 * ((uint64_t)x29 * x61)) + ((0x2 * ((uint64_t)x31 * x59)) + ((0x2 * ((uint64_t)x33 * x57)) + (0x2 * ((uint64_t)x32 * x55)))))))));
+ uint64_t x71 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + ((0x2 * ((uint64_t)x9 * x47)) + ((0x2 * ((uint64_t)x11 * x45)) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + ((0x2 * ((uint64_t)x17 * x39)) + ((0x2 * ((uint64_t)x19 * x37)) + ((uint64_t)x21 * x35))))))))) + (0x69 * ((0x2 * ((uint64_t)x23 * x62)) + ((0x2 * ((uint64_t)x25 * x63)) + ((0x2 * ((uint64_t)x27 * x61)) + ((0x2 * ((uint64_t)x29 * x59)) + ((0x2 * ((uint64_t)x31 * x57)) + ((0x2 * ((uint64_t)x33 * x55)) + (0x2 * ((uint64_t)x32 * x53))))))))));
+ uint64_t x72 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + (((uint64_t)x9 * x45) + (((uint64_t)x11 * x43) + (((uint64_t)x13 * x41) + (((uint64_t)x15 * x39) + (((uint64_t)x17 * x37) + ((uint64_t)x19 * x35)))))))) + (0x69 * (((uint64_t)x21 * x62) + (((uint64_t)x23 * x63) + (((uint64_t)x25 * x61) + (((uint64_t)x27 * x59) + (((uint64_t)x29 * x57) + (((uint64_t)x31 * x55) + (((uint64_t)x33 * x53) + ((uint64_t)x32 * x51))))))))));
+ uint64_t x73 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + (((uint64_t)x11 * x41) + (((uint64_t)x13 * x39) + (((uint64_t)x15 * x37) + ((uint64_t)x17 * x35))))))) + (0x69 * ((0x2 * ((uint64_t)x19 * x62)) + (((uint64_t)x21 * x63) + (((uint64_t)x23 * x61) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + (((uint64_t)x29 * x55) + (((uint64_t)x31 * x53) + (((uint64_t)x33 * x51) + (0x2 * ((uint64_t)x32 * x49))))))))))));
+ uint64_t x74 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + (((uint64_t)x9 * x41) + (((uint64_t)x11 * x39) + (((uint64_t)x13 * x37) + ((uint64_t)x15 * x35)))))) + (0x69 * ((0x2 * ((uint64_t)x17 * x62)) + ((0x2 * ((uint64_t)x19 * x63)) + (((uint64_t)x21 * x61) + (((uint64_t)x23 * x59) + (((uint64_t)x25 * x57) + (((uint64_t)x27 * x55) + (((uint64_t)x29 * x53) + (((uint64_t)x31 * x51) + ((0x2 * ((uint64_t)x33 * x49)) + (0x2 * ((uint64_t)x32 * x47)))))))))))));
+ uint64_t x75 = ((((uint64_t)x5 * x43) + (((uint64_t)x7 * x41) + (((uint64_t)x9 * x39) + (((uint64_t)x11 * x37) + ((uint64_t)x13 * x35))))) + (0x69 * ((0x2 * ((uint64_t)x15 * x62)) + ((0x2 * ((uint64_t)x17 * x63)) + ((0x2 * ((uint64_t)x19 * x61)) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + (((uint64_t)x29 * x51) + ((0x2 * ((uint64_t)x31 * x49)) + ((0x2 * ((uint64_t)x33 * x47)) + (0x2 * ((uint64_t)x32 * x45))))))))))))));
+ uint64_t x76 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + ((uint64_t)x11 * x35)))) + (0x69 * ((0x2 * ((uint64_t)x13 * x62)) + ((0x2 * ((uint64_t)x15 * x63)) + ((0x2 * ((uint64_t)x17 * x61)) + ((0x2 * ((uint64_t)x19 * x59)) + (((uint64_t)x21 * x57) + (((uint64_t)x23 * x55) + (((uint64_t)x25 * x53) + (((uint64_t)x27 * x51) + ((0x2 * ((uint64_t)x29 * x49)) + ((0x2 * ((uint64_t)x31 * x47)) + ((0x2 * ((uint64_t)x33 * x45)) + (0x2 * ((uint64_t)x32 * x43)))))))))))))));
+ uint64_t x77 = ((((uint64_t)x5 * x39) + (((uint64_t)x7 * x37) + ((uint64_t)x9 * x35))) + (0x69 * ((0x2 * ((uint64_t)x11 * x62)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + (((uint64_t)x21 * x55) + (((uint64_t)x23 * x53) + (((uint64_t)x25 * x51) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + (0x2 * ((uint64_t)x32 * x41))))))))))))))));
+ uint64_t x78 = ((((uint64_t)x5 * x37) + ((uint64_t)x7 * x35)) + (0x69 * ((0x2 * ((uint64_t)x9 * x62)) + ((0x2 * ((uint64_t)x11 * x63)) + ((0x2 * ((uint64_t)x13 * x61)) + ((0x2 * ((uint64_t)x15 * x59)) + ((0x2 * ((uint64_t)x17 * x57)) + ((0x2 * ((uint64_t)x19 * x55)) + (((uint64_t)x21 * x53) + (((uint64_t)x23 * x51) + ((0x2 * ((uint64_t)x25 * x49)) + ((0x2 * ((uint64_t)x27 * x47)) + ((0x2 * ((uint64_t)x29 * x45)) + ((0x2 * ((uint64_t)x31 * x43)) + ((0x2 * ((uint64_t)x33 * x41)) + (0x2 * ((uint64_t)x32 * x39)))))))))))))))));
+ uint64_t x79 = (((uint64_t)x5 * x35) + (0x69 * ((0x2 * ((uint64_t)x7 * x62)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + (((uint64_t)x21 * x51) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + (0x2 * ((uint64_t)x32 * x37))))))))))))))))));
+ uint64_t x80 = (x79 >> 0x18);
+ uint32_t x81 = ((uint32_t)x79 & 0xffffff);
+ uint64_t x82 = (x80 + x78);
+ uint64_t x83 = (x82 >> 0x18);
+ uint32_t x84 = ((uint32_t)x82 & 0xffffff);
+ uint64_t x85 = (x83 + x77);
+ uint64_t x86 = (x85 >> 0x18);
+ uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ uint64_t x88 = (x86 + x76);
+ uint64_t x89 = (x88 >> 0x18);
+ uint32_t x90 = ((uint32_t)x88 & 0xffffff);
+ uint64_t x91 = (x89 + x75);
+ uint64_t x92 = (x91 >> 0x18);
+ uint32_t x93 = ((uint32_t)x91 & 0xffffff);
+ uint64_t x94 = (x92 + x74);
+ uint64_t x95 = (x94 >> 0x18);
+ uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ uint64_t x97 = (x95 + x73);
+ uint64_t x98 = (x97 >> 0x18);
+ uint32_t x99 = ((uint32_t)x97 & 0xffffff);
+ uint64_t x100 = (x98 + x72);
+ uint64_t x101 = (x100 >> 0x17);
+ uint32_t x102 = ((uint32_t)x100 & 0x7fffff);
+ uint64_t x103 = (x101 + x71);
+ uint64_t x104 = (x103 >> 0x18);
+ uint32_t x105 = ((uint32_t)x103 & 0xffffff);
+ uint64_t x106 = (x104 + x70);
+ uint64_t x107 = (x106 >> 0x18);
+ uint32_t x108 = ((uint32_t)x106 & 0xffffff);
+ uint64_t x109 = (x107 + x69);
+ uint64_t x110 = (x109 >> 0x18);
+ uint32_t x111 = ((uint32_t)x109 & 0xffffff);
+ uint64_t x112 = (x110 + x68);
+ uint64_t x113 = (x112 >> 0x18);
+ uint32_t x114 = ((uint32_t)x112 & 0xffffff);
+ uint64_t x115 = (x113 + x67);
+ uint64_t x116 = (x115 >> 0x18);
+ uint32_t x117 = ((uint32_t)x115 & 0xffffff);
+ uint64_t x118 = (x116 + x66);
+ uint64_t x119 = (x118 >> 0x18);
+ uint32_t x120 = ((uint32_t)x118 & 0xffffff);
+ uint64_t x121 = (x119 + x65);
+ uint64_t x122 = (x121 >> 0x18);
+ uint32_t x123 = ((uint32_t)x121 & 0xffffff);
+ uint64_t x124 = (x122 + x64);
+ uint64_t x125 = (x124 >> 0x17);
+ uint32_t x126 = ((uint32_t)x124 & 0x7fffff);
+ uint64_t x127 = (x81 + (0x69 * x125));
+ uint32_t x128 = (uint32_t) (x127 >> 0x18);
+ uint32_t x129 = ((uint32_t)x127 & 0xffffff);
+ uint32_t x130 = (x128 + x84);
+ uint32_t x131 = (x130 >> 0x18);
+ uint32_t x132 = (x130 & 0xffffff);
+ return (Return x126, Return x123, Return x120, Return x117, Return x114, Return x111, Return x108, Return x105, Return x102, Return x99, Return x96, Return x93, Return x90, (x131 + x87), Return x132, Return x129))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e382m105_17limbs/femul.c b/src/Specific/solinas32_2e382m105_17limbs/femul.c
new file mode 100644
index 000000000..c3194b2e0
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105_17limbs/femul.c
@@ -0,0 +1,127 @@
+static void femul(uint32_t out[17], const uint32_t in1[17], const uint32_t in2[17]) {
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x66 = in2[16];
+ { const uint32_t x67 = in2[15];
+ { const uint32_t x65 = in2[14];
+ { const uint32_t x63 = in2[13];
+ { const uint32_t x61 = in2[12];
+ { const uint32_t x59 = in2[11];
+ { const uint32_t x57 = in2[10];
+ { const uint32_t x55 = in2[9];
+ { const uint32_t x53 = in2[8];
+ { const uint32_t x51 = in2[7];
+ { const uint32_t x49 = in2[6];
+ { const uint32_t x47 = in2[5];
+ { const uint32_t x45 = in2[4];
+ { const uint32_t x43 = in2[3];
+ { const uint32_t x41 = in2[2];
+ { const uint32_t x39 = in2[1];
+ { const uint32_t x37 = in2[0];
+ { uint64_t x68 = (((uint64_t)x5 * x66) + ((0x2 * ((uint64_t)x7 * x67)) + (((uint64_t)x9 * x65) + ((0x2 * ((uint64_t)x11 * x63)) + (((uint64_t)x13 * x61) + ((0x2 * ((uint64_t)x15 * x59)) + (((uint64_t)x17 * x57) + ((0x2 * ((uint64_t)x19 * x55)) + (((uint64_t)x21 * x53) + ((0x2 * ((uint64_t)x23 * x51)) + (((uint64_t)x25 * x49) + ((0x2 * ((uint64_t)x27 * x47)) + (((uint64_t)x29 * x45) + ((0x2 * ((uint64_t)x31 * x43)) + (((uint64_t)x33 * x41) + ((0x2 * ((uint64_t)x35 * x39)) + ((uint64_t)x34 * x37)))))))))))))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x67) + (((uint64_t)x7 * x65) + (((uint64_t)x9 * x63) + (((uint64_t)x11 * x61) + (((uint64_t)x13 * x59) + (((uint64_t)x15 * x57) + (((uint64_t)x17 * x55) + (((uint64_t)x19 * x53) + (((uint64_t)x21 * x51) + (((uint64_t)x23 * x49) + (((uint64_t)x25 * x47) + (((uint64_t)x27 * x45) + (((uint64_t)x29 * x43) + (((uint64_t)x31 * x41) + (((uint64_t)x33 * x39) + ((uint64_t)x35 * x37)))))))))))))))) + (0x69 * ((uint64_t)x34 * x66)));
+ { uint64_t x70 = ((((uint64_t)x5 * x65) + ((0x2 * ((uint64_t)x7 * x63)) + (((uint64_t)x9 * x61) + ((0x2 * ((uint64_t)x11 * x59)) + (((uint64_t)x13 * x57) + ((0x2 * ((uint64_t)x15 * x55)) + (((uint64_t)x17 * x53) + ((0x2 * ((uint64_t)x19 * x51)) + (((uint64_t)x21 * x49) + ((0x2 * ((uint64_t)x23 * x47)) + (((uint64_t)x25 * x45) + ((0x2 * ((uint64_t)x27 * x43)) + (((uint64_t)x29 * x41) + ((0x2 * ((uint64_t)x31 * x39)) + ((uint64_t)x33 * x37))))))))))))))) + (0x69 * ((0x2 * ((uint64_t)x35 * x66)) + (0x2 * ((uint64_t)x34 * x67)))));
+ { uint64_t x71 = ((((uint64_t)x5 * x63) + (((uint64_t)x7 * x61) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + (((uint64_t)x13 * x55) + (((uint64_t)x15 * x53) + (((uint64_t)x17 * x51) + (((uint64_t)x19 * x49) + (((uint64_t)x21 * x47) + (((uint64_t)x23 * x45) + (((uint64_t)x25 * x43) + (((uint64_t)x27 * x41) + (((uint64_t)x29 * x39) + ((uint64_t)x31 * x37)))))))))))))) + (0x69 * (((uint64_t)x33 * x66) + ((0x2 * ((uint64_t)x35 * x67)) + ((uint64_t)x34 * x65)))));
+ { uint64_t x72 = ((((uint64_t)x5 * x61) + ((0x2 * ((uint64_t)x7 * x59)) + (((uint64_t)x9 * x57) + ((0x2 * ((uint64_t)x11 * x55)) + (((uint64_t)x13 * x53) + ((0x2 * ((uint64_t)x15 * x51)) + (((uint64_t)x17 * x49) + ((0x2 * ((uint64_t)x19 * x47)) + (((uint64_t)x21 * x45) + ((0x2 * ((uint64_t)x23 * x43)) + (((uint64_t)x25 * x41) + ((0x2 * ((uint64_t)x27 * x39)) + ((uint64_t)x29 * x37))))))))))))) + (0x69 * ((0x2 * ((uint64_t)x31 * x66)) + ((0x2 * ((uint64_t)x33 * x67)) + ((0x2 * ((uint64_t)x35 * x65)) + (0x2 * ((uint64_t)x34 * x63)))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + (((uint64_t)x9 * x55) + (((uint64_t)x11 * x53) + (((uint64_t)x13 * x51) + (((uint64_t)x15 * x49) + (((uint64_t)x17 * x47) + (((uint64_t)x19 * x45) + (((uint64_t)x21 * x43) + (((uint64_t)x23 * x41) + (((uint64_t)x25 * x39) + ((uint64_t)x27 * x37)))))))))))) + (0x69 * (((uint64_t)x29 * x66) + ((0x2 * ((uint64_t)x31 * x67)) + (((uint64_t)x33 * x65) + ((0x2 * ((uint64_t)x35 * x63)) + ((uint64_t)x34 * x61)))))));
+ { uint64_t x74 = ((((uint64_t)x5 * x57) + ((0x2 * ((uint64_t)x7 * x55)) + (((uint64_t)x9 * x53) + ((0x2 * ((uint64_t)x11 * x51)) + (((uint64_t)x13 * x49) + ((0x2 * ((uint64_t)x15 * x47)) + (((uint64_t)x17 * x45) + ((0x2 * ((uint64_t)x19 * x43)) + (((uint64_t)x21 * x41) + ((0x2 * ((uint64_t)x23 * x39)) + ((uint64_t)x25 * x37))))))))))) + (0x69 * ((0x2 * ((uint64_t)x27 * x66)) + ((0x2 * ((uint64_t)x29 * x67)) + ((0x2 * ((uint64_t)x31 * x65)) + ((0x2 * ((uint64_t)x33 * x63)) + ((0x2 * ((uint64_t)x35 * x61)) + (0x2 * ((uint64_t)x34 * x59)))))))));
+ { uint64_t x75 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + (((uint64_t)x21 * x39) + ((uint64_t)x23 * x37)))))))))) + (0x69 * (((uint64_t)x25 * x66) + ((0x2 * ((uint64_t)x27 * x67)) + (((uint64_t)x29 * x65) + ((0x2 * ((uint64_t)x31 * x63)) + (((uint64_t)x33 * x61) + ((0x2 * ((uint64_t)x35 * x59)) + ((uint64_t)x34 * x57)))))))));
+ { uint64_t x76 = ((((uint64_t)x5 * x53) + ((0x2 * ((uint64_t)x7 * x51)) + (((uint64_t)x9 * x49) + ((0x2 * ((uint64_t)x11 * x47)) + (((uint64_t)x13 * x45) + ((0x2 * ((uint64_t)x15 * x43)) + (((uint64_t)x17 * x41) + ((0x2 * ((uint64_t)x19 * x39)) + ((uint64_t)x21 * x37))))))))) + (0x69 * ((0x2 * ((uint64_t)x23 * x66)) + ((0x2 * ((uint64_t)x25 * x67)) + ((0x2 * ((uint64_t)x27 * x65)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + ((0x2 * ((uint64_t)x33 * x59)) + ((0x2 * ((uint64_t)x35 * x57)) + (0x2 * ((uint64_t)x34 * x55)))))))))));
+ { uint64_t x77 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + (((uint64_t)x13 * x43) + (((uint64_t)x15 * x41) + (((uint64_t)x17 * x39) + ((uint64_t)x19 * x37)))))))) + (0x69 * (((uint64_t)x21 * x66) + ((0x2 * ((uint64_t)x23 * x67)) + (((uint64_t)x25 * x65) + ((0x2 * ((uint64_t)x27 * x63)) + (((uint64_t)x29 * x61) + ((0x2 * ((uint64_t)x31 * x59)) + (((uint64_t)x33 * x57) + ((0x2 * ((uint64_t)x35 * x55)) + ((uint64_t)x34 * x53)))))))))));
+ { uint64_t x78 = ((((uint64_t)x5 * x49) + ((0x2 * ((uint64_t)x7 * x47)) + (((uint64_t)x9 * x45) + ((0x2 * ((uint64_t)x11 * x43)) + (((uint64_t)x13 * x41) + ((0x2 * ((uint64_t)x15 * x39)) + ((uint64_t)x17 * x37))))))) + (0x69 * ((0x2 * ((uint64_t)x19 * x66)) + ((0x2 * ((uint64_t)x21 * x67)) + ((0x2 * ((uint64_t)x23 * x65)) + ((0x2 * ((uint64_t)x25 * x63)) + ((0x2 * ((uint64_t)x27 * x61)) + ((0x2 * ((uint64_t)x29 * x59)) + ((0x2 * ((uint64_t)x31 * x57)) + ((0x2 * ((uint64_t)x33 * x55)) + ((0x2 * ((uint64_t)x35 * x53)) + (0x2 * ((uint64_t)x34 * x51)))))))))))));
+ { uint64_t x79 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + (((uint64_t)x11 * x41) + (((uint64_t)x13 * x39) + ((uint64_t)x15 * x37)))))) + (0x69 * (((uint64_t)x17 * x66) + ((0x2 * ((uint64_t)x19 * x67)) + (((uint64_t)x21 * x65) + ((0x2 * ((uint64_t)x23 * x63)) + (((uint64_t)x25 * x61) + ((0x2 * ((uint64_t)x27 * x59)) + (((uint64_t)x29 * x57) + ((0x2 * ((uint64_t)x31 * x55)) + (((uint64_t)x33 * x53) + ((0x2 * ((uint64_t)x35 * x51)) + ((uint64_t)x34 * x49)))))))))))));
+ { uint64_t x80 = ((((uint64_t)x5 * x45) + ((0x2 * ((uint64_t)x7 * x43)) + (((uint64_t)x9 * x41) + ((0x2 * ((uint64_t)x11 * x39)) + ((uint64_t)x13 * x37))))) + (0x69 * ((0x2 * ((uint64_t)x15 * x66)) + ((0x2 * ((uint64_t)x17 * x67)) + ((0x2 * ((uint64_t)x19 * x65)) + ((0x2 * ((uint64_t)x21 * x63)) + ((0x2 * ((uint64_t)x23 * x61)) + ((0x2 * ((uint64_t)x25 * x59)) + ((0x2 * ((uint64_t)x27 * x57)) + ((0x2 * ((uint64_t)x29 * x55)) + ((0x2 * ((uint64_t)x31 * x53)) + ((0x2 * ((uint64_t)x33 * x51)) + ((0x2 * ((uint64_t)x35 * x49)) + (0x2 * ((uint64_t)x34 * x47)))))))))))))));
+ { uint64_t x81 = ((((uint64_t)x5 * x43) + (((uint64_t)x7 * x41) + (((uint64_t)x9 * x39) + ((uint64_t)x11 * x37)))) + (0x69 * (((uint64_t)x13 * x66) + ((0x2 * ((uint64_t)x15 * x67)) + (((uint64_t)x17 * x65) + ((0x2 * ((uint64_t)x19 * x63)) + (((uint64_t)x21 * x61) + ((0x2 * ((uint64_t)x23 * x59)) + (((uint64_t)x25 * x57) + ((0x2 * ((uint64_t)x27 * x55)) + (((uint64_t)x29 * x53) + ((0x2 * ((uint64_t)x31 * x51)) + (((uint64_t)x33 * x49) + ((0x2 * ((uint64_t)x35 * x47)) + ((uint64_t)x34 * x45)))))))))))))));
+ { uint64_t x82 = ((((uint64_t)x5 * x41) + ((0x2 * ((uint64_t)x7 * x39)) + ((uint64_t)x9 * x37))) + (0x69 * ((0x2 * ((uint64_t)x11 * x66)) + ((0x2 * ((uint64_t)x13 * x67)) + ((0x2 * ((uint64_t)x15 * x65)) + ((0x2 * ((uint64_t)x17 * x63)) + ((0x2 * ((uint64_t)x19 * x61)) + ((0x2 * ((uint64_t)x21 * x59)) + ((0x2 * ((uint64_t)x23 * x57)) + ((0x2 * ((uint64_t)x25 * x55)) + ((0x2 * ((uint64_t)x27 * x53)) + ((0x2 * ((uint64_t)x29 * x51)) + ((0x2 * ((uint64_t)x31 * x49)) + ((0x2 * ((uint64_t)x33 * x47)) + ((0x2 * ((uint64_t)x35 * x45)) + (0x2 * ((uint64_t)x34 * x43)))))))))))))))));
+ { uint64_t x83 = ((((uint64_t)x5 * x39) + ((uint64_t)x7 * x37)) + (0x69 * (((uint64_t)x9 * x66) + ((0x2 * ((uint64_t)x11 * x67)) + (((uint64_t)x13 * x65) + ((0x2 * ((uint64_t)x15 * x63)) + (((uint64_t)x17 * x61) + ((0x2 * ((uint64_t)x19 * x59)) + (((uint64_t)x21 * x57) + ((0x2 * ((uint64_t)x23 * x55)) + (((uint64_t)x25 * x53) + ((0x2 * ((uint64_t)x27 * x51)) + (((uint64_t)x29 * x49) + ((0x2 * ((uint64_t)x31 * x47)) + (((uint64_t)x33 * x45) + ((0x2 * ((uint64_t)x35 * x43)) + ((uint64_t)x34 * x41)))))))))))))))));
+ { uint64_t x84 = (((uint64_t)x5 * x37) + (0x69 * ((0x2 * ((uint64_t)x7 * x66)) + ((0x2 * ((uint64_t)x9 * x67)) + ((0x2 * ((uint64_t)x11 * x65)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + ((0x2 * ((uint64_t)x35 * x41)) + (0x2 * ((uint64_t)x34 * x39)))))))))))))))))));
+ { uint64_t x85 = (x84 >> 0x17);
+ { uint32_t x86 = ((uint32_t)x84 & 0x7fffff);
+ { uint64_t x87 = (x85 + x83);
+ { uint64_t x88 = (x87 >> 0x16);
+ { uint32_t x89 = ((uint32_t)x87 & 0x3fffff);
+ { uint64_t x90 = (x88 + x82);
+ { uint64_t x91 = (x90 >> 0x17);
+ { uint32_t x92 = ((uint32_t)x90 & 0x7fffff);
+ { uint64_t x93 = (x91 + x81);
+ { uint64_t x94 = (x93 >> 0x16);
+ { uint32_t x95 = ((uint32_t)x93 & 0x3fffff);
+ { uint64_t x96 = (x94 + x80);
+ { uint64_t x97 = (x96 >> 0x17);
+ { uint32_t x98 = ((uint32_t)x96 & 0x7fffff);
+ { uint64_t x99 = (x97 + x79);
+ { uint64_t x100 = (x99 >> 0x16);
+ { uint32_t x101 = ((uint32_t)x99 & 0x3fffff);
+ { uint64_t x102 = (x100 + x78);
+ { uint64_t x103 = (x102 >> 0x17);
+ { uint32_t x104 = ((uint32_t)x102 & 0x7fffff);
+ { uint64_t x105 = (x103 + x77);
+ { uint64_t x106 = (x105 >> 0x16);
+ { uint32_t x107 = ((uint32_t)x105 & 0x3fffff);
+ { uint64_t x108 = (x106 + x76);
+ { uint64_t x109 = (x108 >> 0x17);
+ { uint32_t x110 = ((uint32_t)x108 & 0x7fffff);
+ { uint64_t x111 = (x109 + x75);
+ { uint64_t x112 = (x111 >> 0x16);
+ { uint32_t x113 = ((uint32_t)x111 & 0x3fffff);
+ { uint64_t x114 = (x112 + x74);
+ { uint64_t x115 = (x114 >> 0x17);
+ { uint32_t x116 = ((uint32_t)x114 & 0x7fffff);
+ { uint64_t x117 = (x115 + x73);
+ { uint64_t x118 = (x117 >> 0x16);
+ { uint32_t x119 = ((uint32_t)x117 & 0x3fffff);
+ { uint64_t x120 = (x118 + x72);
+ { uint64_t x121 = (x120 >> 0x17);
+ { uint32_t x122 = ((uint32_t)x120 & 0x7fffff);
+ { uint64_t x123 = (x121 + x71);
+ { uint64_t x124 = (x123 >> 0x16);
+ { uint32_t x125 = ((uint32_t)x123 & 0x3fffff);
+ { uint64_t x126 = (x124 + x70);
+ { uint64_t x127 = (x126 >> 0x17);
+ { uint32_t x128 = ((uint32_t)x126 & 0x7fffff);
+ { uint64_t x129 = (x127 + x69);
+ { uint64_t x130 = (x129 >> 0x16);
+ { uint32_t x131 = ((uint32_t)x129 & 0x3fffff);
+ { uint64_t x132 = (x130 + x68);
+ { uint32_t x133 = (uint32_t) (x132 >> 0x16);
+ { uint32_t x134 = ((uint32_t)x132 & 0x3fffff);
+ { uint64_t x135 = (x86 + ((uint64_t)0x69 * x133));
+ { uint32_t x136 = (uint32_t) (x135 >> 0x17);
+ { uint32_t x137 = ((uint32_t)x135 & 0x7fffff);
+ { uint32_t x138 = (x136 + x89);
+ { uint32_t x139 = (x138 >> 0x16);
+ { uint32_t x140 = (x138 & 0x3fffff);
+ out[0] = x137;
+ out[1] = x140;
+ out[2] = (x139 + x92);
+ out[3] = x95;
+ out[4] = x98;
+ out[5] = x101;
+ out[6] = x104;
+ out[7] = x107;
+ out[8] = x110;
+ out[9] = x113;
+ out[10] = x116;
+ out[11] = x119;
+ out[12] = x122;
+ out[13] = x125;
+ out[14] = x128;
+ out[15] = x131;
+ out[16] = x134;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e382m105_17limbs/femulDisplay.log b/src/Specific/solinas32_2e382m105_17limbs/femulDisplay.log
new file mode 100644
index 000000000..55f23435e
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105_17limbs/femulDisplay.log
@@ -0,0 +1,80 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x34, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x66, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37))%core,
+ uint64_t x68 = (((uint64_t)x5 * x66) + ((0x2 * ((uint64_t)x7 * x67)) + (((uint64_t)x9 * x65) + ((0x2 * ((uint64_t)x11 * x63)) + (((uint64_t)x13 * x61) + ((0x2 * ((uint64_t)x15 * x59)) + (((uint64_t)x17 * x57) + ((0x2 * ((uint64_t)x19 * x55)) + (((uint64_t)x21 * x53) + ((0x2 * ((uint64_t)x23 * x51)) + (((uint64_t)x25 * x49) + ((0x2 * ((uint64_t)x27 * x47)) + (((uint64_t)x29 * x45) + ((0x2 * ((uint64_t)x31 * x43)) + (((uint64_t)x33 * x41) + ((0x2 * ((uint64_t)x35 * x39)) + ((uint64_t)x34 * x37)))))))))))))))));
+ uint64_t x69 = ((((uint64_t)x5 * x67) + (((uint64_t)x7 * x65) + (((uint64_t)x9 * x63) + (((uint64_t)x11 * x61) + (((uint64_t)x13 * x59) + (((uint64_t)x15 * x57) + (((uint64_t)x17 * x55) + (((uint64_t)x19 * x53) + (((uint64_t)x21 * x51) + (((uint64_t)x23 * x49) + (((uint64_t)x25 * x47) + (((uint64_t)x27 * x45) + (((uint64_t)x29 * x43) + (((uint64_t)x31 * x41) + (((uint64_t)x33 * x39) + ((uint64_t)x35 * x37)))))))))))))))) + (0x69 * ((uint64_t)x34 * x66)));
+ uint64_t x70 = ((((uint64_t)x5 * x65) + ((0x2 * ((uint64_t)x7 * x63)) + (((uint64_t)x9 * x61) + ((0x2 * ((uint64_t)x11 * x59)) + (((uint64_t)x13 * x57) + ((0x2 * ((uint64_t)x15 * x55)) + (((uint64_t)x17 * x53) + ((0x2 * ((uint64_t)x19 * x51)) + (((uint64_t)x21 * x49) + ((0x2 * ((uint64_t)x23 * x47)) + (((uint64_t)x25 * x45) + ((0x2 * ((uint64_t)x27 * x43)) + (((uint64_t)x29 * x41) + ((0x2 * ((uint64_t)x31 * x39)) + ((uint64_t)x33 * x37))))))))))))))) + (0x69 * ((0x2 * ((uint64_t)x35 * x66)) + (0x2 * ((uint64_t)x34 * x67)))));
+ uint64_t x71 = ((((uint64_t)x5 * x63) + (((uint64_t)x7 * x61) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + (((uint64_t)x13 * x55) + (((uint64_t)x15 * x53) + (((uint64_t)x17 * x51) + (((uint64_t)x19 * x49) + (((uint64_t)x21 * x47) + (((uint64_t)x23 * x45) + (((uint64_t)x25 * x43) + (((uint64_t)x27 * x41) + (((uint64_t)x29 * x39) + ((uint64_t)x31 * x37)))))))))))))) + (0x69 * (((uint64_t)x33 * x66) + ((0x2 * ((uint64_t)x35 * x67)) + ((uint64_t)x34 * x65)))));
+ uint64_t x72 = ((((uint64_t)x5 * x61) + ((0x2 * ((uint64_t)x7 * x59)) + (((uint64_t)x9 * x57) + ((0x2 * ((uint64_t)x11 * x55)) + (((uint64_t)x13 * x53) + ((0x2 * ((uint64_t)x15 * x51)) + (((uint64_t)x17 * x49) + ((0x2 * ((uint64_t)x19 * x47)) + (((uint64_t)x21 * x45) + ((0x2 * ((uint64_t)x23 * x43)) + (((uint64_t)x25 * x41) + ((0x2 * ((uint64_t)x27 * x39)) + ((uint64_t)x29 * x37))))))))))))) + (0x69 * ((0x2 * ((uint64_t)x31 * x66)) + ((0x2 * ((uint64_t)x33 * x67)) + ((0x2 * ((uint64_t)x35 * x65)) + (0x2 * ((uint64_t)x34 * x63)))))));
+ uint64_t x73 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + (((uint64_t)x9 * x55) + (((uint64_t)x11 * x53) + (((uint64_t)x13 * x51) + (((uint64_t)x15 * x49) + (((uint64_t)x17 * x47) + (((uint64_t)x19 * x45) + (((uint64_t)x21 * x43) + (((uint64_t)x23 * x41) + (((uint64_t)x25 * x39) + ((uint64_t)x27 * x37)))))))))))) + (0x69 * (((uint64_t)x29 * x66) + ((0x2 * ((uint64_t)x31 * x67)) + (((uint64_t)x33 * x65) + ((0x2 * ((uint64_t)x35 * x63)) + ((uint64_t)x34 * x61)))))));
+ uint64_t x74 = ((((uint64_t)x5 * x57) + ((0x2 * ((uint64_t)x7 * x55)) + (((uint64_t)x9 * x53) + ((0x2 * ((uint64_t)x11 * x51)) + (((uint64_t)x13 * x49) + ((0x2 * ((uint64_t)x15 * x47)) + (((uint64_t)x17 * x45) + ((0x2 * ((uint64_t)x19 * x43)) + (((uint64_t)x21 * x41) + ((0x2 * ((uint64_t)x23 * x39)) + ((uint64_t)x25 * x37))))))))))) + (0x69 * ((0x2 * ((uint64_t)x27 * x66)) + ((0x2 * ((uint64_t)x29 * x67)) + ((0x2 * ((uint64_t)x31 * x65)) + ((0x2 * ((uint64_t)x33 * x63)) + ((0x2 * ((uint64_t)x35 * x61)) + (0x2 * ((uint64_t)x34 * x59)))))))));
+ uint64_t x75 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + (((uint64_t)x21 * x39) + ((uint64_t)x23 * x37)))))))))) + (0x69 * (((uint64_t)x25 * x66) + ((0x2 * ((uint64_t)x27 * x67)) + (((uint64_t)x29 * x65) + ((0x2 * ((uint64_t)x31 * x63)) + (((uint64_t)x33 * x61) + ((0x2 * ((uint64_t)x35 * x59)) + ((uint64_t)x34 * x57)))))))));
+ uint64_t x76 = ((((uint64_t)x5 * x53) + ((0x2 * ((uint64_t)x7 * x51)) + (((uint64_t)x9 * x49) + ((0x2 * ((uint64_t)x11 * x47)) + (((uint64_t)x13 * x45) + ((0x2 * ((uint64_t)x15 * x43)) + (((uint64_t)x17 * x41) + ((0x2 * ((uint64_t)x19 * x39)) + ((uint64_t)x21 * x37))))))))) + (0x69 * ((0x2 * ((uint64_t)x23 * x66)) + ((0x2 * ((uint64_t)x25 * x67)) + ((0x2 * ((uint64_t)x27 * x65)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + ((0x2 * ((uint64_t)x33 * x59)) + ((0x2 * ((uint64_t)x35 * x57)) + (0x2 * ((uint64_t)x34 * x55)))))))))));
+ uint64_t x77 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + (((uint64_t)x13 * x43) + (((uint64_t)x15 * x41) + (((uint64_t)x17 * x39) + ((uint64_t)x19 * x37)))))))) + (0x69 * (((uint64_t)x21 * x66) + ((0x2 * ((uint64_t)x23 * x67)) + (((uint64_t)x25 * x65) + ((0x2 * ((uint64_t)x27 * x63)) + (((uint64_t)x29 * x61) + ((0x2 * ((uint64_t)x31 * x59)) + (((uint64_t)x33 * x57) + ((0x2 * ((uint64_t)x35 * x55)) + ((uint64_t)x34 * x53)))))))))));
+ uint64_t x78 = ((((uint64_t)x5 * x49) + ((0x2 * ((uint64_t)x7 * x47)) + (((uint64_t)x9 * x45) + ((0x2 * ((uint64_t)x11 * x43)) + (((uint64_t)x13 * x41) + ((0x2 * ((uint64_t)x15 * x39)) + ((uint64_t)x17 * x37))))))) + (0x69 * ((0x2 * ((uint64_t)x19 * x66)) + ((0x2 * ((uint64_t)x21 * x67)) + ((0x2 * ((uint64_t)x23 * x65)) + ((0x2 * ((uint64_t)x25 * x63)) + ((0x2 * ((uint64_t)x27 * x61)) + ((0x2 * ((uint64_t)x29 * x59)) + ((0x2 * ((uint64_t)x31 * x57)) + ((0x2 * ((uint64_t)x33 * x55)) + ((0x2 * ((uint64_t)x35 * x53)) + (0x2 * ((uint64_t)x34 * x51)))))))))))));
+ uint64_t x79 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + (((uint64_t)x11 * x41) + (((uint64_t)x13 * x39) + ((uint64_t)x15 * x37)))))) + (0x69 * (((uint64_t)x17 * x66) + ((0x2 * ((uint64_t)x19 * x67)) + (((uint64_t)x21 * x65) + ((0x2 * ((uint64_t)x23 * x63)) + (((uint64_t)x25 * x61) + ((0x2 * ((uint64_t)x27 * x59)) + (((uint64_t)x29 * x57) + ((0x2 * ((uint64_t)x31 * x55)) + (((uint64_t)x33 * x53) + ((0x2 * ((uint64_t)x35 * x51)) + ((uint64_t)x34 * x49)))))))))))));
+ uint64_t x80 = ((((uint64_t)x5 * x45) + ((0x2 * ((uint64_t)x7 * x43)) + (((uint64_t)x9 * x41) + ((0x2 * ((uint64_t)x11 * x39)) + ((uint64_t)x13 * x37))))) + (0x69 * ((0x2 * ((uint64_t)x15 * x66)) + ((0x2 * ((uint64_t)x17 * x67)) + ((0x2 * ((uint64_t)x19 * x65)) + ((0x2 * ((uint64_t)x21 * x63)) + ((0x2 * ((uint64_t)x23 * x61)) + ((0x2 * ((uint64_t)x25 * x59)) + ((0x2 * ((uint64_t)x27 * x57)) + ((0x2 * ((uint64_t)x29 * x55)) + ((0x2 * ((uint64_t)x31 * x53)) + ((0x2 * ((uint64_t)x33 * x51)) + ((0x2 * ((uint64_t)x35 * x49)) + (0x2 * ((uint64_t)x34 * x47)))))))))))))));
+ uint64_t x81 = ((((uint64_t)x5 * x43) + (((uint64_t)x7 * x41) + (((uint64_t)x9 * x39) + ((uint64_t)x11 * x37)))) + (0x69 * (((uint64_t)x13 * x66) + ((0x2 * ((uint64_t)x15 * x67)) + (((uint64_t)x17 * x65) + ((0x2 * ((uint64_t)x19 * x63)) + (((uint64_t)x21 * x61) + ((0x2 * ((uint64_t)x23 * x59)) + (((uint64_t)x25 * x57) + ((0x2 * ((uint64_t)x27 * x55)) + (((uint64_t)x29 * x53) + ((0x2 * ((uint64_t)x31 * x51)) + (((uint64_t)x33 * x49) + ((0x2 * ((uint64_t)x35 * x47)) + ((uint64_t)x34 * x45)))))))))))))));
+ uint64_t x82 = ((((uint64_t)x5 * x41) + ((0x2 * ((uint64_t)x7 * x39)) + ((uint64_t)x9 * x37))) + (0x69 * ((0x2 * ((uint64_t)x11 * x66)) + ((0x2 * ((uint64_t)x13 * x67)) + ((0x2 * ((uint64_t)x15 * x65)) + ((0x2 * ((uint64_t)x17 * x63)) + ((0x2 * ((uint64_t)x19 * x61)) + ((0x2 * ((uint64_t)x21 * x59)) + ((0x2 * ((uint64_t)x23 * x57)) + ((0x2 * ((uint64_t)x25 * x55)) + ((0x2 * ((uint64_t)x27 * x53)) + ((0x2 * ((uint64_t)x29 * x51)) + ((0x2 * ((uint64_t)x31 * x49)) + ((0x2 * ((uint64_t)x33 * x47)) + ((0x2 * ((uint64_t)x35 * x45)) + (0x2 * ((uint64_t)x34 * x43)))))))))))))))));
+ uint64_t x83 = ((((uint64_t)x5 * x39) + ((uint64_t)x7 * x37)) + (0x69 * (((uint64_t)x9 * x66) + ((0x2 * ((uint64_t)x11 * x67)) + (((uint64_t)x13 * x65) + ((0x2 * ((uint64_t)x15 * x63)) + (((uint64_t)x17 * x61) + ((0x2 * ((uint64_t)x19 * x59)) + (((uint64_t)x21 * x57) + ((0x2 * ((uint64_t)x23 * x55)) + (((uint64_t)x25 * x53) + ((0x2 * ((uint64_t)x27 * x51)) + (((uint64_t)x29 * x49) + ((0x2 * ((uint64_t)x31 * x47)) + (((uint64_t)x33 * x45) + ((0x2 * ((uint64_t)x35 * x43)) + ((uint64_t)x34 * x41)))))))))))))))));
+ uint64_t x84 = (((uint64_t)x5 * x37) + (0x69 * ((0x2 * ((uint64_t)x7 * x66)) + ((0x2 * ((uint64_t)x9 * x67)) + ((0x2 * ((uint64_t)x11 * x65)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + ((0x2 * ((uint64_t)x35 * x41)) + (0x2 * ((uint64_t)x34 * x39)))))))))))))))))));
+ uint64_t x85 = (x84 >> 0x17);
+ uint32_t x86 = ((uint32_t)x84 & 0x7fffff);
+ uint64_t x87 = (x85 + x83);
+ uint64_t x88 = (x87 >> 0x16);
+ uint32_t x89 = ((uint32_t)x87 & 0x3fffff);
+ uint64_t x90 = (x88 + x82);
+ uint64_t x91 = (x90 >> 0x17);
+ uint32_t x92 = ((uint32_t)x90 & 0x7fffff);
+ uint64_t x93 = (x91 + x81);
+ uint64_t x94 = (x93 >> 0x16);
+ uint32_t x95 = ((uint32_t)x93 & 0x3fffff);
+ uint64_t x96 = (x94 + x80);
+ uint64_t x97 = (x96 >> 0x17);
+ uint32_t x98 = ((uint32_t)x96 & 0x7fffff);
+ uint64_t x99 = (x97 + x79);
+ uint64_t x100 = (x99 >> 0x16);
+ uint32_t x101 = ((uint32_t)x99 & 0x3fffff);
+ uint64_t x102 = (x100 + x78);
+ uint64_t x103 = (x102 >> 0x17);
+ uint32_t x104 = ((uint32_t)x102 & 0x7fffff);
+ uint64_t x105 = (x103 + x77);
+ uint64_t x106 = (x105 >> 0x16);
+ uint32_t x107 = ((uint32_t)x105 & 0x3fffff);
+ uint64_t x108 = (x106 + x76);
+ uint64_t x109 = (x108 >> 0x17);
+ uint32_t x110 = ((uint32_t)x108 & 0x7fffff);
+ uint64_t x111 = (x109 + x75);
+ uint64_t x112 = (x111 >> 0x16);
+ uint32_t x113 = ((uint32_t)x111 & 0x3fffff);
+ uint64_t x114 = (x112 + x74);
+ uint64_t x115 = (x114 >> 0x17);
+ uint32_t x116 = ((uint32_t)x114 & 0x7fffff);
+ uint64_t x117 = (x115 + x73);
+ uint64_t x118 = (x117 >> 0x16);
+ uint32_t x119 = ((uint32_t)x117 & 0x3fffff);
+ uint64_t x120 = (x118 + x72);
+ uint64_t x121 = (x120 >> 0x17);
+ uint32_t x122 = ((uint32_t)x120 & 0x7fffff);
+ uint64_t x123 = (x121 + x71);
+ uint64_t x124 = (x123 >> 0x16);
+ uint32_t x125 = ((uint32_t)x123 & 0x3fffff);
+ uint64_t x126 = (x124 + x70);
+ uint64_t x127 = (x126 >> 0x17);
+ uint32_t x128 = ((uint32_t)x126 & 0x7fffff);
+ uint64_t x129 = (x127 + x69);
+ uint64_t x130 = (x129 >> 0x16);
+ uint32_t x131 = ((uint32_t)x129 & 0x3fffff);
+ uint64_t x132 = (x130 + x68);
+ uint32_t x133 = (uint32_t) (x132 >> 0x16);
+ uint32_t x134 = ((uint32_t)x132 & 0x3fffff);
+ uint64_t x135 = (x86 + ((uint64_t)0x69 * x133));
+ uint32_t x136 = (uint32_t) (x135 >> 0x17);
+ uint32_t x137 = ((uint32_t)x135 & 0x7fffff);
+ uint32_t x138 = (x136 + x89);
+ uint32_t x139 = (x138 >> 0x16);
+ uint32_t x140 = (x138 & 0x3fffff);
+ return (Return x134, Return x131, Return x128, Return x125, Return x122, Return x119, Return x116, Return x113, Return x110, Return x107, Return x104, Return x101, Return x98, Return x95, (x139 + x92), Return x140, Return x137))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e382m105_17limbs/fesquare.c b/src/Specific/solinas32_2e382m105_17limbs/fesquare.c
new file mode 100644
index 000000000..bb27bc57f
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105_17limbs/fesquare.c
@@ -0,0 +1,110 @@
+static void fesquare(uint32_t out[17], const uint32_t in1[17]) {
+ { const uint32_t x31 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint64_t x33 = (((uint64_t)x2 * x31) + ((0x2 * ((uint64_t)x4 * x32)) + (((uint64_t)x6 * x30) + ((0x2 * ((uint64_t)x8 * x28)) + (((uint64_t)x10 * x26) + ((0x2 * ((uint64_t)x12 * x24)) + (((uint64_t)x14 * x22) + ((0x2 * ((uint64_t)x16 * x20)) + (((uint64_t)x18 * x18) + ((0x2 * ((uint64_t)x20 * x16)) + (((uint64_t)x22 * x14) + ((0x2 * ((uint64_t)x24 * x12)) + (((uint64_t)x26 * x10) + ((0x2 * ((uint64_t)x28 * x8)) + (((uint64_t)x30 * x6) + ((0x2 * ((uint64_t)x32 * x4)) + ((uint64_t)x31 * x2)))))))))))))))));
+ { uint64_t x34 = ((((uint64_t)x2 * x32) + (((uint64_t)x4 * x30) + (((uint64_t)x6 * x28) + (((uint64_t)x8 * x26) + (((uint64_t)x10 * x24) + (((uint64_t)x12 * x22) + (((uint64_t)x14 * x20) + (((uint64_t)x16 * x18) + (((uint64_t)x18 * x16) + (((uint64_t)x20 * x14) + (((uint64_t)x22 * x12) + (((uint64_t)x24 * x10) + (((uint64_t)x26 * x8) + (((uint64_t)x28 * x6) + (((uint64_t)x30 * x4) + ((uint64_t)x32 * x2)))))))))))))))) + (0x69 * ((uint64_t)x31 * x31)));
+ { uint64_t x35 = ((((uint64_t)x2 * x30) + ((0x2 * ((uint64_t)x4 * x28)) + (((uint64_t)x6 * x26) + ((0x2 * ((uint64_t)x8 * x24)) + (((uint64_t)x10 * x22) + ((0x2 * ((uint64_t)x12 * x20)) + (((uint64_t)x14 * x18) + ((0x2 * ((uint64_t)x16 * x16)) + (((uint64_t)x18 * x14) + ((0x2 * ((uint64_t)x20 * x12)) + (((uint64_t)x22 * x10) + ((0x2 * ((uint64_t)x24 * x8)) + (((uint64_t)x26 * x6) + ((0x2 * ((uint64_t)x28 * x4)) + ((uint64_t)x30 * x2))))))))))))))) + (0x69 * ((0x2 * ((uint64_t)x32 * x31)) + (0x2 * ((uint64_t)x31 * x32)))));
+ { uint64_t x36 = ((((uint64_t)x2 * x28) + (((uint64_t)x4 * x26) + (((uint64_t)x6 * x24) + (((uint64_t)x8 * x22) + (((uint64_t)x10 * x20) + (((uint64_t)x12 * x18) + (((uint64_t)x14 * x16) + (((uint64_t)x16 * x14) + (((uint64_t)x18 * x12) + (((uint64_t)x20 * x10) + (((uint64_t)x22 * x8) + (((uint64_t)x24 * x6) + (((uint64_t)x26 * x4) + ((uint64_t)x28 * x2)))))))))))))) + (0x69 * (((uint64_t)x30 * x31) + ((0x2 * ((uint64_t)x32 * x32)) + ((uint64_t)x31 * x30)))));
+ { uint64_t x37 = ((((uint64_t)x2 * x26) + ((0x2 * ((uint64_t)x4 * x24)) + (((uint64_t)x6 * x22) + ((0x2 * ((uint64_t)x8 * x20)) + (((uint64_t)x10 * x18) + ((0x2 * ((uint64_t)x12 * x16)) + (((uint64_t)x14 * x14) + ((0x2 * ((uint64_t)x16 * x12)) + (((uint64_t)x18 * x10) + ((0x2 * ((uint64_t)x20 * x8)) + (((uint64_t)x22 * x6) + ((0x2 * ((uint64_t)x24 * x4)) + ((uint64_t)x26 * x2))))))))))))) + (0x69 * ((0x2 * ((uint64_t)x28 * x31)) + ((0x2 * ((uint64_t)x30 * x32)) + ((0x2 * ((uint64_t)x32 * x30)) + (0x2 * ((uint64_t)x31 * x28)))))));
+ { uint64_t x38 = ((((uint64_t)x2 * x24) + (((uint64_t)x4 * x22) + (((uint64_t)x6 * x20) + (((uint64_t)x8 * x18) + (((uint64_t)x10 * x16) + (((uint64_t)x12 * x14) + (((uint64_t)x14 * x12) + (((uint64_t)x16 * x10) + (((uint64_t)x18 * x8) + (((uint64_t)x20 * x6) + (((uint64_t)x22 * x4) + ((uint64_t)x24 * x2)))))))))))) + (0x69 * (((uint64_t)x26 * x31) + ((0x2 * ((uint64_t)x28 * x32)) + (((uint64_t)x30 * x30) + ((0x2 * ((uint64_t)x32 * x28)) + ((uint64_t)x31 * x26)))))));
+ { uint64_t x39 = ((((uint64_t)x2 * x22) + ((0x2 * ((uint64_t)x4 * x20)) + (((uint64_t)x6 * x18) + ((0x2 * ((uint64_t)x8 * x16)) + (((uint64_t)x10 * x14) + ((0x2 * ((uint64_t)x12 * x12)) + (((uint64_t)x14 * x10) + ((0x2 * ((uint64_t)x16 * x8)) + (((uint64_t)x18 * x6) + ((0x2 * ((uint64_t)x20 * x4)) + ((uint64_t)x22 * x2))))))))))) + (0x69 * ((0x2 * ((uint64_t)x24 * x31)) + ((0x2 * ((uint64_t)x26 * x32)) + ((0x2 * ((uint64_t)x28 * x30)) + ((0x2 * ((uint64_t)x30 * x28)) + ((0x2 * ((uint64_t)x32 * x26)) + (0x2 * ((uint64_t)x31 * x24)))))))));
+ { uint64_t x40 = ((((uint64_t)x2 * x20) + (((uint64_t)x4 * x18) + (((uint64_t)x6 * x16) + (((uint64_t)x8 * x14) + (((uint64_t)x10 * x12) + (((uint64_t)x12 * x10) + (((uint64_t)x14 * x8) + (((uint64_t)x16 * x6) + (((uint64_t)x18 * x4) + ((uint64_t)x20 * x2)))))))))) + (0x69 * (((uint64_t)x22 * x31) + ((0x2 * ((uint64_t)x24 * x32)) + (((uint64_t)x26 * x30) + ((0x2 * ((uint64_t)x28 * x28)) + (((uint64_t)x30 * x26) + ((0x2 * ((uint64_t)x32 * x24)) + ((uint64_t)x31 * x22)))))))));
+ { uint64_t x41 = ((((uint64_t)x2 * x18) + ((0x2 * ((uint64_t)x4 * x16)) + (((uint64_t)x6 * x14) + ((0x2 * ((uint64_t)x8 * x12)) + (((uint64_t)x10 * x10) + ((0x2 * ((uint64_t)x12 * x8)) + (((uint64_t)x14 * x6) + ((0x2 * ((uint64_t)x16 * x4)) + ((uint64_t)x18 * x2))))))))) + (0x69 * ((0x2 * ((uint64_t)x20 * x31)) + ((0x2 * ((uint64_t)x22 * x32)) + ((0x2 * ((uint64_t)x24 * x30)) + ((0x2 * ((uint64_t)x26 * x28)) + ((0x2 * ((uint64_t)x28 * x26)) + ((0x2 * ((uint64_t)x30 * x24)) + ((0x2 * ((uint64_t)x32 * x22)) + (0x2 * ((uint64_t)x31 * x20)))))))))));
+ { uint64_t x42 = ((((uint64_t)x2 * x16) + (((uint64_t)x4 * x14) + (((uint64_t)x6 * x12) + (((uint64_t)x8 * x10) + (((uint64_t)x10 * x8) + (((uint64_t)x12 * x6) + (((uint64_t)x14 * x4) + ((uint64_t)x16 * x2)))))))) + (0x69 * (((uint64_t)x18 * x31) + ((0x2 * ((uint64_t)x20 * x32)) + (((uint64_t)x22 * x30) + ((0x2 * ((uint64_t)x24 * x28)) + (((uint64_t)x26 * x26) + ((0x2 * ((uint64_t)x28 * x24)) + (((uint64_t)x30 * x22) + ((0x2 * ((uint64_t)x32 * x20)) + ((uint64_t)x31 * x18)))))))))));
+ { uint64_t x43 = ((((uint64_t)x2 * x14) + ((0x2 * ((uint64_t)x4 * x12)) + (((uint64_t)x6 * x10) + ((0x2 * ((uint64_t)x8 * x8)) + (((uint64_t)x10 * x6) + ((0x2 * ((uint64_t)x12 * x4)) + ((uint64_t)x14 * x2))))))) + (0x69 * ((0x2 * ((uint64_t)x16 * x31)) + ((0x2 * ((uint64_t)x18 * x32)) + ((0x2 * ((uint64_t)x20 * x30)) + ((0x2 * ((uint64_t)x22 * x28)) + ((0x2 * ((uint64_t)x24 * x26)) + ((0x2 * ((uint64_t)x26 * x24)) + ((0x2 * ((uint64_t)x28 * x22)) + ((0x2 * ((uint64_t)x30 * x20)) + ((0x2 * ((uint64_t)x32 * x18)) + (0x2 * ((uint64_t)x31 * x16)))))))))))));
+ { uint64_t x44 = ((((uint64_t)x2 * x12) + (((uint64_t)x4 * x10) + (((uint64_t)x6 * x8) + (((uint64_t)x8 * x6) + (((uint64_t)x10 * x4) + ((uint64_t)x12 * x2)))))) + (0x69 * (((uint64_t)x14 * x31) + ((0x2 * ((uint64_t)x16 * x32)) + (((uint64_t)x18 * x30) + ((0x2 * ((uint64_t)x20 * x28)) + (((uint64_t)x22 * x26) + ((0x2 * ((uint64_t)x24 * x24)) + (((uint64_t)x26 * x22) + ((0x2 * ((uint64_t)x28 * x20)) + (((uint64_t)x30 * x18) + ((0x2 * ((uint64_t)x32 * x16)) + ((uint64_t)x31 * x14)))))))))))));
+ { uint64_t x45 = ((((uint64_t)x2 * x10) + ((0x2 * ((uint64_t)x4 * x8)) + (((uint64_t)x6 * x6) + ((0x2 * ((uint64_t)x8 * x4)) + ((uint64_t)x10 * x2))))) + (0x69 * ((0x2 * ((uint64_t)x12 * x31)) + ((0x2 * ((uint64_t)x14 * x32)) + ((0x2 * ((uint64_t)x16 * x30)) + ((0x2 * ((uint64_t)x18 * x28)) + ((0x2 * ((uint64_t)x20 * x26)) + ((0x2 * ((uint64_t)x22 * x24)) + ((0x2 * ((uint64_t)x24 * x22)) + ((0x2 * ((uint64_t)x26 * x20)) + ((0x2 * ((uint64_t)x28 * x18)) + ((0x2 * ((uint64_t)x30 * x16)) + ((0x2 * ((uint64_t)x32 * x14)) + (0x2 * ((uint64_t)x31 * x12)))))))))))))));
+ { uint64_t x46 = ((((uint64_t)x2 * x8) + (((uint64_t)x4 * x6) + (((uint64_t)x6 * x4) + ((uint64_t)x8 * x2)))) + (0x69 * (((uint64_t)x10 * x31) + ((0x2 * ((uint64_t)x12 * x32)) + (((uint64_t)x14 * x30) + ((0x2 * ((uint64_t)x16 * x28)) + (((uint64_t)x18 * x26) + ((0x2 * ((uint64_t)x20 * x24)) + (((uint64_t)x22 * x22) + ((0x2 * ((uint64_t)x24 * x20)) + (((uint64_t)x26 * x18) + ((0x2 * ((uint64_t)x28 * x16)) + (((uint64_t)x30 * x14) + ((0x2 * ((uint64_t)x32 * x12)) + ((uint64_t)x31 * x10)))))))))))))));
+ { uint64_t x47 = ((((uint64_t)x2 * x6) + ((0x2 * ((uint64_t)x4 * x4)) + ((uint64_t)x6 * x2))) + (0x69 * ((0x2 * ((uint64_t)x8 * x31)) + ((0x2 * ((uint64_t)x10 * x32)) + ((0x2 * ((uint64_t)x12 * x30)) + ((0x2 * ((uint64_t)x14 * x28)) + ((0x2 * ((uint64_t)x16 * x26)) + ((0x2 * ((uint64_t)x18 * x24)) + ((0x2 * ((uint64_t)x20 * x22)) + ((0x2 * ((uint64_t)x22 * x20)) + ((0x2 * ((uint64_t)x24 * x18)) + ((0x2 * ((uint64_t)x26 * x16)) + ((0x2 * ((uint64_t)x28 * x14)) + ((0x2 * ((uint64_t)x30 * x12)) + ((0x2 * ((uint64_t)x32 * x10)) + (0x2 * ((uint64_t)x31 * x8)))))))))))))))));
+ { uint64_t x48 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0x69 * (((uint64_t)x6 * x31) + ((0x2 * ((uint64_t)x8 * x32)) + (((uint64_t)x10 * x30) + ((0x2 * ((uint64_t)x12 * x28)) + (((uint64_t)x14 * x26) + ((0x2 * ((uint64_t)x16 * x24)) + (((uint64_t)x18 * x22) + ((0x2 * ((uint64_t)x20 * x20)) + (((uint64_t)x22 * x18) + ((0x2 * ((uint64_t)x24 * x16)) + (((uint64_t)x26 * x14) + ((0x2 * ((uint64_t)x28 * x12)) + (((uint64_t)x30 * x10) + ((0x2 * ((uint64_t)x32 * x8)) + ((uint64_t)x31 * x6)))))))))))))))));
+ { uint64_t x49 = (((uint64_t)x2 * x2) + (0x69 * ((0x2 * ((uint64_t)x4 * x31)) + ((0x2 * ((uint64_t)x6 * x32)) + ((0x2 * ((uint64_t)x8 * x30)) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + ((0x2 * ((uint64_t)x16 * x22)) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + ((0x2 * ((uint64_t)x22 * x16)) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + ((0x2 * ((uint64_t)x30 * x8)) + ((0x2 * ((uint64_t)x32 * x6)) + (0x2 * ((uint64_t)x31 * x4)))))))))))))))))));
+ { uint64_t x50 = (x49 >> 0x17);
+ { uint32_t x51 = ((uint32_t)x49 & 0x7fffff);
+ { uint64_t x52 = (x50 + x48);
+ { uint64_t x53 = (x52 >> 0x16);
+ { uint32_t x54 = ((uint32_t)x52 & 0x3fffff);
+ { uint64_t x55 = (x53 + x47);
+ { uint64_t x56 = (x55 >> 0x17);
+ { uint32_t x57 = ((uint32_t)x55 & 0x7fffff);
+ { uint64_t x58 = (x56 + x46);
+ { uint64_t x59 = (x58 >> 0x16);
+ { uint32_t x60 = ((uint32_t)x58 & 0x3fffff);
+ { uint64_t x61 = (x59 + x45);
+ { uint64_t x62 = (x61 >> 0x17);
+ { uint32_t x63 = ((uint32_t)x61 & 0x7fffff);
+ { uint64_t x64 = (x62 + x44);
+ { uint64_t x65 = (x64 >> 0x16);
+ { uint32_t x66 = ((uint32_t)x64 & 0x3fffff);
+ { uint64_t x67 = (x65 + x43);
+ { uint64_t x68 = (x67 >> 0x17);
+ { uint32_t x69 = ((uint32_t)x67 & 0x7fffff);
+ { uint64_t x70 = (x68 + x42);
+ { uint64_t x71 = (x70 >> 0x16);
+ { uint32_t x72 = ((uint32_t)x70 & 0x3fffff);
+ { uint64_t x73 = (x71 + x41);
+ { uint64_t x74 = (x73 >> 0x17);
+ { uint32_t x75 = ((uint32_t)x73 & 0x7fffff);
+ { uint64_t x76 = (x74 + x40);
+ { uint64_t x77 = (x76 >> 0x16);
+ { uint32_t x78 = ((uint32_t)x76 & 0x3fffff);
+ { uint64_t x79 = (x77 + x39);
+ { uint64_t x80 = (x79 >> 0x17);
+ { uint32_t x81 = ((uint32_t)x79 & 0x7fffff);
+ { uint64_t x82 = (x80 + x38);
+ { uint64_t x83 = (x82 >> 0x16);
+ { uint32_t x84 = ((uint32_t)x82 & 0x3fffff);
+ { uint64_t x85 = (x83 + x37);
+ { uint64_t x86 = (x85 >> 0x17);
+ { uint32_t x87 = ((uint32_t)x85 & 0x7fffff);
+ { uint64_t x88 = (x86 + x36);
+ { uint64_t x89 = (x88 >> 0x16);
+ { uint32_t x90 = ((uint32_t)x88 & 0x3fffff);
+ { uint64_t x91 = (x89 + x35);
+ { uint64_t x92 = (x91 >> 0x17);
+ { uint32_t x93 = ((uint32_t)x91 & 0x7fffff);
+ { uint64_t x94 = (x92 + x34);
+ { uint64_t x95 = (x94 >> 0x16);
+ { uint32_t x96 = ((uint32_t)x94 & 0x3fffff);
+ { uint64_t x97 = (x95 + x33);
+ { uint32_t x98 = (uint32_t) (x97 >> 0x16);
+ { uint32_t x99 = ((uint32_t)x97 & 0x3fffff);
+ { uint64_t x100 = (x51 + ((uint64_t)0x69 * x98));
+ { uint32_t x101 = (uint32_t) (x100 >> 0x17);
+ { uint32_t x102 = ((uint32_t)x100 & 0x7fffff);
+ { uint32_t x103 = (x101 + x54);
+ { uint32_t x104 = (x103 >> 0x16);
+ { uint32_t x105 = (x103 & 0x3fffff);
+ out[0] = x102;
+ out[1] = x105;
+ out[2] = (x104 + x57);
+ out[3] = x60;
+ out[4] = x63;
+ out[5] = x66;
+ out[6] = x69;
+ out[7] = x72;
+ out[8] = x75;
+ out[9] = x78;
+ out[10] = x81;
+ out[11] = x84;
+ out[12] = x87;
+ out[13] = x90;
+ out[14] = x93;
+ out[15] = x96;
+ out[16] = x99;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e382m105_17limbs/fesquareDisplay.log b/src/Specific/solinas32_2e382m105_17limbs/fesquareDisplay.log
new file mode 100644
index 000000000..a86246132
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105_17limbs/fesquareDisplay.log
@@ -0,0 +1,80 @@
+λ x : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x31, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
+ uint64_t x33 = (((uint64_t)x2 * x31) + ((0x2 * ((uint64_t)x4 * x32)) + (((uint64_t)x6 * x30) + ((0x2 * ((uint64_t)x8 * x28)) + (((uint64_t)x10 * x26) + ((0x2 * ((uint64_t)x12 * x24)) + (((uint64_t)x14 * x22) + ((0x2 * ((uint64_t)x16 * x20)) + (((uint64_t)x18 * x18) + ((0x2 * ((uint64_t)x20 * x16)) + (((uint64_t)x22 * x14) + ((0x2 * ((uint64_t)x24 * x12)) + (((uint64_t)x26 * x10) + ((0x2 * ((uint64_t)x28 * x8)) + (((uint64_t)x30 * x6) + ((0x2 * ((uint64_t)x32 * x4)) + ((uint64_t)x31 * x2)))))))))))))))));
+ uint64_t x34 = ((((uint64_t)x2 * x32) + (((uint64_t)x4 * x30) + (((uint64_t)x6 * x28) + (((uint64_t)x8 * x26) + (((uint64_t)x10 * x24) + (((uint64_t)x12 * x22) + (((uint64_t)x14 * x20) + (((uint64_t)x16 * x18) + (((uint64_t)x18 * x16) + (((uint64_t)x20 * x14) + (((uint64_t)x22 * x12) + (((uint64_t)x24 * x10) + (((uint64_t)x26 * x8) + (((uint64_t)x28 * x6) + (((uint64_t)x30 * x4) + ((uint64_t)x32 * x2)))))))))))))))) + (0x69 * ((uint64_t)x31 * x31)));
+ uint64_t x35 = ((((uint64_t)x2 * x30) + ((0x2 * ((uint64_t)x4 * x28)) + (((uint64_t)x6 * x26) + ((0x2 * ((uint64_t)x8 * x24)) + (((uint64_t)x10 * x22) + ((0x2 * ((uint64_t)x12 * x20)) + (((uint64_t)x14 * x18) + ((0x2 * ((uint64_t)x16 * x16)) + (((uint64_t)x18 * x14) + ((0x2 * ((uint64_t)x20 * x12)) + (((uint64_t)x22 * x10) + ((0x2 * ((uint64_t)x24 * x8)) + (((uint64_t)x26 * x6) + ((0x2 * ((uint64_t)x28 * x4)) + ((uint64_t)x30 * x2))))))))))))))) + (0x69 * ((0x2 * ((uint64_t)x32 * x31)) + (0x2 * ((uint64_t)x31 * x32)))));
+ uint64_t x36 = ((((uint64_t)x2 * x28) + (((uint64_t)x4 * x26) + (((uint64_t)x6 * x24) + (((uint64_t)x8 * x22) + (((uint64_t)x10 * x20) + (((uint64_t)x12 * x18) + (((uint64_t)x14 * x16) + (((uint64_t)x16 * x14) + (((uint64_t)x18 * x12) + (((uint64_t)x20 * x10) + (((uint64_t)x22 * x8) + (((uint64_t)x24 * x6) + (((uint64_t)x26 * x4) + ((uint64_t)x28 * x2)))))))))))))) + (0x69 * (((uint64_t)x30 * x31) + ((0x2 * ((uint64_t)x32 * x32)) + ((uint64_t)x31 * x30)))));
+ uint64_t x37 = ((((uint64_t)x2 * x26) + ((0x2 * ((uint64_t)x4 * x24)) + (((uint64_t)x6 * x22) + ((0x2 * ((uint64_t)x8 * x20)) + (((uint64_t)x10 * x18) + ((0x2 * ((uint64_t)x12 * x16)) + (((uint64_t)x14 * x14) + ((0x2 * ((uint64_t)x16 * x12)) + (((uint64_t)x18 * x10) + ((0x2 * ((uint64_t)x20 * x8)) + (((uint64_t)x22 * x6) + ((0x2 * ((uint64_t)x24 * x4)) + ((uint64_t)x26 * x2))))))))))))) + (0x69 * ((0x2 * ((uint64_t)x28 * x31)) + ((0x2 * ((uint64_t)x30 * x32)) + ((0x2 * ((uint64_t)x32 * x30)) + (0x2 * ((uint64_t)x31 * x28)))))));
+ uint64_t x38 = ((((uint64_t)x2 * x24) + (((uint64_t)x4 * x22) + (((uint64_t)x6 * x20) + (((uint64_t)x8 * x18) + (((uint64_t)x10 * x16) + (((uint64_t)x12 * x14) + (((uint64_t)x14 * x12) + (((uint64_t)x16 * x10) + (((uint64_t)x18 * x8) + (((uint64_t)x20 * x6) + (((uint64_t)x22 * x4) + ((uint64_t)x24 * x2)))))))))))) + (0x69 * (((uint64_t)x26 * x31) + ((0x2 * ((uint64_t)x28 * x32)) + (((uint64_t)x30 * x30) + ((0x2 * ((uint64_t)x32 * x28)) + ((uint64_t)x31 * x26)))))));
+ uint64_t x39 = ((((uint64_t)x2 * x22) + ((0x2 * ((uint64_t)x4 * x20)) + (((uint64_t)x6 * x18) + ((0x2 * ((uint64_t)x8 * x16)) + (((uint64_t)x10 * x14) + ((0x2 * ((uint64_t)x12 * x12)) + (((uint64_t)x14 * x10) + ((0x2 * ((uint64_t)x16 * x8)) + (((uint64_t)x18 * x6) + ((0x2 * ((uint64_t)x20 * x4)) + ((uint64_t)x22 * x2))))))))))) + (0x69 * ((0x2 * ((uint64_t)x24 * x31)) + ((0x2 * ((uint64_t)x26 * x32)) + ((0x2 * ((uint64_t)x28 * x30)) + ((0x2 * ((uint64_t)x30 * x28)) + ((0x2 * ((uint64_t)x32 * x26)) + (0x2 * ((uint64_t)x31 * x24)))))))));
+ uint64_t x40 = ((((uint64_t)x2 * x20) + (((uint64_t)x4 * x18) + (((uint64_t)x6 * x16) + (((uint64_t)x8 * x14) + (((uint64_t)x10 * x12) + (((uint64_t)x12 * x10) + (((uint64_t)x14 * x8) + (((uint64_t)x16 * x6) + (((uint64_t)x18 * x4) + ((uint64_t)x20 * x2)))))))))) + (0x69 * (((uint64_t)x22 * x31) + ((0x2 * ((uint64_t)x24 * x32)) + (((uint64_t)x26 * x30) + ((0x2 * ((uint64_t)x28 * x28)) + (((uint64_t)x30 * x26) + ((0x2 * ((uint64_t)x32 * x24)) + ((uint64_t)x31 * x22)))))))));
+ uint64_t x41 = ((((uint64_t)x2 * x18) + ((0x2 * ((uint64_t)x4 * x16)) + (((uint64_t)x6 * x14) + ((0x2 * ((uint64_t)x8 * x12)) + (((uint64_t)x10 * x10) + ((0x2 * ((uint64_t)x12 * x8)) + (((uint64_t)x14 * x6) + ((0x2 * ((uint64_t)x16 * x4)) + ((uint64_t)x18 * x2))))))))) + (0x69 * ((0x2 * ((uint64_t)x20 * x31)) + ((0x2 * ((uint64_t)x22 * x32)) + ((0x2 * ((uint64_t)x24 * x30)) + ((0x2 * ((uint64_t)x26 * x28)) + ((0x2 * ((uint64_t)x28 * x26)) + ((0x2 * ((uint64_t)x30 * x24)) + ((0x2 * ((uint64_t)x32 * x22)) + (0x2 * ((uint64_t)x31 * x20)))))))))));
+ uint64_t x42 = ((((uint64_t)x2 * x16) + (((uint64_t)x4 * x14) + (((uint64_t)x6 * x12) + (((uint64_t)x8 * x10) + (((uint64_t)x10 * x8) + (((uint64_t)x12 * x6) + (((uint64_t)x14 * x4) + ((uint64_t)x16 * x2)))))))) + (0x69 * (((uint64_t)x18 * x31) + ((0x2 * ((uint64_t)x20 * x32)) + (((uint64_t)x22 * x30) + ((0x2 * ((uint64_t)x24 * x28)) + (((uint64_t)x26 * x26) + ((0x2 * ((uint64_t)x28 * x24)) + (((uint64_t)x30 * x22) + ((0x2 * ((uint64_t)x32 * x20)) + ((uint64_t)x31 * x18)))))))))));
+ uint64_t x43 = ((((uint64_t)x2 * x14) + ((0x2 * ((uint64_t)x4 * x12)) + (((uint64_t)x6 * x10) + ((0x2 * ((uint64_t)x8 * x8)) + (((uint64_t)x10 * x6) + ((0x2 * ((uint64_t)x12 * x4)) + ((uint64_t)x14 * x2))))))) + (0x69 * ((0x2 * ((uint64_t)x16 * x31)) + ((0x2 * ((uint64_t)x18 * x32)) + ((0x2 * ((uint64_t)x20 * x30)) + ((0x2 * ((uint64_t)x22 * x28)) + ((0x2 * ((uint64_t)x24 * x26)) + ((0x2 * ((uint64_t)x26 * x24)) + ((0x2 * ((uint64_t)x28 * x22)) + ((0x2 * ((uint64_t)x30 * x20)) + ((0x2 * ((uint64_t)x32 * x18)) + (0x2 * ((uint64_t)x31 * x16)))))))))))));
+ uint64_t x44 = ((((uint64_t)x2 * x12) + (((uint64_t)x4 * x10) + (((uint64_t)x6 * x8) + (((uint64_t)x8 * x6) + (((uint64_t)x10 * x4) + ((uint64_t)x12 * x2)))))) + (0x69 * (((uint64_t)x14 * x31) + ((0x2 * ((uint64_t)x16 * x32)) + (((uint64_t)x18 * x30) + ((0x2 * ((uint64_t)x20 * x28)) + (((uint64_t)x22 * x26) + ((0x2 * ((uint64_t)x24 * x24)) + (((uint64_t)x26 * x22) + ((0x2 * ((uint64_t)x28 * x20)) + (((uint64_t)x30 * x18) + ((0x2 * ((uint64_t)x32 * x16)) + ((uint64_t)x31 * x14)))))))))))));
+ uint64_t x45 = ((((uint64_t)x2 * x10) + ((0x2 * ((uint64_t)x4 * x8)) + (((uint64_t)x6 * x6) + ((0x2 * ((uint64_t)x8 * x4)) + ((uint64_t)x10 * x2))))) + (0x69 * ((0x2 * ((uint64_t)x12 * x31)) + ((0x2 * ((uint64_t)x14 * x32)) + ((0x2 * ((uint64_t)x16 * x30)) + ((0x2 * ((uint64_t)x18 * x28)) + ((0x2 * ((uint64_t)x20 * x26)) + ((0x2 * ((uint64_t)x22 * x24)) + ((0x2 * ((uint64_t)x24 * x22)) + ((0x2 * ((uint64_t)x26 * x20)) + ((0x2 * ((uint64_t)x28 * x18)) + ((0x2 * ((uint64_t)x30 * x16)) + ((0x2 * ((uint64_t)x32 * x14)) + (0x2 * ((uint64_t)x31 * x12)))))))))))))));
+ uint64_t x46 = ((((uint64_t)x2 * x8) + (((uint64_t)x4 * x6) + (((uint64_t)x6 * x4) + ((uint64_t)x8 * x2)))) + (0x69 * (((uint64_t)x10 * x31) + ((0x2 * ((uint64_t)x12 * x32)) + (((uint64_t)x14 * x30) + ((0x2 * ((uint64_t)x16 * x28)) + (((uint64_t)x18 * x26) + ((0x2 * ((uint64_t)x20 * x24)) + (((uint64_t)x22 * x22) + ((0x2 * ((uint64_t)x24 * x20)) + (((uint64_t)x26 * x18) + ((0x2 * ((uint64_t)x28 * x16)) + (((uint64_t)x30 * x14) + ((0x2 * ((uint64_t)x32 * x12)) + ((uint64_t)x31 * x10)))))))))))))));
+ uint64_t x47 = ((((uint64_t)x2 * x6) + ((0x2 * ((uint64_t)x4 * x4)) + ((uint64_t)x6 * x2))) + (0x69 * ((0x2 * ((uint64_t)x8 * x31)) + ((0x2 * ((uint64_t)x10 * x32)) + ((0x2 * ((uint64_t)x12 * x30)) + ((0x2 * ((uint64_t)x14 * x28)) + ((0x2 * ((uint64_t)x16 * x26)) + ((0x2 * ((uint64_t)x18 * x24)) + ((0x2 * ((uint64_t)x20 * x22)) + ((0x2 * ((uint64_t)x22 * x20)) + ((0x2 * ((uint64_t)x24 * x18)) + ((0x2 * ((uint64_t)x26 * x16)) + ((0x2 * ((uint64_t)x28 * x14)) + ((0x2 * ((uint64_t)x30 * x12)) + ((0x2 * ((uint64_t)x32 * x10)) + (0x2 * ((uint64_t)x31 * x8)))))))))))))))));
+ uint64_t x48 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0x69 * (((uint64_t)x6 * x31) + ((0x2 * ((uint64_t)x8 * x32)) + (((uint64_t)x10 * x30) + ((0x2 * ((uint64_t)x12 * x28)) + (((uint64_t)x14 * x26) + ((0x2 * ((uint64_t)x16 * x24)) + (((uint64_t)x18 * x22) + ((0x2 * ((uint64_t)x20 * x20)) + (((uint64_t)x22 * x18) + ((0x2 * ((uint64_t)x24 * x16)) + (((uint64_t)x26 * x14) + ((0x2 * ((uint64_t)x28 * x12)) + (((uint64_t)x30 * x10) + ((0x2 * ((uint64_t)x32 * x8)) + ((uint64_t)x31 * x6)))))))))))))))));
+ uint64_t x49 = (((uint64_t)x2 * x2) + (0x69 * ((0x2 * ((uint64_t)x4 * x31)) + ((0x2 * ((uint64_t)x6 * x32)) + ((0x2 * ((uint64_t)x8 * x30)) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + ((0x2 * ((uint64_t)x16 * x22)) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + ((0x2 * ((uint64_t)x22 * x16)) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + ((0x2 * ((uint64_t)x30 * x8)) + ((0x2 * ((uint64_t)x32 * x6)) + (0x2 * ((uint64_t)x31 * x4)))))))))))))))))));
+ uint64_t x50 = (x49 >> 0x17);
+ uint32_t x51 = ((uint32_t)x49 & 0x7fffff);
+ uint64_t x52 = (x50 + x48);
+ uint64_t x53 = (x52 >> 0x16);
+ uint32_t x54 = ((uint32_t)x52 & 0x3fffff);
+ uint64_t x55 = (x53 + x47);
+ uint64_t x56 = (x55 >> 0x17);
+ uint32_t x57 = ((uint32_t)x55 & 0x7fffff);
+ uint64_t x58 = (x56 + x46);
+ uint64_t x59 = (x58 >> 0x16);
+ uint32_t x60 = ((uint32_t)x58 & 0x3fffff);
+ uint64_t x61 = (x59 + x45);
+ uint64_t x62 = (x61 >> 0x17);
+ uint32_t x63 = ((uint32_t)x61 & 0x7fffff);
+ uint64_t x64 = (x62 + x44);
+ uint64_t x65 = (x64 >> 0x16);
+ uint32_t x66 = ((uint32_t)x64 & 0x3fffff);
+ uint64_t x67 = (x65 + x43);
+ uint64_t x68 = (x67 >> 0x17);
+ uint32_t x69 = ((uint32_t)x67 & 0x7fffff);
+ uint64_t x70 = (x68 + x42);
+ uint64_t x71 = (x70 >> 0x16);
+ uint32_t x72 = ((uint32_t)x70 & 0x3fffff);
+ uint64_t x73 = (x71 + x41);
+ uint64_t x74 = (x73 >> 0x17);
+ uint32_t x75 = ((uint32_t)x73 & 0x7fffff);
+ uint64_t x76 = (x74 + x40);
+ uint64_t x77 = (x76 >> 0x16);
+ uint32_t x78 = ((uint32_t)x76 & 0x3fffff);
+ uint64_t x79 = (x77 + x39);
+ uint64_t x80 = (x79 >> 0x17);
+ uint32_t x81 = ((uint32_t)x79 & 0x7fffff);
+ uint64_t x82 = (x80 + x38);
+ uint64_t x83 = (x82 >> 0x16);
+ uint32_t x84 = ((uint32_t)x82 & 0x3fffff);
+ uint64_t x85 = (x83 + x37);
+ uint64_t x86 = (x85 >> 0x17);
+ uint32_t x87 = ((uint32_t)x85 & 0x7fffff);
+ uint64_t x88 = (x86 + x36);
+ uint64_t x89 = (x88 >> 0x16);
+ uint32_t x90 = ((uint32_t)x88 & 0x3fffff);
+ uint64_t x91 = (x89 + x35);
+ uint64_t x92 = (x91 >> 0x17);
+ uint32_t x93 = ((uint32_t)x91 & 0x7fffff);
+ uint64_t x94 = (x92 + x34);
+ uint64_t x95 = (x94 >> 0x16);
+ uint32_t x96 = ((uint32_t)x94 & 0x3fffff);
+ uint64_t x97 = (x95 + x33);
+ uint32_t x98 = (uint32_t) (x97 >> 0x16);
+ uint32_t x99 = ((uint32_t)x97 & 0x3fffff);
+ uint64_t x100 = (x51 + ((uint64_t)0x69 * x98));
+ uint32_t x101 = (uint32_t) (x100 >> 0x17);
+ uint32_t x102 = ((uint32_t)x100 & 0x7fffff);
+ uint32_t x103 = (x101 + x54);
+ uint32_t x104 = (x103 >> 0x16);
+ uint32_t x105 = (x103 & 0x3fffff);
+ return (Return x99, Return x96, Return x93, Return x90, Return x87, Return x84, Return x81, Return x78, Return x75, Return x72, Return x69, Return x66, Return x63, Return x60, (x104 + x57), Return x105, Return x102))
+x
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m187_16limbs/femul.c b/src/Specific/solinas32_2e383m187_16limbs/femul.c
new file mode 100644
index 000000000..802237a93
--- /dev/null
+++ b/src/Specific/solinas32_2e383m187_16limbs/femul.c
@@ -0,0 +1,120 @@
+static void femul(uint32_t out[16], const uint32_t in1[16], const uint32_t in2[16]) {
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x62 = in2[15];
+ { const uint32_t x63 = in2[14];
+ { const uint32_t x61 = in2[13];
+ { const uint32_t x59 = in2[12];
+ { const uint32_t x57 = in2[11];
+ { const uint32_t x55 = in2[10];
+ { const uint32_t x53 = in2[9];
+ { const uint32_t x51 = in2[8];
+ { const uint32_t x49 = in2[7];
+ { const uint32_t x47 = in2[6];
+ { const uint32_t x45 = in2[5];
+ { const uint32_t x43 = in2[4];
+ { const uint32_t x41 = in2[3];
+ { const uint32_t x39 = in2[2];
+ { const uint32_t x37 = in2[1];
+ { const uint32_t x35 = in2[0];
+ { uint64_t x64 = (((uint64_t)x5 * x62) + (((uint64_t)x7 * x63) + (((uint64_t)x9 * x61) + (((uint64_t)x11 * x59) + (((uint64_t)x13 * x57) + (((uint64_t)x15 * x55) + (((uint64_t)x17 * x53) + (((uint64_t)x19 * x51) + (((uint64_t)x21 * x49) + (((uint64_t)x23 * x47) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + (((uint64_t)x29 * x41) + (((uint64_t)x31 * x39) + (((uint64_t)x33 * x37) + ((uint64_t)x32 * x35))))))))))))))));
+ { uint64_t x65 = ((((uint64_t)x5 * x63) + (((uint64_t)x7 * x61) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + (((uint64_t)x13 * x55) + (((uint64_t)x15 * x53) + (((uint64_t)x17 * x51) + (((uint64_t)x19 * x49) + (((uint64_t)x21 * x47) + (((uint64_t)x23 * x45) + (((uint64_t)x25 * x43) + (((uint64_t)x27 * x41) + (((uint64_t)x29 * x39) + (((uint64_t)x31 * x37) + ((uint64_t)x33 * x35))))))))))))))) + (0xbb * (0x2 * ((uint64_t)x32 * x62))));
+ { uint64_t x66 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + (((uint64_t)x29 * x37) + ((uint64_t)x31 * x35)))))))))))))) + (0xbb * ((0x2 * ((uint64_t)x33 * x62)) + (0x2 * ((uint64_t)x32 * x63)))));
+ { uint64_t x67 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + (((uint64_t)x9 * x55) + (((uint64_t)x11 * x53) + (((uint64_t)x13 * x51) + (((uint64_t)x15 * x49) + (((uint64_t)x17 * x47) + (((uint64_t)x19 * x45) + (((uint64_t)x21 * x43) + (((uint64_t)x23 * x41) + (((uint64_t)x25 * x39) + (((uint64_t)x27 * x37) + ((uint64_t)x29 * x35))))))))))))) + (0xbb * ((0x2 * ((uint64_t)x31 * x62)) + ((0x2 * ((uint64_t)x33 * x63)) + (0x2 * ((uint64_t)x32 * x61))))));
+ { uint64_t x68 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + (((uint64_t)x9 * x53) + (((uint64_t)x11 * x51) + (((uint64_t)x13 * x49) + (((uint64_t)x15 * x47) + (((uint64_t)x17 * x45) + (((uint64_t)x19 * x43) + (((uint64_t)x21 * x41) + (((uint64_t)x23 * x39) + (((uint64_t)x25 * x37) + ((uint64_t)x27 * x35)))))))))))) + (0xbb * ((0x2 * ((uint64_t)x29 * x62)) + ((0x2 * ((uint64_t)x31 * x63)) + ((0x2 * ((uint64_t)x33 * x61)) + (0x2 * ((uint64_t)x32 * x59)))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + (((uint64_t)x21 * x39) + (((uint64_t)x23 * x37) + ((uint64_t)x25 * x35))))))))))) + (0xbb * ((0x2 * ((uint64_t)x27 * x62)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + ((0x2 * ((uint64_t)x33 * x59)) + (0x2 * ((uint64_t)x32 * x57))))))));
+ { uint64_t x70 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + (((uint64_t)x9 * x49) + (((uint64_t)x11 * x47) + (((uint64_t)x13 * x45) + (((uint64_t)x15 * x43) + (((uint64_t)x17 * x41) + (((uint64_t)x19 * x39) + (((uint64_t)x21 * x37) + ((uint64_t)x23 * x35)))))))))) + (0xbb * ((0x2 * ((uint64_t)x25 * x62)) + ((0x2 * ((uint64_t)x27 * x63)) + ((0x2 * ((uint64_t)x29 * x61)) + ((0x2 * ((uint64_t)x31 * x59)) + ((0x2 * ((uint64_t)x33 * x57)) + (0x2 * ((uint64_t)x32 * x55)))))))));
+ { uint64_t x71 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + (((uint64_t)x13 * x43) + (((uint64_t)x15 * x41) + (((uint64_t)x17 * x39) + (((uint64_t)x19 * x37) + ((uint64_t)x21 * x35))))))))) + (0xbb * ((0x2 * ((uint64_t)x23 * x62)) + ((0x2 * ((uint64_t)x25 * x63)) + ((0x2 * ((uint64_t)x27 * x61)) + ((0x2 * ((uint64_t)x29 * x59)) + ((0x2 * ((uint64_t)x31 * x57)) + ((0x2 * ((uint64_t)x33 * x55)) + (0x2 * ((uint64_t)x32 * x53))))))))));
+ { uint64_t x72 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + (((uint64_t)x9 * x45) + (((uint64_t)x11 * x43) + (((uint64_t)x13 * x41) + (((uint64_t)x15 * x39) + (((uint64_t)x17 * x37) + ((uint64_t)x19 * x35)))))))) + (0xbb * ((0x2 * ((uint64_t)x21 * x62)) + ((0x2 * ((uint64_t)x23 * x63)) + ((0x2 * ((uint64_t)x25 * x61)) + ((0x2 * ((uint64_t)x27 * x59)) + ((0x2 * ((uint64_t)x29 * x57)) + ((0x2 * ((uint64_t)x31 * x55)) + ((0x2 * ((uint64_t)x33 * x53)) + (0x2 * ((uint64_t)x32 * x51)))))))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + (((uint64_t)x11 * x41) + (((uint64_t)x13 * x39) + (((uint64_t)x15 * x37) + ((uint64_t)x17 * x35))))))) + (0xbb * ((0x2 * ((uint64_t)x19 * x62)) + ((0x2 * ((uint64_t)x21 * x63)) + ((0x2 * ((uint64_t)x23 * x61)) + ((0x2 * ((uint64_t)x25 * x59)) + ((0x2 * ((uint64_t)x27 * x57)) + ((0x2 * ((uint64_t)x29 * x55)) + ((0x2 * ((uint64_t)x31 * x53)) + ((0x2 * ((uint64_t)x33 * x51)) + (0x2 * ((uint64_t)x32 * x49))))))))))));
+ { uint64_t x74 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + (((uint64_t)x9 * x41) + (((uint64_t)x11 * x39) + (((uint64_t)x13 * x37) + ((uint64_t)x15 * x35)))))) + (0xbb * ((0x2 * ((uint64_t)x17 * x62)) + ((0x2 * ((uint64_t)x19 * x63)) + ((0x2 * ((uint64_t)x21 * x61)) + ((0x2 * ((uint64_t)x23 * x59)) + ((0x2 * ((uint64_t)x25 * x57)) + ((0x2 * ((uint64_t)x27 * x55)) + ((0x2 * ((uint64_t)x29 * x53)) + ((0x2 * ((uint64_t)x31 * x51)) + ((0x2 * ((uint64_t)x33 * x49)) + (0x2 * ((uint64_t)x32 * x47)))))))))))));
+ { uint64_t x75 = ((((uint64_t)x5 * x43) + (((uint64_t)x7 * x41) + (((uint64_t)x9 * x39) + (((uint64_t)x11 * x37) + ((uint64_t)x13 * x35))))) + (0xbb * ((0x2 * ((uint64_t)x15 * x62)) + ((0x2 * ((uint64_t)x17 * x63)) + ((0x2 * ((uint64_t)x19 * x61)) + ((0x2 * ((uint64_t)x21 * x59)) + ((0x2 * ((uint64_t)x23 * x57)) + ((0x2 * ((uint64_t)x25 * x55)) + ((0x2 * ((uint64_t)x27 * x53)) + ((0x2 * ((uint64_t)x29 * x51)) + ((0x2 * ((uint64_t)x31 * x49)) + ((0x2 * ((uint64_t)x33 * x47)) + (0x2 * ((uint64_t)x32 * x45))))))))))))));
+ { uint64_t x76 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + ((uint64_t)x11 * x35)))) + (0xbb * ((0x2 * ((uint64_t)x13 * x62)) + ((0x2 * ((uint64_t)x15 * x63)) + ((0x2 * ((uint64_t)x17 * x61)) + ((0x2 * ((uint64_t)x19 * x59)) + ((0x2 * ((uint64_t)x21 * x57)) + ((0x2 * ((uint64_t)x23 * x55)) + ((0x2 * ((uint64_t)x25 * x53)) + ((0x2 * ((uint64_t)x27 * x51)) + ((0x2 * ((uint64_t)x29 * x49)) + ((0x2 * ((uint64_t)x31 * x47)) + ((0x2 * ((uint64_t)x33 * x45)) + (0x2 * ((uint64_t)x32 * x43)))))))))))))));
+ { uint64_t x77 = ((((uint64_t)x5 * x39) + (((uint64_t)x7 * x37) + ((uint64_t)x9 * x35))) + (0xbb * ((0x2 * ((uint64_t)x11 * x62)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + (0x2 * ((uint64_t)x32 * x41))))))))))))))));
+ { uint64_t x78 = ((((uint64_t)x5 * x37) + ((uint64_t)x7 * x35)) + (0xbb * ((0x2 * ((uint64_t)x9 * x62)) + ((0x2 * ((uint64_t)x11 * x63)) + ((0x2 * ((uint64_t)x13 * x61)) + ((0x2 * ((uint64_t)x15 * x59)) + ((0x2 * ((uint64_t)x17 * x57)) + ((0x2 * ((uint64_t)x19 * x55)) + ((0x2 * ((uint64_t)x21 * x53)) + ((0x2 * ((uint64_t)x23 * x51)) + ((0x2 * ((uint64_t)x25 * x49)) + ((0x2 * ((uint64_t)x27 * x47)) + ((0x2 * ((uint64_t)x29 * x45)) + ((0x2 * ((uint64_t)x31 * x43)) + ((0x2 * ((uint64_t)x33 * x41)) + (0x2 * ((uint64_t)x32 * x39)))))))))))))))));
+ { uint64_t x79 = (((uint64_t)x5 * x35) + (0xbb * ((0x2 * ((uint64_t)x7 * x62)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + (0x2 * ((uint64_t)x32 * x37))))))))))))))))));
+ { uint64_t x80 = (x79 >> 0x18);
+ { uint32_t x81 = ((uint32_t)x79 & 0xffffff);
+ { uint64_t x82 = (x80 + x78);
+ { uint64_t x83 = (x82 >> 0x18);
+ { uint32_t x84 = ((uint32_t)x82 & 0xffffff);
+ { uint64_t x85 = (x83 + x77);
+ { uint64_t x86 = (x85 >> 0x18);
+ { uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ { uint64_t x88 = (x86 + x76);
+ { uint64_t x89 = (x88 >> 0x18);
+ { uint32_t x90 = ((uint32_t)x88 & 0xffffff);
+ { uint64_t x91 = (x89 + x75);
+ { uint64_t x92 = (x91 >> 0x18);
+ { uint32_t x93 = ((uint32_t)x91 & 0xffffff);
+ { uint64_t x94 = (x92 + x74);
+ { uint64_t x95 = (x94 >> 0x18);
+ { uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ { uint64_t x97 = (x95 + x73);
+ { uint64_t x98 = (x97 >> 0x18);
+ { uint32_t x99 = ((uint32_t)x97 & 0xffffff);
+ { uint64_t x100 = (x98 + x72);
+ { uint64_t x101 = (x100 >> 0x18);
+ { uint32_t x102 = ((uint32_t)x100 & 0xffffff);
+ { uint64_t x103 = (x101 + x71);
+ { uint64_t x104 = (x103 >> 0x18);
+ { uint32_t x105 = ((uint32_t)x103 & 0xffffff);
+ { uint64_t x106 = (x104 + x70);
+ { uint64_t x107 = (x106 >> 0x18);
+ { uint32_t x108 = ((uint32_t)x106 & 0xffffff);
+ { uint64_t x109 = (x107 + x69);
+ { uint64_t x110 = (x109 >> 0x18);
+ { uint32_t x111 = ((uint32_t)x109 & 0xffffff);
+ { uint64_t x112 = (x110 + x68);
+ { uint64_t x113 = (x112 >> 0x18);
+ { uint32_t x114 = ((uint32_t)x112 & 0xffffff);
+ { uint64_t x115 = (x113 + x67);
+ { uint64_t x116 = (x115 >> 0x18);
+ { uint32_t x117 = ((uint32_t)x115 & 0xffffff);
+ { uint64_t x118 = (x116 + x66);
+ { uint64_t x119 = (x118 >> 0x18);
+ { uint32_t x120 = ((uint32_t)x118 & 0xffffff);
+ { uint64_t x121 = (x119 + x65);
+ { uint64_t x122 = (x121 >> 0x18);
+ { uint32_t x123 = ((uint32_t)x121 & 0xffffff);
+ { uint64_t x124 = (x122 + x64);
+ { uint64_t x125 = (x124 >> 0x17);
+ { uint32_t x126 = ((uint32_t)x124 & 0x7fffff);
+ { uint64_t x127 = (x81 + (0xbb * x125));
+ { uint32_t x128 = (uint32_t) (x127 >> 0x18);
+ { uint32_t x129 = ((uint32_t)x127 & 0xffffff);
+ { uint32_t x130 = (x128 + x84);
+ { uint32_t x131 = (x130 >> 0x18);
+ { uint32_t x132 = (x130 & 0xffffff);
+ out[0] = x129;
+ out[1] = x132;
+ out[2] = (x131 + x87);
+ out[3] = x90;
+ out[4] = x93;
+ out[5] = x96;
+ out[6] = x99;
+ out[7] = x102;
+ out[8] = x105;
+ out[9] = x108;
+ out[10] = x111;
+ out[11] = x114;
+ out[12] = x117;
+ out[13] = x120;
+ out[14] = x123;
+ out[15] = x126;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e383m187_16limbs/femulDisplay.log b/src/Specific/solinas32_2e383m187_16limbs/femulDisplay.log
new file mode 100644
index 000000000..092690c39
--- /dev/null
+++ b/src/Specific/solinas32_2e383m187_16limbs/femulDisplay.log
@@ -0,0 +1,76 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x32, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x62, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35))%core,
+ uint64_t x64 = (((uint64_t)x5 * x62) + (((uint64_t)x7 * x63) + (((uint64_t)x9 * x61) + (((uint64_t)x11 * x59) + (((uint64_t)x13 * x57) + (((uint64_t)x15 * x55) + (((uint64_t)x17 * x53) + (((uint64_t)x19 * x51) + (((uint64_t)x21 * x49) + (((uint64_t)x23 * x47) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + (((uint64_t)x29 * x41) + (((uint64_t)x31 * x39) + (((uint64_t)x33 * x37) + ((uint64_t)x32 * x35))))))))))))))));
+ uint64_t x65 = ((((uint64_t)x5 * x63) + (((uint64_t)x7 * x61) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + (((uint64_t)x13 * x55) + (((uint64_t)x15 * x53) + (((uint64_t)x17 * x51) + (((uint64_t)x19 * x49) + (((uint64_t)x21 * x47) + (((uint64_t)x23 * x45) + (((uint64_t)x25 * x43) + (((uint64_t)x27 * x41) + (((uint64_t)x29 * x39) + (((uint64_t)x31 * x37) + ((uint64_t)x33 * x35))))))))))))))) + (0xbb * (0x2 * ((uint64_t)x32 * x62))));
+ uint64_t x66 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + (((uint64_t)x29 * x37) + ((uint64_t)x31 * x35)))))))))))))) + (0xbb * ((0x2 * ((uint64_t)x33 * x62)) + (0x2 * ((uint64_t)x32 * x63)))));
+ uint64_t x67 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + (((uint64_t)x9 * x55) + (((uint64_t)x11 * x53) + (((uint64_t)x13 * x51) + (((uint64_t)x15 * x49) + (((uint64_t)x17 * x47) + (((uint64_t)x19 * x45) + (((uint64_t)x21 * x43) + (((uint64_t)x23 * x41) + (((uint64_t)x25 * x39) + (((uint64_t)x27 * x37) + ((uint64_t)x29 * x35))))))))))))) + (0xbb * ((0x2 * ((uint64_t)x31 * x62)) + ((0x2 * ((uint64_t)x33 * x63)) + (0x2 * ((uint64_t)x32 * x61))))));
+ uint64_t x68 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + (((uint64_t)x9 * x53) + (((uint64_t)x11 * x51) + (((uint64_t)x13 * x49) + (((uint64_t)x15 * x47) + (((uint64_t)x17 * x45) + (((uint64_t)x19 * x43) + (((uint64_t)x21 * x41) + (((uint64_t)x23 * x39) + (((uint64_t)x25 * x37) + ((uint64_t)x27 * x35)))))))))))) + (0xbb * ((0x2 * ((uint64_t)x29 * x62)) + ((0x2 * ((uint64_t)x31 * x63)) + ((0x2 * ((uint64_t)x33 * x61)) + (0x2 * ((uint64_t)x32 * x59)))))));
+ uint64_t x69 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + (((uint64_t)x21 * x39) + (((uint64_t)x23 * x37) + ((uint64_t)x25 * x35))))))))))) + (0xbb * ((0x2 * ((uint64_t)x27 * x62)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + ((0x2 * ((uint64_t)x33 * x59)) + (0x2 * ((uint64_t)x32 * x57))))))));
+ uint64_t x70 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + (((uint64_t)x9 * x49) + (((uint64_t)x11 * x47) + (((uint64_t)x13 * x45) + (((uint64_t)x15 * x43) + (((uint64_t)x17 * x41) + (((uint64_t)x19 * x39) + (((uint64_t)x21 * x37) + ((uint64_t)x23 * x35)))))))))) + (0xbb * ((0x2 * ((uint64_t)x25 * x62)) + ((0x2 * ((uint64_t)x27 * x63)) + ((0x2 * ((uint64_t)x29 * x61)) + ((0x2 * ((uint64_t)x31 * x59)) + ((0x2 * ((uint64_t)x33 * x57)) + (0x2 * ((uint64_t)x32 * x55)))))))));
+ uint64_t x71 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + (((uint64_t)x13 * x43) + (((uint64_t)x15 * x41) + (((uint64_t)x17 * x39) + (((uint64_t)x19 * x37) + ((uint64_t)x21 * x35))))))))) + (0xbb * ((0x2 * ((uint64_t)x23 * x62)) + ((0x2 * ((uint64_t)x25 * x63)) + ((0x2 * ((uint64_t)x27 * x61)) + ((0x2 * ((uint64_t)x29 * x59)) + ((0x2 * ((uint64_t)x31 * x57)) + ((0x2 * ((uint64_t)x33 * x55)) + (0x2 * ((uint64_t)x32 * x53))))))))));
+ uint64_t x72 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + (((uint64_t)x9 * x45) + (((uint64_t)x11 * x43) + (((uint64_t)x13 * x41) + (((uint64_t)x15 * x39) + (((uint64_t)x17 * x37) + ((uint64_t)x19 * x35)))))))) + (0xbb * ((0x2 * ((uint64_t)x21 * x62)) + ((0x2 * ((uint64_t)x23 * x63)) + ((0x2 * ((uint64_t)x25 * x61)) + ((0x2 * ((uint64_t)x27 * x59)) + ((0x2 * ((uint64_t)x29 * x57)) + ((0x2 * ((uint64_t)x31 * x55)) + ((0x2 * ((uint64_t)x33 * x53)) + (0x2 * ((uint64_t)x32 * x51)))))))))));
+ uint64_t x73 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + (((uint64_t)x11 * x41) + (((uint64_t)x13 * x39) + (((uint64_t)x15 * x37) + ((uint64_t)x17 * x35))))))) + (0xbb * ((0x2 * ((uint64_t)x19 * x62)) + ((0x2 * ((uint64_t)x21 * x63)) + ((0x2 * ((uint64_t)x23 * x61)) + ((0x2 * ((uint64_t)x25 * x59)) + ((0x2 * ((uint64_t)x27 * x57)) + ((0x2 * ((uint64_t)x29 * x55)) + ((0x2 * ((uint64_t)x31 * x53)) + ((0x2 * ((uint64_t)x33 * x51)) + (0x2 * ((uint64_t)x32 * x49))))))))))));
+ uint64_t x74 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + (((uint64_t)x9 * x41) + (((uint64_t)x11 * x39) + (((uint64_t)x13 * x37) + ((uint64_t)x15 * x35)))))) + (0xbb * ((0x2 * ((uint64_t)x17 * x62)) + ((0x2 * ((uint64_t)x19 * x63)) + ((0x2 * ((uint64_t)x21 * x61)) + ((0x2 * ((uint64_t)x23 * x59)) + ((0x2 * ((uint64_t)x25 * x57)) + ((0x2 * ((uint64_t)x27 * x55)) + ((0x2 * ((uint64_t)x29 * x53)) + ((0x2 * ((uint64_t)x31 * x51)) + ((0x2 * ((uint64_t)x33 * x49)) + (0x2 * ((uint64_t)x32 * x47)))))))))))));
+ uint64_t x75 = ((((uint64_t)x5 * x43) + (((uint64_t)x7 * x41) + (((uint64_t)x9 * x39) + (((uint64_t)x11 * x37) + ((uint64_t)x13 * x35))))) + (0xbb * ((0x2 * ((uint64_t)x15 * x62)) + ((0x2 * ((uint64_t)x17 * x63)) + ((0x2 * ((uint64_t)x19 * x61)) + ((0x2 * ((uint64_t)x21 * x59)) + ((0x2 * ((uint64_t)x23 * x57)) + ((0x2 * ((uint64_t)x25 * x55)) + ((0x2 * ((uint64_t)x27 * x53)) + ((0x2 * ((uint64_t)x29 * x51)) + ((0x2 * ((uint64_t)x31 * x49)) + ((0x2 * ((uint64_t)x33 * x47)) + (0x2 * ((uint64_t)x32 * x45))))))))))))));
+ uint64_t x76 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + ((uint64_t)x11 * x35)))) + (0xbb * ((0x2 * ((uint64_t)x13 * x62)) + ((0x2 * ((uint64_t)x15 * x63)) + ((0x2 * ((uint64_t)x17 * x61)) + ((0x2 * ((uint64_t)x19 * x59)) + ((0x2 * ((uint64_t)x21 * x57)) + ((0x2 * ((uint64_t)x23 * x55)) + ((0x2 * ((uint64_t)x25 * x53)) + ((0x2 * ((uint64_t)x27 * x51)) + ((0x2 * ((uint64_t)x29 * x49)) + ((0x2 * ((uint64_t)x31 * x47)) + ((0x2 * ((uint64_t)x33 * x45)) + (0x2 * ((uint64_t)x32 * x43)))))))))))))));
+ uint64_t x77 = ((((uint64_t)x5 * x39) + (((uint64_t)x7 * x37) + ((uint64_t)x9 * x35))) + (0xbb * ((0x2 * ((uint64_t)x11 * x62)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + (0x2 * ((uint64_t)x32 * x41))))))))))))))));
+ uint64_t x78 = ((((uint64_t)x5 * x37) + ((uint64_t)x7 * x35)) + (0xbb * ((0x2 * ((uint64_t)x9 * x62)) + ((0x2 * ((uint64_t)x11 * x63)) + ((0x2 * ((uint64_t)x13 * x61)) + ((0x2 * ((uint64_t)x15 * x59)) + ((0x2 * ((uint64_t)x17 * x57)) + ((0x2 * ((uint64_t)x19 * x55)) + ((0x2 * ((uint64_t)x21 * x53)) + ((0x2 * ((uint64_t)x23 * x51)) + ((0x2 * ((uint64_t)x25 * x49)) + ((0x2 * ((uint64_t)x27 * x47)) + ((0x2 * ((uint64_t)x29 * x45)) + ((0x2 * ((uint64_t)x31 * x43)) + ((0x2 * ((uint64_t)x33 * x41)) + (0x2 * ((uint64_t)x32 * x39)))))))))))))))));
+ uint64_t x79 = (((uint64_t)x5 * x35) + (0xbb * ((0x2 * ((uint64_t)x7 * x62)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + (0x2 * ((uint64_t)x32 * x37))))))))))))))))));
+ uint64_t x80 = (x79 >> 0x18);
+ uint32_t x81 = ((uint32_t)x79 & 0xffffff);
+ uint64_t x82 = (x80 + x78);
+ uint64_t x83 = (x82 >> 0x18);
+ uint32_t x84 = ((uint32_t)x82 & 0xffffff);
+ uint64_t x85 = (x83 + x77);
+ uint64_t x86 = (x85 >> 0x18);
+ uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ uint64_t x88 = (x86 + x76);
+ uint64_t x89 = (x88 >> 0x18);
+ uint32_t x90 = ((uint32_t)x88 & 0xffffff);
+ uint64_t x91 = (x89 + x75);
+ uint64_t x92 = (x91 >> 0x18);
+ uint32_t x93 = ((uint32_t)x91 & 0xffffff);
+ uint64_t x94 = (x92 + x74);
+ uint64_t x95 = (x94 >> 0x18);
+ uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ uint64_t x97 = (x95 + x73);
+ uint64_t x98 = (x97 >> 0x18);
+ uint32_t x99 = ((uint32_t)x97 & 0xffffff);
+ uint64_t x100 = (x98 + x72);
+ uint64_t x101 = (x100 >> 0x18);
+ uint32_t x102 = ((uint32_t)x100 & 0xffffff);
+ uint64_t x103 = (x101 + x71);
+ uint64_t x104 = (x103 >> 0x18);
+ uint32_t x105 = ((uint32_t)x103 & 0xffffff);
+ uint64_t x106 = (x104 + x70);
+ uint64_t x107 = (x106 >> 0x18);
+ uint32_t x108 = ((uint32_t)x106 & 0xffffff);
+ uint64_t x109 = (x107 + x69);
+ uint64_t x110 = (x109 >> 0x18);
+ uint32_t x111 = ((uint32_t)x109 & 0xffffff);
+ uint64_t x112 = (x110 + x68);
+ uint64_t x113 = (x112 >> 0x18);
+ uint32_t x114 = ((uint32_t)x112 & 0xffffff);
+ uint64_t x115 = (x113 + x67);
+ uint64_t x116 = (x115 >> 0x18);
+ uint32_t x117 = ((uint32_t)x115 & 0xffffff);
+ uint64_t x118 = (x116 + x66);
+ uint64_t x119 = (x118 >> 0x18);
+ uint32_t x120 = ((uint32_t)x118 & 0xffffff);
+ uint64_t x121 = (x119 + x65);
+ uint64_t x122 = (x121 >> 0x18);
+ uint32_t x123 = ((uint32_t)x121 & 0xffffff);
+ uint64_t x124 = (x122 + x64);
+ uint64_t x125 = (x124 >> 0x17);
+ uint32_t x126 = ((uint32_t)x124 & 0x7fffff);
+ uint64_t x127 = (x81 + (0xbb * x125));
+ uint32_t x128 = (uint32_t) (x127 >> 0x18);
+ uint32_t x129 = ((uint32_t)x127 & 0xffffff);
+ uint32_t x130 = (x128 + x84);
+ uint32_t x131 = (x130 >> 0x18);
+ uint32_t x132 = (x130 & 0xffffff);
+ return (Return x126, Return x123, Return x120, Return x117, Return x114, Return x111, Return x108, Return x105, Return x102, Return x99, Return x96, Return x93, Return x90, (x131 + x87), Return x132, Return x129))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m187_16limbs/fesquare.c b/src/Specific/solinas32_2e383m187_16limbs/fesquare.c
new file mode 100644
index 000000000..3826dd660
--- /dev/null
+++ b/src/Specific/solinas32_2e383m187_16limbs/fesquare.c
@@ -0,0 +1,104 @@
+static void fesquare(uint32_t out[16], const uint32_t in1[16]) {
+ { const uint32_t x29 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint64_t x31 = (((uint64_t)x2 * x29) + (((uint64_t)x4 * x30) + (((uint64_t)x6 * x28) + (((uint64_t)x8 * x26) + (((uint64_t)x10 * x24) + (((uint64_t)x12 * x22) + (((uint64_t)x14 * x20) + (((uint64_t)x16 * x18) + (((uint64_t)x18 * x16) + (((uint64_t)x20 * x14) + (((uint64_t)x22 * x12) + (((uint64_t)x24 * x10) + (((uint64_t)x26 * x8) + (((uint64_t)x28 * x6) + (((uint64_t)x30 * x4) + ((uint64_t)x29 * x2))))))))))))))));
+ { uint64_t x32 = ((((uint64_t)x2 * x30) + (((uint64_t)x4 * x28) + (((uint64_t)x6 * x26) + (((uint64_t)x8 * x24) + (((uint64_t)x10 * x22) + (((uint64_t)x12 * x20) + (((uint64_t)x14 * x18) + (((uint64_t)x16 * x16) + (((uint64_t)x18 * x14) + (((uint64_t)x20 * x12) + (((uint64_t)x22 * x10) + (((uint64_t)x24 * x8) + (((uint64_t)x26 * x6) + (((uint64_t)x28 * x4) + ((uint64_t)x30 * x2))))))))))))))) + (0xbb * (0x2 * ((uint64_t)x29 * x29))));
+ { uint64_t x33 = ((((uint64_t)x2 * x28) + (((uint64_t)x4 * x26) + (((uint64_t)x6 * x24) + (((uint64_t)x8 * x22) + (((uint64_t)x10 * x20) + (((uint64_t)x12 * x18) + (((uint64_t)x14 * x16) + (((uint64_t)x16 * x14) + (((uint64_t)x18 * x12) + (((uint64_t)x20 * x10) + (((uint64_t)x22 * x8) + (((uint64_t)x24 * x6) + (((uint64_t)x26 * x4) + ((uint64_t)x28 * x2)))))))))))))) + (0xbb * ((0x2 * ((uint64_t)x30 * x29)) + (0x2 * ((uint64_t)x29 * x30)))));
+ { uint64_t x34 = ((((uint64_t)x2 * x26) + (((uint64_t)x4 * x24) + (((uint64_t)x6 * x22) + (((uint64_t)x8 * x20) + (((uint64_t)x10 * x18) + (((uint64_t)x12 * x16) + (((uint64_t)x14 * x14) + (((uint64_t)x16 * x12) + (((uint64_t)x18 * x10) + (((uint64_t)x20 * x8) + (((uint64_t)x22 * x6) + (((uint64_t)x24 * x4) + ((uint64_t)x26 * x2))))))))))))) + (0xbb * ((0x2 * ((uint64_t)x28 * x29)) + ((0x2 * ((uint64_t)x30 * x30)) + (0x2 * ((uint64_t)x29 * x28))))));
+ { uint64_t x35 = ((((uint64_t)x2 * x24) + (((uint64_t)x4 * x22) + (((uint64_t)x6 * x20) + (((uint64_t)x8 * x18) + (((uint64_t)x10 * x16) + (((uint64_t)x12 * x14) + (((uint64_t)x14 * x12) + (((uint64_t)x16 * x10) + (((uint64_t)x18 * x8) + (((uint64_t)x20 * x6) + (((uint64_t)x22 * x4) + ((uint64_t)x24 * x2)))))))))))) + (0xbb * ((0x2 * ((uint64_t)x26 * x29)) + ((0x2 * ((uint64_t)x28 * x30)) + ((0x2 * ((uint64_t)x30 * x28)) + (0x2 * ((uint64_t)x29 * x26)))))));
+ { uint64_t x36 = ((((uint64_t)x2 * x22) + (((uint64_t)x4 * x20) + (((uint64_t)x6 * x18) + (((uint64_t)x8 * x16) + (((uint64_t)x10 * x14) + (((uint64_t)x12 * x12) + (((uint64_t)x14 * x10) + (((uint64_t)x16 * x8) + (((uint64_t)x18 * x6) + (((uint64_t)x20 * x4) + ((uint64_t)x22 * x2))))))))))) + (0xbb * ((0x2 * ((uint64_t)x24 * x29)) + ((0x2 * ((uint64_t)x26 * x30)) + ((0x2 * ((uint64_t)x28 * x28)) + ((0x2 * ((uint64_t)x30 * x26)) + (0x2 * ((uint64_t)x29 * x24))))))));
+ { uint64_t x37 = ((((uint64_t)x2 * x20) + (((uint64_t)x4 * x18) + (((uint64_t)x6 * x16) + (((uint64_t)x8 * x14) + (((uint64_t)x10 * x12) + (((uint64_t)x12 * x10) + (((uint64_t)x14 * x8) + (((uint64_t)x16 * x6) + (((uint64_t)x18 * x4) + ((uint64_t)x20 * x2)))))))))) + (0xbb * ((0x2 * ((uint64_t)x22 * x29)) + ((0x2 * ((uint64_t)x24 * x30)) + ((0x2 * ((uint64_t)x26 * x28)) + ((0x2 * ((uint64_t)x28 * x26)) + ((0x2 * ((uint64_t)x30 * x24)) + (0x2 * ((uint64_t)x29 * x22)))))))));
+ { uint64_t x38 = ((((uint64_t)x2 * x18) + (((uint64_t)x4 * x16) + (((uint64_t)x6 * x14) + (((uint64_t)x8 * x12) + (((uint64_t)x10 * x10) + (((uint64_t)x12 * x8) + (((uint64_t)x14 * x6) + (((uint64_t)x16 * x4) + ((uint64_t)x18 * x2))))))))) + (0xbb * ((0x2 * ((uint64_t)x20 * x29)) + ((0x2 * ((uint64_t)x22 * x30)) + ((0x2 * ((uint64_t)x24 * x28)) + ((0x2 * ((uint64_t)x26 * x26)) + ((0x2 * ((uint64_t)x28 * x24)) + ((0x2 * ((uint64_t)x30 * x22)) + (0x2 * ((uint64_t)x29 * x20))))))))));
+ { uint64_t x39 = ((((uint64_t)x2 * x16) + (((uint64_t)x4 * x14) + (((uint64_t)x6 * x12) + (((uint64_t)x8 * x10) + (((uint64_t)x10 * x8) + (((uint64_t)x12 * x6) + (((uint64_t)x14 * x4) + ((uint64_t)x16 * x2)))))))) + (0xbb * ((0x2 * ((uint64_t)x18 * x29)) + ((0x2 * ((uint64_t)x20 * x30)) + ((0x2 * ((uint64_t)x22 * x28)) + ((0x2 * ((uint64_t)x24 * x26)) + ((0x2 * ((uint64_t)x26 * x24)) + ((0x2 * ((uint64_t)x28 * x22)) + ((0x2 * ((uint64_t)x30 * x20)) + (0x2 * ((uint64_t)x29 * x18)))))))))));
+ { uint64_t x40 = ((((uint64_t)x2 * x14) + (((uint64_t)x4 * x12) + (((uint64_t)x6 * x10) + (((uint64_t)x8 * x8) + (((uint64_t)x10 * x6) + (((uint64_t)x12 * x4) + ((uint64_t)x14 * x2))))))) + (0xbb * ((0x2 * ((uint64_t)x16 * x29)) + ((0x2 * ((uint64_t)x18 * x30)) + ((0x2 * ((uint64_t)x20 * x28)) + ((0x2 * ((uint64_t)x22 * x26)) + ((0x2 * ((uint64_t)x24 * x24)) + ((0x2 * ((uint64_t)x26 * x22)) + ((0x2 * ((uint64_t)x28 * x20)) + ((0x2 * ((uint64_t)x30 * x18)) + (0x2 * ((uint64_t)x29 * x16))))))))))));
+ { uint64_t x41 = ((((uint64_t)x2 * x12) + (((uint64_t)x4 * x10) + (((uint64_t)x6 * x8) + (((uint64_t)x8 * x6) + (((uint64_t)x10 * x4) + ((uint64_t)x12 * x2)))))) + (0xbb * ((0x2 * ((uint64_t)x14 * x29)) + ((0x2 * ((uint64_t)x16 * x30)) + ((0x2 * ((uint64_t)x18 * x28)) + ((0x2 * ((uint64_t)x20 * x26)) + ((0x2 * ((uint64_t)x22 * x24)) + ((0x2 * ((uint64_t)x24 * x22)) + ((0x2 * ((uint64_t)x26 * x20)) + ((0x2 * ((uint64_t)x28 * x18)) + ((0x2 * ((uint64_t)x30 * x16)) + (0x2 * ((uint64_t)x29 * x14)))))))))))));
+ { uint64_t x42 = ((((uint64_t)x2 * x10) + (((uint64_t)x4 * x8) + (((uint64_t)x6 * x6) + (((uint64_t)x8 * x4) + ((uint64_t)x10 * x2))))) + (0xbb * ((0x2 * ((uint64_t)x12 * x29)) + ((0x2 * ((uint64_t)x14 * x30)) + ((0x2 * ((uint64_t)x16 * x28)) + ((0x2 * ((uint64_t)x18 * x26)) + ((0x2 * ((uint64_t)x20 * x24)) + ((0x2 * ((uint64_t)x22 * x22)) + ((0x2 * ((uint64_t)x24 * x20)) + ((0x2 * ((uint64_t)x26 * x18)) + ((0x2 * ((uint64_t)x28 * x16)) + ((0x2 * ((uint64_t)x30 * x14)) + (0x2 * ((uint64_t)x29 * x12))))))))))))));
+ { uint64_t x43 = ((((uint64_t)x2 * x8) + (((uint64_t)x4 * x6) + (((uint64_t)x6 * x4) + ((uint64_t)x8 * x2)))) + (0xbb * ((0x2 * ((uint64_t)x10 * x29)) + ((0x2 * ((uint64_t)x12 * x30)) + ((0x2 * ((uint64_t)x14 * x28)) + ((0x2 * ((uint64_t)x16 * x26)) + ((0x2 * ((uint64_t)x18 * x24)) + ((0x2 * ((uint64_t)x20 * x22)) + ((0x2 * ((uint64_t)x22 * x20)) + ((0x2 * ((uint64_t)x24 * x18)) + ((0x2 * ((uint64_t)x26 * x16)) + ((0x2 * ((uint64_t)x28 * x14)) + ((0x2 * ((uint64_t)x30 * x12)) + (0x2 * ((uint64_t)x29 * x10)))))))))))))));
+ { uint64_t x44 = ((((uint64_t)x2 * x6) + (((uint64_t)x4 * x4) + ((uint64_t)x6 * x2))) + (0xbb * ((0x2 * ((uint64_t)x8 * x29)) + ((0x2 * ((uint64_t)x10 * x30)) + ((0x2 * ((uint64_t)x12 * x28)) + ((0x2 * ((uint64_t)x14 * x26)) + ((0x2 * ((uint64_t)x16 * x24)) + ((0x2 * ((uint64_t)x18 * x22)) + ((0x2 * ((uint64_t)x20 * x20)) + ((0x2 * ((uint64_t)x22 * x18)) + ((0x2 * ((uint64_t)x24 * x16)) + ((0x2 * ((uint64_t)x26 * x14)) + ((0x2 * ((uint64_t)x28 * x12)) + ((0x2 * ((uint64_t)x30 * x10)) + (0x2 * ((uint64_t)x29 * x8))))))))))))))));
+ { uint64_t x45 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0xbb * ((0x2 * ((uint64_t)x6 * x29)) + ((0x2 * ((uint64_t)x8 * x30)) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + ((0x2 * ((uint64_t)x16 * x22)) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + ((0x2 * ((uint64_t)x22 * x16)) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + ((0x2 * ((uint64_t)x30 * x8)) + (0x2 * ((uint64_t)x29 * x6)))))))))))))))));
+ { uint64_t x46 = (((uint64_t)x2 * x2) + (0xbb * ((0x2 * ((uint64_t)x4 * x29)) + ((0x2 * ((uint64_t)x6 * x30)) + ((0x2 * ((uint64_t)x8 * x28)) + ((0x2 * ((uint64_t)x10 * x26)) + ((0x2 * ((uint64_t)x12 * x24)) + ((0x2 * ((uint64_t)x14 * x22)) + ((0x2 * ((uint64_t)x16 * x20)) + ((0x2 * ((uint64_t)x18 * x18)) + ((0x2 * ((uint64_t)x20 * x16)) + ((0x2 * ((uint64_t)x22 * x14)) + ((0x2 * ((uint64_t)x24 * x12)) + ((0x2 * ((uint64_t)x26 * x10)) + ((0x2 * ((uint64_t)x28 * x8)) + ((0x2 * ((uint64_t)x30 * x6)) + (0x2 * ((uint64_t)x29 * x4))))))))))))))))));
+ { uint64_t x47 = (x46 >> 0x18);
+ { uint32_t x48 = ((uint32_t)x46 & 0xffffff);
+ { uint64_t x49 = (x47 + x45);
+ { uint64_t x50 = (x49 >> 0x18);
+ { uint32_t x51 = ((uint32_t)x49 & 0xffffff);
+ { uint64_t x52 = (x50 + x44);
+ { uint64_t x53 = (x52 >> 0x18);
+ { uint32_t x54 = ((uint32_t)x52 & 0xffffff);
+ { uint64_t x55 = (x53 + x43);
+ { uint64_t x56 = (x55 >> 0x18);
+ { uint32_t x57 = ((uint32_t)x55 & 0xffffff);
+ { uint64_t x58 = (x56 + x42);
+ { uint64_t x59 = (x58 >> 0x18);
+ { uint32_t x60 = ((uint32_t)x58 & 0xffffff);
+ { uint64_t x61 = (x59 + x41);
+ { uint64_t x62 = (x61 >> 0x18);
+ { uint32_t x63 = ((uint32_t)x61 & 0xffffff);
+ { uint64_t x64 = (x62 + x40);
+ { uint64_t x65 = (x64 >> 0x18);
+ { uint32_t x66 = ((uint32_t)x64 & 0xffffff);
+ { uint64_t x67 = (x65 + x39);
+ { uint64_t x68 = (x67 >> 0x18);
+ { uint32_t x69 = ((uint32_t)x67 & 0xffffff);
+ { uint64_t x70 = (x68 + x38);
+ { uint64_t x71 = (x70 >> 0x18);
+ { uint32_t x72 = ((uint32_t)x70 & 0xffffff);
+ { uint64_t x73 = (x71 + x37);
+ { uint64_t x74 = (x73 >> 0x18);
+ { uint32_t x75 = ((uint32_t)x73 & 0xffffff);
+ { uint64_t x76 = (x74 + x36);
+ { uint64_t x77 = (x76 >> 0x18);
+ { uint32_t x78 = ((uint32_t)x76 & 0xffffff);
+ { uint64_t x79 = (x77 + x35);
+ { uint64_t x80 = (x79 >> 0x18);
+ { uint32_t x81 = ((uint32_t)x79 & 0xffffff);
+ { uint64_t x82 = (x80 + x34);
+ { uint64_t x83 = (x82 >> 0x18);
+ { uint32_t x84 = ((uint32_t)x82 & 0xffffff);
+ { uint64_t x85 = (x83 + x33);
+ { uint64_t x86 = (x85 >> 0x18);
+ { uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ { uint64_t x88 = (x86 + x32);
+ { uint64_t x89 = (x88 >> 0x18);
+ { uint32_t x90 = ((uint32_t)x88 & 0xffffff);
+ { uint64_t x91 = (x89 + x31);
+ { uint64_t x92 = (x91 >> 0x17);
+ { uint32_t x93 = ((uint32_t)x91 & 0x7fffff);
+ { uint64_t x94 = (x48 + (0xbb * x92));
+ { uint32_t x95 = (uint32_t) (x94 >> 0x18);
+ { uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ { uint32_t x97 = (x95 + x51);
+ { uint32_t x98 = (x97 >> 0x18);
+ { uint32_t x99 = (x97 & 0xffffff);
+ out[0] = x96;
+ out[1] = x99;
+ out[2] = (x98 + x54);
+ out[3] = x57;
+ out[4] = x60;
+ out[5] = x63;
+ out[6] = x66;
+ out[7] = x69;
+ out[8] = x72;
+ out[9] = x75;
+ out[10] = x78;
+ out[11] = x81;
+ out[12] = x84;
+ out[13] = x87;
+ out[14] = x90;
+ out[15] = x93;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e383m187_16limbs/fesquareDisplay.log b/src/Specific/solinas32_2e383m187_16limbs/fesquareDisplay.log
new file mode 100644
index 000000000..09502e8dc
--- /dev/null
+++ b/src/Specific/solinas32_2e383m187_16limbs/fesquareDisplay.log
@@ -0,0 +1,76 @@
+λ x : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x29, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
+ uint64_t x31 = (((uint64_t)x2 * x29) + (((uint64_t)x4 * x30) + (((uint64_t)x6 * x28) + (((uint64_t)x8 * x26) + (((uint64_t)x10 * x24) + (((uint64_t)x12 * x22) + (((uint64_t)x14 * x20) + (((uint64_t)x16 * x18) + (((uint64_t)x18 * x16) + (((uint64_t)x20 * x14) + (((uint64_t)x22 * x12) + (((uint64_t)x24 * x10) + (((uint64_t)x26 * x8) + (((uint64_t)x28 * x6) + (((uint64_t)x30 * x4) + ((uint64_t)x29 * x2))))))))))))))));
+ uint64_t x32 = ((((uint64_t)x2 * x30) + (((uint64_t)x4 * x28) + (((uint64_t)x6 * x26) + (((uint64_t)x8 * x24) + (((uint64_t)x10 * x22) + (((uint64_t)x12 * x20) + (((uint64_t)x14 * x18) + (((uint64_t)x16 * x16) + (((uint64_t)x18 * x14) + (((uint64_t)x20 * x12) + (((uint64_t)x22 * x10) + (((uint64_t)x24 * x8) + (((uint64_t)x26 * x6) + (((uint64_t)x28 * x4) + ((uint64_t)x30 * x2))))))))))))))) + (0xbb * (0x2 * ((uint64_t)x29 * x29))));
+ uint64_t x33 = ((((uint64_t)x2 * x28) + (((uint64_t)x4 * x26) + (((uint64_t)x6 * x24) + (((uint64_t)x8 * x22) + (((uint64_t)x10 * x20) + (((uint64_t)x12 * x18) + (((uint64_t)x14 * x16) + (((uint64_t)x16 * x14) + (((uint64_t)x18 * x12) + (((uint64_t)x20 * x10) + (((uint64_t)x22 * x8) + (((uint64_t)x24 * x6) + (((uint64_t)x26 * x4) + ((uint64_t)x28 * x2)))))))))))))) + (0xbb * ((0x2 * ((uint64_t)x30 * x29)) + (0x2 * ((uint64_t)x29 * x30)))));
+ uint64_t x34 = ((((uint64_t)x2 * x26) + (((uint64_t)x4 * x24) + (((uint64_t)x6 * x22) + (((uint64_t)x8 * x20) + (((uint64_t)x10 * x18) + (((uint64_t)x12 * x16) + (((uint64_t)x14 * x14) + (((uint64_t)x16 * x12) + (((uint64_t)x18 * x10) + (((uint64_t)x20 * x8) + (((uint64_t)x22 * x6) + (((uint64_t)x24 * x4) + ((uint64_t)x26 * x2))))))))))))) + (0xbb * ((0x2 * ((uint64_t)x28 * x29)) + ((0x2 * ((uint64_t)x30 * x30)) + (0x2 * ((uint64_t)x29 * x28))))));
+ uint64_t x35 = ((((uint64_t)x2 * x24) + (((uint64_t)x4 * x22) + (((uint64_t)x6 * x20) + (((uint64_t)x8 * x18) + (((uint64_t)x10 * x16) + (((uint64_t)x12 * x14) + (((uint64_t)x14 * x12) + (((uint64_t)x16 * x10) + (((uint64_t)x18 * x8) + (((uint64_t)x20 * x6) + (((uint64_t)x22 * x4) + ((uint64_t)x24 * x2)))))))))))) + (0xbb * ((0x2 * ((uint64_t)x26 * x29)) + ((0x2 * ((uint64_t)x28 * x30)) + ((0x2 * ((uint64_t)x30 * x28)) + (0x2 * ((uint64_t)x29 * x26)))))));
+ uint64_t x36 = ((((uint64_t)x2 * x22) + (((uint64_t)x4 * x20) + (((uint64_t)x6 * x18) + (((uint64_t)x8 * x16) + (((uint64_t)x10 * x14) + (((uint64_t)x12 * x12) + (((uint64_t)x14 * x10) + (((uint64_t)x16 * x8) + (((uint64_t)x18 * x6) + (((uint64_t)x20 * x4) + ((uint64_t)x22 * x2))))))))))) + (0xbb * ((0x2 * ((uint64_t)x24 * x29)) + ((0x2 * ((uint64_t)x26 * x30)) + ((0x2 * ((uint64_t)x28 * x28)) + ((0x2 * ((uint64_t)x30 * x26)) + (0x2 * ((uint64_t)x29 * x24))))))));
+ uint64_t x37 = ((((uint64_t)x2 * x20) + (((uint64_t)x4 * x18) + (((uint64_t)x6 * x16) + (((uint64_t)x8 * x14) + (((uint64_t)x10 * x12) + (((uint64_t)x12 * x10) + (((uint64_t)x14 * x8) + (((uint64_t)x16 * x6) + (((uint64_t)x18 * x4) + ((uint64_t)x20 * x2)))))))))) + (0xbb * ((0x2 * ((uint64_t)x22 * x29)) + ((0x2 * ((uint64_t)x24 * x30)) + ((0x2 * ((uint64_t)x26 * x28)) + ((0x2 * ((uint64_t)x28 * x26)) + ((0x2 * ((uint64_t)x30 * x24)) + (0x2 * ((uint64_t)x29 * x22)))))))));
+ uint64_t x38 = ((((uint64_t)x2 * x18) + (((uint64_t)x4 * x16) + (((uint64_t)x6 * x14) + (((uint64_t)x8 * x12) + (((uint64_t)x10 * x10) + (((uint64_t)x12 * x8) + (((uint64_t)x14 * x6) + (((uint64_t)x16 * x4) + ((uint64_t)x18 * x2))))))))) + (0xbb * ((0x2 * ((uint64_t)x20 * x29)) + ((0x2 * ((uint64_t)x22 * x30)) + ((0x2 * ((uint64_t)x24 * x28)) + ((0x2 * ((uint64_t)x26 * x26)) + ((0x2 * ((uint64_t)x28 * x24)) + ((0x2 * ((uint64_t)x30 * x22)) + (0x2 * ((uint64_t)x29 * x20))))))))));
+ uint64_t x39 = ((((uint64_t)x2 * x16) + (((uint64_t)x4 * x14) + (((uint64_t)x6 * x12) + (((uint64_t)x8 * x10) + (((uint64_t)x10 * x8) + (((uint64_t)x12 * x6) + (((uint64_t)x14 * x4) + ((uint64_t)x16 * x2)))))))) + (0xbb * ((0x2 * ((uint64_t)x18 * x29)) + ((0x2 * ((uint64_t)x20 * x30)) + ((0x2 * ((uint64_t)x22 * x28)) + ((0x2 * ((uint64_t)x24 * x26)) + ((0x2 * ((uint64_t)x26 * x24)) + ((0x2 * ((uint64_t)x28 * x22)) + ((0x2 * ((uint64_t)x30 * x20)) + (0x2 * ((uint64_t)x29 * x18)))))))))));
+ uint64_t x40 = ((((uint64_t)x2 * x14) + (((uint64_t)x4 * x12) + (((uint64_t)x6 * x10) + (((uint64_t)x8 * x8) + (((uint64_t)x10 * x6) + (((uint64_t)x12 * x4) + ((uint64_t)x14 * x2))))))) + (0xbb * ((0x2 * ((uint64_t)x16 * x29)) + ((0x2 * ((uint64_t)x18 * x30)) + ((0x2 * ((uint64_t)x20 * x28)) + ((0x2 * ((uint64_t)x22 * x26)) + ((0x2 * ((uint64_t)x24 * x24)) + ((0x2 * ((uint64_t)x26 * x22)) + ((0x2 * ((uint64_t)x28 * x20)) + ((0x2 * ((uint64_t)x30 * x18)) + (0x2 * ((uint64_t)x29 * x16))))))))))));
+ uint64_t x41 = ((((uint64_t)x2 * x12) + (((uint64_t)x4 * x10) + (((uint64_t)x6 * x8) + (((uint64_t)x8 * x6) + (((uint64_t)x10 * x4) + ((uint64_t)x12 * x2)))))) + (0xbb * ((0x2 * ((uint64_t)x14 * x29)) + ((0x2 * ((uint64_t)x16 * x30)) + ((0x2 * ((uint64_t)x18 * x28)) + ((0x2 * ((uint64_t)x20 * x26)) + ((0x2 * ((uint64_t)x22 * x24)) + ((0x2 * ((uint64_t)x24 * x22)) + ((0x2 * ((uint64_t)x26 * x20)) + ((0x2 * ((uint64_t)x28 * x18)) + ((0x2 * ((uint64_t)x30 * x16)) + (0x2 * ((uint64_t)x29 * x14)))))))))))));
+ uint64_t x42 = ((((uint64_t)x2 * x10) + (((uint64_t)x4 * x8) + (((uint64_t)x6 * x6) + (((uint64_t)x8 * x4) + ((uint64_t)x10 * x2))))) + (0xbb * ((0x2 * ((uint64_t)x12 * x29)) + ((0x2 * ((uint64_t)x14 * x30)) + ((0x2 * ((uint64_t)x16 * x28)) + ((0x2 * ((uint64_t)x18 * x26)) + ((0x2 * ((uint64_t)x20 * x24)) + ((0x2 * ((uint64_t)x22 * x22)) + ((0x2 * ((uint64_t)x24 * x20)) + ((0x2 * ((uint64_t)x26 * x18)) + ((0x2 * ((uint64_t)x28 * x16)) + ((0x2 * ((uint64_t)x30 * x14)) + (0x2 * ((uint64_t)x29 * x12))))))))))))));
+ uint64_t x43 = ((((uint64_t)x2 * x8) + (((uint64_t)x4 * x6) + (((uint64_t)x6 * x4) + ((uint64_t)x8 * x2)))) + (0xbb * ((0x2 * ((uint64_t)x10 * x29)) + ((0x2 * ((uint64_t)x12 * x30)) + ((0x2 * ((uint64_t)x14 * x28)) + ((0x2 * ((uint64_t)x16 * x26)) + ((0x2 * ((uint64_t)x18 * x24)) + ((0x2 * ((uint64_t)x20 * x22)) + ((0x2 * ((uint64_t)x22 * x20)) + ((0x2 * ((uint64_t)x24 * x18)) + ((0x2 * ((uint64_t)x26 * x16)) + ((0x2 * ((uint64_t)x28 * x14)) + ((0x2 * ((uint64_t)x30 * x12)) + (0x2 * ((uint64_t)x29 * x10)))))))))))))));
+ uint64_t x44 = ((((uint64_t)x2 * x6) + (((uint64_t)x4 * x4) + ((uint64_t)x6 * x2))) + (0xbb * ((0x2 * ((uint64_t)x8 * x29)) + ((0x2 * ((uint64_t)x10 * x30)) + ((0x2 * ((uint64_t)x12 * x28)) + ((0x2 * ((uint64_t)x14 * x26)) + ((0x2 * ((uint64_t)x16 * x24)) + ((0x2 * ((uint64_t)x18 * x22)) + ((0x2 * ((uint64_t)x20 * x20)) + ((0x2 * ((uint64_t)x22 * x18)) + ((0x2 * ((uint64_t)x24 * x16)) + ((0x2 * ((uint64_t)x26 * x14)) + ((0x2 * ((uint64_t)x28 * x12)) + ((0x2 * ((uint64_t)x30 * x10)) + (0x2 * ((uint64_t)x29 * x8))))))))))))))));
+ uint64_t x45 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0xbb * ((0x2 * ((uint64_t)x6 * x29)) + ((0x2 * ((uint64_t)x8 * x30)) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + ((0x2 * ((uint64_t)x16 * x22)) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + ((0x2 * ((uint64_t)x22 * x16)) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + ((0x2 * ((uint64_t)x30 * x8)) + (0x2 * ((uint64_t)x29 * x6)))))))))))))))));
+ uint64_t x46 = (((uint64_t)x2 * x2) + (0xbb * ((0x2 * ((uint64_t)x4 * x29)) + ((0x2 * ((uint64_t)x6 * x30)) + ((0x2 * ((uint64_t)x8 * x28)) + ((0x2 * ((uint64_t)x10 * x26)) + ((0x2 * ((uint64_t)x12 * x24)) + ((0x2 * ((uint64_t)x14 * x22)) + ((0x2 * ((uint64_t)x16 * x20)) + ((0x2 * ((uint64_t)x18 * x18)) + ((0x2 * ((uint64_t)x20 * x16)) + ((0x2 * ((uint64_t)x22 * x14)) + ((0x2 * ((uint64_t)x24 * x12)) + ((0x2 * ((uint64_t)x26 * x10)) + ((0x2 * ((uint64_t)x28 * x8)) + ((0x2 * ((uint64_t)x30 * x6)) + (0x2 * ((uint64_t)x29 * x4))))))))))))))))));
+ uint64_t x47 = (x46 >> 0x18);
+ uint32_t x48 = ((uint32_t)x46 & 0xffffff);
+ uint64_t x49 = (x47 + x45);
+ uint64_t x50 = (x49 >> 0x18);
+ uint32_t x51 = ((uint32_t)x49 & 0xffffff);
+ uint64_t x52 = (x50 + x44);
+ uint64_t x53 = (x52 >> 0x18);
+ uint32_t x54 = ((uint32_t)x52 & 0xffffff);
+ uint64_t x55 = (x53 + x43);
+ uint64_t x56 = (x55 >> 0x18);
+ uint32_t x57 = ((uint32_t)x55 & 0xffffff);
+ uint64_t x58 = (x56 + x42);
+ uint64_t x59 = (x58 >> 0x18);
+ uint32_t x60 = ((uint32_t)x58 & 0xffffff);
+ uint64_t x61 = (x59 + x41);
+ uint64_t x62 = (x61 >> 0x18);
+ uint32_t x63 = ((uint32_t)x61 & 0xffffff);
+ uint64_t x64 = (x62 + x40);
+ uint64_t x65 = (x64 >> 0x18);
+ uint32_t x66 = ((uint32_t)x64 & 0xffffff);
+ uint64_t x67 = (x65 + x39);
+ uint64_t x68 = (x67 >> 0x18);
+ uint32_t x69 = ((uint32_t)x67 & 0xffffff);
+ uint64_t x70 = (x68 + x38);
+ uint64_t x71 = (x70 >> 0x18);
+ uint32_t x72 = ((uint32_t)x70 & 0xffffff);
+ uint64_t x73 = (x71 + x37);
+ uint64_t x74 = (x73 >> 0x18);
+ uint32_t x75 = ((uint32_t)x73 & 0xffffff);
+ uint64_t x76 = (x74 + x36);
+ uint64_t x77 = (x76 >> 0x18);
+ uint32_t x78 = ((uint32_t)x76 & 0xffffff);
+ uint64_t x79 = (x77 + x35);
+ uint64_t x80 = (x79 >> 0x18);
+ uint32_t x81 = ((uint32_t)x79 & 0xffffff);
+ uint64_t x82 = (x80 + x34);
+ uint64_t x83 = (x82 >> 0x18);
+ uint32_t x84 = ((uint32_t)x82 & 0xffffff);
+ uint64_t x85 = (x83 + x33);
+ uint64_t x86 = (x85 >> 0x18);
+ uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ uint64_t x88 = (x86 + x32);
+ uint64_t x89 = (x88 >> 0x18);
+ uint32_t x90 = ((uint32_t)x88 & 0xffffff);
+ uint64_t x91 = (x89 + x31);
+ uint64_t x92 = (x91 >> 0x17);
+ uint32_t x93 = ((uint32_t)x91 & 0x7fffff);
+ uint64_t x94 = (x48 + (0xbb * x92));
+ uint32_t x95 = (uint32_t) (x94 >> 0x18);
+ uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ uint32_t x97 = (x95 + x51);
+ uint32_t x98 = (x97 >> 0x18);
+ uint32_t x99 = (x97 & 0xffffff);
+ return (Return x93, Return x90, Return x87, Return x84, Return x81, Return x78, Return x75, Return x72, Return x69, Return x66, Return x63, Return x60, Return x57, (x98 + x54), Return x99, Return x96))
+x
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m187_16limbs/fesub.c b/src/Specific/solinas32_2e383m187_16limbs/fesub.c
index dae399671..30606edb2 100644
--- a/src/Specific/solinas32_2e383m187_16limbs/fesub.c
+++ b/src/Specific/solinas32_2e383m187_16limbs/fesub.c
@@ -31,7 +31,7 @@ static void fesub(uint32_t out[16], const uint32_t in1[16], const uint32_t in2[1
{ const uint32_t x39 = in2[2];
{ const uint32_t x37 = in2[1];
{ const uint32_t x35 = in2[0];
- out[0] = ((Const 33554058 + x5) - x35);
+ out[0] = ((0x1fffe8a + x5) - x35);
out[1] = ((0x1fffffe + x7) - x37);
out[2] = ((0x1fffffe + x9) - x39);
out[3] = ((0x1fffffe + x11) - x41);
diff --git a/src/Specific/solinas32_2e383m187_16limbs/fesubDisplay.log b/src/Specific/solinas32_2e383m187_16limbs/fesubDisplay.log
index 8f1af6afd..c38739831 100644
--- a/src/Specific/solinas32_2e383m187_16limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e383m187_16limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x32, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x62, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35))%core,
- (((0xfffffe + x32) - x62), ((0x1fffffe + x33) - x63), ((0x1fffffe + x31) - x61), ((0x1fffffe + x29) - x59), ((0x1fffffe + x27) - x57), ((0x1fffffe + x25) - x55), ((0x1fffffe + x23) - x53), ((0x1fffffe + x21) - x51), ((0x1fffffe + x19) - x49), ((0x1fffffe + x17) - x47), ((0x1fffffe + x15) - x45), ((0x1fffffe + x13) - x43), ((0x1fffffe + x11) - x41), ((0x1fffffe + x9) - x39), ((0x1fffffe + x7) - x37), ((Const 33554058 + x5) - x35)))
+ (((0xfffffe + x32) - x62), ((0x1fffffe + x33) - x63), ((0x1fffffe + x31) - x61), ((0x1fffffe + x29) - x59), ((0x1fffffe + x27) - x57), ((0x1fffffe + x25) - x55), ((0x1fffffe + x23) - x53), ((0x1fffffe + x21) - x51), ((0x1fffffe + x19) - x49), ((0x1fffffe + x17) - x47), ((0x1fffffe + x15) - x45), ((0x1fffffe + x13) - x43), ((0x1fffffe + x11) - x41), ((0x1fffffe + x9) - x39), ((0x1fffffe + x7) - x37), ((0x1fffe8a + x5) - x35)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m187_17limbs/femul.c b/src/Specific/solinas32_2e383m187_17limbs/femul.c
new file mode 100644
index 000000000..f85e83969
--- /dev/null
+++ b/src/Specific/solinas32_2e383m187_17limbs/femul.c
@@ -0,0 +1,127 @@
+static void femul(uint32_t out[17], const uint32_t in1[17], const uint32_t in2[17]) {
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x66 = in2[16];
+ { const uint32_t x67 = in2[15];
+ { const uint32_t x65 = in2[14];
+ { const uint32_t x63 = in2[13];
+ { const uint32_t x61 = in2[12];
+ { const uint32_t x59 = in2[11];
+ { const uint32_t x57 = in2[10];
+ { const uint32_t x55 = in2[9];
+ { const uint32_t x53 = in2[8];
+ { const uint32_t x51 = in2[7];
+ { const uint32_t x49 = in2[6];
+ { const uint32_t x47 = in2[5];
+ { const uint32_t x45 = in2[4];
+ { const uint32_t x43 = in2[3];
+ { const uint32_t x41 = in2[2];
+ { const uint32_t x39 = in2[1];
+ { const uint32_t x37 = in2[0];
+ { uint64_t x68 = (((uint64_t)x5 * x66) + (((uint64_t)x7 * x67) + ((0x2 * ((uint64_t)x9 * x65)) + (((uint64_t)x11 * x63) + ((0x2 * ((uint64_t)x13 * x61)) + (((uint64_t)x15 * x59) + ((0x2 * ((uint64_t)x17 * x57)) + (((uint64_t)x19 * x55) + ((0x2 * ((uint64_t)x21 * x53)) + (((uint64_t)x23 * x51) + ((0x2 * ((uint64_t)x25 * x49)) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + (((uint64_t)x31 * x43) + ((0x2 * ((uint64_t)x33 * x41)) + (((uint64_t)x35 * x39) + ((uint64_t)x34 * x37)))))))))))))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x67) + ((0x2 * ((uint64_t)x7 * x65)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + ((uint64_t)x35 * x37)))))))))))))))) + (0xbb * (0x2 * ((uint64_t)x34 * x66))));
+ { uint64_t x70 = ((((uint64_t)x5 * x65) + (((uint64_t)x7 * x63) + ((0x2 * ((uint64_t)x9 * x61)) + (((uint64_t)x11 * x59) + ((0x2 * ((uint64_t)x13 * x57)) + (((uint64_t)x15 * x55) + ((0x2 * ((uint64_t)x17 * x53)) + (((uint64_t)x19 * x51) + ((0x2 * ((uint64_t)x21 * x49)) + (((uint64_t)x23 * x47) + ((0x2 * ((uint64_t)x25 * x45)) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + ((uint64_t)x33 * x37))))))))))))))) + (0xbb * (((uint64_t)x35 * x66) + ((uint64_t)x34 * x67))));
+ { uint64_t x71 = ((((uint64_t)x5 * x63) + ((0x2 * ((uint64_t)x7 * x61)) + ((0x2 * ((uint64_t)x9 * x59)) + ((0x2 * ((uint64_t)x11 * x57)) + ((0x2 * ((uint64_t)x13 * x55)) + ((0x2 * ((uint64_t)x15 * x53)) + ((0x2 * ((uint64_t)x17 * x51)) + ((0x2 * ((uint64_t)x19 * x49)) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + ((0x2 * ((uint64_t)x25 * x43)) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + ((uint64_t)x31 * x37)))))))))))))) + (0xbb * ((0x2 * ((uint64_t)x33 * x66)) + (((uint64_t)x35 * x67) + (0x2 * ((uint64_t)x34 * x65))))));
+ { uint64_t x72 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + ((0x2 * ((uint64_t)x9 * x57)) + (((uint64_t)x11 * x55) + ((0x2 * ((uint64_t)x13 * x53)) + (((uint64_t)x15 * x51) + ((0x2 * ((uint64_t)x17 * x49)) + (((uint64_t)x19 * x47) + ((0x2 * ((uint64_t)x21 * x45)) + (((uint64_t)x23 * x43) + ((0x2 * ((uint64_t)x25 * x41)) + (((uint64_t)x27 * x39) + ((uint64_t)x29 * x37))))))))))))) + (0xbb * (((uint64_t)x31 * x66) + (((uint64_t)x33 * x67) + (((uint64_t)x35 * x65) + ((uint64_t)x34 * x63))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x59) + ((0x2 * ((uint64_t)x7 * x57)) + ((0x2 * ((uint64_t)x9 * x55)) + ((0x2 * ((uint64_t)x11 * x53)) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + ((0x2 * ((uint64_t)x17 * x47)) + ((0x2 * ((uint64_t)x19 * x45)) + ((0x2 * ((uint64_t)x21 * x43)) + ((0x2 * ((uint64_t)x23 * x41)) + ((0x2 * ((uint64_t)x25 * x39)) + ((uint64_t)x27 * x37)))))))))))) + (0xbb * ((0x2 * ((uint64_t)x29 * x66)) + (((uint64_t)x31 * x67) + ((0x2 * ((uint64_t)x33 * x65)) + (((uint64_t)x35 * x63) + (0x2 * ((uint64_t)x34 * x61))))))));
+ { uint64_t x74 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + ((0x2 * ((uint64_t)x9 * x53)) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + ((0x2 * ((uint64_t)x17 * x45)) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + (((uint64_t)x23 * x39) + ((uint64_t)x25 * x37))))))))))) + (0xbb * (((uint64_t)x27 * x66) + (((uint64_t)x29 * x67) + (((uint64_t)x31 * x65) + (((uint64_t)x33 * x63) + (((uint64_t)x35 * x61) + ((uint64_t)x34 * x59))))))));
+ { uint64_t x75 = ((((uint64_t)x5 * x55) + ((0x2 * ((uint64_t)x7 * x53)) + ((0x2 * ((uint64_t)x9 * x51)) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + ((0x2 * ((uint64_t)x21 * x39)) + ((uint64_t)x23 * x37)))))))))) + (0xbb * ((0x2 * ((uint64_t)x25 * x66)) + (((uint64_t)x27 * x67) + ((0x2 * ((uint64_t)x29 * x65)) + (((uint64_t)x31 * x63) + ((0x2 * ((uint64_t)x33 * x61)) + (((uint64_t)x35 * x59) + (0x2 * ((uint64_t)x34 * x57))))))))));
+ { uint64_t x76 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + (((uint64_t)x19 * x39) + ((uint64_t)x21 * x37))))))))) + (0xbb * (((uint64_t)x23 * x66) + (((uint64_t)x25 * x67) + (((uint64_t)x27 * x65) + (((uint64_t)x29 * x63) + (((uint64_t)x31 * x61) + (((uint64_t)x33 * x59) + (((uint64_t)x35 * x57) + ((uint64_t)x34 * x55))))))))));
+ { uint64_t x77 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + ((0x2 * ((uint64_t)x9 * x47)) + ((0x2 * ((uint64_t)x11 * x45)) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + ((0x2 * ((uint64_t)x17 * x39)) + ((uint64_t)x19 * x37)))))))) + (0xbb * ((0x2 * ((uint64_t)x21 * x66)) + (((uint64_t)x23 * x67) + ((0x2 * ((uint64_t)x25 * x65)) + (((uint64_t)x27 * x63) + ((0x2 * ((uint64_t)x29 * x61)) + (((uint64_t)x31 * x59) + ((0x2 * ((uint64_t)x33 * x57)) + (((uint64_t)x35 * x55) + (0x2 * ((uint64_t)x34 * x53))))))))))));
+ { uint64_t x78 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + ((0x2 * ((uint64_t)x9 * x45)) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + (((uint64_t)x15 * x39) + ((uint64_t)x17 * x37))))))) + (0xbb * (((uint64_t)x19 * x66) + (((uint64_t)x21 * x67) + (((uint64_t)x23 * x65) + (((uint64_t)x25 * x63) + (((uint64_t)x27 * x61) + (((uint64_t)x29 * x59) + (((uint64_t)x31 * x57) + (((uint64_t)x33 * x55) + (((uint64_t)x35 * x53) + ((uint64_t)x34 * x51))))))))))));
+ { uint64_t x79 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((uint64_t)x15 * x37)))))) + (0xbb * ((0x2 * ((uint64_t)x17 * x66)) + (((uint64_t)x19 * x67) + ((0x2 * ((uint64_t)x21 * x65)) + (((uint64_t)x23 * x63) + ((0x2 * ((uint64_t)x25 * x61)) + (((uint64_t)x27 * x59) + ((0x2 * ((uint64_t)x29 * x57)) + (((uint64_t)x31 * x55) + ((0x2 * ((uint64_t)x33 * x53)) + (((uint64_t)x35 * x51) + (0x2 * ((uint64_t)x34 * x49))))))))))))));
+ { uint64_t x80 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + (((uint64_t)x11 * x39) + ((uint64_t)x13 * x37))))) + (0xbb * (((uint64_t)x15 * x66) + (((uint64_t)x17 * x67) + (((uint64_t)x19 * x65) + (((uint64_t)x21 * x63) + (((uint64_t)x23 * x61) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + (((uint64_t)x29 * x55) + (((uint64_t)x31 * x53) + (((uint64_t)x33 * x51) + (((uint64_t)x35 * x49) + ((uint64_t)x34 * x47))))))))))))));
+ { uint64_t x81 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((uint64_t)x11 * x37)))) + (0xbb * ((0x2 * ((uint64_t)x13 * x66)) + (((uint64_t)x15 * x67) + ((0x2 * ((uint64_t)x17 * x65)) + (((uint64_t)x19 * x63) + ((0x2 * ((uint64_t)x21 * x61)) + (((uint64_t)x23 * x59) + ((0x2 * ((uint64_t)x25 * x57)) + (((uint64_t)x27 * x55) + ((0x2 * ((uint64_t)x29 * x53)) + (((uint64_t)x31 * x51) + ((0x2 * ((uint64_t)x33 * x49)) + (((uint64_t)x35 * x47) + (0x2 * ((uint64_t)x34 * x45))))))))))))))));
+ { uint64_t x82 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + ((uint64_t)x9 * x37))) + (0xbb * (((uint64_t)x11 * x66) + (((uint64_t)x13 * x67) + (((uint64_t)x15 * x65) + (((uint64_t)x17 * x63) + (((uint64_t)x19 * x61) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + (((uint64_t)x29 * x51) + (((uint64_t)x31 * x49) + (((uint64_t)x33 * x47) + (((uint64_t)x35 * x45) + ((uint64_t)x34 * x43))))))))))))))));
+ { uint64_t x83 = ((((uint64_t)x5 * x39) + ((uint64_t)x7 * x37)) + (0xbb * ((0x2 * ((uint64_t)x9 * x66)) + (((uint64_t)x11 * x67) + ((0x2 * ((uint64_t)x13 * x65)) + (((uint64_t)x15 * x63) + ((0x2 * ((uint64_t)x17 * x61)) + (((uint64_t)x19 * x59) + ((0x2 * ((uint64_t)x21 * x57)) + (((uint64_t)x23 * x55) + ((0x2 * ((uint64_t)x25 * x53)) + (((uint64_t)x27 * x51) + ((0x2 * ((uint64_t)x29 * x49)) + (((uint64_t)x31 * x47) + ((0x2 * ((uint64_t)x33 * x45)) + (((uint64_t)x35 * x43) + (0x2 * ((uint64_t)x34 * x41))))))))))))))))));
+ { uint64_t x84 = (((uint64_t)x5 * x37) + (0xbb * ((0x2 * ((uint64_t)x7 * x66)) + ((0x2 * ((uint64_t)x9 * x67)) + ((0x2 * ((uint64_t)x11 * x65)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + ((0x2 * ((uint64_t)x35 * x41)) + (0x2 * ((uint64_t)x34 * x39)))))))))))))))))));
+ { uint64_t x85 = (x84 >> 0x17);
+ { uint32_t x86 = ((uint32_t)x84 & 0x7fffff);
+ { uint64_t x87 = (x85 + x83);
+ { uint64_t x88 = (x87 >> 0x17);
+ { uint32_t x89 = ((uint32_t)x87 & 0x7fffff);
+ { uint64_t x90 = (x88 + x82);
+ { uint64_t x91 = (x90 >> 0x16);
+ { uint32_t x92 = ((uint32_t)x90 & 0x3fffff);
+ { uint64_t x93 = (x91 + x81);
+ { uint64_t x94 = (x93 >> 0x17);
+ { uint32_t x95 = ((uint32_t)x93 & 0x7fffff);
+ { uint64_t x96 = (x94 + x80);
+ { uint64_t x97 = (x96 >> 0x16);
+ { uint32_t x98 = ((uint32_t)x96 & 0x3fffff);
+ { uint64_t x99 = (x97 + x79);
+ { uint64_t x100 = (x99 >> 0x17);
+ { uint32_t x101 = ((uint32_t)x99 & 0x7fffff);
+ { uint64_t x102 = (x100 + x78);
+ { uint64_t x103 = (x102 >> 0x16);
+ { uint32_t x104 = ((uint32_t)x102 & 0x3fffff);
+ { uint64_t x105 = (x103 + x77);
+ { uint64_t x106 = (x105 >> 0x17);
+ { uint32_t x107 = ((uint32_t)x105 & 0x7fffff);
+ { uint64_t x108 = (x106 + x76);
+ { uint64_t x109 = (x108 >> 0x16);
+ { uint32_t x110 = ((uint32_t)x108 & 0x3fffff);
+ { uint64_t x111 = (x109 + x75);
+ { uint64_t x112 = (x111 >> 0x17);
+ { uint32_t x113 = ((uint32_t)x111 & 0x7fffff);
+ { uint64_t x114 = (x112 + x74);
+ { uint64_t x115 = (x114 >> 0x16);
+ { uint32_t x116 = ((uint32_t)x114 & 0x3fffff);
+ { uint64_t x117 = (x115 + x73);
+ { uint64_t x118 = (x117 >> 0x17);
+ { uint32_t x119 = ((uint32_t)x117 & 0x7fffff);
+ { uint64_t x120 = (x118 + x72);
+ { uint64_t x121 = (x120 >> 0x16);
+ { uint32_t x122 = ((uint32_t)x120 & 0x3fffff);
+ { uint64_t x123 = (x121 + x71);
+ { uint64_t x124 = (x123 >> 0x17);
+ { uint32_t x125 = ((uint32_t)x123 & 0x7fffff);
+ { uint64_t x126 = (x124 + x70);
+ { uint64_t x127 = (x126 >> 0x16);
+ { uint32_t x128 = ((uint32_t)x126 & 0x3fffff);
+ { uint64_t x129 = (x127 + x69);
+ { uint64_t x130 = (x129 >> 0x17);
+ { uint32_t x131 = ((uint32_t)x129 & 0x7fffff);
+ { uint64_t x132 = (x130 + x68);
+ { uint32_t x133 = (uint32_t) (x132 >> 0x16);
+ { uint32_t x134 = ((uint32_t)x132 & 0x3fffff);
+ { uint64_t x135 = (x86 + ((uint64_t)0xbb * x133));
+ { uint32_t x136 = (uint32_t) (x135 >> 0x17);
+ { uint32_t x137 = ((uint32_t)x135 & 0x7fffff);
+ { uint32_t x138 = (x136 + x89);
+ { uint32_t x139 = (x138 >> 0x17);
+ { uint32_t x140 = (x138 & 0x7fffff);
+ out[0] = x137;
+ out[1] = x140;
+ out[2] = (x139 + x92);
+ out[3] = x95;
+ out[4] = x98;
+ out[5] = x101;
+ out[6] = x104;
+ out[7] = x107;
+ out[8] = x110;
+ out[9] = x113;
+ out[10] = x116;
+ out[11] = x119;
+ out[12] = x122;
+ out[13] = x125;
+ out[14] = x128;
+ out[15] = x131;
+ out[16] = x134;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e383m187_17limbs/femulDisplay.log b/src/Specific/solinas32_2e383m187_17limbs/femulDisplay.log
new file mode 100644
index 000000000..21c93a2e8
--- /dev/null
+++ b/src/Specific/solinas32_2e383m187_17limbs/femulDisplay.log
@@ -0,0 +1,80 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x34, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x66, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37))%core,
+ uint64_t x68 = (((uint64_t)x5 * x66) + (((uint64_t)x7 * x67) + ((0x2 * ((uint64_t)x9 * x65)) + (((uint64_t)x11 * x63) + ((0x2 * ((uint64_t)x13 * x61)) + (((uint64_t)x15 * x59) + ((0x2 * ((uint64_t)x17 * x57)) + (((uint64_t)x19 * x55) + ((0x2 * ((uint64_t)x21 * x53)) + (((uint64_t)x23 * x51) + ((0x2 * ((uint64_t)x25 * x49)) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + (((uint64_t)x31 * x43) + ((0x2 * ((uint64_t)x33 * x41)) + (((uint64_t)x35 * x39) + ((uint64_t)x34 * x37)))))))))))))))));
+ uint64_t x69 = ((((uint64_t)x5 * x67) + ((0x2 * ((uint64_t)x7 * x65)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + ((uint64_t)x35 * x37)))))))))))))))) + (0xbb * (0x2 * ((uint64_t)x34 * x66))));
+ uint64_t x70 = ((((uint64_t)x5 * x65) + (((uint64_t)x7 * x63) + ((0x2 * ((uint64_t)x9 * x61)) + (((uint64_t)x11 * x59) + ((0x2 * ((uint64_t)x13 * x57)) + (((uint64_t)x15 * x55) + ((0x2 * ((uint64_t)x17 * x53)) + (((uint64_t)x19 * x51) + ((0x2 * ((uint64_t)x21 * x49)) + (((uint64_t)x23 * x47) + ((0x2 * ((uint64_t)x25 * x45)) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + ((uint64_t)x33 * x37))))))))))))))) + (0xbb * (((uint64_t)x35 * x66) + ((uint64_t)x34 * x67))));
+ uint64_t x71 = ((((uint64_t)x5 * x63) + ((0x2 * ((uint64_t)x7 * x61)) + ((0x2 * ((uint64_t)x9 * x59)) + ((0x2 * ((uint64_t)x11 * x57)) + ((0x2 * ((uint64_t)x13 * x55)) + ((0x2 * ((uint64_t)x15 * x53)) + ((0x2 * ((uint64_t)x17 * x51)) + ((0x2 * ((uint64_t)x19 * x49)) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + ((0x2 * ((uint64_t)x25 * x43)) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + ((uint64_t)x31 * x37)))))))))))))) + (0xbb * ((0x2 * ((uint64_t)x33 * x66)) + (((uint64_t)x35 * x67) + (0x2 * ((uint64_t)x34 * x65))))));
+ uint64_t x72 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + ((0x2 * ((uint64_t)x9 * x57)) + (((uint64_t)x11 * x55) + ((0x2 * ((uint64_t)x13 * x53)) + (((uint64_t)x15 * x51) + ((0x2 * ((uint64_t)x17 * x49)) + (((uint64_t)x19 * x47) + ((0x2 * ((uint64_t)x21 * x45)) + (((uint64_t)x23 * x43) + ((0x2 * ((uint64_t)x25 * x41)) + (((uint64_t)x27 * x39) + ((uint64_t)x29 * x37))))))))))))) + (0xbb * (((uint64_t)x31 * x66) + (((uint64_t)x33 * x67) + (((uint64_t)x35 * x65) + ((uint64_t)x34 * x63))))));
+ uint64_t x73 = ((((uint64_t)x5 * x59) + ((0x2 * ((uint64_t)x7 * x57)) + ((0x2 * ((uint64_t)x9 * x55)) + ((0x2 * ((uint64_t)x11 * x53)) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + ((0x2 * ((uint64_t)x17 * x47)) + ((0x2 * ((uint64_t)x19 * x45)) + ((0x2 * ((uint64_t)x21 * x43)) + ((0x2 * ((uint64_t)x23 * x41)) + ((0x2 * ((uint64_t)x25 * x39)) + ((uint64_t)x27 * x37)))))))))))) + (0xbb * ((0x2 * ((uint64_t)x29 * x66)) + (((uint64_t)x31 * x67) + ((0x2 * ((uint64_t)x33 * x65)) + (((uint64_t)x35 * x63) + (0x2 * ((uint64_t)x34 * x61))))))));
+ uint64_t x74 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + ((0x2 * ((uint64_t)x9 * x53)) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + ((0x2 * ((uint64_t)x17 * x45)) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + (((uint64_t)x23 * x39) + ((uint64_t)x25 * x37))))))))))) + (0xbb * (((uint64_t)x27 * x66) + (((uint64_t)x29 * x67) + (((uint64_t)x31 * x65) + (((uint64_t)x33 * x63) + (((uint64_t)x35 * x61) + ((uint64_t)x34 * x59))))))));
+ uint64_t x75 = ((((uint64_t)x5 * x55) + ((0x2 * ((uint64_t)x7 * x53)) + ((0x2 * ((uint64_t)x9 * x51)) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + ((0x2 * ((uint64_t)x21 * x39)) + ((uint64_t)x23 * x37)))))))))) + (0xbb * ((0x2 * ((uint64_t)x25 * x66)) + (((uint64_t)x27 * x67) + ((0x2 * ((uint64_t)x29 * x65)) + (((uint64_t)x31 * x63) + ((0x2 * ((uint64_t)x33 * x61)) + (((uint64_t)x35 * x59) + (0x2 * ((uint64_t)x34 * x57))))))))));
+ uint64_t x76 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + (((uint64_t)x19 * x39) + ((uint64_t)x21 * x37))))))))) + (0xbb * (((uint64_t)x23 * x66) + (((uint64_t)x25 * x67) + (((uint64_t)x27 * x65) + (((uint64_t)x29 * x63) + (((uint64_t)x31 * x61) + (((uint64_t)x33 * x59) + (((uint64_t)x35 * x57) + ((uint64_t)x34 * x55))))))))));
+ uint64_t x77 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + ((0x2 * ((uint64_t)x9 * x47)) + ((0x2 * ((uint64_t)x11 * x45)) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + ((0x2 * ((uint64_t)x17 * x39)) + ((uint64_t)x19 * x37)))))))) + (0xbb * ((0x2 * ((uint64_t)x21 * x66)) + (((uint64_t)x23 * x67) + ((0x2 * ((uint64_t)x25 * x65)) + (((uint64_t)x27 * x63) + ((0x2 * ((uint64_t)x29 * x61)) + (((uint64_t)x31 * x59) + ((0x2 * ((uint64_t)x33 * x57)) + (((uint64_t)x35 * x55) + (0x2 * ((uint64_t)x34 * x53))))))))))));
+ uint64_t x78 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + ((0x2 * ((uint64_t)x9 * x45)) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + (((uint64_t)x15 * x39) + ((uint64_t)x17 * x37))))))) + (0xbb * (((uint64_t)x19 * x66) + (((uint64_t)x21 * x67) + (((uint64_t)x23 * x65) + (((uint64_t)x25 * x63) + (((uint64_t)x27 * x61) + (((uint64_t)x29 * x59) + (((uint64_t)x31 * x57) + (((uint64_t)x33 * x55) + (((uint64_t)x35 * x53) + ((uint64_t)x34 * x51))))))))))));
+ uint64_t x79 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((uint64_t)x15 * x37)))))) + (0xbb * ((0x2 * ((uint64_t)x17 * x66)) + (((uint64_t)x19 * x67) + ((0x2 * ((uint64_t)x21 * x65)) + (((uint64_t)x23 * x63) + ((0x2 * ((uint64_t)x25 * x61)) + (((uint64_t)x27 * x59) + ((0x2 * ((uint64_t)x29 * x57)) + (((uint64_t)x31 * x55) + ((0x2 * ((uint64_t)x33 * x53)) + (((uint64_t)x35 * x51) + (0x2 * ((uint64_t)x34 * x49))))))))))))));
+ uint64_t x80 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + (((uint64_t)x11 * x39) + ((uint64_t)x13 * x37))))) + (0xbb * (((uint64_t)x15 * x66) + (((uint64_t)x17 * x67) + (((uint64_t)x19 * x65) + (((uint64_t)x21 * x63) + (((uint64_t)x23 * x61) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + (((uint64_t)x29 * x55) + (((uint64_t)x31 * x53) + (((uint64_t)x33 * x51) + (((uint64_t)x35 * x49) + ((uint64_t)x34 * x47))))))))))))));
+ uint64_t x81 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((uint64_t)x11 * x37)))) + (0xbb * ((0x2 * ((uint64_t)x13 * x66)) + (((uint64_t)x15 * x67) + ((0x2 * ((uint64_t)x17 * x65)) + (((uint64_t)x19 * x63) + ((0x2 * ((uint64_t)x21 * x61)) + (((uint64_t)x23 * x59) + ((0x2 * ((uint64_t)x25 * x57)) + (((uint64_t)x27 * x55) + ((0x2 * ((uint64_t)x29 * x53)) + (((uint64_t)x31 * x51) + ((0x2 * ((uint64_t)x33 * x49)) + (((uint64_t)x35 * x47) + (0x2 * ((uint64_t)x34 * x45))))))))))))))));
+ uint64_t x82 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + ((uint64_t)x9 * x37))) + (0xbb * (((uint64_t)x11 * x66) + (((uint64_t)x13 * x67) + (((uint64_t)x15 * x65) + (((uint64_t)x17 * x63) + (((uint64_t)x19 * x61) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + (((uint64_t)x29 * x51) + (((uint64_t)x31 * x49) + (((uint64_t)x33 * x47) + (((uint64_t)x35 * x45) + ((uint64_t)x34 * x43))))))))))))))));
+ uint64_t x83 = ((((uint64_t)x5 * x39) + ((uint64_t)x7 * x37)) + (0xbb * ((0x2 * ((uint64_t)x9 * x66)) + (((uint64_t)x11 * x67) + ((0x2 * ((uint64_t)x13 * x65)) + (((uint64_t)x15 * x63) + ((0x2 * ((uint64_t)x17 * x61)) + (((uint64_t)x19 * x59) + ((0x2 * ((uint64_t)x21 * x57)) + (((uint64_t)x23 * x55) + ((0x2 * ((uint64_t)x25 * x53)) + (((uint64_t)x27 * x51) + ((0x2 * ((uint64_t)x29 * x49)) + (((uint64_t)x31 * x47) + ((0x2 * ((uint64_t)x33 * x45)) + (((uint64_t)x35 * x43) + (0x2 * ((uint64_t)x34 * x41))))))))))))))))));
+ uint64_t x84 = (((uint64_t)x5 * x37) + (0xbb * ((0x2 * ((uint64_t)x7 * x66)) + ((0x2 * ((uint64_t)x9 * x67)) + ((0x2 * ((uint64_t)x11 * x65)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + ((0x2 * ((uint64_t)x35 * x41)) + (0x2 * ((uint64_t)x34 * x39)))))))))))))))))));
+ uint64_t x85 = (x84 >> 0x17);
+ uint32_t x86 = ((uint32_t)x84 & 0x7fffff);
+ uint64_t x87 = (x85 + x83);
+ uint64_t x88 = (x87 >> 0x17);
+ uint32_t x89 = ((uint32_t)x87 & 0x7fffff);
+ uint64_t x90 = (x88 + x82);
+ uint64_t x91 = (x90 >> 0x16);
+ uint32_t x92 = ((uint32_t)x90 & 0x3fffff);
+ uint64_t x93 = (x91 + x81);
+ uint64_t x94 = (x93 >> 0x17);
+ uint32_t x95 = ((uint32_t)x93 & 0x7fffff);
+ uint64_t x96 = (x94 + x80);
+ uint64_t x97 = (x96 >> 0x16);
+ uint32_t x98 = ((uint32_t)x96 & 0x3fffff);
+ uint64_t x99 = (x97 + x79);
+ uint64_t x100 = (x99 >> 0x17);
+ uint32_t x101 = ((uint32_t)x99 & 0x7fffff);
+ uint64_t x102 = (x100 + x78);
+ uint64_t x103 = (x102 >> 0x16);
+ uint32_t x104 = ((uint32_t)x102 & 0x3fffff);
+ uint64_t x105 = (x103 + x77);
+ uint64_t x106 = (x105 >> 0x17);
+ uint32_t x107 = ((uint32_t)x105 & 0x7fffff);
+ uint64_t x108 = (x106 + x76);
+ uint64_t x109 = (x108 >> 0x16);
+ uint32_t x110 = ((uint32_t)x108 & 0x3fffff);
+ uint64_t x111 = (x109 + x75);
+ uint64_t x112 = (x111 >> 0x17);
+ uint32_t x113 = ((uint32_t)x111 & 0x7fffff);
+ uint64_t x114 = (x112 + x74);
+ uint64_t x115 = (x114 >> 0x16);
+ uint32_t x116 = ((uint32_t)x114 & 0x3fffff);
+ uint64_t x117 = (x115 + x73);
+ uint64_t x118 = (x117 >> 0x17);
+ uint32_t x119 = ((uint32_t)x117 & 0x7fffff);
+ uint64_t x120 = (x118 + x72);
+ uint64_t x121 = (x120 >> 0x16);
+ uint32_t x122 = ((uint32_t)x120 & 0x3fffff);
+ uint64_t x123 = (x121 + x71);
+ uint64_t x124 = (x123 >> 0x17);
+ uint32_t x125 = ((uint32_t)x123 & 0x7fffff);
+ uint64_t x126 = (x124 + x70);
+ uint64_t x127 = (x126 >> 0x16);
+ uint32_t x128 = ((uint32_t)x126 & 0x3fffff);
+ uint64_t x129 = (x127 + x69);
+ uint64_t x130 = (x129 >> 0x17);
+ uint32_t x131 = ((uint32_t)x129 & 0x7fffff);
+ uint64_t x132 = (x130 + x68);
+ uint32_t x133 = (uint32_t) (x132 >> 0x16);
+ uint32_t x134 = ((uint32_t)x132 & 0x3fffff);
+ uint64_t x135 = (x86 + ((uint64_t)0xbb * x133));
+ uint32_t x136 = (uint32_t) (x135 >> 0x17);
+ uint32_t x137 = ((uint32_t)x135 & 0x7fffff);
+ uint32_t x138 = (x136 + x89);
+ uint32_t x139 = (x138 >> 0x17);
+ uint32_t x140 = (x138 & 0x7fffff);
+ return (Return x134, Return x131, Return x128, Return x125, Return x122, Return x119, Return x116, Return x113, Return x110, Return x107, Return x104, Return x101, Return x98, Return x95, (x139 + x92), Return x140, Return x137))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m187_17limbs/fesquare.c b/src/Specific/solinas32_2e383m187_17limbs/fesquare.c
new file mode 100644
index 000000000..4d1dd108a
--- /dev/null
+++ b/src/Specific/solinas32_2e383m187_17limbs/fesquare.c
@@ -0,0 +1,110 @@
+static void fesquare(uint32_t out[17], const uint32_t in1[17]) {
+ { const uint32_t x31 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint64_t x33 = (((uint64_t)x2 * x31) + (((uint64_t)x4 * x32) + ((0x2 * ((uint64_t)x6 * x30)) + (((uint64_t)x8 * x28) + ((0x2 * ((uint64_t)x10 * x26)) + (((uint64_t)x12 * x24) + ((0x2 * ((uint64_t)x14 * x22)) + (((uint64_t)x16 * x20) + ((0x2 * ((uint64_t)x18 * x18)) + (((uint64_t)x20 * x16) + ((0x2 * ((uint64_t)x22 * x14)) + (((uint64_t)x24 * x12) + ((0x2 * ((uint64_t)x26 * x10)) + (((uint64_t)x28 * x8) + ((0x2 * ((uint64_t)x30 * x6)) + (((uint64_t)x32 * x4) + ((uint64_t)x31 * x2)))))))))))))))));
+ { uint64_t x34 = ((((uint64_t)x2 * x32) + ((0x2 * ((uint64_t)x4 * x30)) + ((0x2 * ((uint64_t)x6 * x28)) + ((0x2 * ((uint64_t)x8 * x26)) + ((0x2 * ((uint64_t)x10 * x24)) + ((0x2 * ((uint64_t)x12 * x22)) + ((0x2 * ((uint64_t)x14 * x20)) + ((0x2 * ((uint64_t)x16 * x18)) + ((0x2 * ((uint64_t)x18 * x16)) + ((0x2 * ((uint64_t)x20 * x14)) + ((0x2 * ((uint64_t)x22 * x12)) + ((0x2 * ((uint64_t)x24 * x10)) + ((0x2 * ((uint64_t)x26 * x8)) + ((0x2 * ((uint64_t)x28 * x6)) + ((0x2 * ((uint64_t)x30 * x4)) + ((uint64_t)x32 * x2)))))))))))))))) + (0xbb * (0x2 * ((uint64_t)x31 * x31))));
+ { uint64_t x35 = ((((uint64_t)x2 * x30) + (((uint64_t)x4 * x28) + ((0x2 * ((uint64_t)x6 * x26)) + (((uint64_t)x8 * x24) + ((0x2 * ((uint64_t)x10 * x22)) + (((uint64_t)x12 * x20) + ((0x2 * ((uint64_t)x14 * x18)) + (((uint64_t)x16 * x16) + ((0x2 * ((uint64_t)x18 * x14)) + (((uint64_t)x20 * x12) + ((0x2 * ((uint64_t)x22 * x10)) + (((uint64_t)x24 * x8) + ((0x2 * ((uint64_t)x26 * x6)) + (((uint64_t)x28 * x4) + ((uint64_t)x30 * x2))))))))))))))) + (0xbb * (((uint64_t)x32 * x31) + ((uint64_t)x31 * x32))));
+ { uint64_t x36 = ((((uint64_t)x2 * x28) + ((0x2 * ((uint64_t)x4 * x26)) + ((0x2 * ((uint64_t)x6 * x24)) + ((0x2 * ((uint64_t)x8 * x22)) + ((0x2 * ((uint64_t)x10 * x20)) + ((0x2 * ((uint64_t)x12 * x18)) + ((0x2 * ((uint64_t)x14 * x16)) + ((0x2 * ((uint64_t)x16 * x14)) + ((0x2 * ((uint64_t)x18 * x12)) + ((0x2 * ((uint64_t)x20 * x10)) + ((0x2 * ((uint64_t)x22 * x8)) + ((0x2 * ((uint64_t)x24 * x6)) + ((0x2 * ((uint64_t)x26 * x4)) + ((uint64_t)x28 * x2)))))))))))))) + (0xbb * ((0x2 * ((uint64_t)x30 * x31)) + (((uint64_t)x32 * x32) + (0x2 * ((uint64_t)x31 * x30))))));
+ { uint64_t x37 = ((((uint64_t)x2 * x26) + (((uint64_t)x4 * x24) + ((0x2 * ((uint64_t)x6 * x22)) + (((uint64_t)x8 * x20) + ((0x2 * ((uint64_t)x10 * x18)) + (((uint64_t)x12 * x16) + ((0x2 * ((uint64_t)x14 * x14)) + (((uint64_t)x16 * x12) + ((0x2 * ((uint64_t)x18 * x10)) + (((uint64_t)x20 * x8) + ((0x2 * ((uint64_t)x22 * x6)) + (((uint64_t)x24 * x4) + ((uint64_t)x26 * x2))))))))))))) + (0xbb * (((uint64_t)x28 * x31) + (((uint64_t)x30 * x32) + (((uint64_t)x32 * x30) + ((uint64_t)x31 * x28))))));
+ { uint64_t x38 = ((((uint64_t)x2 * x24) + ((0x2 * ((uint64_t)x4 * x22)) + ((0x2 * ((uint64_t)x6 * x20)) + ((0x2 * ((uint64_t)x8 * x18)) + ((0x2 * ((uint64_t)x10 * x16)) + ((0x2 * ((uint64_t)x12 * x14)) + ((0x2 * ((uint64_t)x14 * x12)) + ((0x2 * ((uint64_t)x16 * x10)) + ((0x2 * ((uint64_t)x18 * x8)) + ((0x2 * ((uint64_t)x20 * x6)) + ((0x2 * ((uint64_t)x22 * x4)) + ((uint64_t)x24 * x2)))))))))))) + (0xbb * ((0x2 * ((uint64_t)x26 * x31)) + (((uint64_t)x28 * x32) + ((0x2 * ((uint64_t)x30 * x30)) + (((uint64_t)x32 * x28) + (0x2 * ((uint64_t)x31 * x26))))))));
+ { uint64_t x39 = ((((uint64_t)x2 * x22) + (((uint64_t)x4 * x20) + ((0x2 * ((uint64_t)x6 * x18)) + (((uint64_t)x8 * x16) + ((0x2 * ((uint64_t)x10 * x14)) + (((uint64_t)x12 * x12) + ((0x2 * ((uint64_t)x14 * x10)) + (((uint64_t)x16 * x8) + ((0x2 * ((uint64_t)x18 * x6)) + (((uint64_t)x20 * x4) + ((uint64_t)x22 * x2))))))))))) + (0xbb * (((uint64_t)x24 * x31) + (((uint64_t)x26 * x32) + (((uint64_t)x28 * x30) + (((uint64_t)x30 * x28) + (((uint64_t)x32 * x26) + ((uint64_t)x31 * x24))))))));
+ { uint64_t x40 = ((((uint64_t)x2 * x20) + ((0x2 * ((uint64_t)x4 * x18)) + ((0x2 * ((uint64_t)x6 * x16)) + ((0x2 * ((uint64_t)x8 * x14)) + ((0x2 * ((uint64_t)x10 * x12)) + ((0x2 * ((uint64_t)x12 * x10)) + ((0x2 * ((uint64_t)x14 * x8)) + ((0x2 * ((uint64_t)x16 * x6)) + ((0x2 * ((uint64_t)x18 * x4)) + ((uint64_t)x20 * x2)))))))))) + (0xbb * ((0x2 * ((uint64_t)x22 * x31)) + (((uint64_t)x24 * x32) + ((0x2 * ((uint64_t)x26 * x30)) + (((uint64_t)x28 * x28) + ((0x2 * ((uint64_t)x30 * x26)) + (((uint64_t)x32 * x24) + (0x2 * ((uint64_t)x31 * x22))))))))));
+ { uint64_t x41 = ((((uint64_t)x2 * x18) + (((uint64_t)x4 * x16) + ((0x2 * ((uint64_t)x6 * x14)) + (((uint64_t)x8 * x12) + ((0x2 * ((uint64_t)x10 * x10)) + (((uint64_t)x12 * x8) + ((0x2 * ((uint64_t)x14 * x6)) + (((uint64_t)x16 * x4) + ((uint64_t)x18 * x2))))))))) + (0xbb * (((uint64_t)x20 * x31) + (((uint64_t)x22 * x32) + (((uint64_t)x24 * x30) + (((uint64_t)x26 * x28) + (((uint64_t)x28 * x26) + (((uint64_t)x30 * x24) + (((uint64_t)x32 * x22) + ((uint64_t)x31 * x20))))))))));
+ { uint64_t x42 = ((((uint64_t)x2 * x16) + ((0x2 * ((uint64_t)x4 * x14)) + ((0x2 * ((uint64_t)x6 * x12)) + ((0x2 * ((uint64_t)x8 * x10)) + ((0x2 * ((uint64_t)x10 * x8)) + ((0x2 * ((uint64_t)x12 * x6)) + ((0x2 * ((uint64_t)x14 * x4)) + ((uint64_t)x16 * x2)))))))) + (0xbb * ((0x2 * ((uint64_t)x18 * x31)) + (((uint64_t)x20 * x32) + ((0x2 * ((uint64_t)x22 * x30)) + (((uint64_t)x24 * x28) + ((0x2 * ((uint64_t)x26 * x26)) + (((uint64_t)x28 * x24) + ((0x2 * ((uint64_t)x30 * x22)) + (((uint64_t)x32 * x20) + (0x2 * ((uint64_t)x31 * x18))))))))))));
+ { uint64_t x43 = ((((uint64_t)x2 * x14) + (((uint64_t)x4 * x12) + ((0x2 * ((uint64_t)x6 * x10)) + (((uint64_t)x8 * x8) + ((0x2 * ((uint64_t)x10 * x6)) + (((uint64_t)x12 * x4) + ((uint64_t)x14 * x2))))))) + (0xbb * (((uint64_t)x16 * x31) + (((uint64_t)x18 * x32) + (((uint64_t)x20 * x30) + (((uint64_t)x22 * x28) + (((uint64_t)x24 * x26) + (((uint64_t)x26 * x24) + (((uint64_t)x28 * x22) + (((uint64_t)x30 * x20) + (((uint64_t)x32 * x18) + ((uint64_t)x31 * x16))))))))))));
+ { uint64_t x44 = ((((uint64_t)x2 * x12) + ((0x2 * ((uint64_t)x4 * x10)) + ((0x2 * ((uint64_t)x6 * x8)) + ((0x2 * ((uint64_t)x8 * x6)) + ((0x2 * ((uint64_t)x10 * x4)) + ((uint64_t)x12 * x2)))))) + (0xbb * ((0x2 * ((uint64_t)x14 * x31)) + (((uint64_t)x16 * x32) + ((0x2 * ((uint64_t)x18 * x30)) + (((uint64_t)x20 * x28) + ((0x2 * ((uint64_t)x22 * x26)) + (((uint64_t)x24 * x24) + ((0x2 * ((uint64_t)x26 * x22)) + (((uint64_t)x28 * x20) + ((0x2 * ((uint64_t)x30 * x18)) + (((uint64_t)x32 * x16) + (0x2 * ((uint64_t)x31 * x14))))))))))))));
+ { uint64_t x45 = ((((uint64_t)x2 * x10) + (((uint64_t)x4 * x8) + ((0x2 * ((uint64_t)x6 * x6)) + (((uint64_t)x8 * x4) + ((uint64_t)x10 * x2))))) + (0xbb * (((uint64_t)x12 * x31) + (((uint64_t)x14 * x32) + (((uint64_t)x16 * x30) + (((uint64_t)x18 * x28) + (((uint64_t)x20 * x26) + (((uint64_t)x22 * x24) + (((uint64_t)x24 * x22) + (((uint64_t)x26 * x20) + (((uint64_t)x28 * x18) + (((uint64_t)x30 * x16) + (((uint64_t)x32 * x14) + ((uint64_t)x31 * x12))))))))))))));
+ { uint64_t x46 = ((((uint64_t)x2 * x8) + ((0x2 * ((uint64_t)x4 * x6)) + ((0x2 * ((uint64_t)x6 * x4)) + ((uint64_t)x8 * x2)))) + (0xbb * ((0x2 * ((uint64_t)x10 * x31)) + (((uint64_t)x12 * x32) + ((0x2 * ((uint64_t)x14 * x30)) + (((uint64_t)x16 * x28) + ((0x2 * ((uint64_t)x18 * x26)) + (((uint64_t)x20 * x24) + ((0x2 * ((uint64_t)x22 * x22)) + (((uint64_t)x24 * x20) + ((0x2 * ((uint64_t)x26 * x18)) + (((uint64_t)x28 * x16) + ((0x2 * ((uint64_t)x30 * x14)) + (((uint64_t)x32 * x12) + (0x2 * ((uint64_t)x31 * x10))))))))))))))));
+ { uint64_t x47 = ((((uint64_t)x2 * x6) + (((uint64_t)x4 * x4) + ((uint64_t)x6 * x2))) + (0xbb * (((uint64_t)x8 * x31) + (((uint64_t)x10 * x32) + (((uint64_t)x12 * x30) + (((uint64_t)x14 * x28) + (((uint64_t)x16 * x26) + (((uint64_t)x18 * x24) + (((uint64_t)x20 * x22) + (((uint64_t)x22 * x20) + (((uint64_t)x24 * x18) + (((uint64_t)x26 * x16) + (((uint64_t)x28 * x14) + (((uint64_t)x30 * x12) + (((uint64_t)x32 * x10) + ((uint64_t)x31 * x8))))))))))))))));
+ { uint64_t x48 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0xbb * ((0x2 * ((uint64_t)x6 * x31)) + (((uint64_t)x8 * x32) + ((0x2 * ((uint64_t)x10 * x30)) + (((uint64_t)x12 * x28) + ((0x2 * ((uint64_t)x14 * x26)) + (((uint64_t)x16 * x24) + ((0x2 * ((uint64_t)x18 * x22)) + (((uint64_t)x20 * x20) + ((0x2 * ((uint64_t)x22 * x18)) + (((uint64_t)x24 * x16) + ((0x2 * ((uint64_t)x26 * x14)) + (((uint64_t)x28 * x12) + ((0x2 * ((uint64_t)x30 * x10)) + (((uint64_t)x32 * x8) + (0x2 * ((uint64_t)x31 * x6))))))))))))))))));
+ { uint64_t x49 = (((uint64_t)x2 * x2) + (0xbb * ((0x2 * ((uint64_t)x4 * x31)) + ((0x2 * ((uint64_t)x6 * x32)) + ((0x2 * ((uint64_t)x8 * x30)) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + ((0x2 * ((uint64_t)x16 * x22)) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + ((0x2 * ((uint64_t)x22 * x16)) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + ((0x2 * ((uint64_t)x30 * x8)) + ((0x2 * ((uint64_t)x32 * x6)) + (0x2 * ((uint64_t)x31 * x4)))))))))))))))))));
+ { uint64_t x50 = (x49 >> 0x17);
+ { uint32_t x51 = ((uint32_t)x49 & 0x7fffff);
+ { uint64_t x52 = (x50 + x48);
+ { uint64_t x53 = (x52 >> 0x17);
+ { uint32_t x54 = ((uint32_t)x52 & 0x7fffff);
+ { uint64_t x55 = (x53 + x47);
+ { uint64_t x56 = (x55 >> 0x16);
+ { uint32_t x57 = ((uint32_t)x55 & 0x3fffff);
+ { uint64_t x58 = (x56 + x46);
+ { uint64_t x59 = (x58 >> 0x17);
+ { uint32_t x60 = ((uint32_t)x58 & 0x7fffff);
+ { uint64_t x61 = (x59 + x45);
+ { uint64_t x62 = (x61 >> 0x16);
+ { uint32_t x63 = ((uint32_t)x61 & 0x3fffff);
+ { uint64_t x64 = (x62 + x44);
+ { uint64_t x65 = (x64 >> 0x17);
+ { uint32_t x66 = ((uint32_t)x64 & 0x7fffff);
+ { uint64_t x67 = (x65 + x43);
+ { uint64_t x68 = (x67 >> 0x16);
+ { uint32_t x69 = ((uint32_t)x67 & 0x3fffff);
+ { uint64_t x70 = (x68 + x42);
+ { uint64_t x71 = (x70 >> 0x17);
+ { uint32_t x72 = ((uint32_t)x70 & 0x7fffff);
+ { uint64_t x73 = (x71 + x41);
+ { uint64_t x74 = (x73 >> 0x16);
+ { uint32_t x75 = ((uint32_t)x73 & 0x3fffff);
+ { uint64_t x76 = (x74 + x40);
+ { uint64_t x77 = (x76 >> 0x17);
+ { uint32_t x78 = ((uint32_t)x76 & 0x7fffff);
+ { uint64_t x79 = (x77 + x39);
+ { uint64_t x80 = (x79 >> 0x16);
+ { uint32_t x81 = ((uint32_t)x79 & 0x3fffff);
+ { uint64_t x82 = (x80 + x38);
+ { uint64_t x83 = (x82 >> 0x17);
+ { uint32_t x84 = ((uint32_t)x82 & 0x7fffff);
+ { uint64_t x85 = (x83 + x37);
+ { uint64_t x86 = (x85 >> 0x16);
+ { uint32_t x87 = ((uint32_t)x85 & 0x3fffff);
+ { uint64_t x88 = (x86 + x36);
+ { uint64_t x89 = (x88 >> 0x17);
+ { uint32_t x90 = ((uint32_t)x88 & 0x7fffff);
+ { uint64_t x91 = (x89 + x35);
+ { uint64_t x92 = (x91 >> 0x16);
+ { uint32_t x93 = ((uint32_t)x91 & 0x3fffff);
+ { uint64_t x94 = (x92 + x34);
+ { uint64_t x95 = (x94 >> 0x17);
+ { uint32_t x96 = ((uint32_t)x94 & 0x7fffff);
+ { uint64_t x97 = (x95 + x33);
+ { uint32_t x98 = (uint32_t) (x97 >> 0x16);
+ { uint32_t x99 = ((uint32_t)x97 & 0x3fffff);
+ { uint64_t x100 = (x51 + ((uint64_t)0xbb * x98));
+ { uint32_t x101 = (uint32_t) (x100 >> 0x17);
+ { uint32_t x102 = ((uint32_t)x100 & 0x7fffff);
+ { uint32_t x103 = (x101 + x54);
+ { uint32_t x104 = (x103 >> 0x17);
+ { uint32_t x105 = (x103 & 0x7fffff);
+ out[0] = x102;
+ out[1] = x105;
+ out[2] = (x104 + x57);
+ out[3] = x60;
+ out[4] = x63;
+ out[5] = x66;
+ out[6] = x69;
+ out[7] = x72;
+ out[8] = x75;
+ out[9] = x78;
+ out[10] = x81;
+ out[11] = x84;
+ out[12] = x87;
+ out[13] = x90;
+ out[14] = x93;
+ out[15] = x96;
+ out[16] = x99;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e383m187_17limbs/fesquareDisplay.log b/src/Specific/solinas32_2e383m187_17limbs/fesquareDisplay.log
new file mode 100644
index 000000000..33739de8b
--- /dev/null
+++ b/src/Specific/solinas32_2e383m187_17limbs/fesquareDisplay.log
@@ -0,0 +1,80 @@
+λ x : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x31, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
+ uint64_t x33 = (((uint64_t)x2 * x31) + (((uint64_t)x4 * x32) + ((0x2 * ((uint64_t)x6 * x30)) + (((uint64_t)x8 * x28) + ((0x2 * ((uint64_t)x10 * x26)) + (((uint64_t)x12 * x24) + ((0x2 * ((uint64_t)x14 * x22)) + (((uint64_t)x16 * x20) + ((0x2 * ((uint64_t)x18 * x18)) + (((uint64_t)x20 * x16) + ((0x2 * ((uint64_t)x22 * x14)) + (((uint64_t)x24 * x12) + ((0x2 * ((uint64_t)x26 * x10)) + (((uint64_t)x28 * x8) + ((0x2 * ((uint64_t)x30 * x6)) + (((uint64_t)x32 * x4) + ((uint64_t)x31 * x2)))))))))))))))));
+ uint64_t x34 = ((((uint64_t)x2 * x32) + ((0x2 * ((uint64_t)x4 * x30)) + ((0x2 * ((uint64_t)x6 * x28)) + ((0x2 * ((uint64_t)x8 * x26)) + ((0x2 * ((uint64_t)x10 * x24)) + ((0x2 * ((uint64_t)x12 * x22)) + ((0x2 * ((uint64_t)x14 * x20)) + ((0x2 * ((uint64_t)x16 * x18)) + ((0x2 * ((uint64_t)x18 * x16)) + ((0x2 * ((uint64_t)x20 * x14)) + ((0x2 * ((uint64_t)x22 * x12)) + ((0x2 * ((uint64_t)x24 * x10)) + ((0x2 * ((uint64_t)x26 * x8)) + ((0x2 * ((uint64_t)x28 * x6)) + ((0x2 * ((uint64_t)x30 * x4)) + ((uint64_t)x32 * x2)))))))))))))))) + (0xbb * (0x2 * ((uint64_t)x31 * x31))));
+ uint64_t x35 = ((((uint64_t)x2 * x30) + (((uint64_t)x4 * x28) + ((0x2 * ((uint64_t)x6 * x26)) + (((uint64_t)x8 * x24) + ((0x2 * ((uint64_t)x10 * x22)) + (((uint64_t)x12 * x20) + ((0x2 * ((uint64_t)x14 * x18)) + (((uint64_t)x16 * x16) + ((0x2 * ((uint64_t)x18 * x14)) + (((uint64_t)x20 * x12) + ((0x2 * ((uint64_t)x22 * x10)) + (((uint64_t)x24 * x8) + ((0x2 * ((uint64_t)x26 * x6)) + (((uint64_t)x28 * x4) + ((uint64_t)x30 * x2))))))))))))))) + (0xbb * (((uint64_t)x32 * x31) + ((uint64_t)x31 * x32))));
+ uint64_t x36 = ((((uint64_t)x2 * x28) + ((0x2 * ((uint64_t)x4 * x26)) + ((0x2 * ((uint64_t)x6 * x24)) + ((0x2 * ((uint64_t)x8 * x22)) + ((0x2 * ((uint64_t)x10 * x20)) + ((0x2 * ((uint64_t)x12 * x18)) + ((0x2 * ((uint64_t)x14 * x16)) + ((0x2 * ((uint64_t)x16 * x14)) + ((0x2 * ((uint64_t)x18 * x12)) + ((0x2 * ((uint64_t)x20 * x10)) + ((0x2 * ((uint64_t)x22 * x8)) + ((0x2 * ((uint64_t)x24 * x6)) + ((0x2 * ((uint64_t)x26 * x4)) + ((uint64_t)x28 * x2)))))))))))))) + (0xbb * ((0x2 * ((uint64_t)x30 * x31)) + (((uint64_t)x32 * x32) + (0x2 * ((uint64_t)x31 * x30))))));
+ uint64_t x37 = ((((uint64_t)x2 * x26) + (((uint64_t)x4 * x24) + ((0x2 * ((uint64_t)x6 * x22)) + (((uint64_t)x8 * x20) + ((0x2 * ((uint64_t)x10 * x18)) + (((uint64_t)x12 * x16) + ((0x2 * ((uint64_t)x14 * x14)) + (((uint64_t)x16 * x12) + ((0x2 * ((uint64_t)x18 * x10)) + (((uint64_t)x20 * x8) + ((0x2 * ((uint64_t)x22 * x6)) + (((uint64_t)x24 * x4) + ((uint64_t)x26 * x2))))))))))))) + (0xbb * (((uint64_t)x28 * x31) + (((uint64_t)x30 * x32) + (((uint64_t)x32 * x30) + ((uint64_t)x31 * x28))))));
+ uint64_t x38 = ((((uint64_t)x2 * x24) + ((0x2 * ((uint64_t)x4 * x22)) + ((0x2 * ((uint64_t)x6 * x20)) + ((0x2 * ((uint64_t)x8 * x18)) + ((0x2 * ((uint64_t)x10 * x16)) + ((0x2 * ((uint64_t)x12 * x14)) + ((0x2 * ((uint64_t)x14 * x12)) + ((0x2 * ((uint64_t)x16 * x10)) + ((0x2 * ((uint64_t)x18 * x8)) + ((0x2 * ((uint64_t)x20 * x6)) + ((0x2 * ((uint64_t)x22 * x4)) + ((uint64_t)x24 * x2)))))))))))) + (0xbb * ((0x2 * ((uint64_t)x26 * x31)) + (((uint64_t)x28 * x32) + ((0x2 * ((uint64_t)x30 * x30)) + (((uint64_t)x32 * x28) + (0x2 * ((uint64_t)x31 * x26))))))));
+ uint64_t x39 = ((((uint64_t)x2 * x22) + (((uint64_t)x4 * x20) + ((0x2 * ((uint64_t)x6 * x18)) + (((uint64_t)x8 * x16) + ((0x2 * ((uint64_t)x10 * x14)) + (((uint64_t)x12 * x12) + ((0x2 * ((uint64_t)x14 * x10)) + (((uint64_t)x16 * x8) + ((0x2 * ((uint64_t)x18 * x6)) + (((uint64_t)x20 * x4) + ((uint64_t)x22 * x2))))))))))) + (0xbb * (((uint64_t)x24 * x31) + (((uint64_t)x26 * x32) + (((uint64_t)x28 * x30) + (((uint64_t)x30 * x28) + (((uint64_t)x32 * x26) + ((uint64_t)x31 * x24))))))));
+ uint64_t x40 = ((((uint64_t)x2 * x20) + ((0x2 * ((uint64_t)x4 * x18)) + ((0x2 * ((uint64_t)x6 * x16)) + ((0x2 * ((uint64_t)x8 * x14)) + ((0x2 * ((uint64_t)x10 * x12)) + ((0x2 * ((uint64_t)x12 * x10)) + ((0x2 * ((uint64_t)x14 * x8)) + ((0x2 * ((uint64_t)x16 * x6)) + ((0x2 * ((uint64_t)x18 * x4)) + ((uint64_t)x20 * x2)))))))))) + (0xbb * ((0x2 * ((uint64_t)x22 * x31)) + (((uint64_t)x24 * x32) + ((0x2 * ((uint64_t)x26 * x30)) + (((uint64_t)x28 * x28) + ((0x2 * ((uint64_t)x30 * x26)) + (((uint64_t)x32 * x24) + (0x2 * ((uint64_t)x31 * x22))))))))));
+ uint64_t x41 = ((((uint64_t)x2 * x18) + (((uint64_t)x4 * x16) + ((0x2 * ((uint64_t)x6 * x14)) + (((uint64_t)x8 * x12) + ((0x2 * ((uint64_t)x10 * x10)) + (((uint64_t)x12 * x8) + ((0x2 * ((uint64_t)x14 * x6)) + (((uint64_t)x16 * x4) + ((uint64_t)x18 * x2))))))))) + (0xbb * (((uint64_t)x20 * x31) + (((uint64_t)x22 * x32) + (((uint64_t)x24 * x30) + (((uint64_t)x26 * x28) + (((uint64_t)x28 * x26) + (((uint64_t)x30 * x24) + (((uint64_t)x32 * x22) + ((uint64_t)x31 * x20))))))))));
+ uint64_t x42 = ((((uint64_t)x2 * x16) + ((0x2 * ((uint64_t)x4 * x14)) + ((0x2 * ((uint64_t)x6 * x12)) + ((0x2 * ((uint64_t)x8 * x10)) + ((0x2 * ((uint64_t)x10 * x8)) + ((0x2 * ((uint64_t)x12 * x6)) + ((0x2 * ((uint64_t)x14 * x4)) + ((uint64_t)x16 * x2)))))))) + (0xbb * ((0x2 * ((uint64_t)x18 * x31)) + (((uint64_t)x20 * x32) + ((0x2 * ((uint64_t)x22 * x30)) + (((uint64_t)x24 * x28) + ((0x2 * ((uint64_t)x26 * x26)) + (((uint64_t)x28 * x24) + ((0x2 * ((uint64_t)x30 * x22)) + (((uint64_t)x32 * x20) + (0x2 * ((uint64_t)x31 * x18))))))))))));
+ uint64_t x43 = ((((uint64_t)x2 * x14) + (((uint64_t)x4 * x12) + ((0x2 * ((uint64_t)x6 * x10)) + (((uint64_t)x8 * x8) + ((0x2 * ((uint64_t)x10 * x6)) + (((uint64_t)x12 * x4) + ((uint64_t)x14 * x2))))))) + (0xbb * (((uint64_t)x16 * x31) + (((uint64_t)x18 * x32) + (((uint64_t)x20 * x30) + (((uint64_t)x22 * x28) + (((uint64_t)x24 * x26) + (((uint64_t)x26 * x24) + (((uint64_t)x28 * x22) + (((uint64_t)x30 * x20) + (((uint64_t)x32 * x18) + ((uint64_t)x31 * x16))))))))))));
+ uint64_t x44 = ((((uint64_t)x2 * x12) + ((0x2 * ((uint64_t)x4 * x10)) + ((0x2 * ((uint64_t)x6 * x8)) + ((0x2 * ((uint64_t)x8 * x6)) + ((0x2 * ((uint64_t)x10 * x4)) + ((uint64_t)x12 * x2)))))) + (0xbb * ((0x2 * ((uint64_t)x14 * x31)) + (((uint64_t)x16 * x32) + ((0x2 * ((uint64_t)x18 * x30)) + (((uint64_t)x20 * x28) + ((0x2 * ((uint64_t)x22 * x26)) + (((uint64_t)x24 * x24) + ((0x2 * ((uint64_t)x26 * x22)) + (((uint64_t)x28 * x20) + ((0x2 * ((uint64_t)x30 * x18)) + (((uint64_t)x32 * x16) + (0x2 * ((uint64_t)x31 * x14))))))))))))));
+ uint64_t x45 = ((((uint64_t)x2 * x10) + (((uint64_t)x4 * x8) + ((0x2 * ((uint64_t)x6 * x6)) + (((uint64_t)x8 * x4) + ((uint64_t)x10 * x2))))) + (0xbb * (((uint64_t)x12 * x31) + (((uint64_t)x14 * x32) + (((uint64_t)x16 * x30) + (((uint64_t)x18 * x28) + (((uint64_t)x20 * x26) + (((uint64_t)x22 * x24) + (((uint64_t)x24 * x22) + (((uint64_t)x26 * x20) + (((uint64_t)x28 * x18) + (((uint64_t)x30 * x16) + (((uint64_t)x32 * x14) + ((uint64_t)x31 * x12))))))))))))));
+ uint64_t x46 = ((((uint64_t)x2 * x8) + ((0x2 * ((uint64_t)x4 * x6)) + ((0x2 * ((uint64_t)x6 * x4)) + ((uint64_t)x8 * x2)))) + (0xbb * ((0x2 * ((uint64_t)x10 * x31)) + (((uint64_t)x12 * x32) + ((0x2 * ((uint64_t)x14 * x30)) + (((uint64_t)x16 * x28) + ((0x2 * ((uint64_t)x18 * x26)) + (((uint64_t)x20 * x24) + ((0x2 * ((uint64_t)x22 * x22)) + (((uint64_t)x24 * x20) + ((0x2 * ((uint64_t)x26 * x18)) + (((uint64_t)x28 * x16) + ((0x2 * ((uint64_t)x30 * x14)) + (((uint64_t)x32 * x12) + (0x2 * ((uint64_t)x31 * x10))))))))))))))));
+ uint64_t x47 = ((((uint64_t)x2 * x6) + (((uint64_t)x4 * x4) + ((uint64_t)x6 * x2))) + (0xbb * (((uint64_t)x8 * x31) + (((uint64_t)x10 * x32) + (((uint64_t)x12 * x30) + (((uint64_t)x14 * x28) + (((uint64_t)x16 * x26) + (((uint64_t)x18 * x24) + (((uint64_t)x20 * x22) + (((uint64_t)x22 * x20) + (((uint64_t)x24 * x18) + (((uint64_t)x26 * x16) + (((uint64_t)x28 * x14) + (((uint64_t)x30 * x12) + (((uint64_t)x32 * x10) + ((uint64_t)x31 * x8))))))))))))))));
+ uint64_t x48 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0xbb * ((0x2 * ((uint64_t)x6 * x31)) + (((uint64_t)x8 * x32) + ((0x2 * ((uint64_t)x10 * x30)) + (((uint64_t)x12 * x28) + ((0x2 * ((uint64_t)x14 * x26)) + (((uint64_t)x16 * x24) + ((0x2 * ((uint64_t)x18 * x22)) + (((uint64_t)x20 * x20) + ((0x2 * ((uint64_t)x22 * x18)) + (((uint64_t)x24 * x16) + ((0x2 * ((uint64_t)x26 * x14)) + (((uint64_t)x28 * x12) + ((0x2 * ((uint64_t)x30 * x10)) + (((uint64_t)x32 * x8) + (0x2 * ((uint64_t)x31 * x6))))))))))))))))));
+ uint64_t x49 = (((uint64_t)x2 * x2) + (0xbb * ((0x2 * ((uint64_t)x4 * x31)) + ((0x2 * ((uint64_t)x6 * x32)) + ((0x2 * ((uint64_t)x8 * x30)) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + ((0x2 * ((uint64_t)x16 * x22)) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + ((0x2 * ((uint64_t)x22 * x16)) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + ((0x2 * ((uint64_t)x30 * x8)) + ((0x2 * ((uint64_t)x32 * x6)) + (0x2 * ((uint64_t)x31 * x4)))))))))))))))))));
+ uint64_t x50 = (x49 >> 0x17);
+ uint32_t x51 = ((uint32_t)x49 & 0x7fffff);
+ uint64_t x52 = (x50 + x48);
+ uint64_t x53 = (x52 >> 0x17);
+ uint32_t x54 = ((uint32_t)x52 & 0x7fffff);
+ uint64_t x55 = (x53 + x47);
+ uint64_t x56 = (x55 >> 0x16);
+ uint32_t x57 = ((uint32_t)x55 & 0x3fffff);
+ uint64_t x58 = (x56 + x46);
+ uint64_t x59 = (x58 >> 0x17);
+ uint32_t x60 = ((uint32_t)x58 & 0x7fffff);
+ uint64_t x61 = (x59 + x45);
+ uint64_t x62 = (x61 >> 0x16);
+ uint32_t x63 = ((uint32_t)x61 & 0x3fffff);
+ uint64_t x64 = (x62 + x44);
+ uint64_t x65 = (x64 >> 0x17);
+ uint32_t x66 = ((uint32_t)x64 & 0x7fffff);
+ uint64_t x67 = (x65 + x43);
+ uint64_t x68 = (x67 >> 0x16);
+ uint32_t x69 = ((uint32_t)x67 & 0x3fffff);
+ uint64_t x70 = (x68 + x42);
+ uint64_t x71 = (x70 >> 0x17);
+ uint32_t x72 = ((uint32_t)x70 & 0x7fffff);
+ uint64_t x73 = (x71 + x41);
+ uint64_t x74 = (x73 >> 0x16);
+ uint32_t x75 = ((uint32_t)x73 & 0x3fffff);
+ uint64_t x76 = (x74 + x40);
+ uint64_t x77 = (x76 >> 0x17);
+ uint32_t x78 = ((uint32_t)x76 & 0x7fffff);
+ uint64_t x79 = (x77 + x39);
+ uint64_t x80 = (x79 >> 0x16);
+ uint32_t x81 = ((uint32_t)x79 & 0x3fffff);
+ uint64_t x82 = (x80 + x38);
+ uint64_t x83 = (x82 >> 0x17);
+ uint32_t x84 = ((uint32_t)x82 & 0x7fffff);
+ uint64_t x85 = (x83 + x37);
+ uint64_t x86 = (x85 >> 0x16);
+ uint32_t x87 = ((uint32_t)x85 & 0x3fffff);
+ uint64_t x88 = (x86 + x36);
+ uint64_t x89 = (x88 >> 0x17);
+ uint32_t x90 = ((uint32_t)x88 & 0x7fffff);
+ uint64_t x91 = (x89 + x35);
+ uint64_t x92 = (x91 >> 0x16);
+ uint32_t x93 = ((uint32_t)x91 & 0x3fffff);
+ uint64_t x94 = (x92 + x34);
+ uint64_t x95 = (x94 >> 0x17);
+ uint32_t x96 = ((uint32_t)x94 & 0x7fffff);
+ uint64_t x97 = (x95 + x33);
+ uint32_t x98 = (uint32_t) (x97 >> 0x16);
+ uint32_t x99 = ((uint32_t)x97 & 0x3fffff);
+ uint64_t x100 = (x51 + ((uint64_t)0xbb * x98));
+ uint32_t x101 = (uint32_t) (x100 >> 0x17);
+ uint32_t x102 = ((uint32_t)x100 & 0x7fffff);
+ uint32_t x103 = (x101 + x54);
+ uint32_t x104 = (x103 >> 0x17);
+ uint32_t x105 = (x103 & 0x7fffff);
+ return (Return x99, Return x96, Return x93, Return x90, Return x87, Return x84, Return x81, Return x78, Return x75, Return x72, Return x69, Return x66, Return x63, Return x60, (x104 + x57), Return x105, Return x102))
+x
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m187_17limbs/fesub.c b/src/Specific/solinas32_2e383m187_17limbs/fesub.c
index b45af98fd..e9b4888bf 100644
--- a/src/Specific/solinas32_2e383m187_17limbs/fesub.c
+++ b/src/Specific/solinas32_2e383m187_17limbs/fesub.c
@@ -33,7 +33,7 @@ static void fesub(uint32_t out[17], const uint32_t in1[17], const uint32_t in2[1
{ const uint32_t x41 = in2[2];
{ const uint32_t x39 = in2[1];
{ const uint32_t x37 = in2[0];
- out[0] = ((Const 16776842 + x5) - x37);
+ out[0] = ((0xfffe8a + x5) - x37);
out[1] = ((0xfffffe + x7) - x39);
out[2] = ((0x7ffffe + x9) - x41);
out[3] = ((0xfffffe + x11) - x43);
diff --git a/src/Specific/solinas32_2e383m187_17limbs/fesubDisplay.log b/src/Specific/solinas32_2e383m187_17limbs/fesubDisplay.log
index cd80e6afe..1a8f2a3de 100644
--- a/src/Specific/solinas32_2e383m187_17limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e383m187_17limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x34, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x66, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37))%core,
- (((0x7ffffe + x34) - x66), ((0xfffffe + x35) - x67), ((0x7ffffe + x33) - x65), ((0xfffffe + x31) - x63), ((0x7ffffe + x29) - x61), ((0xfffffe + x27) - x59), ((0x7ffffe + x25) - x57), ((0xfffffe + x23) - x55), ((0x7ffffe + x21) - x53), ((0xfffffe + x19) - x51), ((0x7ffffe + x17) - x49), ((0xfffffe + x15) - x47), ((0x7ffffe + x13) - x45), ((0xfffffe + x11) - x43), ((0x7ffffe + x9) - x41), ((0xfffffe + x7) - x39), ((Const 16776842 + x5) - x37)))
+ (((0x7ffffe + x34) - x66), ((0xfffffe + x35) - x67), ((0x7ffffe + x33) - x65), ((0xfffffe + x31) - x63), ((0x7ffffe + x29) - x61), ((0xfffffe + x27) - x59), ((0x7ffffe + x25) - x57), ((0xfffffe + x23) - x55), ((0x7ffffe + x21) - x53), ((0xfffffe + x19) - x51), ((0x7ffffe + x17) - x49), ((0xfffffe + x15) - x47), ((0x7ffffe + x13) - x45), ((0xfffffe + x11) - x43), ((0x7ffffe + x9) - x41), ((0xfffffe + x7) - x39), ((0xfffe8a + x5) - x37)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m187_17limbs/freeze.c b/src/Specific/solinas32_2e383m187_17limbs/freeze.c
index fdf34ac14..af9e61e11 100644
--- a/src/Specific/solinas32_2e383m187_17limbs/freeze.c
+++ b/src/Specific/solinas32_2e383m187_17limbs/freeze.c
@@ -16,7 +16,7 @@ static void freeze(uint32_t out[17], const uint32_t in1[17]) {
{ const uint32_t x6 = in1[2];
{ const uint32_t x4 = in1[1];
{ const uint32_t x2 = in1[0];
- { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 8388421);
+ { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x7fff45);
{ uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x4, 0x7fffff);
{ uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x6, 0x3fffff);
{ uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x8, 0x7fffff);
@@ -34,7 +34,7 @@ static void freeze(uint32_t out[17], const uint32_t in1[17]) {
{ uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x32, 0x7fffff);
{ uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x31, 0x3fffff);
{ uint32_t x84 = cmovznz32(x83, 0x0, 0xffffffff);
- { uint32_t x85 = (x84 & Const 8388421);
+ { uint32_t x85 = (x84 & 0x7fff45);
{ uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x34, Return x85);
{ uint32_t x89 = (x84 & 0x7fffff);
{ uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x37, Return x89);
diff --git a/src/Specific/solinas32_2e383m187_17limbs/freezeDisplay.log b/src/Specific/solinas32_2e383m187_17limbs/freezeDisplay.log
index 0f580b32e..fa254adf1 100644
--- a/src/Specific/solinas32_2e383m187_17limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e383m187_17limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x31, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 8388421);
+ uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x7fff45);
uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x4, 0x7fffff);
uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x6, 0x3fffff);
uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x8, 0x7fffff);
@@ -20,7 +20,7 @@ Interp-η
uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x32, 0x7fffff);
uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x31, 0x3fffff);
uint32_t x84 = cmovznz32(x83, 0x0, 0xffffffff);
- uint32_t x85 = (x84 & Const 8388421);
+ uint32_t x85 = (x84 & 0x7fff45);
uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x34, Return x85);
uint32_t x89 = (x84 & 0x7fffff);
uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x37, Return x89);
diff --git a/src/Specific/solinas32_2e383m31_15limbs/femul.c b/src/Specific/solinas32_2e383m31_15limbs/femul.c
new file mode 100644
index 000000000..4e89d811b
--- /dev/null
+++ b/src/Specific/solinas32_2e383m31_15limbs/femul.c
@@ -0,0 +1,113 @@
+static void femul(uint32_t out[15], const uint32_t in1[15], const uint32_t in2[15]) {
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x58 = in2[14];
+ { const uint32_t x59 = in2[13];
+ { const uint32_t x57 = in2[12];
+ { const uint32_t x55 = in2[11];
+ { const uint32_t x53 = in2[10];
+ { const uint32_t x51 = in2[9];
+ { const uint32_t x49 = in2[8];
+ { const uint32_t x47 = in2[7];
+ { const uint32_t x45 = in2[6];
+ { const uint32_t x43 = in2[5];
+ { const uint32_t x41 = in2[4];
+ { const uint32_t x39 = in2[3];
+ { const uint32_t x37 = in2[2];
+ { const uint32_t x35 = in2[1];
+ { const uint32_t x33 = in2[0];
+ { uint64_t x60 = (((uint64_t)x5 * x58) + (((uint64_t)x7 * x59) + ((0x2 * ((uint64_t)x9 * x57)) + (((uint64_t)x11 * x55) + ((0x2 * ((uint64_t)x13 * x53)) + (((uint64_t)x15 * x51) + ((0x2 * ((uint64_t)x17 * x49)) + (((uint64_t)x19 * x47) + ((0x2 * ((uint64_t)x21 * x45)) + (((uint64_t)x23 * x43) + ((0x2 * ((uint64_t)x25 * x41)) + (((uint64_t)x27 * x39) + ((0x2 * ((uint64_t)x29 * x37)) + (((uint64_t)x31 * x35) + ((uint64_t)x30 * x33)))))))))))))));
+ { uint64_t x61 = ((((uint64_t)x5 * x59) + ((0x2 * ((uint64_t)x7 * x57)) + ((0x2 * ((uint64_t)x9 * x55)) + ((0x2 * ((uint64_t)x11 * x53)) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + ((0x2 * ((uint64_t)x17 * x47)) + ((0x2 * ((uint64_t)x19 * x45)) + ((0x2 * ((uint64_t)x21 * x43)) + ((0x2 * ((uint64_t)x23 * x41)) + ((0x2 * ((uint64_t)x25 * x39)) + ((0x2 * ((uint64_t)x27 * x37)) + ((0x2 * ((uint64_t)x29 * x35)) + ((uint64_t)x31 * x33)))))))))))))) + (0x1f * (0x2 * ((uint64_t)x30 * x58))));
+ { uint64_t x62 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + ((0x2 * ((uint64_t)x9 * x53)) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + ((0x2 * ((uint64_t)x17 * x45)) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + (((uint64_t)x23 * x39) + ((0x2 * ((uint64_t)x25 * x37)) + (((uint64_t)x27 * x35) + ((uint64_t)x29 * x33))))))))))))) + (0x1f * (((uint64_t)x31 * x58) + ((uint64_t)x30 * x59))));
+ { uint64_t x63 = ((((uint64_t)x5 * x55) + ((0x2 * ((uint64_t)x7 * x53)) + ((0x2 * ((uint64_t)x9 * x51)) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + ((0x2 * ((uint64_t)x21 * x39)) + ((0x2 * ((uint64_t)x23 * x37)) + ((0x2 * ((uint64_t)x25 * x35)) + ((uint64_t)x27 * x33)))))))))))) + (0x1f * ((0x2 * ((uint64_t)x29 * x58)) + (((uint64_t)x31 * x59) + (0x2 * ((uint64_t)x30 * x57))))));
+ { uint64_t x64 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + (((uint64_t)x19 * x39) + ((0x2 * ((uint64_t)x21 * x37)) + (((uint64_t)x23 * x35) + ((uint64_t)x25 * x33))))))))))) + (0x1f * (((uint64_t)x27 * x58) + (((uint64_t)x29 * x59) + (((uint64_t)x31 * x57) + ((uint64_t)x30 * x55))))));
+ { uint64_t x65 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + ((0x2 * ((uint64_t)x9 * x47)) + ((0x2 * ((uint64_t)x11 * x45)) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + ((0x2 * ((uint64_t)x17 * x39)) + ((0x2 * ((uint64_t)x19 * x37)) + ((0x2 * ((uint64_t)x21 * x35)) + ((uint64_t)x23 * x33)))))))))) + (0x1f * ((0x2 * ((uint64_t)x25 * x58)) + (((uint64_t)x27 * x59) + ((0x2 * ((uint64_t)x29 * x57)) + (((uint64_t)x31 * x55) + (0x2 * ((uint64_t)x30 * x53))))))));
+ { uint64_t x66 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + ((0x2 * ((uint64_t)x9 * x45)) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + (((uint64_t)x15 * x39) + ((0x2 * ((uint64_t)x17 * x37)) + (((uint64_t)x19 * x35) + ((uint64_t)x21 * x33))))))))) + (0x1f * (((uint64_t)x23 * x58) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + (((uint64_t)x29 * x55) + (((uint64_t)x31 * x53) + ((uint64_t)x30 * x51))))))));
+ { uint64_t x67 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((0x2 * ((uint64_t)x15 * x37)) + ((0x2 * ((uint64_t)x17 * x35)) + ((uint64_t)x19 * x33)))))))) + (0x1f * ((0x2 * ((uint64_t)x21 * x58)) + (((uint64_t)x23 * x59) + ((0x2 * ((uint64_t)x25 * x57)) + (((uint64_t)x27 * x55) + ((0x2 * ((uint64_t)x29 * x53)) + (((uint64_t)x31 * x51) + (0x2 * ((uint64_t)x30 * x49))))))))));
+ { uint64_t x68 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + (((uint64_t)x11 * x39) + ((0x2 * ((uint64_t)x13 * x37)) + (((uint64_t)x15 * x35) + ((uint64_t)x17 * x33))))))) + (0x1f * (((uint64_t)x19 * x58) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + (((uint64_t)x29 * x51) + (((uint64_t)x31 * x49) + ((uint64_t)x30 * x47))))))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((0x2 * ((uint64_t)x11 * x37)) + ((0x2 * ((uint64_t)x13 * x35)) + ((uint64_t)x15 * x33)))))) + (0x1f * ((0x2 * ((uint64_t)x17 * x58)) + (((uint64_t)x19 * x59) + ((0x2 * ((uint64_t)x21 * x57)) + (((uint64_t)x23 * x55) + ((0x2 * ((uint64_t)x25 * x53)) + (((uint64_t)x27 * x51) + ((0x2 * ((uint64_t)x29 * x49)) + (((uint64_t)x31 * x47) + (0x2 * ((uint64_t)x30 * x45))))))))))));
+ { uint64_t x70 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + ((0x2 * ((uint64_t)x9 * x37)) + (((uint64_t)x11 * x35) + ((uint64_t)x13 * x33))))) + (0x1f * (((uint64_t)x15 * x58) + (((uint64_t)x17 * x59) + (((uint64_t)x19 * x57) + (((uint64_t)x21 * x55) + (((uint64_t)x23 * x53) + (((uint64_t)x25 * x51) + (((uint64_t)x27 * x49) + (((uint64_t)x29 * x47) + (((uint64_t)x31 * x45) + ((uint64_t)x30 * x43))))))))))));
+ { uint64_t x71 = ((((uint64_t)x5 * x39) + ((0x2 * ((uint64_t)x7 * x37)) + ((0x2 * ((uint64_t)x9 * x35)) + ((uint64_t)x11 * x33)))) + (0x1f * ((0x2 * ((uint64_t)x13 * x58)) + (((uint64_t)x15 * x59) + ((0x2 * ((uint64_t)x17 * x57)) + (((uint64_t)x19 * x55) + ((0x2 * ((uint64_t)x21 * x53)) + (((uint64_t)x23 * x51) + ((0x2 * ((uint64_t)x25 * x49)) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + (((uint64_t)x31 * x43) + (0x2 * ((uint64_t)x30 * x41))))))))))))));
+ { uint64_t x72 = ((((uint64_t)x5 * x37) + (((uint64_t)x7 * x35) + ((uint64_t)x9 * x33))) + (0x1f * (((uint64_t)x11 * x58) + (((uint64_t)x13 * x59) + (((uint64_t)x15 * x57) + (((uint64_t)x17 * x55) + (((uint64_t)x19 * x53) + (((uint64_t)x21 * x51) + (((uint64_t)x23 * x49) + (((uint64_t)x25 * x47) + (((uint64_t)x27 * x45) + (((uint64_t)x29 * x43) + (((uint64_t)x31 * x41) + ((uint64_t)x30 * x39))))))))))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x35) + ((uint64_t)x7 * x33)) + (0x1f * ((0x2 * ((uint64_t)x9 * x58)) + (((uint64_t)x11 * x59) + ((0x2 * ((uint64_t)x13 * x57)) + (((uint64_t)x15 * x55) + ((0x2 * ((uint64_t)x17 * x53)) + (((uint64_t)x19 * x51) + ((0x2 * ((uint64_t)x21 * x49)) + (((uint64_t)x23 * x47) + ((0x2 * ((uint64_t)x25 * x45)) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + (0x2 * ((uint64_t)x30 * x37))))))))))))))));
+ { ℤ x74 = (((uint64_t)x5 * x33) +ℤ (0x1f *ℤ ((0x2 * ((uint64_t)x7 * x58)) + ((0x2 * ((uint64_t)x9 * x59)) + ((0x2 * ((uint64_t)x11 * x57)) + ((0x2 * ((uint64_t)x13 * x55)) + ((0x2 * ((uint64_t)x15 * x53)) + ((0x2 * ((uint64_t)x17 * x51)) + ((0x2 * ((uint64_t)x19 * x49)) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + ((0x2 * ((uint64_t)x25 * x43)) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + ((0x2 * ((uint64_t)x31 * x37)) + (0x2 * ((uint64_t)x30 * x35)))))))))))))))));
+ { uint64_t x75 = (x74 >> 0x1a);
+ { uint32_t x76 = (x74 & 0x3ffffff);
+ { uint64_t x77 = (x75 + x73);
+ { uint64_t x78 = (x77 >> 0x1a);
+ { uint32_t x79 = ((uint32_t)x77 & 0x3ffffff);
+ { uint64_t x80 = (x78 + x72);
+ { uint64_t x81 = (x80 >> 0x19);
+ { uint32_t x82 = ((uint32_t)x80 & 0x1ffffff);
+ { uint64_t x83 = (x81 + x71);
+ { uint64_t x84 = (x83 >> 0x1a);
+ { uint32_t x85 = ((uint32_t)x83 & 0x3ffffff);
+ { uint64_t x86 = (x84 + x70);
+ { uint64_t x87 = (x86 >> 0x19);
+ { uint32_t x88 = ((uint32_t)x86 & 0x1ffffff);
+ { uint64_t x89 = (x87 + x69);
+ { uint64_t x90 = (x89 >> 0x1a);
+ { uint32_t x91 = ((uint32_t)x89 & 0x3ffffff);
+ { uint64_t x92 = (x90 + x68);
+ { uint64_t x93 = (x92 >> 0x19);
+ { uint32_t x94 = ((uint32_t)x92 & 0x1ffffff);
+ { uint64_t x95 = (x93 + x67);
+ { uint64_t x96 = (x95 >> 0x1a);
+ { uint32_t x97 = ((uint32_t)x95 & 0x3ffffff);
+ { uint64_t x98 = (x96 + x66);
+ { uint64_t x99 = (x98 >> 0x19);
+ { uint32_t x100 = ((uint32_t)x98 & 0x1ffffff);
+ { uint64_t x101 = (x99 + x65);
+ { uint64_t x102 = (x101 >> 0x1a);
+ { uint32_t x103 = ((uint32_t)x101 & 0x3ffffff);
+ { uint64_t x104 = (x102 + x64);
+ { uint64_t x105 = (x104 >> 0x19);
+ { uint32_t x106 = ((uint32_t)x104 & 0x1ffffff);
+ { uint64_t x107 = (x105 + x63);
+ { uint64_t x108 = (x107 >> 0x1a);
+ { uint32_t x109 = ((uint32_t)x107 & 0x3ffffff);
+ { uint64_t x110 = (x108 + x62);
+ { uint64_t x111 = (x110 >> 0x19);
+ { uint32_t x112 = ((uint32_t)x110 & 0x1ffffff);
+ { uint64_t x113 = (x111 + x61);
+ { uint64_t x114 = (x113 >> 0x1a);
+ { uint32_t x115 = ((uint32_t)x113 & 0x3ffffff);
+ { uint64_t x116 = (x114 + x60);
+ { uint64_t x117 = (x116 >> 0x19);
+ { uint32_t x118 = ((uint32_t)x116 & 0x1ffffff);
+ { uint64_t x119 = (x76 + (0x1f * x117));
+ { uint32_t x120 = (uint32_t) (x119 >> 0x1a);
+ { uint32_t x121 = ((uint32_t)x119 & 0x3ffffff);
+ { uint32_t x122 = (x120 + x79);
+ { uint32_t x123 = (x122 >> 0x1a);
+ { uint32_t x124 = (x122 & 0x3ffffff);
+ out[0] = x121;
+ out[1] = x124;
+ out[2] = (x123 + x82);
+ out[3] = x85;
+ out[4] = x88;
+ out[5] = x91;
+ out[6] = x94;
+ out[7] = x97;
+ out[8] = x100;
+ out[9] = x103;
+ out[10] = x106;
+ out[11] = x109;
+ out[12] = x112;
+ out[13] = x115;
+ out[14] = x118;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e383m31_15limbs/femulDisplay.log b/src/Specific/solinas32_2e383m31_15limbs/femulDisplay.log
new file mode 100644
index 000000000..56f135621
--- /dev/null
+++ b/src/Specific/solinas32_2e383m31_15limbs/femulDisplay.log
@@ -0,0 +1,72 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x30, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x58, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35, x33))%core,
+ uint64_t x60 = (((uint64_t)x5 * x58) + (((uint64_t)x7 * x59) + ((0x2 * ((uint64_t)x9 * x57)) + (((uint64_t)x11 * x55) + ((0x2 * ((uint64_t)x13 * x53)) + (((uint64_t)x15 * x51) + ((0x2 * ((uint64_t)x17 * x49)) + (((uint64_t)x19 * x47) + ((0x2 * ((uint64_t)x21 * x45)) + (((uint64_t)x23 * x43) + ((0x2 * ((uint64_t)x25 * x41)) + (((uint64_t)x27 * x39) + ((0x2 * ((uint64_t)x29 * x37)) + (((uint64_t)x31 * x35) + ((uint64_t)x30 * x33)))))))))))))));
+ uint64_t x61 = ((((uint64_t)x5 * x59) + ((0x2 * ((uint64_t)x7 * x57)) + ((0x2 * ((uint64_t)x9 * x55)) + ((0x2 * ((uint64_t)x11 * x53)) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + ((0x2 * ((uint64_t)x17 * x47)) + ((0x2 * ((uint64_t)x19 * x45)) + ((0x2 * ((uint64_t)x21 * x43)) + ((0x2 * ((uint64_t)x23 * x41)) + ((0x2 * ((uint64_t)x25 * x39)) + ((0x2 * ((uint64_t)x27 * x37)) + ((0x2 * ((uint64_t)x29 * x35)) + ((uint64_t)x31 * x33)))))))))))))) + (0x1f * (0x2 * ((uint64_t)x30 * x58))));
+ uint64_t x62 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + ((0x2 * ((uint64_t)x9 * x53)) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + ((0x2 * ((uint64_t)x17 * x45)) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + (((uint64_t)x23 * x39) + ((0x2 * ((uint64_t)x25 * x37)) + (((uint64_t)x27 * x35) + ((uint64_t)x29 * x33))))))))))))) + (0x1f * (((uint64_t)x31 * x58) + ((uint64_t)x30 * x59))));
+ uint64_t x63 = ((((uint64_t)x5 * x55) + ((0x2 * ((uint64_t)x7 * x53)) + ((0x2 * ((uint64_t)x9 * x51)) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + ((0x2 * ((uint64_t)x21 * x39)) + ((0x2 * ((uint64_t)x23 * x37)) + ((0x2 * ((uint64_t)x25 * x35)) + ((uint64_t)x27 * x33)))))))))))) + (0x1f * ((0x2 * ((uint64_t)x29 * x58)) + (((uint64_t)x31 * x59) + (0x2 * ((uint64_t)x30 * x57))))));
+ uint64_t x64 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + (((uint64_t)x19 * x39) + ((0x2 * ((uint64_t)x21 * x37)) + (((uint64_t)x23 * x35) + ((uint64_t)x25 * x33))))))))))) + (0x1f * (((uint64_t)x27 * x58) + (((uint64_t)x29 * x59) + (((uint64_t)x31 * x57) + ((uint64_t)x30 * x55))))));
+ uint64_t x65 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + ((0x2 * ((uint64_t)x9 * x47)) + ((0x2 * ((uint64_t)x11 * x45)) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + ((0x2 * ((uint64_t)x17 * x39)) + ((0x2 * ((uint64_t)x19 * x37)) + ((0x2 * ((uint64_t)x21 * x35)) + ((uint64_t)x23 * x33)))))))))) + (0x1f * ((0x2 * ((uint64_t)x25 * x58)) + (((uint64_t)x27 * x59) + ((0x2 * ((uint64_t)x29 * x57)) + (((uint64_t)x31 * x55) + (0x2 * ((uint64_t)x30 * x53))))))));
+ uint64_t x66 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + ((0x2 * ((uint64_t)x9 * x45)) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + (((uint64_t)x15 * x39) + ((0x2 * ((uint64_t)x17 * x37)) + (((uint64_t)x19 * x35) + ((uint64_t)x21 * x33))))))))) + (0x1f * (((uint64_t)x23 * x58) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + (((uint64_t)x29 * x55) + (((uint64_t)x31 * x53) + ((uint64_t)x30 * x51))))))));
+ uint64_t x67 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((0x2 * ((uint64_t)x15 * x37)) + ((0x2 * ((uint64_t)x17 * x35)) + ((uint64_t)x19 * x33)))))))) + (0x1f * ((0x2 * ((uint64_t)x21 * x58)) + (((uint64_t)x23 * x59) + ((0x2 * ((uint64_t)x25 * x57)) + (((uint64_t)x27 * x55) + ((0x2 * ((uint64_t)x29 * x53)) + (((uint64_t)x31 * x51) + (0x2 * ((uint64_t)x30 * x49))))))))));
+ uint64_t x68 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + (((uint64_t)x11 * x39) + ((0x2 * ((uint64_t)x13 * x37)) + (((uint64_t)x15 * x35) + ((uint64_t)x17 * x33))))))) + (0x1f * (((uint64_t)x19 * x58) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + (((uint64_t)x29 * x51) + (((uint64_t)x31 * x49) + ((uint64_t)x30 * x47))))))))));
+ uint64_t x69 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((0x2 * ((uint64_t)x11 * x37)) + ((0x2 * ((uint64_t)x13 * x35)) + ((uint64_t)x15 * x33)))))) + (0x1f * ((0x2 * ((uint64_t)x17 * x58)) + (((uint64_t)x19 * x59) + ((0x2 * ((uint64_t)x21 * x57)) + (((uint64_t)x23 * x55) + ((0x2 * ((uint64_t)x25 * x53)) + (((uint64_t)x27 * x51) + ((0x2 * ((uint64_t)x29 * x49)) + (((uint64_t)x31 * x47) + (0x2 * ((uint64_t)x30 * x45))))))))))));
+ uint64_t x70 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + ((0x2 * ((uint64_t)x9 * x37)) + (((uint64_t)x11 * x35) + ((uint64_t)x13 * x33))))) + (0x1f * (((uint64_t)x15 * x58) + (((uint64_t)x17 * x59) + (((uint64_t)x19 * x57) + (((uint64_t)x21 * x55) + (((uint64_t)x23 * x53) + (((uint64_t)x25 * x51) + (((uint64_t)x27 * x49) + (((uint64_t)x29 * x47) + (((uint64_t)x31 * x45) + ((uint64_t)x30 * x43))))))))))));
+ uint64_t x71 = ((((uint64_t)x5 * x39) + ((0x2 * ((uint64_t)x7 * x37)) + ((0x2 * ((uint64_t)x9 * x35)) + ((uint64_t)x11 * x33)))) + (0x1f * ((0x2 * ((uint64_t)x13 * x58)) + (((uint64_t)x15 * x59) + ((0x2 * ((uint64_t)x17 * x57)) + (((uint64_t)x19 * x55) + ((0x2 * ((uint64_t)x21 * x53)) + (((uint64_t)x23 * x51) + ((0x2 * ((uint64_t)x25 * x49)) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + (((uint64_t)x31 * x43) + (0x2 * ((uint64_t)x30 * x41))))))))))))));
+ uint64_t x72 = ((((uint64_t)x5 * x37) + (((uint64_t)x7 * x35) + ((uint64_t)x9 * x33))) + (0x1f * (((uint64_t)x11 * x58) + (((uint64_t)x13 * x59) + (((uint64_t)x15 * x57) + (((uint64_t)x17 * x55) + (((uint64_t)x19 * x53) + (((uint64_t)x21 * x51) + (((uint64_t)x23 * x49) + (((uint64_t)x25 * x47) + (((uint64_t)x27 * x45) + (((uint64_t)x29 * x43) + (((uint64_t)x31 * x41) + ((uint64_t)x30 * x39))))))))))))));
+ uint64_t x73 = ((((uint64_t)x5 * x35) + ((uint64_t)x7 * x33)) + (0x1f * ((0x2 * ((uint64_t)x9 * x58)) + (((uint64_t)x11 * x59) + ((0x2 * ((uint64_t)x13 * x57)) + (((uint64_t)x15 * x55) + ((0x2 * ((uint64_t)x17 * x53)) + (((uint64_t)x19 * x51) + ((0x2 * ((uint64_t)x21 * x49)) + (((uint64_t)x23 * x47) + ((0x2 * ((uint64_t)x25 * x45)) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + (0x2 * ((uint64_t)x30 * x37))))))))))))))));
+ ℤ x74 = (((uint64_t)x5 * x33) +ℤ (0x1f *ℤ ((0x2 * ((uint64_t)x7 * x58)) + ((0x2 * ((uint64_t)x9 * x59)) + ((0x2 * ((uint64_t)x11 * x57)) + ((0x2 * ((uint64_t)x13 * x55)) + ((0x2 * ((uint64_t)x15 * x53)) + ((0x2 * ((uint64_t)x17 * x51)) + ((0x2 * ((uint64_t)x19 * x49)) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + ((0x2 * ((uint64_t)x25 * x43)) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + ((0x2 * ((uint64_t)x31 * x37)) + (0x2 * ((uint64_t)x30 * x35)))))))))))))))));
+ uint64_t x75 = (x74 >> 0x1a);
+ uint32_t x76 = (x74 & 0x3ffffff);
+ uint64_t x77 = (x75 + x73);
+ uint64_t x78 = (x77 >> 0x1a);
+ uint32_t x79 = ((uint32_t)x77 & 0x3ffffff);
+ uint64_t x80 = (x78 + x72);
+ uint64_t x81 = (x80 >> 0x19);
+ uint32_t x82 = ((uint32_t)x80 & 0x1ffffff);
+ uint64_t x83 = (x81 + x71);
+ uint64_t x84 = (x83 >> 0x1a);
+ uint32_t x85 = ((uint32_t)x83 & 0x3ffffff);
+ uint64_t x86 = (x84 + x70);
+ uint64_t x87 = (x86 >> 0x19);
+ uint32_t x88 = ((uint32_t)x86 & 0x1ffffff);
+ uint64_t x89 = (x87 + x69);
+ uint64_t x90 = (x89 >> 0x1a);
+ uint32_t x91 = ((uint32_t)x89 & 0x3ffffff);
+ uint64_t x92 = (x90 + x68);
+ uint64_t x93 = (x92 >> 0x19);
+ uint32_t x94 = ((uint32_t)x92 & 0x1ffffff);
+ uint64_t x95 = (x93 + x67);
+ uint64_t x96 = (x95 >> 0x1a);
+ uint32_t x97 = ((uint32_t)x95 & 0x3ffffff);
+ uint64_t x98 = (x96 + x66);
+ uint64_t x99 = (x98 >> 0x19);
+ uint32_t x100 = ((uint32_t)x98 & 0x1ffffff);
+ uint64_t x101 = (x99 + x65);
+ uint64_t x102 = (x101 >> 0x1a);
+ uint32_t x103 = ((uint32_t)x101 & 0x3ffffff);
+ uint64_t x104 = (x102 + x64);
+ uint64_t x105 = (x104 >> 0x19);
+ uint32_t x106 = ((uint32_t)x104 & 0x1ffffff);
+ uint64_t x107 = (x105 + x63);
+ uint64_t x108 = (x107 >> 0x1a);
+ uint32_t x109 = ((uint32_t)x107 & 0x3ffffff);
+ uint64_t x110 = (x108 + x62);
+ uint64_t x111 = (x110 >> 0x19);
+ uint32_t x112 = ((uint32_t)x110 & 0x1ffffff);
+ uint64_t x113 = (x111 + x61);
+ uint64_t x114 = (x113 >> 0x1a);
+ uint32_t x115 = ((uint32_t)x113 & 0x3ffffff);
+ uint64_t x116 = (x114 + x60);
+ uint64_t x117 = (x116 >> 0x19);
+ uint32_t x118 = ((uint32_t)x116 & 0x1ffffff);
+ uint64_t x119 = (x76 + (0x1f * x117));
+ uint32_t x120 = (uint32_t) (x119 >> 0x1a);
+ uint32_t x121 = ((uint32_t)x119 & 0x3ffffff);
+ uint32_t x122 = (x120 + x79);
+ uint32_t x123 = (x122 >> 0x1a);
+ uint32_t x124 = (x122 & 0x3ffffff);
+ return (Return x118, Return x115, Return x112, Return x109, Return x106, Return x103, Return x100, Return x97, Return x94, Return x91, Return x88, Return x85, (x123 + x82), Return x124, Return x121))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m31_16limbs/femul.c b/src/Specific/solinas32_2e383m31_16limbs/femul.c
new file mode 100644
index 000000000..3839457fa
--- /dev/null
+++ b/src/Specific/solinas32_2e383m31_16limbs/femul.c
@@ -0,0 +1,120 @@
+static void femul(uint32_t out[16], const uint32_t in1[16], const uint32_t in2[16]) {
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x62 = in2[15];
+ { const uint32_t x63 = in2[14];
+ { const uint32_t x61 = in2[13];
+ { const uint32_t x59 = in2[12];
+ { const uint32_t x57 = in2[11];
+ { const uint32_t x55 = in2[10];
+ { const uint32_t x53 = in2[9];
+ { const uint32_t x51 = in2[8];
+ { const uint32_t x49 = in2[7];
+ { const uint32_t x47 = in2[6];
+ { const uint32_t x45 = in2[5];
+ { const uint32_t x43 = in2[4];
+ { const uint32_t x41 = in2[3];
+ { const uint32_t x39 = in2[2];
+ { const uint32_t x37 = in2[1];
+ { const uint32_t x35 = in2[0];
+ { uint64_t x64 = (((uint64_t)x5 * x62) + (((uint64_t)x7 * x63) + (((uint64_t)x9 * x61) + (((uint64_t)x11 * x59) + (((uint64_t)x13 * x57) + (((uint64_t)x15 * x55) + (((uint64_t)x17 * x53) + (((uint64_t)x19 * x51) + (((uint64_t)x21 * x49) + (((uint64_t)x23 * x47) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + (((uint64_t)x29 * x41) + (((uint64_t)x31 * x39) + (((uint64_t)x33 * x37) + ((uint64_t)x32 * x35))))))))))))))));
+ { uint64_t x65 = ((((uint64_t)x5 * x63) + (((uint64_t)x7 * x61) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + (((uint64_t)x13 * x55) + (((uint64_t)x15 * x53) + (((uint64_t)x17 * x51) + (((uint64_t)x19 * x49) + (((uint64_t)x21 * x47) + (((uint64_t)x23 * x45) + (((uint64_t)x25 * x43) + (((uint64_t)x27 * x41) + (((uint64_t)x29 * x39) + (((uint64_t)x31 * x37) + ((uint64_t)x33 * x35))))))))))))))) + (0x1f * (0x2 * ((uint64_t)x32 * x62))));
+ { uint64_t x66 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + (((uint64_t)x29 * x37) + ((uint64_t)x31 * x35)))))))))))))) + (0x1f * ((0x2 * ((uint64_t)x33 * x62)) + (0x2 * ((uint64_t)x32 * x63)))));
+ { uint64_t x67 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + (((uint64_t)x9 * x55) + (((uint64_t)x11 * x53) + (((uint64_t)x13 * x51) + (((uint64_t)x15 * x49) + (((uint64_t)x17 * x47) + (((uint64_t)x19 * x45) + (((uint64_t)x21 * x43) + (((uint64_t)x23 * x41) + (((uint64_t)x25 * x39) + (((uint64_t)x27 * x37) + ((uint64_t)x29 * x35))))))))))))) + (0x1f * ((0x2 * ((uint64_t)x31 * x62)) + ((0x2 * ((uint64_t)x33 * x63)) + (0x2 * ((uint64_t)x32 * x61))))));
+ { uint64_t x68 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + (((uint64_t)x9 * x53) + (((uint64_t)x11 * x51) + (((uint64_t)x13 * x49) + (((uint64_t)x15 * x47) + (((uint64_t)x17 * x45) + (((uint64_t)x19 * x43) + (((uint64_t)x21 * x41) + (((uint64_t)x23 * x39) + (((uint64_t)x25 * x37) + ((uint64_t)x27 * x35)))))))))))) + (0x1f * ((0x2 * ((uint64_t)x29 * x62)) + ((0x2 * ((uint64_t)x31 * x63)) + ((0x2 * ((uint64_t)x33 * x61)) + (0x2 * ((uint64_t)x32 * x59)))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + (((uint64_t)x21 * x39) + (((uint64_t)x23 * x37) + ((uint64_t)x25 * x35))))))))))) + (0x1f * ((0x2 * ((uint64_t)x27 * x62)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + ((0x2 * ((uint64_t)x33 * x59)) + (0x2 * ((uint64_t)x32 * x57))))))));
+ { uint64_t x70 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + (((uint64_t)x9 * x49) + (((uint64_t)x11 * x47) + (((uint64_t)x13 * x45) + (((uint64_t)x15 * x43) + (((uint64_t)x17 * x41) + (((uint64_t)x19 * x39) + (((uint64_t)x21 * x37) + ((uint64_t)x23 * x35)))))))))) + (0x1f * ((0x2 * ((uint64_t)x25 * x62)) + ((0x2 * ((uint64_t)x27 * x63)) + ((0x2 * ((uint64_t)x29 * x61)) + ((0x2 * ((uint64_t)x31 * x59)) + ((0x2 * ((uint64_t)x33 * x57)) + (0x2 * ((uint64_t)x32 * x55)))))))));
+ { uint64_t x71 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + (((uint64_t)x13 * x43) + (((uint64_t)x15 * x41) + (((uint64_t)x17 * x39) + (((uint64_t)x19 * x37) + ((uint64_t)x21 * x35))))))))) + (0x1f * ((0x2 * ((uint64_t)x23 * x62)) + ((0x2 * ((uint64_t)x25 * x63)) + ((0x2 * ((uint64_t)x27 * x61)) + ((0x2 * ((uint64_t)x29 * x59)) + ((0x2 * ((uint64_t)x31 * x57)) + ((0x2 * ((uint64_t)x33 * x55)) + (0x2 * ((uint64_t)x32 * x53))))))))));
+ { uint64_t x72 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + (((uint64_t)x9 * x45) + (((uint64_t)x11 * x43) + (((uint64_t)x13 * x41) + (((uint64_t)x15 * x39) + (((uint64_t)x17 * x37) + ((uint64_t)x19 * x35)))))))) + (0x1f * ((0x2 * ((uint64_t)x21 * x62)) + ((0x2 * ((uint64_t)x23 * x63)) + ((0x2 * ((uint64_t)x25 * x61)) + ((0x2 * ((uint64_t)x27 * x59)) + ((0x2 * ((uint64_t)x29 * x57)) + ((0x2 * ((uint64_t)x31 * x55)) + ((0x2 * ((uint64_t)x33 * x53)) + (0x2 * ((uint64_t)x32 * x51)))))))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + (((uint64_t)x11 * x41) + (((uint64_t)x13 * x39) + (((uint64_t)x15 * x37) + ((uint64_t)x17 * x35))))))) + (0x1f * ((0x2 * ((uint64_t)x19 * x62)) + ((0x2 * ((uint64_t)x21 * x63)) + ((0x2 * ((uint64_t)x23 * x61)) + ((0x2 * ((uint64_t)x25 * x59)) + ((0x2 * ((uint64_t)x27 * x57)) + ((0x2 * ((uint64_t)x29 * x55)) + ((0x2 * ((uint64_t)x31 * x53)) + ((0x2 * ((uint64_t)x33 * x51)) + (0x2 * ((uint64_t)x32 * x49))))))))))));
+ { uint64_t x74 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + (((uint64_t)x9 * x41) + (((uint64_t)x11 * x39) + (((uint64_t)x13 * x37) + ((uint64_t)x15 * x35)))))) + (0x1f * ((0x2 * ((uint64_t)x17 * x62)) + ((0x2 * ((uint64_t)x19 * x63)) + ((0x2 * ((uint64_t)x21 * x61)) + ((0x2 * ((uint64_t)x23 * x59)) + ((0x2 * ((uint64_t)x25 * x57)) + ((0x2 * ((uint64_t)x27 * x55)) + ((0x2 * ((uint64_t)x29 * x53)) + ((0x2 * ((uint64_t)x31 * x51)) + ((0x2 * ((uint64_t)x33 * x49)) + (0x2 * ((uint64_t)x32 * x47)))))))))))));
+ { uint64_t x75 = ((((uint64_t)x5 * x43) + (((uint64_t)x7 * x41) + (((uint64_t)x9 * x39) + (((uint64_t)x11 * x37) + ((uint64_t)x13 * x35))))) + (0x1f * ((0x2 * ((uint64_t)x15 * x62)) + ((0x2 * ((uint64_t)x17 * x63)) + ((0x2 * ((uint64_t)x19 * x61)) + ((0x2 * ((uint64_t)x21 * x59)) + ((0x2 * ((uint64_t)x23 * x57)) + ((0x2 * ((uint64_t)x25 * x55)) + ((0x2 * ((uint64_t)x27 * x53)) + ((0x2 * ((uint64_t)x29 * x51)) + ((0x2 * ((uint64_t)x31 * x49)) + ((0x2 * ((uint64_t)x33 * x47)) + (0x2 * ((uint64_t)x32 * x45))))))))))))));
+ { uint64_t x76 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + ((uint64_t)x11 * x35)))) + (0x1f * ((0x2 * ((uint64_t)x13 * x62)) + ((0x2 * ((uint64_t)x15 * x63)) + ((0x2 * ((uint64_t)x17 * x61)) + ((0x2 * ((uint64_t)x19 * x59)) + ((0x2 * ((uint64_t)x21 * x57)) + ((0x2 * ((uint64_t)x23 * x55)) + ((0x2 * ((uint64_t)x25 * x53)) + ((0x2 * ((uint64_t)x27 * x51)) + ((0x2 * ((uint64_t)x29 * x49)) + ((0x2 * ((uint64_t)x31 * x47)) + ((0x2 * ((uint64_t)x33 * x45)) + (0x2 * ((uint64_t)x32 * x43)))))))))))))));
+ { uint64_t x77 = ((((uint64_t)x5 * x39) + (((uint64_t)x7 * x37) + ((uint64_t)x9 * x35))) + (0x1f * ((0x2 * ((uint64_t)x11 * x62)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + (0x2 * ((uint64_t)x32 * x41))))))))))))))));
+ { uint64_t x78 = ((((uint64_t)x5 * x37) + ((uint64_t)x7 * x35)) + (0x1f * ((0x2 * ((uint64_t)x9 * x62)) + ((0x2 * ((uint64_t)x11 * x63)) + ((0x2 * ((uint64_t)x13 * x61)) + ((0x2 * ((uint64_t)x15 * x59)) + ((0x2 * ((uint64_t)x17 * x57)) + ((0x2 * ((uint64_t)x19 * x55)) + ((0x2 * ((uint64_t)x21 * x53)) + ((0x2 * ((uint64_t)x23 * x51)) + ((0x2 * ((uint64_t)x25 * x49)) + ((0x2 * ((uint64_t)x27 * x47)) + ((0x2 * ((uint64_t)x29 * x45)) + ((0x2 * ((uint64_t)x31 * x43)) + ((0x2 * ((uint64_t)x33 * x41)) + (0x2 * ((uint64_t)x32 * x39)))))))))))))))));
+ { uint64_t x79 = (((uint64_t)x5 * x35) + (0x1f * ((0x2 * ((uint64_t)x7 * x62)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + (0x2 * ((uint64_t)x32 * x37))))))))))))))))));
+ { uint64_t x80 = (x79 >> 0x18);
+ { uint32_t x81 = ((uint32_t)x79 & 0xffffff);
+ { uint64_t x82 = (x80 + x78);
+ { uint64_t x83 = (x82 >> 0x18);
+ { uint32_t x84 = ((uint32_t)x82 & 0xffffff);
+ { uint64_t x85 = (x83 + x77);
+ { uint64_t x86 = (x85 >> 0x18);
+ { uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ { uint64_t x88 = (x86 + x76);
+ { uint64_t x89 = (x88 >> 0x18);
+ { uint32_t x90 = ((uint32_t)x88 & 0xffffff);
+ { uint64_t x91 = (x89 + x75);
+ { uint64_t x92 = (x91 >> 0x18);
+ { uint32_t x93 = ((uint32_t)x91 & 0xffffff);
+ { uint64_t x94 = (x92 + x74);
+ { uint64_t x95 = (x94 >> 0x18);
+ { uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ { uint64_t x97 = (x95 + x73);
+ { uint64_t x98 = (x97 >> 0x18);
+ { uint32_t x99 = ((uint32_t)x97 & 0xffffff);
+ { uint64_t x100 = (x98 + x72);
+ { uint64_t x101 = (x100 >> 0x18);
+ { uint32_t x102 = ((uint32_t)x100 & 0xffffff);
+ { uint64_t x103 = (x101 + x71);
+ { uint64_t x104 = (x103 >> 0x18);
+ { uint32_t x105 = ((uint32_t)x103 & 0xffffff);
+ { uint64_t x106 = (x104 + x70);
+ { uint64_t x107 = (x106 >> 0x18);
+ { uint32_t x108 = ((uint32_t)x106 & 0xffffff);
+ { uint64_t x109 = (x107 + x69);
+ { uint64_t x110 = (x109 >> 0x18);
+ { uint32_t x111 = ((uint32_t)x109 & 0xffffff);
+ { uint64_t x112 = (x110 + x68);
+ { uint64_t x113 = (x112 >> 0x18);
+ { uint32_t x114 = ((uint32_t)x112 & 0xffffff);
+ { uint64_t x115 = (x113 + x67);
+ { uint64_t x116 = (x115 >> 0x18);
+ { uint32_t x117 = ((uint32_t)x115 & 0xffffff);
+ { uint64_t x118 = (x116 + x66);
+ { uint64_t x119 = (x118 >> 0x18);
+ { uint32_t x120 = ((uint32_t)x118 & 0xffffff);
+ { uint64_t x121 = (x119 + x65);
+ { uint64_t x122 = (x121 >> 0x18);
+ { uint32_t x123 = ((uint32_t)x121 & 0xffffff);
+ { uint64_t x124 = (x122 + x64);
+ { uint64_t x125 = (x124 >> 0x17);
+ { uint32_t x126 = ((uint32_t)x124 & 0x7fffff);
+ { uint64_t x127 = (x81 + (0x1f * x125));
+ { uint32_t x128 = (uint32_t) (x127 >> 0x18);
+ { uint32_t x129 = ((uint32_t)x127 & 0xffffff);
+ { uint32_t x130 = (x128 + x84);
+ { uint32_t x131 = (x130 >> 0x18);
+ { uint32_t x132 = (x130 & 0xffffff);
+ out[0] = x129;
+ out[1] = x132;
+ out[2] = (x131 + x87);
+ out[3] = x90;
+ out[4] = x93;
+ out[5] = x96;
+ out[6] = x99;
+ out[7] = x102;
+ out[8] = x105;
+ out[9] = x108;
+ out[10] = x111;
+ out[11] = x114;
+ out[12] = x117;
+ out[13] = x120;
+ out[14] = x123;
+ out[15] = x126;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e383m31_16limbs/femulDisplay.log b/src/Specific/solinas32_2e383m31_16limbs/femulDisplay.log
new file mode 100644
index 000000000..dfca6c5ed
--- /dev/null
+++ b/src/Specific/solinas32_2e383m31_16limbs/femulDisplay.log
@@ -0,0 +1,76 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x32, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x62, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35))%core,
+ uint64_t x64 = (((uint64_t)x5 * x62) + (((uint64_t)x7 * x63) + (((uint64_t)x9 * x61) + (((uint64_t)x11 * x59) + (((uint64_t)x13 * x57) + (((uint64_t)x15 * x55) + (((uint64_t)x17 * x53) + (((uint64_t)x19 * x51) + (((uint64_t)x21 * x49) + (((uint64_t)x23 * x47) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + (((uint64_t)x29 * x41) + (((uint64_t)x31 * x39) + (((uint64_t)x33 * x37) + ((uint64_t)x32 * x35))))))))))))))));
+ uint64_t x65 = ((((uint64_t)x5 * x63) + (((uint64_t)x7 * x61) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + (((uint64_t)x13 * x55) + (((uint64_t)x15 * x53) + (((uint64_t)x17 * x51) + (((uint64_t)x19 * x49) + (((uint64_t)x21 * x47) + (((uint64_t)x23 * x45) + (((uint64_t)x25 * x43) + (((uint64_t)x27 * x41) + (((uint64_t)x29 * x39) + (((uint64_t)x31 * x37) + ((uint64_t)x33 * x35))))))))))))))) + (0x1f * (0x2 * ((uint64_t)x32 * x62))));
+ uint64_t x66 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + (((uint64_t)x29 * x37) + ((uint64_t)x31 * x35)))))))))))))) + (0x1f * ((0x2 * ((uint64_t)x33 * x62)) + (0x2 * ((uint64_t)x32 * x63)))));
+ uint64_t x67 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + (((uint64_t)x9 * x55) + (((uint64_t)x11 * x53) + (((uint64_t)x13 * x51) + (((uint64_t)x15 * x49) + (((uint64_t)x17 * x47) + (((uint64_t)x19 * x45) + (((uint64_t)x21 * x43) + (((uint64_t)x23 * x41) + (((uint64_t)x25 * x39) + (((uint64_t)x27 * x37) + ((uint64_t)x29 * x35))))))))))))) + (0x1f * ((0x2 * ((uint64_t)x31 * x62)) + ((0x2 * ((uint64_t)x33 * x63)) + (0x2 * ((uint64_t)x32 * x61))))));
+ uint64_t x68 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + (((uint64_t)x9 * x53) + (((uint64_t)x11 * x51) + (((uint64_t)x13 * x49) + (((uint64_t)x15 * x47) + (((uint64_t)x17 * x45) + (((uint64_t)x19 * x43) + (((uint64_t)x21 * x41) + (((uint64_t)x23 * x39) + (((uint64_t)x25 * x37) + ((uint64_t)x27 * x35)))))))))))) + (0x1f * ((0x2 * ((uint64_t)x29 * x62)) + ((0x2 * ((uint64_t)x31 * x63)) + ((0x2 * ((uint64_t)x33 * x61)) + (0x2 * ((uint64_t)x32 * x59)))))));
+ uint64_t x69 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + (((uint64_t)x21 * x39) + (((uint64_t)x23 * x37) + ((uint64_t)x25 * x35))))))))))) + (0x1f * ((0x2 * ((uint64_t)x27 * x62)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + ((0x2 * ((uint64_t)x33 * x59)) + (0x2 * ((uint64_t)x32 * x57))))))));
+ uint64_t x70 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + (((uint64_t)x9 * x49) + (((uint64_t)x11 * x47) + (((uint64_t)x13 * x45) + (((uint64_t)x15 * x43) + (((uint64_t)x17 * x41) + (((uint64_t)x19 * x39) + (((uint64_t)x21 * x37) + ((uint64_t)x23 * x35)))))))))) + (0x1f * ((0x2 * ((uint64_t)x25 * x62)) + ((0x2 * ((uint64_t)x27 * x63)) + ((0x2 * ((uint64_t)x29 * x61)) + ((0x2 * ((uint64_t)x31 * x59)) + ((0x2 * ((uint64_t)x33 * x57)) + (0x2 * ((uint64_t)x32 * x55)))))))));
+ uint64_t x71 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + (((uint64_t)x13 * x43) + (((uint64_t)x15 * x41) + (((uint64_t)x17 * x39) + (((uint64_t)x19 * x37) + ((uint64_t)x21 * x35))))))))) + (0x1f * ((0x2 * ((uint64_t)x23 * x62)) + ((0x2 * ((uint64_t)x25 * x63)) + ((0x2 * ((uint64_t)x27 * x61)) + ((0x2 * ((uint64_t)x29 * x59)) + ((0x2 * ((uint64_t)x31 * x57)) + ((0x2 * ((uint64_t)x33 * x55)) + (0x2 * ((uint64_t)x32 * x53))))))))));
+ uint64_t x72 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + (((uint64_t)x9 * x45) + (((uint64_t)x11 * x43) + (((uint64_t)x13 * x41) + (((uint64_t)x15 * x39) + (((uint64_t)x17 * x37) + ((uint64_t)x19 * x35)))))))) + (0x1f * ((0x2 * ((uint64_t)x21 * x62)) + ((0x2 * ((uint64_t)x23 * x63)) + ((0x2 * ((uint64_t)x25 * x61)) + ((0x2 * ((uint64_t)x27 * x59)) + ((0x2 * ((uint64_t)x29 * x57)) + ((0x2 * ((uint64_t)x31 * x55)) + ((0x2 * ((uint64_t)x33 * x53)) + (0x2 * ((uint64_t)x32 * x51)))))))))));
+ uint64_t x73 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + (((uint64_t)x11 * x41) + (((uint64_t)x13 * x39) + (((uint64_t)x15 * x37) + ((uint64_t)x17 * x35))))))) + (0x1f * ((0x2 * ((uint64_t)x19 * x62)) + ((0x2 * ((uint64_t)x21 * x63)) + ((0x2 * ((uint64_t)x23 * x61)) + ((0x2 * ((uint64_t)x25 * x59)) + ((0x2 * ((uint64_t)x27 * x57)) + ((0x2 * ((uint64_t)x29 * x55)) + ((0x2 * ((uint64_t)x31 * x53)) + ((0x2 * ((uint64_t)x33 * x51)) + (0x2 * ((uint64_t)x32 * x49))))))))))));
+ uint64_t x74 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + (((uint64_t)x9 * x41) + (((uint64_t)x11 * x39) + (((uint64_t)x13 * x37) + ((uint64_t)x15 * x35)))))) + (0x1f * ((0x2 * ((uint64_t)x17 * x62)) + ((0x2 * ((uint64_t)x19 * x63)) + ((0x2 * ((uint64_t)x21 * x61)) + ((0x2 * ((uint64_t)x23 * x59)) + ((0x2 * ((uint64_t)x25 * x57)) + ((0x2 * ((uint64_t)x27 * x55)) + ((0x2 * ((uint64_t)x29 * x53)) + ((0x2 * ((uint64_t)x31 * x51)) + ((0x2 * ((uint64_t)x33 * x49)) + (0x2 * ((uint64_t)x32 * x47)))))))))))));
+ uint64_t x75 = ((((uint64_t)x5 * x43) + (((uint64_t)x7 * x41) + (((uint64_t)x9 * x39) + (((uint64_t)x11 * x37) + ((uint64_t)x13 * x35))))) + (0x1f * ((0x2 * ((uint64_t)x15 * x62)) + ((0x2 * ((uint64_t)x17 * x63)) + ((0x2 * ((uint64_t)x19 * x61)) + ((0x2 * ((uint64_t)x21 * x59)) + ((0x2 * ((uint64_t)x23 * x57)) + ((0x2 * ((uint64_t)x25 * x55)) + ((0x2 * ((uint64_t)x27 * x53)) + ((0x2 * ((uint64_t)x29 * x51)) + ((0x2 * ((uint64_t)x31 * x49)) + ((0x2 * ((uint64_t)x33 * x47)) + (0x2 * ((uint64_t)x32 * x45))))))))))))));
+ uint64_t x76 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + ((uint64_t)x11 * x35)))) + (0x1f * ((0x2 * ((uint64_t)x13 * x62)) + ((0x2 * ((uint64_t)x15 * x63)) + ((0x2 * ((uint64_t)x17 * x61)) + ((0x2 * ((uint64_t)x19 * x59)) + ((0x2 * ((uint64_t)x21 * x57)) + ((0x2 * ((uint64_t)x23 * x55)) + ((0x2 * ((uint64_t)x25 * x53)) + ((0x2 * ((uint64_t)x27 * x51)) + ((0x2 * ((uint64_t)x29 * x49)) + ((0x2 * ((uint64_t)x31 * x47)) + ((0x2 * ((uint64_t)x33 * x45)) + (0x2 * ((uint64_t)x32 * x43)))))))))))))));
+ uint64_t x77 = ((((uint64_t)x5 * x39) + (((uint64_t)x7 * x37) + ((uint64_t)x9 * x35))) + (0x1f * ((0x2 * ((uint64_t)x11 * x62)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + (0x2 * ((uint64_t)x32 * x41))))))))))))))));
+ uint64_t x78 = ((((uint64_t)x5 * x37) + ((uint64_t)x7 * x35)) + (0x1f * ((0x2 * ((uint64_t)x9 * x62)) + ((0x2 * ((uint64_t)x11 * x63)) + ((0x2 * ((uint64_t)x13 * x61)) + ((0x2 * ((uint64_t)x15 * x59)) + ((0x2 * ((uint64_t)x17 * x57)) + ((0x2 * ((uint64_t)x19 * x55)) + ((0x2 * ((uint64_t)x21 * x53)) + ((0x2 * ((uint64_t)x23 * x51)) + ((0x2 * ((uint64_t)x25 * x49)) + ((0x2 * ((uint64_t)x27 * x47)) + ((0x2 * ((uint64_t)x29 * x45)) + ((0x2 * ((uint64_t)x31 * x43)) + ((0x2 * ((uint64_t)x33 * x41)) + (0x2 * ((uint64_t)x32 * x39)))))))))))))))));
+ uint64_t x79 = (((uint64_t)x5 * x35) + (0x1f * ((0x2 * ((uint64_t)x7 * x62)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + (0x2 * ((uint64_t)x32 * x37))))))))))))))))));
+ uint64_t x80 = (x79 >> 0x18);
+ uint32_t x81 = ((uint32_t)x79 & 0xffffff);
+ uint64_t x82 = (x80 + x78);
+ uint64_t x83 = (x82 >> 0x18);
+ uint32_t x84 = ((uint32_t)x82 & 0xffffff);
+ uint64_t x85 = (x83 + x77);
+ uint64_t x86 = (x85 >> 0x18);
+ uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ uint64_t x88 = (x86 + x76);
+ uint64_t x89 = (x88 >> 0x18);
+ uint32_t x90 = ((uint32_t)x88 & 0xffffff);
+ uint64_t x91 = (x89 + x75);
+ uint64_t x92 = (x91 >> 0x18);
+ uint32_t x93 = ((uint32_t)x91 & 0xffffff);
+ uint64_t x94 = (x92 + x74);
+ uint64_t x95 = (x94 >> 0x18);
+ uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ uint64_t x97 = (x95 + x73);
+ uint64_t x98 = (x97 >> 0x18);
+ uint32_t x99 = ((uint32_t)x97 & 0xffffff);
+ uint64_t x100 = (x98 + x72);
+ uint64_t x101 = (x100 >> 0x18);
+ uint32_t x102 = ((uint32_t)x100 & 0xffffff);
+ uint64_t x103 = (x101 + x71);
+ uint64_t x104 = (x103 >> 0x18);
+ uint32_t x105 = ((uint32_t)x103 & 0xffffff);
+ uint64_t x106 = (x104 + x70);
+ uint64_t x107 = (x106 >> 0x18);
+ uint32_t x108 = ((uint32_t)x106 & 0xffffff);
+ uint64_t x109 = (x107 + x69);
+ uint64_t x110 = (x109 >> 0x18);
+ uint32_t x111 = ((uint32_t)x109 & 0xffffff);
+ uint64_t x112 = (x110 + x68);
+ uint64_t x113 = (x112 >> 0x18);
+ uint32_t x114 = ((uint32_t)x112 & 0xffffff);
+ uint64_t x115 = (x113 + x67);
+ uint64_t x116 = (x115 >> 0x18);
+ uint32_t x117 = ((uint32_t)x115 & 0xffffff);
+ uint64_t x118 = (x116 + x66);
+ uint64_t x119 = (x118 >> 0x18);
+ uint32_t x120 = ((uint32_t)x118 & 0xffffff);
+ uint64_t x121 = (x119 + x65);
+ uint64_t x122 = (x121 >> 0x18);
+ uint32_t x123 = ((uint32_t)x121 & 0xffffff);
+ uint64_t x124 = (x122 + x64);
+ uint64_t x125 = (x124 >> 0x17);
+ uint32_t x126 = ((uint32_t)x124 & 0x7fffff);
+ uint64_t x127 = (x81 + (0x1f * x125));
+ uint32_t x128 = (uint32_t) (x127 >> 0x18);
+ uint32_t x129 = ((uint32_t)x127 & 0xffffff);
+ uint32_t x130 = (x128 + x84);
+ uint32_t x131 = (x130 >> 0x18);
+ uint32_t x132 = (x130 & 0xffffff);
+ return (Return x126, Return x123, Return x120, Return x117, Return x114, Return x111, Return x108, Return x105, Return x102, Return x99, Return x96, Return x93, Return x90, (x131 + x87), Return x132, Return x129))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m31_16limbs/fesub.c b/src/Specific/solinas32_2e383m31_16limbs/fesub.c
index a5bcdb840..39e6e058d 100644
--- a/src/Specific/solinas32_2e383m31_16limbs/fesub.c
+++ b/src/Specific/solinas32_2e383m31_16limbs/fesub.c
@@ -31,7 +31,7 @@ static void fesub(uint32_t out[16], const uint32_t in1[16], const uint32_t in2[1
{ const uint32_t x39 = in2[2];
{ const uint32_t x37 = in2[1];
{ const uint32_t x35 = in2[0];
- out[0] = ((Const 33554370 + x5) - x35);
+ out[0] = ((0x1ffffc2 + x5) - x35);
out[1] = ((0x1fffffe + x7) - x37);
out[2] = ((0x1fffffe + x9) - x39);
out[3] = ((0x1fffffe + x11) - x41);
diff --git a/src/Specific/solinas32_2e383m31_16limbs/fesubDisplay.log b/src/Specific/solinas32_2e383m31_16limbs/fesubDisplay.log
index dcb1b2bb8..c69661de5 100644
--- a/src/Specific/solinas32_2e383m31_16limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e383m31_16limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x32, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x62, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35))%core,
- (((0xfffffe + x32) - x62), ((0x1fffffe + x33) - x63), ((0x1fffffe + x31) - x61), ((0x1fffffe + x29) - x59), ((0x1fffffe + x27) - x57), ((0x1fffffe + x25) - x55), ((0x1fffffe + x23) - x53), ((0x1fffffe + x21) - x51), ((0x1fffffe + x19) - x49), ((0x1fffffe + x17) - x47), ((0x1fffffe + x15) - x45), ((0x1fffffe + x13) - x43), ((0x1fffffe + x11) - x41), ((0x1fffffe + x9) - x39), ((0x1fffffe + x7) - x37), ((Const 33554370 + x5) - x35)))
+ (((0xfffffe + x32) - x62), ((0x1fffffe + x33) - x63), ((0x1fffffe + x31) - x61), ((0x1fffffe + x29) - x59), ((0x1fffffe + x27) - x57), ((0x1fffffe + x25) - x55), ((0x1fffffe + x23) - x53), ((0x1fffffe + x21) - x51), ((0x1fffffe + x19) - x49), ((0x1fffffe + x17) - x47), ((0x1fffffe + x15) - x45), ((0x1fffffe + x13) - x43), ((0x1fffffe + x11) - x41), ((0x1fffffe + x9) - x39), ((0x1fffffe + x7) - x37), ((0x1ffffc2 + x5) - x35)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m31_16limbs/freeze.c b/src/Specific/solinas32_2e383m31_16limbs/freeze.c
index 89807db42..ca1ac094c 100644
--- a/src/Specific/solinas32_2e383m31_16limbs/freeze.c
+++ b/src/Specific/solinas32_2e383m31_16limbs/freeze.c
@@ -15,7 +15,7 @@ static void freeze(uint32_t out[16], const uint32_t in1[16]) {
{ const uint32_t x6 = in1[2];
{ const uint32_t x4 = in1[1];
{ const uint32_t x2 = in1[0];
- { uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 16777185);
+ { uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xffffe1);
{ uint32_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x33, Return x4, 0xffffff);
{ uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x36, Return x6, 0xffffff);
{ uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x8, 0xffffff);
@@ -32,7 +32,7 @@ static void freeze(uint32_t out[16], const uint32_t in1[16]) {
{ uint32_t x74, uint8_t x75 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x72, Return x30, 0xffffff);
{ uint32_t x77, uint8_t x78 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x75, Return x29, 0x7fffff);
{ uint32_t x79 = cmovznz32(x78, 0x0, 0xffffffff);
- { uint32_t x80 = (x79 & Const 16777185);
+ { uint32_t x80 = (x79 & 0xffffe1);
{ uint32_t x82, uint8_t x83 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x32, Return x80);
{ uint32_t x84 = (x79 & 0xffffff);
{ uint32_t x86, uint8_t x87 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x35, Return x84);
diff --git a/src/Specific/solinas32_2e383m31_16limbs/freezeDisplay.log b/src/Specific/solinas32_2e383m31_16limbs/freezeDisplay.log
index cd592cb23..ca55d2622 100644
--- a/src/Specific/solinas32_2e383m31_16limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e383m31_16limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x29, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 16777185);
+ uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xffffe1);
uint32_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x33, Return x4, 0xffffff);
uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x36, Return x6, 0xffffff);
uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x8, 0xffffff);
@@ -19,7 +19,7 @@ Interp-η
uint32_t x74, uint8_t x75 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x72, Return x30, 0xffffff);
uint32_t x77, uint8_t x78 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x75, Return x29, 0x7fffff);
uint32_t x79 = cmovznz32(x78, 0x0, 0xffffffff);
- uint32_t x80 = (x79 & Const 16777185);
+ uint32_t x80 = (x79 & 0xffffe1);
uint32_t x82, uint8_t x83 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x32, Return x80);
uint32_t x84 = (x79 & 0xffffff);
uint32_t x86, uint8_t x87 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x35, Return x84);
diff --git a/src/Specific/solinas32_2e383m421_17limbs/femul.c b/src/Specific/solinas32_2e383m421_17limbs/femul.c
new file mode 100644
index 000000000..842b06fac
--- /dev/null
+++ b/src/Specific/solinas32_2e383m421_17limbs/femul.c
@@ -0,0 +1,127 @@
+static void femul(uint32_t out[17], const uint32_t in1[17], const uint32_t in2[17]) {
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x66 = in2[16];
+ { const uint32_t x67 = in2[15];
+ { const uint32_t x65 = in2[14];
+ { const uint32_t x63 = in2[13];
+ { const uint32_t x61 = in2[12];
+ { const uint32_t x59 = in2[11];
+ { const uint32_t x57 = in2[10];
+ { const uint32_t x55 = in2[9];
+ { const uint32_t x53 = in2[8];
+ { const uint32_t x51 = in2[7];
+ { const uint32_t x49 = in2[6];
+ { const uint32_t x47 = in2[5];
+ { const uint32_t x45 = in2[4];
+ { const uint32_t x43 = in2[3];
+ { const uint32_t x41 = in2[2];
+ { const uint32_t x39 = in2[1];
+ { const uint32_t x37 = in2[0];
+ { uint64_t x68 = (((uint64_t)x5 * x66) + (((uint64_t)x7 * x67) + ((0x2 * ((uint64_t)x9 * x65)) + (((uint64_t)x11 * x63) + ((0x2 * ((uint64_t)x13 * x61)) + (((uint64_t)x15 * x59) + ((0x2 * ((uint64_t)x17 * x57)) + (((uint64_t)x19 * x55) + ((0x2 * ((uint64_t)x21 * x53)) + (((uint64_t)x23 * x51) + ((0x2 * ((uint64_t)x25 * x49)) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + (((uint64_t)x31 * x43) + ((0x2 * ((uint64_t)x33 * x41)) + (((uint64_t)x35 * x39) + ((uint64_t)x34 * x37)))))))))))))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x67) + ((0x2 * ((uint64_t)x7 * x65)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + ((uint64_t)x35 * x37)))))))))))))))) + (0x1a5 * (0x2 * ((uint64_t)x34 * x66))));
+ { uint64_t x70 = ((((uint64_t)x5 * x65) + (((uint64_t)x7 * x63) + ((0x2 * ((uint64_t)x9 * x61)) + (((uint64_t)x11 * x59) + ((0x2 * ((uint64_t)x13 * x57)) + (((uint64_t)x15 * x55) + ((0x2 * ((uint64_t)x17 * x53)) + (((uint64_t)x19 * x51) + ((0x2 * ((uint64_t)x21 * x49)) + (((uint64_t)x23 * x47) + ((0x2 * ((uint64_t)x25 * x45)) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + ((uint64_t)x33 * x37))))))))))))))) + (0x1a5 * (((uint64_t)x35 * x66) + ((uint64_t)x34 * x67))));
+ { uint64_t x71 = ((((uint64_t)x5 * x63) + ((0x2 * ((uint64_t)x7 * x61)) + ((0x2 * ((uint64_t)x9 * x59)) + ((0x2 * ((uint64_t)x11 * x57)) + ((0x2 * ((uint64_t)x13 * x55)) + ((0x2 * ((uint64_t)x15 * x53)) + ((0x2 * ((uint64_t)x17 * x51)) + ((0x2 * ((uint64_t)x19 * x49)) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + ((0x2 * ((uint64_t)x25 * x43)) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + ((uint64_t)x31 * x37)))))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x33 * x66)) + (((uint64_t)x35 * x67) + (0x2 * ((uint64_t)x34 * x65))))));
+ { uint64_t x72 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + ((0x2 * ((uint64_t)x9 * x57)) + (((uint64_t)x11 * x55) + ((0x2 * ((uint64_t)x13 * x53)) + (((uint64_t)x15 * x51) + ((0x2 * ((uint64_t)x17 * x49)) + (((uint64_t)x19 * x47) + ((0x2 * ((uint64_t)x21 * x45)) + (((uint64_t)x23 * x43) + ((0x2 * ((uint64_t)x25 * x41)) + (((uint64_t)x27 * x39) + ((uint64_t)x29 * x37))))))))))))) + (0x1a5 * (((uint64_t)x31 * x66) + (((uint64_t)x33 * x67) + (((uint64_t)x35 * x65) + ((uint64_t)x34 * x63))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x59) + ((0x2 * ((uint64_t)x7 * x57)) + ((0x2 * ((uint64_t)x9 * x55)) + ((0x2 * ((uint64_t)x11 * x53)) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + ((0x2 * ((uint64_t)x17 * x47)) + ((0x2 * ((uint64_t)x19 * x45)) + ((0x2 * ((uint64_t)x21 * x43)) + ((0x2 * ((uint64_t)x23 * x41)) + ((0x2 * ((uint64_t)x25 * x39)) + ((uint64_t)x27 * x37)))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x29 * x66)) + (((uint64_t)x31 * x67) + ((0x2 * ((uint64_t)x33 * x65)) + (((uint64_t)x35 * x63) + (0x2 * ((uint64_t)x34 * x61))))))));
+ { uint64_t x74 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + ((0x2 * ((uint64_t)x9 * x53)) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + ((0x2 * ((uint64_t)x17 * x45)) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + (((uint64_t)x23 * x39) + ((uint64_t)x25 * x37))))))))))) + (0x1a5 * (((uint64_t)x27 * x66) + (((uint64_t)x29 * x67) + (((uint64_t)x31 * x65) + (((uint64_t)x33 * x63) + (((uint64_t)x35 * x61) + ((uint64_t)x34 * x59))))))));
+ { uint64_t x75 = ((((uint64_t)x5 * x55) + ((0x2 * ((uint64_t)x7 * x53)) + ((0x2 * ((uint64_t)x9 * x51)) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + ((0x2 * ((uint64_t)x21 * x39)) + ((uint64_t)x23 * x37)))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x25 * x66)) + (((uint64_t)x27 * x67) + ((0x2 * ((uint64_t)x29 * x65)) + (((uint64_t)x31 * x63) + ((0x2 * ((uint64_t)x33 * x61)) + (((uint64_t)x35 * x59) + (0x2 * ((uint64_t)x34 * x57))))))))));
+ { uint64_t x76 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + (((uint64_t)x19 * x39) + ((uint64_t)x21 * x37))))))))) + (0x1a5 * (((uint64_t)x23 * x66) + (((uint64_t)x25 * x67) + (((uint64_t)x27 * x65) + (((uint64_t)x29 * x63) + (((uint64_t)x31 * x61) + (((uint64_t)x33 * x59) + (((uint64_t)x35 * x57) + ((uint64_t)x34 * x55))))))))));
+ { uint64_t x77 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + ((0x2 * ((uint64_t)x9 * x47)) + ((0x2 * ((uint64_t)x11 * x45)) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + ((0x2 * ((uint64_t)x17 * x39)) + ((uint64_t)x19 * x37)))))))) + (0x1a5 * ((0x2 * ((uint64_t)x21 * x66)) + (((uint64_t)x23 * x67) + ((0x2 * ((uint64_t)x25 * x65)) + (((uint64_t)x27 * x63) + ((0x2 * ((uint64_t)x29 * x61)) + (((uint64_t)x31 * x59) + ((0x2 * ((uint64_t)x33 * x57)) + (((uint64_t)x35 * x55) + (0x2 * ((uint64_t)x34 * x53))))))))))));
+ { uint64_t x78 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + ((0x2 * ((uint64_t)x9 * x45)) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + (((uint64_t)x15 * x39) + ((uint64_t)x17 * x37))))))) + (0x1a5 * (((uint64_t)x19 * x66) + (((uint64_t)x21 * x67) + (((uint64_t)x23 * x65) + (((uint64_t)x25 * x63) + (((uint64_t)x27 * x61) + (((uint64_t)x29 * x59) + (((uint64_t)x31 * x57) + (((uint64_t)x33 * x55) + (((uint64_t)x35 * x53) + ((uint64_t)x34 * x51))))))))))));
+ { uint64_t x79 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((uint64_t)x15 * x37)))))) + (0x1a5 * ((0x2 * ((uint64_t)x17 * x66)) + (((uint64_t)x19 * x67) + ((0x2 * ((uint64_t)x21 * x65)) + (((uint64_t)x23 * x63) + ((0x2 * ((uint64_t)x25 * x61)) + (((uint64_t)x27 * x59) + ((0x2 * ((uint64_t)x29 * x57)) + (((uint64_t)x31 * x55) + ((0x2 * ((uint64_t)x33 * x53)) + (((uint64_t)x35 * x51) + (0x2 * ((uint64_t)x34 * x49))))))))))))));
+ { uint64_t x80 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + (((uint64_t)x11 * x39) + ((uint64_t)x13 * x37))))) + (0x1a5 * (((uint64_t)x15 * x66) + (((uint64_t)x17 * x67) + (((uint64_t)x19 * x65) + (((uint64_t)x21 * x63) + (((uint64_t)x23 * x61) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + (((uint64_t)x29 * x55) + (((uint64_t)x31 * x53) + (((uint64_t)x33 * x51) + (((uint64_t)x35 * x49) + ((uint64_t)x34 * x47))))))))))))));
+ { uint64_t x81 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((uint64_t)x11 * x37)))) + (0x1a5 * ((0x2 * ((uint64_t)x13 * x66)) + (((uint64_t)x15 * x67) + ((0x2 * ((uint64_t)x17 * x65)) + (((uint64_t)x19 * x63) + ((0x2 * ((uint64_t)x21 * x61)) + (((uint64_t)x23 * x59) + ((0x2 * ((uint64_t)x25 * x57)) + (((uint64_t)x27 * x55) + ((0x2 * ((uint64_t)x29 * x53)) + (((uint64_t)x31 * x51) + ((0x2 * ((uint64_t)x33 * x49)) + (((uint64_t)x35 * x47) + (0x2 * ((uint64_t)x34 * x45))))))))))))))));
+ { uint64_t x82 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + ((uint64_t)x9 * x37))) + (0x1a5 * (((uint64_t)x11 * x66) + (((uint64_t)x13 * x67) + (((uint64_t)x15 * x65) + (((uint64_t)x17 * x63) + (((uint64_t)x19 * x61) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + (((uint64_t)x29 * x51) + (((uint64_t)x31 * x49) + (((uint64_t)x33 * x47) + (((uint64_t)x35 * x45) + ((uint64_t)x34 * x43))))))))))))))));
+ { uint64_t x83 = ((((uint64_t)x5 * x39) + ((uint64_t)x7 * x37)) + (0x1a5 * ((0x2 * ((uint64_t)x9 * x66)) + (((uint64_t)x11 * x67) + ((0x2 * ((uint64_t)x13 * x65)) + (((uint64_t)x15 * x63) + ((0x2 * ((uint64_t)x17 * x61)) + (((uint64_t)x19 * x59) + ((0x2 * ((uint64_t)x21 * x57)) + (((uint64_t)x23 * x55) + ((0x2 * ((uint64_t)x25 * x53)) + (((uint64_t)x27 * x51) + ((0x2 * ((uint64_t)x29 * x49)) + (((uint64_t)x31 * x47) + ((0x2 * ((uint64_t)x33 * x45)) + (((uint64_t)x35 * x43) + (0x2 * ((uint64_t)x34 * x41))))))))))))))))));
+ { uint64_t x84 = (((uint64_t)x5 * x37) + (0x1a5 * ((0x2 * ((uint64_t)x7 * x66)) + ((0x2 * ((uint64_t)x9 * x67)) + ((0x2 * ((uint64_t)x11 * x65)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + ((0x2 * ((uint64_t)x35 * x41)) + (0x2 * ((uint64_t)x34 * x39)))))))))))))))))));
+ { uint64_t x85 = (x84 >> 0x17);
+ { uint32_t x86 = ((uint32_t)x84 & 0x7fffff);
+ { uint64_t x87 = (x85 + x83);
+ { uint64_t x88 = (x87 >> 0x17);
+ { uint32_t x89 = ((uint32_t)x87 & 0x7fffff);
+ { uint64_t x90 = (x88 + x82);
+ { uint64_t x91 = (x90 >> 0x16);
+ { uint32_t x92 = ((uint32_t)x90 & 0x3fffff);
+ { uint64_t x93 = (x91 + x81);
+ { uint64_t x94 = (x93 >> 0x17);
+ { uint32_t x95 = ((uint32_t)x93 & 0x7fffff);
+ { uint64_t x96 = (x94 + x80);
+ { uint64_t x97 = (x96 >> 0x16);
+ { uint32_t x98 = ((uint32_t)x96 & 0x3fffff);
+ { uint64_t x99 = (x97 + x79);
+ { uint64_t x100 = (x99 >> 0x17);
+ { uint32_t x101 = ((uint32_t)x99 & 0x7fffff);
+ { uint64_t x102 = (x100 + x78);
+ { uint64_t x103 = (x102 >> 0x16);
+ { uint32_t x104 = ((uint32_t)x102 & 0x3fffff);
+ { uint64_t x105 = (x103 + x77);
+ { uint64_t x106 = (x105 >> 0x17);
+ { uint32_t x107 = ((uint32_t)x105 & 0x7fffff);
+ { uint64_t x108 = (x106 + x76);
+ { uint64_t x109 = (x108 >> 0x16);
+ { uint32_t x110 = ((uint32_t)x108 & 0x3fffff);
+ { uint64_t x111 = (x109 + x75);
+ { uint64_t x112 = (x111 >> 0x17);
+ { uint32_t x113 = ((uint32_t)x111 & 0x7fffff);
+ { uint64_t x114 = (x112 + x74);
+ { uint64_t x115 = (x114 >> 0x16);
+ { uint32_t x116 = ((uint32_t)x114 & 0x3fffff);
+ { uint64_t x117 = (x115 + x73);
+ { uint64_t x118 = (x117 >> 0x17);
+ { uint32_t x119 = ((uint32_t)x117 & 0x7fffff);
+ { uint64_t x120 = (x118 + x72);
+ { uint64_t x121 = (x120 >> 0x16);
+ { uint32_t x122 = ((uint32_t)x120 & 0x3fffff);
+ { uint64_t x123 = (x121 + x71);
+ { uint64_t x124 = (x123 >> 0x17);
+ { uint32_t x125 = ((uint32_t)x123 & 0x7fffff);
+ { uint64_t x126 = (x124 + x70);
+ { uint64_t x127 = (x126 >> 0x16);
+ { uint32_t x128 = ((uint32_t)x126 & 0x3fffff);
+ { uint64_t x129 = (x127 + x69);
+ { uint64_t x130 = (x129 >> 0x17);
+ { uint32_t x131 = ((uint32_t)x129 & 0x7fffff);
+ { uint64_t x132 = (x130 + x68);
+ { uint32_t x133 = (uint32_t) (x132 >> 0x16);
+ { uint32_t x134 = ((uint32_t)x132 & 0x3fffff);
+ { uint64_t x135 = (x86 + ((uint64_t)0x1a5 * x133));
+ { uint32_t x136 = (uint32_t) (x135 >> 0x17);
+ { uint32_t x137 = ((uint32_t)x135 & 0x7fffff);
+ { uint32_t x138 = (x136 + x89);
+ { uint32_t x139 = (x138 >> 0x17);
+ { uint32_t x140 = (x138 & 0x7fffff);
+ out[0] = x137;
+ out[1] = x140;
+ out[2] = (x139 + x92);
+ out[3] = x95;
+ out[4] = x98;
+ out[5] = x101;
+ out[6] = x104;
+ out[7] = x107;
+ out[8] = x110;
+ out[9] = x113;
+ out[10] = x116;
+ out[11] = x119;
+ out[12] = x122;
+ out[13] = x125;
+ out[14] = x128;
+ out[15] = x131;
+ out[16] = x134;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e383m421_17limbs/femulDisplay.log b/src/Specific/solinas32_2e383m421_17limbs/femulDisplay.log
new file mode 100644
index 000000000..2939866b0
--- /dev/null
+++ b/src/Specific/solinas32_2e383m421_17limbs/femulDisplay.log
@@ -0,0 +1,80 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x34, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x66, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37))%core,
+ uint64_t x68 = (((uint64_t)x5 * x66) + (((uint64_t)x7 * x67) + ((0x2 * ((uint64_t)x9 * x65)) + (((uint64_t)x11 * x63) + ((0x2 * ((uint64_t)x13 * x61)) + (((uint64_t)x15 * x59) + ((0x2 * ((uint64_t)x17 * x57)) + (((uint64_t)x19 * x55) + ((0x2 * ((uint64_t)x21 * x53)) + (((uint64_t)x23 * x51) + ((0x2 * ((uint64_t)x25 * x49)) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + (((uint64_t)x31 * x43) + ((0x2 * ((uint64_t)x33 * x41)) + (((uint64_t)x35 * x39) + ((uint64_t)x34 * x37)))))))))))))))));
+ uint64_t x69 = ((((uint64_t)x5 * x67) + ((0x2 * ((uint64_t)x7 * x65)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + ((uint64_t)x35 * x37)))))))))))))))) + (0x1a5 * (0x2 * ((uint64_t)x34 * x66))));
+ uint64_t x70 = ((((uint64_t)x5 * x65) + (((uint64_t)x7 * x63) + ((0x2 * ((uint64_t)x9 * x61)) + (((uint64_t)x11 * x59) + ((0x2 * ((uint64_t)x13 * x57)) + (((uint64_t)x15 * x55) + ((0x2 * ((uint64_t)x17 * x53)) + (((uint64_t)x19 * x51) + ((0x2 * ((uint64_t)x21 * x49)) + (((uint64_t)x23 * x47) + ((0x2 * ((uint64_t)x25 * x45)) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + ((uint64_t)x33 * x37))))))))))))))) + (0x1a5 * (((uint64_t)x35 * x66) + ((uint64_t)x34 * x67))));
+ uint64_t x71 = ((((uint64_t)x5 * x63) + ((0x2 * ((uint64_t)x7 * x61)) + ((0x2 * ((uint64_t)x9 * x59)) + ((0x2 * ((uint64_t)x11 * x57)) + ((0x2 * ((uint64_t)x13 * x55)) + ((0x2 * ((uint64_t)x15 * x53)) + ((0x2 * ((uint64_t)x17 * x51)) + ((0x2 * ((uint64_t)x19 * x49)) + ((0x2 * ((uint64_t)x21 * x47)) + ((0x2 * ((uint64_t)x23 * x45)) + ((0x2 * ((uint64_t)x25 * x43)) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + ((uint64_t)x31 * x37)))))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x33 * x66)) + (((uint64_t)x35 * x67) + (0x2 * ((uint64_t)x34 * x65))))));
+ uint64_t x72 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + ((0x2 * ((uint64_t)x9 * x57)) + (((uint64_t)x11 * x55) + ((0x2 * ((uint64_t)x13 * x53)) + (((uint64_t)x15 * x51) + ((0x2 * ((uint64_t)x17 * x49)) + (((uint64_t)x19 * x47) + ((0x2 * ((uint64_t)x21 * x45)) + (((uint64_t)x23 * x43) + ((0x2 * ((uint64_t)x25 * x41)) + (((uint64_t)x27 * x39) + ((uint64_t)x29 * x37))))))))))))) + (0x1a5 * (((uint64_t)x31 * x66) + (((uint64_t)x33 * x67) + (((uint64_t)x35 * x65) + ((uint64_t)x34 * x63))))));
+ uint64_t x73 = ((((uint64_t)x5 * x59) + ((0x2 * ((uint64_t)x7 * x57)) + ((0x2 * ((uint64_t)x9 * x55)) + ((0x2 * ((uint64_t)x11 * x53)) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + ((0x2 * ((uint64_t)x17 * x47)) + ((0x2 * ((uint64_t)x19 * x45)) + ((0x2 * ((uint64_t)x21 * x43)) + ((0x2 * ((uint64_t)x23 * x41)) + ((0x2 * ((uint64_t)x25 * x39)) + ((uint64_t)x27 * x37)))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x29 * x66)) + (((uint64_t)x31 * x67) + ((0x2 * ((uint64_t)x33 * x65)) + (((uint64_t)x35 * x63) + (0x2 * ((uint64_t)x34 * x61))))))));
+ uint64_t x74 = ((((uint64_t)x5 * x57) + (((uint64_t)x7 * x55) + ((0x2 * ((uint64_t)x9 * x53)) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + ((0x2 * ((uint64_t)x17 * x45)) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + (((uint64_t)x23 * x39) + ((uint64_t)x25 * x37))))))))))) + (0x1a5 * (((uint64_t)x27 * x66) + (((uint64_t)x29 * x67) + (((uint64_t)x31 * x65) + (((uint64_t)x33 * x63) + (((uint64_t)x35 * x61) + ((uint64_t)x34 * x59))))))));
+ uint64_t x75 = ((((uint64_t)x5 * x55) + ((0x2 * ((uint64_t)x7 * x53)) + ((0x2 * ((uint64_t)x9 * x51)) + ((0x2 * ((uint64_t)x11 * x49)) + ((0x2 * ((uint64_t)x13 * x47)) + ((0x2 * ((uint64_t)x15 * x45)) + ((0x2 * ((uint64_t)x17 * x43)) + ((0x2 * ((uint64_t)x19 * x41)) + ((0x2 * ((uint64_t)x21 * x39)) + ((uint64_t)x23 * x37)))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x25 * x66)) + (((uint64_t)x27 * x67) + ((0x2 * ((uint64_t)x29 * x65)) + (((uint64_t)x31 * x63) + ((0x2 * ((uint64_t)x33 * x61)) + (((uint64_t)x35 * x59) + (0x2 * ((uint64_t)x34 * x57))))))))));
+ uint64_t x76 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + (((uint64_t)x19 * x39) + ((uint64_t)x21 * x37))))))))) + (0x1a5 * (((uint64_t)x23 * x66) + (((uint64_t)x25 * x67) + (((uint64_t)x27 * x65) + (((uint64_t)x29 * x63) + (((uint64_t)x31 * x61) + (((uint64_t)x33 * x59) + (((uint64_t)x35 * x57) + ((uint64_t)x34 * x55))))))))));
+ uint64_t x77 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + ((0x2 * ((uint64_t)x9 * x47)) + ((0x2 * ((uint64_t)x11 * x45)) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + ((0x2 * ((uint64_t)x17 * x39)) + ((uint64_t)x19 * x37)))))))) + (0x1a5 * ((0x2 * ((uint64_t)x21 * x66)) + (((uint64_t)x23 * x67) + ((0x2 * ((uint64_t)x25 * x65)) + (((uint64_t)x27 * x63) + ((0x2 * ((uint64_t)x29 * x61)) + (((uint64_t)x31 * x59) + ((0x2 * ((uint64_t)x33 * x57)) + (((uint64_t)x35 * x55) + (0x2 * ((uint64_t)x34 * x53))))))))))));
+ uint64_t x78 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + ((0x2 * ((uint64_t)x9 * x45)) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + (((uint64_t)x15 * x39) + ((uint64_t)x17 * x37))))))) + (0x1a5 * (((uint64_t)x19 * x66) + (((uint64_t)x21 * x67) + (((uint64_t)x23 * x65) + (((uint64_t)x25 * x63) + (((uint64_t)x27 * x61) + (((uint64_t)x29 * x59) + (((uint64_t)x31 * x57) + (((uint64_t)x33 * x55) + (((uint64_t)x35 * x53) + ((uint64_t)x34 * x51))))))))))));
+ uint64_t x79 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((uint64_t)x15 * x37)))))) + (0x1a5 * ((0x2 * ((uint64_t)x17 * x66)) + (((uint64_t)x19 * x67) + ((0x2 * ((uint64_t)x21 * x65)) + (((uint64_t)x23 * x63) + ((0x2 * ((uint64_t)x25 * x61)) + (((uint64_t)x27 * x59) + ((0x2 * ((uint64_t)x29 * x57)) + (((uint64_t)x31 * x55) + ((0x2 * ((uint64_t)x33 * x53)) + (((uint64_t)x35 * x51) + (0x2 * ((uint64_t)x34 * x49))))))))))))));
+ uint64_t x80 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + (((uint64_t)x11 * x39) + ((uint64_t)x13 * x37))))) + (0x1a5 * (((uint64_t)x15 * x66) + (((uint64_t)x17 * x67) + (((uint64_t)x19 * x65) + (((uint64_t)x21 * x63) + (((uint64_t)x23 * x61) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + (((uint64_t)x29 * x55) + (((uint64_t)x31 * x53) + (((uint64_t)x33 * x51) + (((uint64_t)x35 * x49) + ((uint64_t)x34 * x47))))))))))))));
+ uint64_t x81 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((uint64_t)x11 * x37)))) + (0x1a5 * ((0x2 * ((uint64_t)x13 * x66)) + (((uint64_t)x15 * x67) + ((0x2 * ((uint64_t)x17 * x65)) + (((uint64_t)x19 * x63) + ((0x2 * ((uint64_t)x21 * x61)) + (((uint64_t)x23 * x59) + ((0x2 * ((uint64_t)x25 * x57)) + (((uint64_t)x27 * x55) + ((0x2 * ((uint64_t)x29 * x53)) + (((uint64_t)x31 * x51) + ((0x2 * ((uint64_t)x33 * x49)) + (((uint64_t)x35 * x47) + (0x2 * ((uint64_t)x34 * x45))))))))))))))));
+ uint64_t x82 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + ((uint64_t)x9 * x37))) + (0x1a5 * (((uint64_t)x11 * x66) + (((uint64_t)x13 * x67) + (((uint64_t)x15 * x65) + (((uint64_t)x17 * x63) + (((uint64_t)x19 * x61) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + (((uint64_t)x29 * x51) + (((uint64_t)x31 * x49) + (((uint64_t)x33 * x47) + (((uint64_t)x35 * x45) + ((uint64_t)x34 * x43))))))))))))))));
+ uint64_t x83 = ((((uint64_t)x5 * x39) + ((uint64_t)x7 * x37)) + (0x1a5 * ((0x2 * ((uint64_t)x9 * x66)) + (((uint64_t)x11 * x67) + ((0x2 * ((uint64_t)x13 * x65)) + (((uint64_t)x15 * x63) + ((0x2 * ((uint64_t)x17 * x61)) + (((uint64_t)x19 * x59) + ((0x2 * ((uint64_t)x21 * x57)) + (((uint64_t)x23 * x55) + ((0x2 * ((uint64_t)x25 * x53)) + (((uint64_t)x27 * x51) + ((0x2 * ((uint64_t)x29 * x49)) + (((uint64_t)x31 * x47) + ((0x2 * ((uint64_t)x33 * x45)) + (((uint64_t)x35 * x43) + (0x2 * ((uint64_t)x34 * x41))))))))))))))))));
+ uint64_t x84 = (((uint64_t)x5 * x37) + (0x1a5 * ((0x2 * ((uint64_t)x7 * x66)) + ((0x2 * ((uint64_t)x9 * x67)) + ((0x2 * ((uint64_t)x11 * x65)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + ((0x2 * ((uint64_t)x35 * x41)) + (0x2 * ((uint64_t)x34 * x39)))))))))))))))))));
+ uint64_t x85 = (x84 >> 0x17);
+ uint32_t x86 = ((uint32_t)x84 & 0x7fffff);
+ uint64_t x87 = (x85 + x83);
+ uint64_t x88 = (x87 >> 0x17);
+ uint32_t x89 = ((uint32_t)x87 & 0x7fffff);
+ uint64_t x90 = (x88 + x82);
+ uint64_t x91 = (x90 >> 0x16);
+ uint32_t x92 = ((uint32_t)x90 & 0x3fffff);
+ uint64_t x93 = (x91 + x81);
+ uint64_t x94 = (x93 >> 0x17);
+ uint32_t x95 = ((uint32_t)x93 & 0x7fffff);
+ uint64_t x96 = (x94 + x80);
+ uint64_t x97 = (x96 >> 0x16);
+ uint32_t x98 = ((uint32_t)x96 & 0x3fffff);
+ uint64_t x99 = (x97 + x79);
+ uint64_t x100 = (x99 >> 0x17);
+ uint32_t x101 = ((uint32_t)x99 & 0x7fffff);
+ uint64_t x102 = (x100 + x78);
+ uint64_t x103 = (x102 >> 0x16);
+ uint32_t x104 = ((uint32_t)x102 & 0x3fffff);
+ uint64_t x105 = (x103 + x77);
+ uint64_t x106 = (x105 >> 0x17);
+ uint32_t x107 = ((uint32_t)x105 & 0x7fffff);
+ uint64_t x108 = (x106 + x76);
+ uint64_t x109 = (x108 >> 0x16);
+ uint32_t x110 = ((uint32_t)x108 & 0x3fffff);
+ uint64_t x111 = (x109 + x75);
+ uint64_t x112 = (x111 >> 0x17);
+ uint32_t x113 = ((uint32_t)x111 & 0x7fffff);
+ uint64_t x114 = (x112 + x74);
+ uint64_t x115 = (x114 >> 0x16);
+ uint32_t x116 = ((uint32_t)x114 & 0x3fffff);
+ uint64_t x117 = (x115 + x73);
+ uint64_t x118 = (x117 >> 0x17);
+ uint32_t x119 = ((uint32_t)x117 & 0x7fffff);
+ uint64_t x120 = (x118 + x72);
+ uint64_t x121 = (x120 >> 0x16);
+ uint32_t x122 = ((uint32_t)x120 & 0x3fffff);
+ uint64_t x123 = (x121 + x71);
+ uint64_t x124 = (x123 >> 0x17);
+ uint32_t x125 = ((uint32_t)x123 & 0x7fffff);
+ uint64_t x126 = (x124 + x70);
+ uint64_t x127 = (x126 >> 0x16);
+ uint32_t x128 = ((uint32_t)x126 & 0x3fffff);
+ uint64_t x129 = (x127 + x69);
+ uint64_t x130 = (x129 >> 0x17);
+ uint32_t x131 = ((uint32_t)x129 & 0x7fffff);
+ uint64_t x132 = (x130 + x68);
+ uint32_t x133 = (uint32_t) (x132 >> 0x16);
+ uint32_t x134 = ((uint32_t)x132 & 0x3fffff);
+ uint64_t x135 = (x86 + ((uint64_t)0x1a5 * x133));
+ uint32_t x136 = (uint32_t) (x135 >> 0x17);
+ uint32_t x137 = ((uint32_t)x135 & 0x7fffff);
+ uint32_t x138 = (x136 + x89);
+ uint32_t x139 = (x138 >> 0x17);
+ uint32_t x140 = (x138 & 0x7fffff);
+ return (Return x134, Return x131, Return x128, Return x125, Return x122, Return x119, Return x116, Return x113, Return x110, Return x107, Return x104, Return x101, Return x98, Return x95, (x139 + x92), Return x140, Return x137))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m421_17limbs/fesquare.c b/src/Specific/solinas32_2e383m421_17limbs/fesquare.c
new file mode 100644
index 000000000..7ac3264ac
--- /dev/null
+++ b/src/Specific/solinas32_2e383m421_17limbs/fesquare.c
@@ -0,0 +1,110 @@
+static void fesquare(uint32_t out[17], const uint32_t in1[17]) {
+ { const uint32_t x31 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint64_t x33 = (((uint64_t)x2 * x31) + (((uint64_t)x4 * x32) + ((0x2 * ((uint64_t)x6 * x30)) + (((uint64_t)x8 * x28) + ((0x2 * ((uint64_t)x10 * x26)) + (((uint64_t)x12 * x24) + ((0x2 * ((uint64_t)x14 * x22)) + (((uint64_t)x16 * x20) + ((0x2 * ((uint64_t)x18 * x18)) + (((uint64_t)x20 * x16) + ((0x2 * ((uint64_t)x22 * x14)) + (((uint64_t)x24 * x12) + ((0x2 * ((uint64_t)x26 * x10)) + (((uint64_t)x28 * x8) + ((0x2 * ((uint64_t)x30 * x6)) + (((uint64_t)x32 * x4) + ((uint64_t)x31 * x2)))))))))))))))));
+ { uint64_t x34 = ((((uint64_t)x2 * x32) + ((0x2 * ((uint64_t)x4 * x30)) + ((0x2 * ((uint64_t)x6 * x28)) + ((0x2 * ((uint64_t)x8 * x26)) + ((0x2 * ((uint64_t)x10 * x24)) + ((0x2 * ((uint64_t)x12 * x22)) + ((0x2 * ((uint64_t)x14 * x20)) + ((0x2 * ((uint64_t)x16 * x18)) + ((0x2 * ((uint64_t)x18 * x16)) + ((0x2 * ((uint64_t)x20 * x14)) + ((0x2 * ((uint64_t)x22 * x12)) + ((0x2 * ((uint64_t)x24 * x10)) + ((0x2 * ((uint64_t)x26 * x8)) + ((0x2 * ((uint64_t)x28 * x6)) + ((0x2 * ((uint64_t)x30 * x4)) + ((uint64_t)x32 * x2)))))))))))))))) + (0x1a5 * (0x2 * ((uint64_t)x31 * x31))));
+ { uint64_t x35 = ((((uint64_t)x2 * x30) + (((uint64_t)x4 * x28) + ((0x2 * ((uint64_t)x6 * x26)) + (((uint64_t)x8 * x24) + ((0x2 * ((uint64_t)x10 * x22)) + (((uint64_t)x12 * x20) + ((0x2 * ((uint64_t)x14 * x18)) + (((uint64_t)x16 * x16) + ((0x2 * ((uint64_t)x18 * x14)) + (((uint64_t)x20 * x12) + ((0x2 * ((uint64_t)x22 * x10)) + (((uint64_t)x24 * x8) + ((0x2 * ((uint64_t)x26 * x6)) + (((uint64_t)x28 * x4) + ((uint64_t)x30 * x2))))))))))))))) + (0x1a5 * (((uint64_t)x32 * x31) + ((uint64_t)x31 * x32))));
+ { uint64_t x36 = ((((uint64_t)x2 * x28) + ((0x2 * ((uint64_t)x4 * x26)) + ((0x2 * ((uint64_t)x6 * x24)) + ((0x2 * ((uint64_t)x8 * x22)) + ((0x2 * ((uint64_t)x10 * x20)) + ((0x2 * ((uint64_t)x12 * x18)) + ((0x2 * ((uint64_t)x14 * x16)) + ((0x2 * ((uint64_t)x16 * x14)) + ((0x2 * ((uint64_t)x18 * x12)) + ((0x2 * ((uint64_t)x20 * x10)) + ((0x2 * ((uint64_t)x22 * x8)) + ((0x2 * ((uint64_t)x24 * x6)) + ((0x2 * ((uint64_t)x26 * x4)) + ((uint64_t)x28 * x2)))))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x30 * x31)) + (((uint64_t)x32 * x32) + (0x2 * ((uint64_t)x31 * x30))))));
+ { uint64_t x37 = ((((uint64_t)x2 * x26) + (((uint64_t)x4 * x24) + ((0x2 * ((uint64_t)x6 * x22)) + (((uint64_t)x8 * x20) + ((0x2 * ((uint64_t)x10 * x18)) + (((uint64_t)x12 * x16) + ((0x2 * ((uint64_t)x14 * x14)) + (((uint64_t)x16 * x12) + ((0x2 * ((uint64_t)x18 * x10)) + (((uint64_t)x20 * x8) + ((0x2 * ((uint64_t)x22 * x6)) + (((uint64_t)x24 * x4) + ((uint64_t)x26 * x2))))))))))))) + (0x1a5 * (((uint64_t)x28 * x31) + (((uint64_t)x30 * x32) + (((uint64_t)x32 * x30) + ((uint64_t)x31 * x28))))));
+ { uint64_t x38 = ((((uint64_t)x2 * x24) + ((0x2 * ((uint64_t)x4 * x22)) + ((0x2 * ((uint64_t)x6 * x20)) + ((0x2 * ((uint64_t)x8 * x18)) + ((0x2 * ((uint64_t)x10 * x16)) + ((0x2 * ((uint64_t)x12 * x14)) + ((0x2 * ((uint64_t)x14 * x12)) + ((0x2 * ((uint64_t)x16 * x10)) + ((0x2 * ((uint64_t)x18 * x8)) + ((0x2 * ((uint64_t)x20 * x6)) + ((0x2 * ((uint64_t)x22 * x4)) + ((uint64_t)x24 * x2)))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x26 * x31)) + (((uint64_t)x28 * x32) + ((0x2 * ((uint64_t)x30 * x30)) + (((uint64_t)x32 * x28) + (0x2 * ((uint64_t)x31 * x26))))))));
+ { uint64_t x39 = ((((uint64_t)x2 * x22) + (((uint64_t)x4 * x20) + ((0x2 * ((uint64_t)x6 * x18)) + (((uint64_t)x8 * x16) + ((0x2 * ((uint64_t)x10 * x14)) + (((uint64_t)x12 * x12) + ((0x2 * ((uint64_t)x14 * x10)) + (((uint64_t)x16 * x8) + ((0x2 * ((uint64_t)x18 * x6)) + (((uint64_t)x20 * x4) + ((uint64_t)x22 * x2))))))))))) + (0x1a5 * (((uint64_t)x24 * x31) + (((uint64_t)x26 * x32) + (((uint64_t)x28 * x30) + (((uint64_t)x30 * x28) + (((uint64_t)x32 * x26) + ((uint64_t)x31 * x24))))))));
+ { uint64_t x40 = ((((uint64_t)x2 * x20) + ((0x2 * ((uint64_t)x4 * x18)) + ((0x2 * ((uint64_t)x6 * x16)) + ((0x2 * ((uint64_t)x8 * x14)) + ((0x2 * ((uint64_t)x10 * x12)) + ((0x2 * ((uint64_t)x12 * x10)) + ((0x2 * ((uint64_t)x14 * x8)) + ((0x2 * ((uint64_t)x16 * x6)) + ((0x2 * ((uint64_t)x18 * x4)) + ((uint64_t)x20 * x2)))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x22 * x31)) + (((uint64_t)x24 * x32) + ((0x2 * ((uint64_t)x26 * x30)) + (((uint64_t)x28 * x28) + ((0x2 * ((uint64_t)x30 * x26)) + (((uint64_t)x32 * x24) + (0x2 * ((uint64_t)x31 * x22))))))))));
+ { uint64_t x41 = ((((uint64_t)x2 * x18) + (((uint64_t)x4 * x16) + ((0x2 * ((uint64_t)x6 * x14)) + (((uint64_t)x8 * x12) + ((0x2 * ((uint64_t)x10 * x10)) + (((uint64_t)x12 * x8) + ((0x2 * ((uint64_t)x14 * x6)) + (((uint64_t)x16 * x4) + ((uint64_t)x18 * x2))))))))) + (0x1a5 * (((uint64_t)x20 * x31) + (((uint64_t)x22 * x32) + (((uint64_t)x24 * x30) + (((uint64_t)x26 * x28) + (((uint64_t)x28 * x26) + (((uint64_t)x30 * x24) + (((uint64_t)x32 * x22) + ((uint64_t)x31 * x20))))))))));
+ { uint64_t x42 = ((((uint64_t)x2 * x16) + ((0x2 * ((uint64_t)x4 * x14)) + ((0x2 * ((uint64_t)x6 * x12)) + ((0x2 * ((uint64_t)x8 * x10)) + ((0x2 * ((uint64_t)x10 * x8)) + ((0x2 * ((uint64_t)x12 * x6)) + ((0x2 * ((uint64_t)x14 * x4)) + ((uint64_t)x16 * x2)))))))) + (0x1a5 * ((0x2 * ((uint64_t)x18 * x31)) + (((uint64_t)x20 * x32) + ((0x2 * ((uint64_t)x22 * x30)) + (((uint64_t)x24 * x28) + ((0x2 * ((uint64_t)x26 * x26)) + (((uint64_t)x28 * x24) + ((0x2 * ((uint64_t)x30 * x22)) + (((uint64_t)x32 * x20) + (0x2 * ((uint64_t)x31 * x18))))))))))));
+ { uint64_t x43 = ((((uint64_t)x2 * x14) + (((uint64_t)x4 * x12) + ((0x2 * ((uint64_t)x6 * x10)) + (((uint64_t)x8 * x8) + ((0x2 * ((uint64_t)x10 * x6)) + (((uint64_t)x12 * x4) + ((uint64_t)x14 * x2))))))) + (0x1a5 * (((uint64_t)x16 * x31) + (((uint64_t)x18 * x32) + (((uint64_t)x20 * x30) + (((uint64_t)x22 * x28) + (((uint64_t)x24 * x26) + (((uint64_t)x26 * x24) + (((uint64_t)x28 * x22) + (((uint64_t)x30 * x20) + (((uint64_t)x32 * x18) + ((uint64_t)x31 * x16))))))))))));
+ { uint64_t x44 = ((((uint64_t)x2 * x12) + ((0x2 * ((uint64_t)x4 * x10)) + ((0x2 * ((uint64_t)x6 * x8)) + ((0x2 * ((uint64_t)x8 * x6)) + ((0x2 * ((uint64_t)x10 * x4)) + ((uint64_t)x12 * x2)))))) + (0x1a5 * ((0x2 * ((uint64_t)x14 * x31)) + (((uint64_t)x16 * x32) + ((0x2 * ((uint64_t)x18 * x30)) + (((uint64_t)x20 * x28) + ((0x2 * ((uint64_t)x22 * x26)) + (((uint64_t)x24 * x24) + ((0x2 * ((uint64_t)x26 * x22)) + (((uint64_t)x28 * x20) + ((0x2 * ((uint64_t)x30 * x18)) + (((uint64_t)x32 * x16) + (0x2 * ((uint64_t)x31 * x14))))))))))))));
+ { uint64_t x45 = ((((uint64_t)x2 * x10) + (((uint64_t)x4 * x8) + ((0x2 * ((uint64_t)x6 * x6)) + (((uint64_t)x8 * x4) + ((uint64_t)x10 * x2))))) + (0x1a5 * (((uint64_t)x12 * x31) + (((uint64_t)x14 * x32) + (((uint64_t)x16 * x30) + (((uint64_t)x18 * x28) + (((uint64_t)x20 * x26) + (((uint64_t)x22 * x24) + (((uint64_t)x24 * x22) + (((uint64_t)x26 * x20) + (((uint64_t)x28 * x18) + (((uint64_t)x30 * x16) + (((uint64_t)x32 * x14) + ((uint64_t)x31 * x12))))))))))))));
+ { uint64_t x46 = ((((uint64_t)x2 * x8) + ((0x2 * ((uint64_t)x4 * x6)) + ((0x2 * ((uint64_t)x6 * x4)) + ((uint64_t)x8 * x2)))) + (0x1a5 * ((0x2 * ((uint64_t)x10 * x31)) + (((uint64_t)x12 * x32) + ((0x2 * ((uint64_t)x14 * x30)) + (((uint64_t)x16 * x28) + ((0x2 * ((uint64_t)x18 * x26)) + (((uint64_t)x20 * x24) + ((0x2 * ((uint64_t)x22 * x22)) + (((uint64_t)x24 * x20) + ((0x2 * ((uint64_t)x26 * x18)) + (((uint64_t)x28 * x16) + ((0x2 * ((uint64_t)x30 * x14)) + (((uint64_t)x32 * x12) + (0x2 * ((uint64_t)x31 * x10))))))))))))))));
+ { uint64_t x47 = ((((uint64_t)x2 * x6) + (((uint64_t)x4 * x4) + ((uint64_t)x6 * x2))) + (0x1a5 * (((uint64_t)x8 * x31) + (((uint64_t)x10 * x32) + (((uint64_t)x12 * x30) + (((uint64_t)x14 * x28) + (((uint64_t)x16 * x26) + (((uint64_t)x18 * x24) + (((uint64_t)x20 * x22) + (((uint64_t)x22 * x20) + (((uint64_t)x24 * x18) + (((uint64_t)x26 * x16) + (((uint64_t)x28 * x14) + (((uint64_t)x30 * x12) + (((uint64_t)x32 * x10) + ((uint64_t)x31 * x8))))))))))))))));
+ { uint64_t x48 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0x1a5 * ((0x2 * ((uint64_t)x6 * x31)) + (((uint64_t)x8 * x32) + ((0x2 * ((uint64_t)x10 * x30)) + (((uint64_t)x12 * x28) + ((0x2 * ((uint64_t)x14 * x26)) + (((uint64_t)x16 * x24) + ((0x2 * ((uint64_t)x18 * x22)) + (((uint64_t)x20 * x20) + ((0x2 * ((uint64_t)x22 * x18)) + (((uint64_t)x24 * x16) + ((0x2 * ((uint64_t)x26 * x14)) + (((uint64_t)x28 * x12) + ((0x2 * ((uint64_t)x30 * x10)) + (((uint64_t)x32 * x8) + (0x2 * ((uint64_t)x31 * x6))))))))))))))))));
+ { uint64_t x49 = (((uint64_t)x2 * x2) + (0x1a5 * ((0x2 * ((uint64_t)x4 * x31)) + ((0x2 * ((uint64_t)x6 * x32)) + ((0x2 * ((uint64_t)x8 * x30)) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + ((0x2 * ((uint64_t)x16 * x22)) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + ((0x2 * ((uint64_t)x22 * x16)) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + ((0x2 * ((uint64_t)x30 * x8)) + ((0x2 * ((uint64_t)x32 * x6)) + (0x2 * ((uint64_t)x31 * x4)))))))))))))))))));
+ { uint64_t x50 = (x49 >> 0x17);
+ { uint32_t x51 = ((uint32_t)x49 & 0x7fffff);
+ { uint64_t x52 = (x50 + x48);
+ { uint64_t x53 = (x52 >> 0x17);
+ { uint32_t x54 = ((uint32_t)x52 & 0x7fffff);
+ { uint64_t x55 = (x53 + x47);
+ { uint64_t x56 = (x55 >> 0x16);
+ { uint32_t x57 = ((uint32_t)x55 & 0x3fffff);
+ { uint64_t x58 = (x56 + x46);
+ { uint64_t x59 = (x58 >> 0x17);
+ { uint32_t x60 = ((uint32_t)x58 & 0x7fffff);
+ { uint64_t x61 = (x59 + x45);
+ { uint64_t x62 = (x61 >> 0x16);
+ { uint32_t x63 = ((uint32_t)x61 & 0x3fffff);
+ { uint64_t x64 = (x62 + x44);
+ { uint64_t x65 = (x64 >> 0x17);
+ { uint32_t x66 = ((uint32_t)x64 & 0x7fffff);
+ { uint64_t x67 = (x65 + x43);
+ { uint64_t x68 = (x67 >> 0x16);
+ { uint32_t x69 = ((uint32_t)x67 & 0x3fffff);
+ { uint64_t x70 = (x68 + x42);
+ { uint64_t x71 = (x70 >> 0x17);
+ { uint32_t x72 = ((uint32_t)x70 & 0x7fffff);
+ { uint64_t x73 = (x71 + x41);
+ { uint64_t x74 = (x73 >> 0x16);
+ { uint32_t x75 = ((uint32_t)x73 & 0x3fffff);
+ { uint64_t x76 = (x74 + x40);
+ { uint64_t x77 = (x76 >> 0x17);
+ { uint32_t x78 = ((uint32_t)x76 & 0x7fffff);
+ { uint64_t x79 = (x77 + x39);
+ { uint64_t x80 = (x79 >> 0x16);
+ { uint32_t x81 = ((uint32_t)x79 & 0x3fffff);
+ { uint64_t x82 = (x80 + x38);
+ { uint64_t x83 = (x82 >> 0x17);
+ { uint32_t x84 = ((uint32_t)x82 & 0x7fffff);
+ { uint64_t x85 = (x83 + x37);
+ { uint64_t x86 = (x85 >> 0x16);
+ { uint32_t x87 = ((uint32_t)x85 & 0x3fffff);
+ { uint64_t x88 = (x86 + x36);
+ { uint64_t x89 = (x88 >> 0x17);
+ { uint32_t x90 = ((uint32_t)x88 & 0x7fffff);
+ { uint64_t x91 = (x89 + x35);
+ { uint64_t x92 = (x91 >> 0x16);
+ { uint32_t x93 = ((uint32_t)x91 & 0x3fffff);
+ { uint64_t x94 = (x92 + x34);
+ { uint64_t x95 = (x94 >> 0x17);
+ { uint32_t x96 = ((uint32_t)x94 & 0x7fffff);
+ { uint64_t x97 = (x95 + x33);
+ { uint32_t x98 = (uint32_t) (x97 >> 0x16);
+ { uint32_t x99 = ((uint32_t)x97 & 0x3fffff);
+ { uint64_t x100 = (x51 + ((uint64_t)0x1a5 * x98));
+ { uint32_t x101 = (uint32_t) (x100 >> 0x17);
+ { uint32_t x102 = ((uint32_t)x100 & 0x7fffff);
+ { uint32_t x103 = (x101 + x54);
+ { uint32_t x104 = (x103 >> 0x17);
+ { uint32_t x105 = (x103 & 0x7fffff);
+ out[0] = x102;
+ out[1] = x105;
+ out[2] = (x104 + x57);
+ out[3] = x60;
+ out[4] = x63;
+ out[5] = x66;
+ out[6] = x69;
+ out[7] = x72;
+ out[8] = x75;
+ out[9] = x78;
+ out[10] = x81;
+ out[11] = x84;
+ out[12] = x87;
+ out[13] = x90;
+ out[14] = x93;
+ out[15] = x96;
+ out[16] = x99;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e383m421_17limbs/fesquareDisplay.log b/src/Specific/solinas32_2e383m421_17limbs/fesquareDisplay.log
new file mode 100644
index 000000000..214531316
--- /dev/null
+++ b/src/Specific/solinas32_2e383m421_17limbs/fesquareDisplay.log
@@ -0,0 +1,80 @@
+λ x : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x31, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
+ uint64_t x33 = (((uint64_t)x2 * x31) + (((uint64_t)x4 * x32) + ((0x2 * ((uint64_t)x6 * x30)) + (((uint64_t)x8 * x28) + ((0x2 * ((uint64_t)x10 * x26)) + (((uint64_t)x12 * x24) + ((0x2 * ((uint64_t)x14 * x22)) + (((uint64_t)x16 * x20) + ((0x2 * ((uint64_t)x18 * x18)) + (((uint64_t)x20 * x16) + ((0x2 * ((uint64_t)x22 * x14)) + (((uint64_t)x24 * x12) + ((0x2 * ((uint64_t)x26 * x10)) + (((uint64_t)x28 * x8) + ((0x2 * ((uint64_t)x30 * x6)) + (((uint64_t)x32 * x4) + ((uint64_t)x31 * x2)))))))))))))))));
+ uint64_t x34 = ((((uint64_t)x2 * x32) + ((0x2 * ((uint64_t)x4 * x30)) + ((0x2 * ((uint64_t)x6 * x28)) + ((0x2 * ((uint64_t)x8 * x26)) + ((0x2 * ((uint64_t)x10 * x24)) + ((0x2 * ((uint64_t)x12 * x22)) + ((0x2 * ((uint64_t)x14 * x20)) + ((0x2 * ((uint64_t)x16 * x18)) + ((0x2 * ((uint64_t)x18 * x16)) + ((0x2 * ((uint64_t)x20 * x14)) + ((0x2 * ((uint64_t)x22 * x12)) + ((0x2 * ((uint64_t)x24 * x10)) + ((0x2 * ((uint64_t)x26 * x8)) + ((0x2 * ((uint64_t)x28 * x6)) + ((0x2 * ((uint64_t)x30 * x4)) + ((uint64_t)x32 * x2)))))))))))))))) + (0x1a5 * (0x2 * ((uint64_t)x31 * x31))));
+ uint64_t x35 = ((((uint64_t)x2 * x30) + (((uint64_t)x4 * x28) + ((0x2 * ((uint64_t)x6 * x26)) + (((uint64_t)x8 * x24) + ((0x2 * ((uint64_t)x10 * x22)) + (((uint64_t)x12 * x20) + ((0x2 * ((uint64_t)x14 * x18)) + (((uint64_t)x16 * x16) + ((0x2 * ((uint64_t)x18 * x14)) + (((uint64_t)x20 * x12) + ((0x2 * ((uint64_t)x22 * x10)) + (((uint64_t)x24 * x8) + ((0x2 * ((uint64_t)x26 * x6)) + (((uint64_t)x28 * x4) + ((uint64_t)x30 * x2))))))))))))))) + (0x1a5 * (((uint64_t)x32 * x31) + ((uint64_t)x31 * x32))));
+ uint64_t x36 = ((((uint64_t)x2 * x28) + ((0x2 * ((uint64_t)x4 * x26)) + ((0x2 * ((uint64_t)x6 * x24)) + ((0x2 * ((uint64_t)x8 * x22)) + ((0x2 * ((uint64_t)x10 * x20)) + ((0x2 * ((uint64_t)x12 * x18)) + ((0x2 * ((uint64_t)x14 * x16)) + ((0x2 * ((uint64_t)x16 * x14)) + ((0x2 * ((uint64_t)x18 * x12)) + ((0x2 * ((uint64_t)x20 * x10)) + ((0x2 * ((uint64_t)x22 * x8)) + ((0x2 * ((uint64_t)x24 * x6)) + ((0x2 * ((uint64_t)x26 * x4)) + ((uint64_t)x28 * x2)))))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x30 * x31)) + (((uint64_t)x32 * x32) + (0x2 * ((uint64_t)x31 * x30))))));
+ uint64_t x37 = ((((uint64_t)x2 * x26) + (((uint64_t)x4 * x24) + ((0x2 * ((uint64_t)x6 * x22)) + (((uint64_t)x8 * x20) + ((0x2 * ((uint64_t)x10 * x18)) + (((uint64_t)x12 * x16) + ((0x2 * ((uint64_t)x14 * x14)) + (((uint64_t)x16 * x12) + ((0x2 * ((uint64_t)x18 * x10)) + (((uint64_t)x20 * x8) + ((0x2 * ((uint64_t)x22 * x6)) + (((uint64_t)x24 * x4) + ((uint64_t)x26 * x2))))))))))))) + (0x1a5 * (((uint64_t)x28 * x31) + (((uint64_t)x30 * x32) + (((uint64_t)x32 * x30) + ((uint64_t)x31 * x28))))));
+ uint64_t x38 = ((((uint64_t)x2 * x24) + ((0x2 * ((uint64_t)x4 * x22)) + ((0x2 * ((uint64_t)x6 * x20)) + ((0x2 * ((uint64_t)x8 * x18)) + ((0x2 * ((uint64_t)x10 * x16)) + ((0x2 * ((uint64_t)x12 * x14)) + ((0x2 * ((uint64_t)x14 * x12)) + ((0x2 * ((uint64_t)x16 * x10)) + ((0x2 * ((uint64_t)x18 * x8)) + ((0x2 * ((uint64_t)x20 * x6)) + ((0x2 * ((uint64_t)x22 * x4)) + ((uint64_t)x24 * x2)))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x26 * x31)) + (((uint64_t)x28 * x32) + ((0x2 * ((uint64_t)x30 * x30)) + (((uint64_t)x32 * x28) + (0x2 * ((uint64_t)x31 * x26))))))));
+ uint64_t x39 = ((((uint64_t)x2 * x22) + (((uint64_t)x4 * x20) + ((0x2 * ((uint64_t)x6 * x18)) + (((uint64_t)x8 * x16) + ((0x2 * ((uint64_t)x10 * x14)) + (((uint64_t)x12 * x12) + ((0x2 * ((uint64_t)x14 * x10)) + (((uint64_t)x16 * x8) + ((0x2 * ((uint64_t)x18 * x6)) + (((uint64_t)x20 * x4) + ((uint64_t)x22 * x2))))))))))) + (0x1a5 * (((uint64_t)x24 * x31) + (((uint64_t)x26 * x32) + (((uint64_t)x28 * x30) + (((uint64_t)x30 * x28) + (((uint64_t)x32 * x26) + ((uint64_t)x31 * x24))))))));
+ uint64_t x40 = ((((uint64_t)x2 * x20) + ((0x2 * ((uint64_t)x4 * x18)) + ((0x2 * ((uint64_t)x6 * x16)) + ((0x2 * ((uint64_t)x8 * x14)) + ((0x2 * ((uint64_t)x10 * x12)) + ((0x2 * ((uint64_t)x12 * x10)) + ((0x2 * ((uint64_t)x14 * x8)) + ((0x2 * ((uint64_t)x16 * x6)) + ((0x2 * ((uint64_t)x18 * x4)) + ((uint64_t)x20 * x2)))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x22 * x31)) + (((uint64_t)x24 * x32) + ((0x2 * ((uint64_t)x26 * x30)) + (((uint64_t)x28 * x28) + ((0x2 * ((uint64_t)x30 * x26)) + (((uint64_t)x32 * x24) + (0x2 * ((uint64_t)x31 * x22))))))))));
+ uint64_t x41 = ((((uint64_t)x2 * x18) + (((uint64_t)x4 * x16) + ((0x2 * ((uint64_t)x6 * x14)) + (((uint64_t)x8 * x12) + ((0x2 * ((uint64_t)x10 * x10)) + (((uint64_t)x12 * x8) + ((0x2 * ((uint64_t)x14 * x6)) + (((uint64_t)x16 * x4) + ((uint64_t)x18 * x2))))))))) + (0x1a5 * (((uint64_t)x20 * x31) + (((uint64_t)x22 * x32) + (((uint64_t)x24 * x30) + (((uint64_t)x26 * x28) + (((uint64_t)x28 * x26) + (((uint64_t)x30 * x24) + (((uint64_t)x32 * x22) + ((uint64_t)x31 * x20))))))))));
+ uint64_t x42 = ((((uint64_t)x2 * x16) + ((0x2 * ((uint64_t)x4 * x14)) + ((0x2 * ((uint64_t)x6 * x12)) + ((0x2 * ((uint64_t)x8 * x10)) + ((0x2 * ((uint64_t)x10 * x8)) + ((0x2 * ((uint64_t)x12 * x6)) + ((0x2 * ((uint64_t)x14 * x4)) + ((uint64_t)x16 * x2)))))))) + (0x1a5 * ((0x2 * ((uint64_t)x18 * x31)) + (((uint64_t)x20 * x32) + ((0x2 * ((uint64_t)x22 * x30)) + (((uint64_t)x24 * x28) + ((0x2 * ((uint64_t)x26 * x26)) + (((uint64_t)x28 * x24) + ((0x2 * ((uint64_t)x30 * x22)) + (((uint64_t)x32 * x20) + (0x2 * ((uint64_t)x31 * x18))))))))))));
+ uint64_t x43 = ((((uint64_t)x2 * x14) + (((uint64_t)x4 * x12) + ((0x2 * ((uint64_t)x6 * x10)) + (((uint64_t)x8 * x8) + ((0x2 * ((uint64_t)x10 * x6)) + (((uint64_t)x12 * x4) + ((uint64_t)x14 * x2))))))) + (0x1a5 * (((uint64_t)x16 * x31) + (((uint64_t)x18 * x32) + (((uint64_t)x20 * x30) + (((uint64_t)x22 * x28) + (((uint64_t)x24 * x26) + (((uint64_t)x26 * x24) + (((uint64_t)x28 * x22) + (((uint64_t)x30 * x20) + (((uint64_t)x32 * x18) + ((uint64_t)x31 * x16))))))))))));
+ uint64_t x44 = ((((uint64_t)x2 * x12) + ((0x2 * ((uint64_t)x4 * x10)) + ((0x2 * ((uint64_t)x6 * x8)) + ((0x2 * ((uint64_t)x8 * x6)) + ((0x2 * ((uint64_t)x10 * x4)) + ((uint64_t)x12 * x2)))))) + (0x1a5 * ((0x2 * ((uint64_t)x14 * x31)) + (((uint64_t)x16 * x32) + ((0x2 * ((uint64_t)x18 * x30)) + (((uint64_t)x20 * x28) + ((0x2 * ((uint64_t)x22 * x26)) + (((uint64_t)x24 * x24) + ((0x2 * ((uint64_t)x26 * x22)) + (((uint64_t)x28 * x20) + ((0x2 * ((uint64_t)x30 * x18)) + (((uint64_t)x32 * x16) + (0x2 * ((uint64_t)x31 * x14))))))))))))));
+ uint64_t x45 = ((((uint64_t)x2 * x10) + (((uint64_t)x4 * x8) + ((0x2 * ((uint64_t)x6 * x6)) + (((uint64_t)x8 * x4) + ((uint64_t)x10 * x2))))) + (0x1a5 * (((uint64_t)x12 * x31) + (((uint64_t)x14 * x32) + (((uint64_t)x16 * x30) + (((uint64_t)x18 * x28) + (((uint64_t)x20 * x26) + (((uint64_t)x22 * x24) + (((uint64_t)x24 * x22) + (((uint64_t)x26 * x20) + (((uint64_t)x28 * x18) + (((uint64_t)x30 * x16) + (((uint64_t)x32 * x14) + ((uint64_t)x31 * x12))))))))))))));
+ uint64_t x46 = ((((uint64_t)x2 * x8) + ((0x2 * ((uint64_t)x4 * x6)) + ((0x2 * ((uint64_t)x6 * x4)) + ((uint64_t)x8 * x2)))) + (0x1a5 * ((0x2 * ((uint64_t)x10 * x31)) + (((uint64_t)x12 * x32) + ((0x2 * ((uint64_t)x14 * x30)) + (((uint64_t)x16 * x28) + ((0x2 * ((uint64_t)x18 * x26)) + (((uint64_t)x20 * x24) + ((0x2 * ((uint64_t)x22 * x22)) + (((uint64_t)x24 * x20) + ((0x2 * ((uint64_t)x26 * x18)) + (((uint64_t)x28 * x16) + ((0x2 * ((uint64_t)x30 * x14)) + (((uint64_t)x32 * x12) + (0x2 * ((uint64_t)x31 * x10))))))))))))))));
+ uint64_t x47 = ((((uint64_t)x2 * x6) + (((uint64_t)x4 * x4) + ((uint64_t)x6 * x2))) + (0x1a5 * (((uint64_t)x8 * x31) + (((uint64_t)x10 * x32) + (((uint64_t)x12 * x30) + (((uint64_t)x14 * x28) + (((uint64_t)x16 * x26) + (((uint64_t)x18 * x24) + (((uint64_t)x20 * x22) + (((uint64_t)x22 * x20) + (((uint64_t)x24 * x18) + (((uint64_t)x26 * x16) + (((uint64_t)x28 * x14) + (((uint64_t)x30 * x12) + (((uint64_t)x32 * x10) + ((uint64_t)x31 * x8))))))))))))))));
+ uint64_t x48 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0x1a5 * ((0x2 * ((uint64_t)x6 * x31)) + (((uint64_t)x8 * x32) + ((0x2 * ((uint64_t)x10 * x30)) + (((uint64_t)x12 * x28) + ((0x2 * ((uint64_t)x14 * x26)) + (((uint64_t)x16 * x24) + ((0x2 * ((uint64_t)x18 * x22)) + (((uint64_t)x20 * x20) + ((0x2 * ((uint64_t)x22 * x18)) + (((uint64_t)x24 * x16) + ((0x2 * ((uint64_t)x26 * x14)) + (((uint64_t)x28 * x12) + ((0x2 * ((uint64_t)x30 * x10)) + (((uint64_t)x32 * x8) + (0x2 * ((uint64_t)x31 * x6))))))))))))))))));
+ uint64_t x49 = (((uint64_t)x2 * x2) + (0x1a5 * ((0x2 * ((uint64_t)x4 * x31)) + ((0x2 * ((uint64_t)x6 * x32)) + ((0x2 * ((uint64_t)x8 * x30)) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + ((0x2 * ((uint64_t)x16 * x22)) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + ((0x2 * ((uint64_t)x22 * x16)) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + ((0x2 * ((uint64_t)x30 * x8)) + ((0x2 * ((uint64_t)x32 * x6)) + (0x2 * ((uint64_t)x31 * x4)))))))))))))))))));
+ uint64_t x50 = (x49 >> 0x17);
+ uint32_t x51 = ((uint32_t)x49 & 0x7fffff);
+ uint64_t x52 = (x50 + x48);
+ uint64_t x53 = (x52 >> 0x17);
+ uint32_t x54 = ((uint32_t)x52 & 0x7fffff);
+ uint64_t x55 = (x53 + x47);
+ uint64_t x56 = (x55 >> 0x16);
+ uint32_t x57 = ((uint32_t)x55 & 0x3fffff);
+ uint64_t x58 = (x56 + x46);
+ uint64_t x59 = (x58 >> 0x17);
+ uint32_t x60 = ((uint32_t)x58 & 0x7fffff);
+ uint64_t x61 = (x59 + x45);
+ uint64_t x62 = (x61 >> 0x16);
+ uint32_t x63 = ((uint32_t)x61 & 0x3fffff);
+ uint64_t x64 = (x62 + x44);
+ uint64_t x65 = (x64 >> 0x17);
+ uint32_t x66 = ((uint32_t)x64 & 0x7fffff);
+ uint64_t x67 = (x65 + x43);
+ uint64_t x68 = (x67 >> 0x16);
+ uint32_t x69 = ((uint32_t)x67 & 0x3fffff);
+ uint64_t x70 = (x68 + x42);
+ uint64_t x71 = (x70 >> 0x17);
+ uint32_t x72 = ((uint32_t)x70 & 0x7fffff);
+ uint64_t x73 = (x71 + x41);
+ uint64_t x74 = (x73 >> 0x16);
+ uint32_t x75 = ((uint32_t)x73 & 0x3fffff);
+ uint64_t x76 = (x74 + x40);
+ uint64_t x77 = (x76 >> 0x17);
+ uint32_t x78 = ((uint32_t)x76 & 0x7fffff);
+ uint64_t x79 = (x77 + x39);
+ uint64_t x80 = (x79 >> 0x16);
+ uint32_t x81 = ((uint32_t)x79 & 0x3fffff);
+ uint64_t x82 = (x80 + x38);
+ uint64_t x83 = (x82 >> 0x17);
+ uint32_t x84 = ((uint32_t)x82 & 0x7fffff);
+ uint64_t x85 = (x83 + x37);
+ uint64_t x86 = (x85 >> 0x16);
+ uint32_t x87 = ((uint32_t)x85 & 0x3fffff);
+ uint64_t x88 = (x86 + x36);
+ uint64_t x89 = (x88 >> 0x17);
+ uint32_t x90 = ((uint32_t)x88 & 0x7fffff);
+ uint64_t x91 = (x89 + x35);
+ uint64_t x92 = (x91 >> 0x16);
+ uint32_t x93 = ((uint32_t)x91 & 0x3fffff);
+ uint64_t x94 = (x92 + x34);
+ uint64_t x95 = (x94 >> 0x17);
+ uint32_t x96 = ((uint32_t)x94 & 0x7fffff);
+ uint64_t x97 = (x95 + x33);
+ uint32_t x98 = (uint32_t) (x97 >> 0x16);
+ uint32_t x99 = ((uint32_t)x97 & 0x3fffff);
+ uint64_t x100 = (x51 + ((uint64_t)0x1a5 * x98));
+ uint32_t x101 = (uint32_t) (x100 >> 0x17);
+ uint32_t x102 = ((uint32_t)x100 & 0x7fffff);
+ uint32_t x103 = (x101 + x54);
+ uint32_t x104 = (x103 >> 0x17);
+ uint32_t x105 = (x103 & 0x7fffff);
+ return (Return x99, Return x96, Return x93, Return x90, Return x87, Return x84, Return x81, Return x78, Return x75, Return x72, Return x69, Return x66, Return x63, Return x60, (x104 + x57), Return x105, Return x102))
+x
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m421_17limbs/fesub.c b/src/Specific/solinas32_2e383m421_17limbs/fesub.c
index a279a787d..24d30fe2b 100644
--- a/src/Specific/solinas32_2e383m421_17limbs/fesub.c
+++ b/src/Specific/solinas32_2e383m421_17limbs/fesub.c
@@ -33,7 +33,7 @@ static void fesub(uint32_t out[17], const uint32_t in1[17], const uint32_t in2[1
{ const uint32_t x41 = in2[2];
{ const uint32_t x39 = in2[1];
{ const uint32_t x37 = in2[0];
- out[0] = ((Const 16776374 + x5) - x37);
+ out[0] = ((0xfffcb6 + x5) - x37);
out[1] = ((0xfffffe + x7) - x39);
out[2] = ((0x7ffffe + x9) - x41);
out[3] = ((0xfffffe + x11) - x43);
diff --git a/src/Specific/solinas32_2e383m421_17limbs/fesubDisplay.log b/src/Specific/solinas32_2e383m421_17limbs/fesubDisplay.log
index ac023b535..ff346dae3 100644
--- a/src/Specific/solinas32_2e383m421_17limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e383m421_17limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x34, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x66, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37))%core,
- (((0x7ffffe + x34) - x66), ((0xfffffe + x35) - x67), ((0x7ffffe + x33) - x65), ((0xfffffe + x31) - x63), ((0x7ffffe + x29) - x61), ((0xfffffe + x27) - x59), ((0x7ffffe + x25) - x57), ((0xfffffe + x23) - x55), ((0x7ffffe + x21) - x53), ((0xfffffe + x19) - x51), ((0x7ffffe + x17) - x49), ((0xfffffe + x15) - x47), ((0x7ffffe + x13) - x45), ((0xfffffe + x11) - x43), ((0x7ffffe + x9) - x41), ((0xfffffe + x7) - x39), ((Const 16776374 + x5) - x37)))
+ (((0x7ffffe + x34) - x66), ((0xfffffe + x35) - x67), ((0x7ffffe + x33) - x65), ((0xfffffe + x31) - x63), ((0x7ffffe + x29) - x61), ((0xfffffe + x27) - x59), ((0x7ffffe + x25) - x57), ((0xfffffe + x23) - x55), ((0x7ffffe + x21) - x53), ((0xfffffe + x19) - x51), ((0x7ffffe + x17) - x49), ((0xfffffe + x15) - x47), ((0x7ffffe + x13) - x45), ((0xfffffe + x11) - x43), ((0x7ffffe + x9) - x41), ((0xfffffe + x7) - x39), ((0xfffcb6 + x5) - x37)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m421_17limbs/freeze.c b/src/Specific/solinas32_2e383m421_17limbs/freeze.c
index a53a2ef2a..144fb9181 100644
--- a/src/Specific/solinas32_2e383m421_17limbs/freeze.c
+++ b/src/Specific/solinas32_2e383m421_17limbs/freeze.c
@@ -16,7 +16,7 @@ static void freeze(uint32_t out[17], const uint32_t in1[17]) {
{ const uint32_t x6 = in1[2];
{ const uint32_t x4 = in1[1];
{ const uint32_t x2 = in1[0];
- { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 8388187);
+ { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x7ffe5b);
{ uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x4, 0x7fffff);
{ uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x6, 0x3fffff);
{ uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x8, 0x7fffff);
@@ -34,7 +34,7 @@ static void freeze(uint32_t out[17], const uint32_t in1[17]) {
{ uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x32, 0x7fffff);
{ uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x31, 0x3fffff);
{ uint32_t x84 = cmovznz32(x83, 0x0, 0xffffffff);
- { uint32_t x85 = (x84 & Const 8388187);
+ { uint32_t x85 = (x84 & 0x7ffe5b);
{ uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x34, Return x85);
{ uint32_t x89 = (x84 & 0x7fffff);
{ uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x37, Return x89);
diff --git a/src/Specific/solinas32_2e383m421_17limbs/freezeDisplay.log b/src/Specific/solinas32_2e383m421_17limbs/freezeDisplay.log
index a0a78cceb..34595a6f1 100644
--- a/src/Specific/solinas32_2e383m421_17limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e383m421_17limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x31, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 8388187);
+ uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x7ffe5b);
uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x4, 0x7fffff);
uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x6, 0x3fffff);
uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x8, 0x7fffff);
@@ -20,7 +20,7 @@ Interp-η
uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x32, 0x7fffff);
uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x31, 0x3fffff);
uint32_t x84 = cmovznz32(x83, 0x0, 0xffffffff);
- uint32_t x85 = (x84 & Const 8388187);
+ uint32_t x85 = (x84 & 0x7ffe5b);
uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x34, Return x85);
uint32_t x89 = (x84 & 0x7fffff);
uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x37, Return x89);
diff --git a/src/Specific/solinas32_2e383m421_18limbs/femul.c b/src/Specific/solinas32_2e383m421_18limbs/femul.c
new file mode 100644
index 000000000..a53dd2381
--- /dev/null
+++ b/src/Specific/solinas32_2e383m421_18limbs/femul.c
@@ -0,0 +1,134 @@
+static void femul(uint32_t out[18], const uint32_t in1[18], const uint32_t in2[18]) {
+ { const uint32_t x36 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x70 = in2[17];
+ { const uint32_t x71 = in2[16];
+ { const uint32_t x69 = in2[15];
+ { const uint32_t x67 = in2[14];
+ { const uint32_t x65 = in2[13];
+ { const uint32_t x63 = in2[12];
+ { const uint32_t x61 = in2[11];
+ { const uint32_t x59 = in2[10];
+ { const uint32_t x57 = in2[9];
+ { const uint32_t x55 = in2[8];
+ { const uint32_t x53 = in2[7];
+ { const uint32_t x51 = in2[6];
+ { const uint32_t x49 = in2[5];
+ { const uint32_t x47 = in2[4];
+ { const uint32_t x45 = in2[3];
+ { const uint32_t x43 = in2[2];
+ { const uint32_t x41 = in2[1];
+ { const uint32_t x39 = in2[0];
+ { uint64_t x72 = (((uint64_t)x5 * x70) + ((0x2 * ((uint64_t)x7 * x71)) + ((0x2 * ((uint64_t)x9 * x69)) + (((uint64_t)x11 * x67) + ((0x2 * ((uint64_t)x13 * x65)) + ((0x2 * ((uint64_t)x15 * x63)) + ((0x2 * ((uint64_t)x17 * x61)) + (((uint64_t)x19 * x59) + ((0x2 * ((uint64_t)x21 * x57)) + ((0x2 * ((uint64_t)x23 * x55)) + (((uint64_t)x25 * x53) + ((0x2 * ((uint64_t)x27 * x51)) + ((0x2 * ((uint64_t)x29 * x49)) + ((0x2 * ((uint64_t)x31 * x47)) + (((uint64_t)x33 * x45) + ((0x2 * ((uint64_t)x35 * x43)) + ((0x2 * ((uint64_t)x37 * x41)) + ((uint64_t)x36 * x39))))))))))))))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x71) + ((0x2 * ((uint64_t)x7 * x69)) + (((uint64_t)x9 * x67) + (((uint64_t)x11 * x65) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + (((uint64_t)x17 * x59) + (((uint64_t)x19 * x57) + ((0x2 * ((uint64_t)x21 * x55)) + (((uint64_t)x23 * x53) + (((uint64_t)x25 * x51) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + (((uint64_t)x31 * x45) + (((uint64_t)x33 * x43) + ((0x2 * ((uint64_t)x35 * x41)) + ((uint64_t)x37 * x39))))))))))))))))) + (0x1a5 * ((uint64_t)x36 * x70)));
+ { uint64_t x74 = ((((uint64_t)x5 * x69) + (((uint64_t)x7 * x67) + (((uint64_t)x9 * x65) + (((uint64_t)x11 * x63) + ((0x2 * ((uint64_t)x13 * x61)) + (((uint64_t)x15 * x59) + (((uint64_t)x17 * x57) + (((uint64_t)x19 * x55) + (((uint64_t)x21 * x53) + (((uint64_t)x23 * x51) + (((uint64_t)x25 * x49) + ((0x2 * ((uint64_t)x27 * x47)) + (((uint64_t)x29 * x45) + (((uint64_t)x31 * x43) + (((uint64_t)x33 * x41) + ((uint64_t)x35 * x39)))))))))))))))) + (0x1a5 * (((uint64_t)x37 * x70) + ((uint64_t)x36 * x71))));
+ { uint64_t x75 = ((((uint64_t)x5 * x67) + ((0x2 * ((uint64_t)x7 * x65)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + (((uint64_t)x19 * x53) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((uint64_t)x33 * x39))))))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x35 * x70)) + ((0x2 * ((uint64_t)x37 * x71)) + (0x2 * ((uint64_t)x36 * x69))))));
+ { uint64_t x76 = ((((uint64_t)x5 * x65) + ((0x2 * ((uint64_t)x7 * x63)) + ((0x2 * ((uint64_t)x9 * x61)) + (((uint64_t)x11 * x59) + ((0x2 * ((uint64_t)x13 * x57)) + ((0x2 * ((uint64_t)x15 * x55)) + (((uint64_t)x17 * x53) + (((uint64_t)x19 * x51) + ((0x2 * ((uint64_t)x21 * x49)) + ((0x2 * ((uint64_t)x23 * x47)) + (((uint64_t)x25 * x45) + ((0x2 * ((uint64_t)x27 * x43)) + ((0x2 * ((uint64_t)x29 * x41)) + ((uint64_t)x31 * x39)))))))))))))) + (0x1a5 * (((uint64_t)x33 * x70) + ((0x2 * ((uint64_t)x35 * x71)) + ((0x2 * ((uint64_t)x37 * x69)) + ((uint64_t)x36 * x67))))));
+ { uint64_t x77 = ((((uint64_t)x5 * x63) + ((0x2 * ((uint64_t)x7 * x61)) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + ((0x2 * ((uint64_t)x13 * x55)) + (((uint64_t)x15 * x53) + (((uint64_t)x17 * x51) + (((uint64_t)x19 * x49) + ((0x2 * ((uint64_t)x21 * x47)) + (((uint64_t)x23 * x45) + (((uint64_t)x25 * x43) + ((0x2 * ((uint64_t)x27 * x41)) + ((uint64_t)x29 * x39))))))))))))) + (0x1a5 * (((uint64_t)x31 * x70) + (((uint64_t)x33 * x71) + ((0x2 * ((uint64_t)x35 * x69)) + (((uint64_t)x37 * x67) + ((uint64_t)x36 * x65)))))));
+ { uint64_t x78 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + ((uint64_t)x27 * x39)))))))))))) + (0x1a5 * (((uint64_t)x29 * x70) + (((uint64_t)x31 * x71) + (((uint64_t)x33 * x69) + (((uint64_t)x35 * x67) + (((uint64_t)x37 * x65) + ((uint64_t)x36 * x63))))))));
+ { uint64_t x79 = ((((uint64_t)x5 * x59) + ((0x2 * ((uint64_t)x7 * x57)) + ((0x2 * ((uint64_t)x9 * x55)) + (((uint64_t)x11 * x53) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + ((0x2 * ((uint64_t)x17 * x47)) + (((uint64_t)x19 * x45) + ((0x2 * ((uint64_t)x21 * x43)) + ((0x2 * ((uint64_t)x23 * x41)) + ((uint64_t)x25 * x39))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x27 * x70)) + ((0x2 * ((uint64_t)x29 * x71)) + ((0x2 * ((uint64_t)x31 * x69)) + (((uint64_t)x33 * x67) + ((0x2 * ((uint64_t)x35 * x65)) + ((0x2 * ((uint64_t)x37 * x63)) + (0x2 * ((uint64_t)x36 * x61))))))))));
+ { uint64_t x80 = ((((uint64_t)x5 * x57) + ((0x2 * ((uint64_t)x7 * x55)) + (((uint64_t)x9 * x53) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + ((0x2 * ((uint64_t)x15 * x47)) + (((uint64_t)x17 * x45) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + ((uint64_t)x23 * x39)))))))))) + (0x1a5 * (((uint64_t)x25 * x70) + ((0x2 * ((uint64_t)x27 * x71)) + ((0x2 * ((uint64_t)x29 * x69)) + (((uint64_t)x31 * x67) + (((uint64_t)x33 * x65) + ((0x2 * ((uint64_t)x35 * x63)) + ((0x2 * ((uint64_t)x37 * x61)) + ((uint64_t)x36 * x59))))))))));
+ { uint64_t x81 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + (((uint64_t)x11 * x49) + ((0x2 * ((uint64_t)x13 * x47)) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + ((uint64_t)x21 * x39))))))))) + (0x1a5 * (((uint64_t)x23 * x70) + (((uint64_t)x25 * x71) + ((0x2 * ((uint64_t)x27 * x69)) + (((uint64_t)x29 * x67) + (((uint64_t)x31 * x65) + (((uint64_t)x33 * x63) + ((0x2 * ((uint64_t)x35 * x61)) + (((uint64_t)x37 * x59) + ((uint64_t)x36 * x57)))))))))));
+ { uint64_t x82 = ((((uint64_t)x5 * x53) + ((0x2 * ((uint64_t)x7 * x51)) + ((0x2 * ((uint64_t)x9 * x49)) + ((0x2 * ((uint64_t)x11 * x47)) + ((0x2 * ((uint64_t)x13 * x45)) + ((0x2 * ((uint64_t)x15 * x43)) + ((0x2 * ((uint64_t)x17 * x41)) + ((uint64_t)x19 * x39)))))))) + (0x1a5 * ((0x2 * ((uint64_t)x21 * x70)) + ((0x2 * ((uint64_t)x23 * x71)) + ((0x2 * ((uint64_t)x25 * x69)) + ((0x2 * ((uint64_t)x27 * x67)) + ((0x2 * ((uint64_t)x29 * x65)) + ((0x2 * ((uint64_t)x31 * x63)) + ((0x2 * ((uint64_t)x33 * x61)) + ((0x2 * ((uint64_t)x35 * x59)) + ((0x2 * ((uint64_t)x37 * x57)) + (0x2 * ((uint64_t)x36 * x55)))))))))))));
+ { uint64_t x83 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + ((0x2 * ((uint64_t)x9 * x47)) + (((uint64_t)x11 * x45) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + ((uint64_t)x17 * x39))))))) + (0x1a5 * (((uint64_t)x19 * x70) + ((0x2 * ((uint64_t)x21 * x71)) + ((0x2 * ((uint64_t)x23 * x69)) + (((uint64_t)x25 * x67) + ((0x2 * ((uint64_t)x27 * x65)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + (((uint64_t)x33 * x59) + ((0x2 * ((uint64_t)x35 * x57)) + ((0x2 * ((uint64_t)x37 * x55)) + ((uint64_t)x36 * x53)))))))))))));
+ { uint64_t x84 = ((((uint64_t)x5 * x49) + ((0x2 * ((uint64_t)x7 * x47)) + (((uint64_t)x9 * x45) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + ((uint64_t)x15 * x39)))))) + (0x1a5 * (((uint64_t)x17 * x70) + (((uint64_t)x19 * x71) + ((0x2 * ((uint64_t)x21 * x69)) + (((uint64_t)x23 * x67) + (((uint64_t)x25 * x65) + ((0x2 * ((uint64_t)x27 * x63)) + ((0x2 * ((uint64_t)x29 * x61)) + (((uint64_t)x31 * x59) + (((uint64_t)x33 * x57) + ((0x2 * ((uint64_t)x35 * x55)) + (((uint64_t)x37 * x53) + ((uint64_t)x36 * x51))))))))))))));
+ { uint64_t x85 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + (((uint64_t)x11 * x41) + ((uint64_t)x13 * x39))))) + (0x1a5 * (((uint64_t)x15 * x70) + (((uint64_t)x17 * x71) + (((uint64_t)x19 * x69) + (((uint64_t)x21 * x67) + (((uint64_t)x23 * x65) + (((uint64_t)x25 * x63) + ((0x2 * ((uint64_t)x27 * x61)) + (((uint64_t)x29 * x59) + (((uint64_t)x31 * x57) + (((uint64_t)x33 * x55) + (((uint64_t)x35 * x53) + (((uint64_t)x37 * x51) + ((uint64_t)x36 * x49)))))))))))))));
+ { uint64_t x86 = ((((uint64_t)x5 * x45) + ((0x2 * ((uint64_t)x7 * x43)) + ((0x2 * ((uint64_t)x9 * x41)) + ((uint64_t)x11 * x39)))) + (0x1a5 * ((0x2 * ((uint64_t)x13 * x70)) + ((0x2 * ((uint64_t)x15 * x71)) + ((0x2 * ((uint64_t)x17 * x69)) + (((uint64_t)x19 * x67) + ((0x2 * ((uint64_t)x21 * x65)) + ((0x2 * ((uint64_t)x23 * x63)) + ((0x2 * ((uint64_t)x25 * x61)) + ((0x2 * ((uint64_t)x27 * x59)) + ((0x2 * ((uint64_t)x29 * x57)) + ((0x2 * ((uint64_t)x31 * x55)) + (((uint64_t)x33 * x53) + ((0x2 * ((uint64_t)x35 * x51)) + ((0x2 * ((uint64_t)x37 * x49)) + (0x2 * ((uint64_t)x36 * x47)))))))))))))))));
+ { uint64_t x87 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((uint64_t)x9 * x39))) + (0x1a5 * (((uint64_t)x11 * x70) + ((0x2 * ((uint64_t)x13 * x71)) + ((0x2 * ((uint64_t)x15 * x69)) + (((uint64_t)x17 * x67) + (((uint64_t)x19 * x65) + ((0x2 * ((uint64_t)x21 * x63)) + ((0x2 * ((uint64_t)x23 * x61)) + (((uint64_t)x25 * x59) + ((0x2 * ((uint64_t)x27 * x57)) + ((0x2 * ((uint64_t)x29 * x55)) + (((uint64_t)x31 * x53) + (((uint64_t)x33 * x51) + ((0x2 * ((uint64_t)x35 * x49)) + ((0x2 * ((uint64_t)x37 * x47)) + ((uint64_t)x36 * x45)))))))))))))))));
+ { uint64_t x88 = ((((uint64_t)x5 * x41) + ((uint64_t)x7 * x39)) + (0x1a5 * (((uint64_t)x9 * x70) + (((uint64_t)x11 * x71) + ((0x2 * ((uint64_t)x13 * x69)) + (((uint64_t)x15 * x67) + (((uint64_t)x17 * x65) + (((uint64_t)x19 * x63) + ((0x2 * ((uint64_t)x21 * x61)) + (((uint64_t)x23 * x59) + (((uint64_t)x25 * x57) + ((0x2 * ((uint64_t)x27 * x55)) + (((uint64_t)x29 * x53) + (((uint64_t)x31 * x51) + (((uint64_t)x33 * x49) + ((0x2 * ((uint64_t)x35 * x47)) + (((uint64_t)x37 * x45) + ((uint64_t)x36 * x43))))))))))))))))));
+ { uint64_t x89 = (((uint64_t)x5 * x39) + (0x1a5 * ((0x2 * ((uint64_t)x7 * x70)) + ((0x2 * ((uint64_t)x9 * x71)) + ((0x2 * ((uint64_t)x11 * x69)) + ((0x2 * ((uint64_t)x13 * x67)) + ((0x2 * ((uint64_t)x15 * x65)) + ((0x2 * ((uint64_t)x17 * x63)) + ((0x2 * ((uint64_t)x19 * x61)) + ((0x2 * ((uint64_t)x21 * x59)) + ((0x2 * ((uint64_t)x23 * x57)) + ((0x2 * ((uint64_t)x25 * x55)) + ((0x2 * ((uint64_t)x27 * x53)) + ((0x2 * ((uint64_t)x29 * x51)) + ((0x2 * ((uint64_t)x31 * x49)) + ((0x2 * ((uint64_t)x33 * x47)) + ((0x2 * ((uint64_t)x35 * x45)) + ((0x2 * ((uint64_t)x37 * x43)) + (0x2 * ((uint64_t)x36 * x41))))))))))))))))))));
+ { uint64_t x90 = (x89 >> 0x16);
+ { uint32_t x91 = ((uint32_t)x89 & 0x3fffff);
+ { uint64_t x92 = (x90 + x88);
+ { uint64_t x93 = (x92 >> 0x15);
+ { uint32_t x94 = ((uint32_t)x92 & 0x1fffff);
+ { uint64_t x95 = (x93 + x87);
+ { uint64_t x96 = (x95 >> 0x15);
+ { uint32_t x97 = ((uint32_t)x95 & 0x1fffff);
+ { uint64_t x98 = (x96 + x86);
+ { uint64_t x99 = (x98 >> 0x16);
+ { uint32_t x100 = ((uint32_t)x98 & 0x3fffff);
+ { uint64_t x101 = (x99 + x85);
+ { uint64_t x102 = (x101 >> 0x15);
+ { uint32_t x103 = ((uint32_t)x101 & 0x1fffff);
+ { uint64_t x104 = (x102 + x84);
+ { uint64_t x105 = (x104 >> 0x15);
+ { uint32_t x106 = ((uint32_t)x104 & 0x1fffff);
+ { uint64_t x107 = (x105 + x83);
+ { uint64_t x108 = (x107 >> 0x15);
+ { uint32_t x109 = ((uint32_t)x107 & 0x1fffff);
+ { uint64_t x110 = (x108 + x82);
+ { uint64_t x111 = (x110 >> 0x16);
+ { uint32_t x112 = ((uint32_t)x110 & 0x3fffff);
+ { uint64_t x113 = (x111 + x81);
+ { uint64_t x114 = (x113 >> 0x15);
+ { uint32_t x115 = ((uint32_t)x113 & 0x1fffff);
+ { uint64_t x116 = (x114 + x80);
+ { uint64_t x117 = (x116 >> 0x15);
+ { uint32_t x118 = ((uint32_t)x116 & 0x1fffff);
+ { uint64_t x119 = (x117 + x79);
+ { uint64_t x120 = (x119 >> 0x16);
+ { uint32_t x121 = ((uint32_t)x119 & 0x3fffff);
+ { uint64_t x122 = (x120 + x78);
+ { uint64_t x123 = (x122 >> 0x15);
+ { uint32_t x124 = ((uint32_t)x122 & 0x1fffff);
+ { uint64_t x125 = (x123 + x77);
+ { uint64_t x126 = (x125 >> 0x15);
+ { uint32_t x127 = ((uint32_t)x125 & 0x1fffff);
+ { uint64_t x128 = (x126 + x76);
+ { uint64_t x129 = (x128 >> 0x15);
+ { uint32_t x130 = ((uint32_t)x128 & 0x1fffff);
+ { uint64_t x131 = (x129 + x75);
+ { uint64_t x132 = (x131 >> 0x16);
+ { uint32_t x133 = ((uint32_t)x131 & 0x3fffff);
+ { uint64_t x134 = (x132 + x74);
+ { uint64_t x135 = (x134 >> 0x15);
+ { uint32_t x136 = ((uint32_t)x134 & 0x1fffff);
+ { uint64_t x137 = (x135 + x73);
+ { uint64_t x138 = (x137 >> 0x15);
+ { uint32_t x139 = ((uint32_t)x137 & 0x1fffff);
+ { uint64_t x140 = (x138 + x72);
+ { uint32_t x141 = (uint32_t) (x140 >> 0x15);
+ { uint32_t x142 = ((uint32_t)x140 & 0x1fffff);
+ { uint64_t x143 = (x91 + ((uint64_t)0x1a5 * x141));
+ { uint32_t x144 = (uint32_t) (x143 >> 0x16);
+ { uint32_t x145 = ((uint32_t)x143 & 0x3fffff);
+ { uint32_t x146 = (x144 + x94);
+ { uint32_t x147 = (x146 >> 0x15);
+ { uint32_t x148 = (x146 & 0x1fffff);
+ out[0] = x145;
+ out[1] = x148;
+ out[2] = (x147 + x97);
+ out[3] = x100;
+ out[4] = x103;
+ out[5] = x106;
+ out[6] = x109;
+ out[7] = x112;
+ out[8] = x115;
+ out[9] = x118;
+ out[10] = x121;
+ out[11] = x124;
+ out[12] = x127;
+ out[13] = x130;
+ out[14] = x133;
+ out[15] = x136;
+ out[16] = x139;
+ out[17] = x142;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e383m421_18limbs/femulDisplay.log b/src/Specific/solinas32_2e383m421_18limbs/femulDisplay.log
new file mode 100644
index 000000000..e34cb1c55
--- /dev/null
+++ b/src/Specific/solinas32_2e383m421_18limbs/femulDisplay.log
@@ -0,0 +1,84 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x36, x37, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x70, x71, x69, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39))%core,
+ uint64_t x72 = (((uint64_t)x5 * x70) + ((0x2 * ((uint64_t)x7 * x71)) + ((0x2 * ((uint64_t)x9 * x69)) + (((uint64_t)x11 * x67) + ((0x2 * ((uint64_t)x13 * x65)) + ((0x2 * ((uint64_t)x15 * x63)) + ((0x2 * ((uint64_t)x17 * x61)) + (((uint64_t)x19 * x59) + ((0x2 * ((uint64_t)x21 * x57)) + ((0x2 * ((uint64_t)x23 * x55)) + (((uint64_t)x25 * x53) + ((0x2 * ((uint64_t)x27 * x51)) + ((0x2 * ((uint64_t)x29 * x49)) + ((0x2 * ((uint64_t)x31 * x47)) + (((uint64_t)x33 * x45) + ((0x2 * ((uint64_t)x35 * x43)) + ((0x2 * ((uint64_t)x37 * x41)) + ((uint64_t)x36 * x39))))))))))))))))));
+ uint64_t x73 = ((((uint64_t)x5 * x71) + ((0x2 * ((uint64_t)x7 * x69)) + (((uint64_t)x9 * x67) + (((uint64_t)x11 * x65) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + (((uint64_t)x17 * x59) + (((uint64_t)x19 * x57) + ((0x2 * ((uint64_t)x21 * x55)) + (((uint64_t)x23 * x53) + (((uint64_t)x25 * x51) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + (((uint64_t)x31 * x45) + (((uint64_t)x33 * x43) + ((0x2 * ((uint64_t)x35 * x41)) + ((uint64_t)x37 * x39))))))))))))))))) + (0x1a5 * ((uint64_t)x36 * x70)));
+ uint64_t x74 = ((((uint64_t)x5 * x69) + (((uint64_t)x7 * x67) + (((uint64_t)x9 * x65) + (((uint64_t)x11 * x63) + ((0x2 * ((uint64_t)x13 * x61)) + (((uint64_t)x15 * x59) + (((uint64_t)x17 * x57) + (((uint64_t)x19 * x55) + (((uint64_t)x21 * x53) + (((uint64_t)x23 * x51) + (((uint64_t)x25 * x49) + ((0x2 * ((uint64_t)x27 * x47)) + (((uint64_t)x29 * x45) + (((uint64_t)x31 * x43) + (((uint64_t)x33 * x41) + ((uint64_t)x35 * x39)))))))))))))))) + (0x1a5 * (((uint64_t)x37 * x70) + ((uint64_t)x36 * x71))));
+ uint64_t x75 = ((((uint64_t)x5 * x67) + ((0x2 * ((uint64_t)x7 * x65)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + (((uint64_t)x19 * x53) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((uint64_t)x33 * x39))))))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x35 * x70)) + ((0x2 * ((uint64_t)x37 * x71)) + (0x2 * ((uint64_t)x36 * x69))))));
+ uint64_t x76 = ((((uint64_t)x5 * x65) + ((0x2 * ((uint64_t)x7 * x63)) + ((0x2 * ((uint64_t)x9 * x61)) + (((uint64_t)x11 * x59) + ((0x2 * ((uint64_t)x13 * x57)) + ((0x2 * ((uint64_t)x15 * x55)) + (((uint64_t)x17 * x53) + (((uint64_t)x19 * x51) + ((0x2 * ((uint64_t)x21 * x49)) + ((0x2 * ((uint64_t)x23 * x47)) + (((uint64_t)x25 * x45) + ((0x2 * ((uint64_t)x27 * x43)) + ((0x2 * ((uint64_t)x29 * x41)) + ((uint64_t)x31 * x39)))))))))))))) + (0x1a5 * (((uint64_t)x33 * x70) + ((0x2 * ((uint64_t)x35 * x71)) + ((0x2 * ((uint64_t)x37 * x69)) + ((uint64_t)x36 * x67))))));
+ uint64_t x77 = ((((uint64_t)x5 * x63) + ((0x2 * ((uint64_t)x7 * x61)) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + ((0x2 * ((uint64_t)x13 * x55)) + (((uint64_t)x15 * x53) + (((uint64_t)x17 * x51) + (((uint64_t)x19 * x49) + ((0x2 * ((uint64_t)x21 * x47)) + (((uint64_t)x23 * x45) + (((uint64_t)x25 * x43) + ((0x2 * ((uint64_t)x27 * x41)) + ((uint64_t)x29 * x39))))))))))))) + (0x1a5 * (((uint64_t)x31 * x70) + (((uint64_t)x33 * x71) + ((0x2 * ((uint64_t)x35 * x69)) + (((uint64_t)x37 * x67) + ((uint64_t)x36 * x65)))))));
+ uint64_t x78 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + ((uint64_t)x27 * x39)))))))))))) + (0x1a5 * (((uint64_t)x29 * x70) + (((uint64_t)x31 * x71) + (((uint64_t)x33 * x69) + (((uint64_t)x35 * x67) + (((uint64_t)x37 * x65) + ((uint64_t)x36 * x63))))))));
+ uint64_t x79 = ((((uint64_t)x5 * x59) + ((0x2 * ((uint64_t)x7 * x57)) + ((0x2 * ((uint64_t)x9 * x55)) + (((uint64_t)x11 * x53) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + ((0x2 * ((uint64_t)x17 * x47)) + (((uint64_t)x19 * x45) + ((0x2 * ((uint64_t)x21 * x43)) + ((0x2 * ((uint64_t)x23 * x41)) + ((uint64_t)x25 * x39))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x27 * x70)) + ((0x2 * ((uint64_t)x29 * x71)) + ((0x2 * ((uint64_t)x31 * x69)) + (((uint64_t)x33 * x67) + ((0x2 * ((uint64_t)x35 * x65)) + ((0x2 * ((uint64_t)x37 * x63)) + (0x2 * ((uint64_t)x36 * x61))))))))));
+ uint64_t x80 = ((((uint64_t)x5 * x57) + ((0x2 * ((uint64_t)x7 * x55)) + (((uint64_t)x9 * x53) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + ((0x2 * ((uint64_t)x15 * x47)) + (((uint64_t)x17 * x45) + (((uint64_t)x19 * x43) + ((0x2 * ((uint64_t)x21 * x41)) + ((uint64_t)x23 * x39)))))))))) + (0x1a5 * (((uint64_t)x25 * x70) + ((0x2 * ((uint64_t)x27 * x71)) + ((0x2 * ((uint64_t)x29 * x69)) + (((uint64_t)x31 * x67) + (((uint64_t)x33 * x65) + ((0x2 * ((uint64_t)x35 * x63)) + ((0x2 * ((uint64_t)x37 * x61)) + ((uint64_t)x36 * x59))))))))));
+ uint64_t x81 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + (((uint64_t)x11 * x49) + ((0x2 * ((uint64_t)x13 * x47)) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + ((uint64_t)x21 * x39))))))))) + (0x1a5 * (((uint64_t)x23 * x70) + (((uint64_t)x25 * x71) + ((0x2 * ((uint64_t)x27 * x69)) + (((uint64_t)x29 * x67) + (((uint64_t)x31 * x65) + (((uint64_t)x33 * x63) + ((0x2 * ((uint64_t)x35 * x61)) + (((uint64_t)x37 * x59) + ((uint64_t)x36 * x57)))))))))));
+ uint64_t x82 = ((((uint64_t)x5 * x53) + ((0x2 * ((uint64_t)x7 * x51)) + ((0x2 * ((uint64_t)x9 * x49)) + ((0x2 * ((uint64_t)x11 * x47)) + ((0x2 * ((uint64_t)x13 * x45)) + ((0x2 * ((uint64_t)x15 * x43)) + ((0x2 * ((uint64_t)x17 * x41)) + ((uint64_t)x19 * x39)))))))) + (0x1a5 * ((0x2 * ((uint64_t)x21 * x70)) + ((0x2 * ((uint64_t)x23 * x71)) + ((0x2 * ((uint64_t)x25 * x69)) + ((0x2 * ((uint64_t)x27 * x67)) + ((0x2 * ((uint64_t)x29 * x65)) + ((0x2 * ((uint64_t)x31 * x63)) + ((0x2 * ((uint64_t)x33 * x61)) + ((0x2 * ((uint64_t)x35 * x59)) + ((0x2 * ((uint64_t)x37 * x57)) + (0x2 * ((uint64_t)x36 * x55)))))))))))));
+ uint64_t x83 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + ((0x2 * ((uint64_t)x9 * x47)) + (((uint64_t)x11 * x45) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + ((uint64_t)x17 * x39))))))) + (0x1a5 * (((uint64_t)x19 * x70) + ((0x2 * ((uint64_t)x21 * x71)) + ((0x2 * ((uint64_t)x23 * x69)) + (((uint64_t)x25 * x67) + ((0x2 * ((uint64_t)x27 * x65)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + (((uint64_t)x33 * x59) + ((0x2 * ((uint64_t)x35 * x57)) + ((0x2 * ((uint64_t)x37 * x55)) + ((uint64_t)x36 * x53)))))))))))));
+ uint64_t x84 = ((((uint64_t)x5 * x49) + ((0x2 * ((uint64_t)x7 * x47)) + (((uint64_t)x9 * x45) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + ((uint64_t)x15 * x39)))))) + (0x1a5 * (((uint64_t)x17 * x70) + (((uint64_t)x19 * x71) + ((0x2 * ((uint64_t)x21 * x69)) + (((uint64_t)x23 * x67) + (((uint64_t)x25 * x65) + ((0x2 * ((uint64_t)x27 * x63)) + ((0x2 * ((uint64_t)x29 * x61)) + (((uint64_t)x31 * x59) + (((uint64_t)x33 * x57) + ((0x2 * ((uint64_t)x35 * x55)) + (((uint64_t)x37 * x53) + ((uint64_t)x36 * x51))))))))))))));
+ uint64_t x85 = ((((uint64_t)x5 * x47) + (((uint64_t)x7 * x45) + (((uint64_t)x9 * x43) + (((uint64_t)x11 * x41) + ((uint64_t)x13 * x39))))) + (0x1a5 * (((uint64_t)x15 * x70) + (((uint64_t)x17 * x71) + (((uint64_t)x19 * x69) + (((uint64_t)x21 * x67) + (((uint64_t)x23 * x65) + (((uint64_t)x25 * x63) + ((0x2 * ((uint64_t)x27 * x61)) + (((uint64_t)x29 * x59) + (((uint64_t)x31 * x57) + (((uint64_t)x33 * x55) + (((uint64_t)x35 * x53) + (((uint64_t)x37 * x51) + ((uint64_t)x36 * x49)))))))))))))));
+ uint64_t x86 = ((((uint64_t)x5 * x45) + ((0x2 * ((uint64_t)x7 * x43)) + ((0x2 * ((uint64_t)x9 * x41)) + ((uint64_t)x11 * x39)))) + (0x1a5 * ((0x2 * ((uint64_t)x13 * x70)) + ((0x2 * ((uint64_t)x15 * x71)) + ((0x2 * ((uint64_t)x17 * x69)) + (((uint64_t)x19 * x67) + ((0x2 * ((uint64_t)x21 * x65)) + ((0x2 * ((uint64_t)x23 * x63)) + ((0x2 * ((uint64_t)x25 * x61)) + ((0x2 * ((uint64_t)x27 * x59)) + ((0x2 * ((uint64_t)x29 * x57)) + ((0x2 * ((uint64_t)x31 * x55)) + (((uint64_t)x33 * x53) + ((0x2 * ((uint64_t)x35 * x51)) + ((0x2 * ((uint64_t)x37 * x49)) + (0x2 * ((uint64_t)x36 * x47)))))))))))))))));
+ uint64_t x87 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((uint64_t)x9 * x39))) + (0x1a5 * (((uint64_t)x11 * x70) + ((0x2 * ((uint64_t)x13 * x71)) + ((0x2 * ((uint64_t)x15 * x69)) + (((uint64_t)x17 * x67) + (((uint64_t)x19 * x65) + ((0x2 * ((uint64_t)x21 * x63)) + ((0x2 * ((uint64_t)x23 * x61)) + (((uint64_t)x25 * x59) + ((0x2 * ((uint64_t)x27 * x57)) + ((0x2 * ((uint64_t)x29 * x55)) + (((uint64_t)x31 * x53) + (((uint64_t)x33 * x51) + ((0x2 * ((uint64_t)x35 * x49)) + ((0x2 * ((uint64_t)x37 * x47)) + ((uint64_t)x36 * x45)))))))))))))))));
+ uint64_t x88 = ((((uint64_t)x5 * x41) + ((uint64_t)x7 * x39)) + (0x1a5 * (((uint64_t)x9 * x70) + (((uint64_t)x11 * x71) + ((0x2 * ((uint64_t)x13 * x69)) + (((uint64_t)x15 * x67) + (((uint64_t)x17 * x65) + (((uint64_t)x19 * x63) + ((0x2 * ((uint64_t)x21 * x61)) + (((uint64_t)x23 * x59) + (((uint64_t)x25 * x57) + ((0x2 * ((uint64_t)x27 * x55)) + (((uint64_t)x29 * x53) + (((uint64_t)x31 * x51) + (((uint64_t)x33 * x49) + ((0x2 * ((uint64_t)x35 * x47)) + (((uint64_t)x37 * x45) + ((uint64_t)x36 * x43))))))))))))))))));
+ uint64_t x89 = (((uint64_t)x5 * x39) + (0x1a5 * ((0x2 * ((uint64_t)x7 * x70)) + ((0x2 * ((uint64_t)x9 * x71)) + ((0x2 * ((uint64_t)x11 * x69)) + ((0x2 * ((uint64_t)x13 * x67)) + ((0x2 * ((uint64_t)x15 * x65)) + ((0x2 * ((uint64_t)x17 * x63)) + ((0x2 * ((uint64_t)x19 * x61)) + ((0x2 * ((uint64_t)x21 * x59)) + ((0x2 * ((uint64_t)x23 * x57)) + ((0x2 * ((uint64_t)x25 * x55)) + ((0x2 * ((uint64_t)x27 * x53)) + ((0x2 * ((uint64_t)x29 * x51)) + ((0x2 * ((uint64_t)x31 * x49)) + ((0x2 * ((uint64_t)x33 * x47)) + ((0x2 * ((uint64_t)x35 * x45)) + ((0x2 * ((uint64_t)x37 * x43)) + (0x2 * ((uint64_t)x36 * x41))))))))))))))))))));
+ uint64_t x90 = (x89 >> 0x16);
+ uint32_t x91 = ((uint32_t)x89 & 0x3fffff);
+ uint64_t x92 = (x90 + x88);
+ uint64_t x93 = (x92 >> 0x15);
+ uint32_t x94 = ((uint32_t)x92 & 0x1fffff);
+ uint64_t x95 = (x93 + x87);
+ uint64_t x96 = (x95 >> 0x15);
+ uint32_t x97 = ((uint32_t)x95 & 0x1fffff);
+ uint64_t x98 = (x96 + x86);
+ uint64_t x99 = (x98 >> 0x16);
+ uint32_t x100 = ((uint32_t)x98 & 0x3fffff);
+ uint64_t x101 = (x99 + x85);
+ uint64_t x102 = (x101 >> 0x15);
+ uint32_t x103 = ((uint32_t)x101 & 0x1fffff);
+ uint64_t x104 = (x102 + x84);
+ uint64_t x105 = (x104 >> 0x15);
+ uint32_t x106 = ((uint32_t)x104 & 0x1fffff);
+ uint64_t x107 = (x105 + x83);
+ uint64_t x108 = (x107 >> 0x15);
+ uint32_t x109 = ((uint32_t)x107 & 0x1fffff);
+ uint64_t x110 = (x108 + x82);
+ uint64_t x111 = (x110 >> 0x16);
+ uint32_t x112 = ((uint32_t)x110 & 0x3fffff);
+ uint64_t x113 = (x111 + x81);
+ uint64_t x114 = (x113 >> 0x15);
+ uint32_t x115 = ((uint32_t)x113 & 0x1fffff);
+ uint64_t x116 = (x114 + x80);
+ uint64_t x117 = (x116 >> 0x15);
+ uint32_t x118 = ((uint32_t)x116 & 0x1fffff);
+ uint64_t x119 = (x117 + x79);
+ uint64_t x120 = (x119 >> 0x16);
+ uint32_t x121 = ((uint32_t)x119 & 0x3fffff);
+ uint64_t x122 = (x120 + x78);
+ uint64_t x123 = (x122 >> 0x15);
+ uint32_t x124 = ((uint32_t)x122 & 0x1fffff);
+ uint64_t x125 = (x123 + x77);
+ uint64_t x126 = (x125 >> 0x15);
+ uint32_t x127 = ((uint32_t)x125 & 0x1fffff);
+ uint64_t x128 = (x126 + x76);
+ uint64_t x129 = (x128 >> 0x15);
+ uint32_t x130 = ((uint32_t)x128 & 0x1fffff);
+ uint64_t x131 = (x129 + x75);
+ uint64_t x132 = (x131 >> 0x16);
+ uint32_t x133 = ((uint32_t)x131 & 0x3fffff);
+ uint64_t x134 = (x132 + x74);
+ uint64_t x135 = (x134 >> 0x15);
+ uint32_t x136 = ((uint32_t)x134 & 0x1fffff);
+ uint64_t x137 = (x135 + x73);
+ uint64_t x138 = (x137 >> 0x15);
+ uint32_t x139 = ((uint32_t)x137 & 0x1fffff);
+ uint64_t x140 = (x138 + x72);
+ uint32_t x141 = (uint32_t) (x140 >> 0x15);
+ uint32_t x142 = ((uint32_t)x140 & 0x1fffff);
+ uint64_t x143 = (x91 + ((uint64_t)0x1a5 * x141));
+ uint32_t x144 = (uint32_t) (x143 >> 0x16);
+ uint32_t x145 = ((uint32_t)x143 & 0x3fffff);
+ uint32_t x146 = (x144 + x94);
+ uint32_t x147 = (x146 >> 0x15);
+ uint32_t x148 = (x146 & 0x1fffff);
+ return (Return x142, Return x139, Return x136, Return x133, Return x130, Return x127, Return x124, Return x121, Return x118, Return x115, Return x112, Return x109, Return x106, Return x103, Return x100, (x147 + x97), Return x148, Return x145))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m421_18limbs/fesquare.c b/src/Specific/solinas32_2e383m421_18limbs/fesquare.c
new file mode 100644
index 000000000..faec5f26d
--- /dev/null
+++ b/src/Specific/solinas32_2e383m421_18limbs/fesquare.c
@@ -0,0 +1,116 @@
+static void fesquare(uint32_t out[18], const uint32_t in1[18]) {
+ { const uint32_t x33 = in1[17];
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint64_t x35 = (((uint64_t)x2 * x33) + ((0x2 * ((uint64_t)x4 * x34)) + ((0x2 * ((uint64_t)x6 * x32)) + (((uint64_t)x8 * x30) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + (((uint64_t)x16 * x22) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + (((uint64_t)x22 * x16) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + (((uint64_t)x30 * x8) + ((0x2 * ((uint64_t)x32 * x6)) + ((0x2 * ((uint64_t)x34 * x4)) + ((uint64_t)x33 * x2))))))))))))))))));
+ { uint64_t x36 = ((((uint64_t)x2 * x34) + ((0x2 * ((uint64_t)x4 * x32)) + (((uint64_t)x6 * x30) + (((uint64_t)x8 * x28) + ((0x2 * ((uint64_t)x10 * x26)) + ((0x2 * ((uint64_t)x12 * x24)) + (((uint64_t)x14 * x22) + (((uint64_t)x16 * x20) + ((0x2 * ((uint64_t)x18 * x18)) + (((uint64_t)x20 * x16) + (((uint64_t)x22 * x14) + ((0x2 * ((uint64_t)x24 * x12)) + ((0x2 * ((uint64_t)x26 * x10)) + (((uint64_t)x28 * x8) + (((uint64_t)x30 * x6) + ((0x2 * ((uint64_t)x32 * x4)) + ((uint64_t)x34 * x2))))))))))))))))) + (0x1a5 * ((uint64_t)x33 * x33)));
+ { uint64_t x37 = ((((uint64_t)x2 * x32) + (((uint64_t)x4 * x30) + (((uint64_t)x6 * x28) + (((uint64_t)x8 * x26) + ((0x2 * ((uint64_t)x10 * x24)) + (((uint64_t)x12 * x22) + (((uint64_t)x14 * x20) + (((uint64_t)x16 * x18) + (((uint64_t)x18 * x16) + (((uint64_t)x20 * x14) + (((uint64_t)x22 * x12) + ((0x2 * ((uint64_t)x24 * x10)) + (((uint64_t)x26 * x8) + (((uint64_t)x28 * x6) + (((uint64_t)x30 * x4) + ((uint64_t)x32 * x2)))))))))))))))) + (0x1a5 * (((uint64_t)x34 * x33) + ((uint64_t)x33 * x34))));
+ { uint64_t x38 = ((((uint64_t)x2 * x30) + ((0x2 * ((uint64_t)x4 * x28)) + ((0x2 * ((uint64_t)x6 * x26)) + ((0x2 * ((uint64_t)x8 * x24)) + ((0x2 * ((uint64_t)x10 * x22)) + ((0x2 * ((uint64_t)x12 * x20)) + ((0x2 * ((uint64_t)x14 * x18)) + (((uint64_t)x16 * x16) + ((0x2 * ((uint64_t)x18 * x14)) + ((0x2 * ((uint64_t)x20 * x12)) + ((0x2 * ((uint64_t)x22 * x10)) + ((0x2 * ((uint64_t)x24 * x8)) + ((0x2 * ((uint64_t)x26 * x6)) + ((0x2 * ((uint64_t)x28 * x4)) + ((uint64_t)x30 * x2))))))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x32 * x33)) + ((0x2 * ((uint64_t)x34 * x34)) + (0x2 * ((uint64_t)x33 * x32))))));
+ { uint64_t x39 = ((((uint64_t)x2 * x28) + ((0x2 * ((uint64_t)x4 * x26)) + ((0x2 * ((uint64_t)x6 * x24)) + (((uint64_t)x8 * x22) + ((0x2 * ((uint64_t)x10 * x20)) + ((0x2 * ((uint64_t)x12 * x18)) + (((uint64_t)x14 * x16) + (((uint64_t)x16 * x14) + ((0x2 * ((uint64_t)x18 * x12)) + ((0x2 * ((uint64_t)x20 * x10)) + (((uint64_t)x22 * x8) + ((0x2 * ((uint64_t)x24 * x6)) + ((0x2 * ((uint64_t)x26 * x4)) + ((uint64_t)x28 * x2)))))))))))))) + (0x1a5 * (((uint64_t)x30 * x33) + ((0x2 * ((uint64_t)x32 * x34)) + ((0x2 * ((uint64_t)x34 * x32)) + ((uint64_t)x33 * x30))))));
+ { uint64_t x40 = ((((uint64_t)x2 * x26) + ((0x2 * ((uint64_t)x4 * x24)) + (((uint64_t)x6 * x22) + (((uint64_t)x8 * x20) + ((0x2 * ((uint64_t)x10 * x18)) + (((uint64_t)x12 * x16) + (((uint64_t)x14 * x14) + (((uint64_t)x16 * x12) + ((0x2 * ((uint64_t)x18 * x10)) + (((uint64_t)x20 * x8) + (((uint64_t)x22 * x6) + ((0x2 * ((uint64_t)x24 * x4)) + ((uint64_t)x26 * x2))))))))))))) + (0x1a5 * (((uint64_t)x28 * x33) + (((uint64_t)x30 * x34) + ((0x2 * ((uint64_t)x32 * x32)) + (((uint64_t)x34 * x30) + ((uint64_t)x33 * x28)))))));
+ { uint64_t x41 = ((((uint64_t)x2 * x24) + (((uint64_t)x4 * x22) + (((uint64_t)x6 * x20) + (((uint64_t)x8 * x18) + (((uint64_t)x10 * x16) + (((uint64_t)x12 * x14) + (((uint64_t)x14 * x12) + (((uint64_t)x16 * x10) + (((uint64_t)x18 * x8) + (((uint64_t)x20 * x6) + (((uint64_t)x22 * x4) + ((uint64_t)x24 * x2)))))))))))) + (0x1a5 * (((uint64_t)x26 * x33) + (((uint64_t)x28 * x34) + (((uint64_t)x30 * x32) + (((uint64_t)x32 * x30) + (((uint64_t)x34 * x28) + ((uint64_t)x33 * x26))))))));
+ { uint64_t x42 = ((((uint64_t)x2 * x22) + ((0x2 * ((uint64_t)x4 * x20)) + ((0x2 * ((uint64_t)x6 * x18)) + (((uint64_t)x8 * x16) + ((0x2 * ((uint64_t)x10 * x14)) + ((0x2 * ((uint64_t)x12 * x12)) + ((0x2 * ((uint64_t)x14 * x10)) + (((uint64_t)x16 * x8) + ((0x2 * ((uint64_t)x18 * x6)) + ((0x2 * ((uint64_t)x20 * x4)) + ((uint64_t)x22 * x2))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x24 * x33)) + ((0x2 * ((uint64_t)x26 * x34)) + ((0x2 * ((uint64_t)x28 * x32)) + (((uint64_t)x30 * x30) + ((0x2 * ((uint64_t)x32 * x28)) + ((0x2 * ((uint64_t)x34 * x26)) + (0x2 * ((uint64_t)x33 * x24))))))))));
+ { uint64_t x43 = ((((uint64_t)x2 * x20) + ((0x2 * ((uint64_t)x4 * x18)) + (((uint64_t)x6 * x16) + (((uint64_t)x8 * x14) + ((0x2 * ((uint64_t)x10 * x12)) + ((0x2 * ((uint64_t)x12 * x10)) + (((uint64_t)x14 * x8) + (((uint64_t)x16 * x6) + ((0x2 * ((uint64_t)x18 * x4)) + ((uint64_t)x20 * x2)))))))))) + (0x1a5 * (((uint64_t)x22 * x33) + ((0x2 * ((uint64_t)x24 * x34)) + ((0x2 * ((uint64_t)x26 * x32)) + (((uint64_t)x28 * x30) + (((uint64_t)x30 * x28) + ((0x2 * ((uint64_t)x32 * x26)) + ((0x2 * ((uint64_t)x34 * x24)) + ((uint64_t)x33 * x22))))))))));
+ { uint64_t x44 = ((((uint64_t)x2 * x18) + (((uint64_t)x4 * x16) + (((uint64_t)x6 * x14) + (((uint64_t)x8 * x12) + ((0x2 * ((uint64_t)x10 * x10)) + (((uint64_t)x12 * x8) + (((uint64_t)x14 * x6) + (((uint64_t)x16 * x4) + ((uint64_t)x18 * x2))))))))) + (0x1a5 * (((uint64_t)x20 * x33) + (((uint64_t)x22 * x34) + ((0x2 * ((uint64_t)x24 * x32)) + (((uint64_t)x26 * x30) + (((uint64_t)x28 * x28) + (((uint64_t)x30 * x26) + ((0x2 * ((uint64_t)x32 * x24)) + (((uint64_t)x34 * x22) + ((uint64_t)x33 * x20)))))))))));
+ { uint64_t x45 = ((((uint64_t)x2 * x16) + ((0x2 * ((uint64_t)x4 * x14)) + ((0x2 * ((uint64_t)x6 * x12)) + ((0x2 * ((uint64_t)x8 * x10)) + ((0x2 * ((uint64_t)x10 * x8)) + ((0x2 * ((uint64_t)x12 * x6)) + ((0x2 * ((uint64_t)x14 * x4)) + ((uint64_t)x16 * x2)))))))) + (0x1a5 * ((0x2 * ((uint64_t)x18 * x33)) + ((0x2 * ((uint64_t)x20 * x34)) + ((0x2 * ((uint64_t)x22 * x32)) + ((0x2 * ((uint64_t)x24 * x30)) + ((0x2 * ((uint64_t)x26 * x28)) + ((0x2 * ((uint64_t)x28 * x26)) + ((0x2 * ((uint64_t)x30 * x24)) + ((0x2 * ((uint64_t)x32 * x22)) + ((0x2 * ((uint64_t)x34 * x20)) + (0x2 * ((uint64_t)x33 * x18)))))))))))));
+ { uint64_t x46 = ((((uint64_t)x2 * x14) + ((0x2 * ((uint64_t)x4 * x12)) + ((0x2 * ((uint64_t)x6 * x10)) + (((uint64_t)x8 * x8) + ((0x2 * ((uint64_t)x10 * x6)) + ((0x2 * ((uint64_t)x12 * x4)) + ((uint64_t)x14 * x2))))))) + (0x1a5 * (((uint64_t)x16 * x33) + ((0x2 * ((uint64_t)x18 * x34)) + ((0x2 * ((uint64_t)x20 * x32)) + (((uint64_t)x22 * x30) + ((0x2 * ((uint64_t)x24 * x28)) + ((0x2 * ((uint64_t)x26 * x26)) + ((0x2 * ((uint64_t)x28 * x24)) + (((uint64_t)x30 * x22) + ((0x2 * ((uint64_t)x32 * x20)) + ((0x2 * ((uint64_t)x34 * x18)) + ((uint64_t)x33 * x16)))))))))))));
+ { uint64_t x47 = ((((uint64_t)x2 * x12) + ((0x2 * ((uint64_t)x4 * x10)) + (((uint64_t)x6 * x8) + (((uint64_t)x8 * x6) + ((0x2 * ((uint64_t)x10 * x4)) + ((uint64_t)x12 * x2)))))) + (0x1a5 * (((uint64_t)x14 * x33) + (((uint64_t)x16 * x34) + ((0x2 * ((uint64_t)x18 * x32)) + (((uint64_t)x20 * x30) + (((uint64_t)x22 * x28) + ((0x2 * ((uint64_t)x24 * x26)) + ((0x2 * ((uint64_t)x26 * x24)) + (((uint64_t)x28 * x22) + (((uint64_t)x30 * x20) + ((0x2 * ((uint64_t)x32 * x18)) + (((uint64_t)x34 * x16) + ((uint64_t)x33 * x14))))))))))))));
+ { uint64_t x48 = ((((uint64_t)x2 * x10) + (((uint64_t)x4 * x8) + (((uint64_t)x6 * x6) + (((uint64_t)x8 * x4) + ((uint64_t)x10 * x2))))) + (0x1a5 * (((uint64_t)x12 * x33) + (((uint64_t)x14 * x34) + (((uint64_t)x16 * x32) + (((uint64_t)x18 * x30) + (((uint64_t)x20 * x28) + (((uint64_t)x22 * x26) + ((0x2 * ((uint64_t)x24 * x24)) + (((uint64_t)x26 * x22) + (((uint64_t)x28 * x20) + (((uint64_t)x30 * x18) + (((uint64_t)x32 * x16) + (((uint64_t)x34 * x14) + ((uint64_t)x33 * x12)))))))))))))));
+ { uint64_t x49 = ((((uint64_t)x2 * x8) + ((0x2 * ((uint64_t)x4 * x6)) + ((0x2 * ((uint64_t)x6 * x4)) + ((uint64_t)x8 * x2)))) + (0x1a5 * ((0x2 * ((uint64_t)x10 * x33)) + ((0x2 * ((uint64_t)x12 * x34)) + ((0x2 * ((uint64_t)x14 * x32)) + (((uint64_t)x16 * x30) + ((0x2 * ((uint64_t)x18 * x28)) + ((0x2 * ((uint64_t)x20 * x26)) + ((0x2 * ((uint64_t)x22 * x24)) + ((0x2 * ((uint64_t)x24 * x22)) + ((0x2 * ((uint64_t)x26 * x20)) + ((0x2 * ((uint64_t)x28 * x18)) + (((uint64_t)x30 * x16) + ((0x2 * ((uint64_t)x32 * x14)) + ((0x2 * ((uint64_t)x34 * x12)) + (0x2 * ((uint64_t)x33 * x10)))))))))))))))));
+ { uint64_t x50 = ((((uint64_t)x2 * x6) + ((0x2 * ((uint64_t)x4 * x4)) + ((uint64_t)x6 * x2))) + (0x1a5 * (((uint64_t)x8 * x33) + ((0x2 * ((uint64_t)x10 * x34)) + ((0x2 * ((uint64_t)x12 * x32)) + (((uint64_t)x14 * x30) + (((uint64_t)x16 * x28) + ((0x2 * ((uint64_t)x18 * x26)) + ((0x2 * ((uint64_t)x20 * x24)) + (((uint64_t)x22 * x22) + ((0x2 * ((uint64_t)x24 * x20)) + ((0x2 * ((uint64_t)x26 * x18)) + (((uint64_t)x28 * x16) + (((uint64_t)x30 * x14) + ((0x2 * ((uint64_t)x32 * x12)) + ((0x2 * ((uint64_t)x34 * x10)) + ((uint64_t)x33 * x8)))))))))))))))));
+ { uint64_t x51 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0x1a5 * (((uint64_t)x6 * x33) + (((uint64_t)x8 * x34) + ((0x2 * ((uint64_t)x10 * x32)) + (((uint64_t)x12 * x30) + (((uint64_t)x14 * x28) + (((uint64_t)x16 * x26) + ((0x2 * ((uint64_t)x18 * x24)) + (((uint64_t)x20 * x22) + (((uint64_t)x22 * x20) + ((0x2 * ((uint64_t)x24 * x18)) + (((uint64_t)x26 * x16) + (((uint64_t)x28 * x14) + (((uint64_t)x30 * x12) + ((0x2 * ((uint64_t)x32 * x10)) + (((uint64_t)x34 * x8) + ((uint64_t)x33 * x6))))))))))))))))));
+ { uint64_t x52 = (((uint64_t)x2 * x2) + (0x1a5 * ((0x2 * ((uint64_t)x4 * x33)) + ((0x2 * ((uint64_t)x6 * x34)) + ((0x2 * ((uint64_t)x8 * x32)) + ((0x2 * ((uint64_t)x10 * x30)) + ((0x2 * ((uint64_t)x12 * x28)) + ((0x2 * ((uint64_t)x14 * x26)) + ((0x2 * ((uint64_t)x16 * x24)) + ((0x2 * ((uint64_t)x18 * x22)) + ((0x2 * ((uint64_t)x20 * x20)) + ((0x2 * ((uint64_t)x22 * x18)) + ((0x2 * ((uint64_t)x24 * x16)) + ((0x2 * ((uint64_t)x26 * x14)) + ((0x2 * ((uint64_t)x28 * x12)) + ((0x2 * ((uint64_t)x30 * x10)) + ((0x2 * ((uint64_t)x32 * x8)) + ((0x2 * ((uint64_t)x34 * x6)) + (0x2 * ((uint64_t)x33 * x4))))))))))))))))))));
+ { uint64_t x53 = (x52 >> 0x16);
+ { uint32_t x54 = ((uint32_t)x52 & 0x3fffff);
+ { uint64_t x55 = (x53 + x51);
+ { uint64_t x56 = (x55 >> 0x15);
+ { uint32_t x57 = ((uint32_t)x55 & 0x1fffff);
+ { uint64_t x58 = (x56 + x50);
+ { uint64_t x59 = (x58 >> 0x15);
+ { uint32_t x60 = ((uint32_t)x58 & 0x1fffff);
+ { uint64_t x61 = (x59 + x49);
+ { uint64_t x62 = (x61 >> 0x16);
+ { uint32_t x63 = ((uint32_t)x61 & 0x3fffff);
+ { uint64_t x64 = (x62 + x48);
+ { uint64_t x65 = (x64 >> 0x15);
+ { uint32_t x66 = ((uint32_t)x64 & 0x1fffff);
+ { uint64_t x67 = (x65 + x47);
+ { uint64_t x68 = (x67 >> 0x15);
+ { uint32_t x69 = ((uint32_t)x67 & 0x1fffff);
+ { uint64_t x70 = (x68 + x46);
+ { uint64_t x71 = (x70 >> 0x15);
+ { uint32_t x72 = ((uint32_t)x70 & 0x1fffff);
+ { uint64_t x73 = (x71 + x45);
+ { uint64_t x74 = (x73 >> 0x16);
+ { uint32_t x75 = ((uint32_t)x73 & 0x3fffff);
+ { uint64_t x76 = (x74 + x44);
+ { uint64_t x77 = (x76 >> 0x15);
+ { uint32_t x78 = ((uint32_t)x76 & 0x1fffff);
+ { uint64_t x79 = (x77 + x43);
+ { uint64_t x80 = (x79 >> 0x15);
+ { uint32_t x81 = ((uint32_t)x79 & 0x1fffff);
+ { uint64_t x82 = (x80 + x42);
+ { uint64_t x83 = (x82 >> 0x16);
+ { uint32_t x84 = ((uint32_t)x82 & 0x3fffff);
+ { uint64_t x85 = (x83 + x41);
+ { uint64_t x86 = (x85 >> 0x15);
+ { uint32_t x87 = ((uint32_t)x85 & 0x1fffff);
+ { uint64_t x88 = (x86 + x40);
+ { uint64_t x89 = (x88 >> 0x15);
+ { uint32_t x90 = ((uint32_t)x88 & 0x1fffff);
+ { uint64_t x91 = (x89 + x39);
+ { uint64_t x92 = (x91 >> 0x15);
+ { uint32_t x93 = ((uint32_t)x91 & 0x1fffff);
+ { uint64_t x94 = (x92 + x38);
+ { uint64_t x95 = (x94 >> 0x16);
+ { uint32_t x96 = ((uint32_t)x94 & 0x3fffff);
+ { uint64_t x97 = (x95 + x37);
+ { uint64_t x98 = (x97 >> 0x15);
+ { uint32_t x99 = ((uint32_t)x97 & 0x1fffff);
+ { uint64_t x100 = (x98 + x36);
+ { uint64_t x101 = (x100 >> 0x15);
+ { uint32_t x102 = ((uint32_t)x100 & 0x1fffff);
+ { uint64_t x103 = (x101 + x35);
+ { uint32_t x104 = (uint32_t) (x103 >> 0x15);
+ { uint32_t x105 = ((uint32_t)x103 & 0x1fffff);
+ { uint64_t x106 = (x54 + ((uint64_t)0x1a5 * x104));
+ { uint32_t x107 = (uint32_t) (x106 >> 0x16);
+ { uint32_t x108 = ((uint32_t)x106 & 0x3fffff);
+ { uint32_t x109 = (x107 + x57);
+ { uint32_t x110 = (x109 >> 0x15);
+ { uint32_t x111 = (x109 & 0x1fffff);
+ out[0] = x108;
+ out[1] = x111;
+ out[2] = (x110 + x60);
+ out[3] = x63;
+ out[4] = x66;
+ out[5] = x69;
+ out[6] = x72;
+ out[7] = x75;
+ out[8] = x78;
+ out[9] = x81;
+ out[10] = x84;
+ out[11] = x87;
+ out[12] = x90;
+ out[13] = x93;
+ out[14] = x96;
+ out[15] = x99;
+ out[16] = x102;
+ out[17] = x105;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e383m421_18limbs/fesquareDisplay.log b/src/Specific/solinas32_2e383m421_18limbs/fesquareDisplay.log
new file mode 100644
index 000000000..613fa38f2
--- /dev/null
+++ b/src/Specific/solinas32_2e383m421_18limbs/fesquareDisplay.log
@@ -0,0 +1,84 @@
+λ x : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x33, x34, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
+ uint64_t x35 = (((uint64_t)x2 * x33) + ((0x2 * ((uint64_t)x4 * x34)) + ((0x2 * ((uint64_t)x6 * x32)) + (((uint64_t)x8 * x30) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + (((uint64_t)x16 * x22) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + (((uint64_t)x22 * x16) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + (((uint64_t)x30 * x8) + ((0x2 * ((uint64_t)x32 * x6)) + ((0x2 * ((uint64_t)x34 * x4)) + ((uint64_t)x33 * x2))))))))))))))))));
+ uint64_t x36 = ((((uint64_t)x2 * x34) + ((0x2 * ((uint64_t)x4 * x32)) + (((uint64_t)x6 * x30) + (((uint64_t)x8 * x28) + ((0x2 * ((uint64_t)x10 * x26)) + ((0x2 * ((uint64_t)x12 * x24)) + (((uint64_t)x14 * x22) + (((uint64_t)x16 * x20) + ((0x2 * ((uint64_t)x18 * x18)) + (((uint64_t)x20 * x16) + (((uint64_t)x22 * x14) + ((0x2 * ((uint64_t)x24 * x12)) + ((0x2 * ((uint64_t)x26 * x10)) + (((uint64_t)x28 * x8) + (((uint64_t)x30 * x6) + ((0x2 * ((uint64_t)x32 * x4)) + ((uint64_t)x34 * x2))))))))))))))))) + (0x1a5 * ((uint64_t)x33 * x33)));
+ uint64_t x37 = ((((uint64_t)x2 * x32) + (((uint64_t)x4 * x30) + (((uint64_t)x6 * x28) + (((uint64_t)x8 * x26) + ((0x2 * ((uint64_t)x10 * x24)) + (((uint64_t)x12 * x22) + (((uint64_t)x14 * x20) + (((uint64_t)x16 * x18) + (((uint64_t)x18 * x16) + (((uint64_t)x20 * x14) + (((uint64_t)x22 * x12) + ((0x2 * ((uint64_t)x24 * x10)) + (((uint64_t)x26 * x8) + (((uint64_t)x28 * x6) + (((uint64_t)x30 * x4) + ((uint64_t)x32 * x2)))))))))))))))) + (0x1a5 * (((uint64_t)x34 * x33) + ((uint64_t)x33 * x34))));
+ uint64_t x38 = ((((uint64_t)x2 * x30) + ((0x2 * ((uint64_t)x4 * x28)) + ((0x2 * ((uint64_t)x6 * x26)) + ((0x2 * ((uint64_t)x8 * x24)) + ((0x2 * ((uint64_t)x10 * x22)) + ((0x2 * ((uint64_t)x12 * x20)) + ((0x2 * ((uint64_t)x14 * x18)) + (((uint64_t)x16 * x16) + ((0x2 * ((uint64_t)x18 * x14)) + ((0x2 * ((uint64_t)x20 * x12)) + ((0x2 * ((uint64_t)x22 * x10)) + ((0x2 * ((uint64_t)x24 * x8)) + ((0x2 * ((uint64_t)x26 * x6)) + ((0x2 * ((uint64_t)x28 * x4)) + ((uint64_t)x30 * x2))))))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x32 * x33)) + ((0x2 * ((uint64_t)x34 * x34)) + (0x2 * ((uint64_t)x33 * x32))))));
+ uint64_t x39 = ((((uint64_t)x2 * x28) + ((0x2 * ((uint64_t)x4 * x26)) + ((0x2 * ((uint64_t)x6 * x24)) + (((uint64_t)x8 * x22) + ((0x2 * ((uint64_t)x10 * x20)) + ((0x2 * ((uint64_t)x12 * x18)) + (((uint64_t)x14 * x16) + (((uint64_t)x16 * x14) + ((0x2 * ((uint64_t)x18 * x12)) + ((0x2 * ((uint64_t)x20 * x10)) + (((uint64_t)x22 * x8) + ((0x2 * ((uint64_t)x24 * x6)) + ((0x2 * ((uint64_t)x26 * x4)) + ((uint64_t)x28 * x2)))))))))))))) + (0x1a5 * (((uint64_t)x30 * x33) + ((0x2 * ((uint64_t)x32 * x34)) + ((0x2 * ((uint64_t)x34 * x32)) + ((uint64_t)x33 * x30))))));
+ uint64_t x40 = ((((uint64_t)x2 * x26) + ((0x2 * ((uint64_t)x4 * x24)) + (((uint64_t)x6 * x22) + (((uint64_t)x8 * x20) + ((0x2 * ((uint64_t)x10 * x18)) + (((uint64_t)x12 * x16) + (((uint64_t)x14 * x14) + (((uint64_t)x16 * x12) + ((0x2 * ((uint64_t)x18 * x10)) + (((uint64_t)x20 * x8) + (((uint64_t)x22 * x6) + ((0x2 * ((uint64_t)x24 * x4)) + ((uint64_t)x26 * x2))))))))))))) + (0x1a5 * (((uint64_t)x28 * x33) + (((uint64_t)x30 * x34) + ((0x2 * ((uint64_t)x32 * x32)) + (((uint64_t)x34 * x30) + ((uint64_t)x33 * x28)))))));
+ uint64_t x41 = ((((uint64_t)x2 * x24) + (((uint64_t)x4 * x22) + (((uint64_t)x6 * x20) + (((uint64_t)x8 * x18) + (((uint64_t)x10 * x16) + (((uint64_t)x12 * x14) + (((uint64_t)x14 * x12) + (((uint64_t)x16 * x10) + (((uint64_t)x18 * x8) + (((uint64_t)x20 * x6) + (((uint64_t)x22 * x4) + ((uint64_t)x24 * x2)))))))))))) + (0x1a5 * (((uint64_t)x26 * x33) + (((uint64_t)x28 * x34) + (((uint64_t)x30 * x32) + (((uint64_t)x32 * x30) + (((uint64_t)x34 * x28) + ((uint64_t)x33 * x26))))))));
+ uint64_t x42 = ((((uint64_t)x2 * x22) + ((0x2 * ((uint64_t)x4 * x20)) + ((0x2 * ((uint64_t)x6 * x18)) + (((uint64_t)x8 * x16) + ((0x2 * ((uint64_t)x10 * x14)) + ((0x2 * ((uint64_t)x12 * x12)) + ((0x2 * ((uint64_t)x14 * x10)) + (((uint64_t)x16 * x8) + ((0x2 * ((uint64_t)x18 * x6)) + ((0x2 * ((uint64_t)x20 * x4)) + ((uint64_t)x22 * x2))))))))))) + (0x1a5 * ((0x2 * ((uint64_t)x24 * x33)) + ((0x2 * ((uint64_t)x26 * x34)) + ((0x2 * ((uint64_t)x28 * x32)) + (((uint64_t)x30 * x30) + ((0x2 * ((uint64_t)x32 * x28)) + ((0x2 * ((uint64_t)x34 * x26)) + (0x2 * ((uint64_t)x33 * x24))))))))));
+ uint64_t x43 = ((((uint64_t)x2 * x20) + ((0x2 * ((uint64_t)x4 * x18)) + (((uint64_t)x6 * x16) + (((uint64_t)x8 * x14) + ((0x2 * ((uint64_t)x10 * x12)) + ((0x2 * ((uint64_t)x12 * x10)) + (((uint64_t)x14 * x8) + (((uint64_t)x16 * x6) + ((0x2 * ((uint64_t)x18 * x4)) + ((uint64_t)x20 * x2)))))))))) + (0x1a5 * (((uint64_t)x22 * x33) + ((0x2 * ((uint64_t)x24 * x34)) + ((0x2 * ((uint64_t)x26 * x32)) + (((uint64_t)x28 * x30) + (((uint64_t)x30 * x28) + ((0x2 * ((uint64_t)x32 * x26)) + ((0x2 * ((uint64_t)x34 * x24)) + ((uint64_t)x33 * x22))))))))));
+ uint64_t x44 = ((((uint64_t)x2 * x18) + (((uint64_t)x4 * x16) + (((uint64_t)x6 * x14) + (((uint64_t)x8 * x12) + ((0x2 * ((uint64_t)x10 * x10)) + (((uint64_t)x12 * x8) + (((uint64_t)x14 * x6) + (((uint64_t)x16 * x4) + ((uint64_t)x18 * x2))))))))) + (0x1a5 * (((uint64_t)x20 * x33) + (((uint64_t)x22 * x34) + ((0x2 * ((uint64_t)x24 * x32)) + (((uint64_t)x26 * x30) + (((uint64_t)x28 * x28) + (((uint64_t)x30 * x26) + ((0x2 * ((uint64_t)x32 * x24)) + (((uint64_t)x34 * x22) + ((uint64_t)x33 * x20)))))))))));
+ uint64_t x45 = ((((uint64_t)x2 * x16) + ((0x2 * ((uint64_t)x4 * x14)) + ((0x2 * ((uint64_t)x6 * x12)) + ((0x2 * ((uint64_t)x8 * x10)) + ((0x2 * ((uint64_t)x10 * x8)) + ((0x2 * ((uint64_t)x12 * x6)) + ((0x2 * ((uint64_t)x14 * x4)) + ((uint64_t)x16 * x2)))))))) + (0x1a5 * ((0x2 * ((uint64_t)x18 * x33)) + ((0x2 * ((uint64_t)x20 * x34)) + ((0x2 * ((uint64_t)x22 * x32)) + ((0x2 * ((uint64_t)x24 * x30)) + ((0x2 * ((uint64_t)x26 * x28)) + ((0x2 * ((uint64_t)x28 * x26)) + ((0x2 * ((uint64_t)x30 * x24)) + ((0x2 * ((uint64_t)x32 * x22)) + ((0x2 * ((uint64_t)x34 * x20)) + (0x2 * ((uint64_t)x33 * x18)))))))))))));
+ uint64_t x46 = ((((uint64_t)x2 * x14) + ((0x2 * ((uint64_t)x4 * x12)) + ((0x2 * ((uint64_t)x6 * x10)) + (((uint64_t)x8 * x8) + ((0x2 * ((uint64_t)x10 * x6)) + ((0x2 * ((uint64_t)x12 * x4)) + ((uint64_t)x14 * x2))))))) + (0x1a5 * (((uint64_t)x16 * x33) + ((0x2 * ((uint64_t)x18 * x34)) + ((0x2 * ((uint64_t)x20 * x32)) + (((uint64_t)x22 * x30) + ((0x2 * ((uint64_t)x24 * x28)) + ((0x2 * ((uint64_t)x26 * x26)) + ((0x2 * ((uint64_t)x28 * x24)) + (((uint64_t)x30 * x22) + ((0x2 * ((uint64_t)x32 * x20)) + ((0x2 * ((uint64_t)x34 * x18)) + ((uint64_t)x33 * x16)))))))))))));
+ uint64_t x47 = ((((uint64_t)x2 * x12) + ((0x2 * ((uint64_t)x4 * x10)) + (((uint64_t)x6 * x8) + (((uint64_t)x8 * x6) + ((0x2 * ((uint64_t)x10 * x4)) + ((uint64_t)x12 * x2)))))) + (0x1a5 * (((uint64_t)x14 * x33) + (((uint64_t)x16 * x34) + ((0x2 * ((uint64_t)x18 * x32)) + (((uint64_t)x20 * x30) + (((uint64_t)x22 * x28) + ((0x2 * ((uint64_t)x24 * x26)) + ((0x2 * ((uint64_t)x26 * x24)) + (((uint64_t)x28 * x22) + (((uint64_t)x30 * x20) + ((0x2 * ((uint64_t)x32 * x18)) + (((uint64_t)x34 * x16) + ((uint64_t)x33 * x14))))))))))))));
+ uint64_t x48 = ((((uint64_t)x2 * x10) + (((uint64_t)x4 * x8) + (((uint64_t)x6 * x6) + (((uint64_t)x8 * x4) + ((uint64_t)x10 * x2))))) + (0x1a5 * (((uint64_t)x12 * x33) + (((uint64_t)x14 * x34) + (((uint64_t)x16 * x32) + (((uint64_t)x18 * x30) + (((uint64_t)x20 * x28) + (((uint64_t)x22 * x26) + ((0x2 * ((uint64_t)x24 * x24)) + (((uint64_t)x26 * x22) + (((uint64_t)x28 * x20) + (((uint64_t)x30 * x18) + (((uint64_t)x32 * x16) + (((uint64_t)x34 * x14) + ((uint64_t)x33 * x12)))))))))))))));
+ uint64_t x49 = ((((uint64_t)x2 * x8) + ((0x2 * ((uint64_t)x4 * x6)) + ((0x2 * ((uint64_t)x6 * x4)) + ((uint64_t)x8 * x2)))) + (0x1a5 * ((0x2 * ((uint64_t)x10 * x33)) + ((0x2 * ((uint64_t)x12 * x34)) + ((0x2 * ((uint64_t)x14 * x32)) + (((uint64_t)x16 * x30) + ((0x2 * ((uint64_t)x18 * x28)) + ((0x2 * ((uint64_t)x20 * x26)) + ((0x2 * ((uint64_t)x22 * x24)) + ((0x2 * ((uint64_t)x24 * x22)) + ((0x2 * ((uint64_t)x26 * x20)) + ((0x2 * ((uint64_t)x28 * x18)) + (((uint64_t)x30 * x16) + ((0x2 * ((uint64_t)x32 * x14)) + ((0x2 * ((uint64_t)x34 * x12)) + (0x2 * ((uint64_t)x33 * x10)))))))))))))))));
+ uint64_t x50 = ((((uint64_t)x2 * x6) + ((0x2 * ((uint64_t)x4 * x4)) + ((uint64_t)x6 * x2))) + (0x1a5 * (((uint64_t)x8 * x33) + ((0x2 * ((uint64_t)x10 * x34)) + ((0x2 * ((uint64_t)x12 * x32)) + (((uint64_t)x14 * x30) + (((uint64_t)x16 * x28) + ((0x2 * ((uint64_t)x18 * x26)) + ((0x2 * ((uint64_t)x20 * x24)) + (((uint64_t)x22 * x22) + ((0x2 * ((uint64_t)x24 * x20)) + ((0x2 * ((uint64_t)x26 * x18)) + (((uint64_t)x28 * x16) + (((uint64_t)x30 * x14) + ((0x2 * ((uint64_t)x32 * x12)) + ((0x2 * ((uint64_t)x34 * x10)) + ((uint64_t)x33 * x8)))))))))))))))));
+ uint64_t x51 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0x1a5 * (((uint64_t)x6 * x33) + (((uint64_t)x8 * x34) + ((0x2 * ((uint64_t)x10 * x32)) + (((uint64_t)x12 * x30) + (((uint64_t)x14 * x28) + (((uint64_t)x16 * x26) + ((0x2 * ((uint64_t)x18 * x24)) + (((uint64_t)x20 * x22) + (((uint64_t)x22 * x20) + ((0x2 * ((uint64_t)x24 * x18)) + (((uint64_t)x26 * x16) + (((uint64_t)x28 * x14) + (((uint64_t)x30 * x12) + ((0x2 * ((uint64_t)x32 * x10)) + (((uint64_t)x34 * x8) + ((uint64_t)x33 * x6))))))))))))))))));
+ uint64_t x52 = (((uint64_t)x2 * x2) + (0x1a5 * ((0x2 * ((uint64_t)x4 * x33)) + ((0x2 * ((uint64_t)x6 * x34)) + ((0x2 * ((uint64_t)x8 * x32)) + ((0x2 * ((uint64_t)x10 * x30)) + ((0x2 * ((uint64_t)x12 * x28)) + ((0x2 * ((uint64_t)x14 * x26)) + ((0x2 * ((uint64_t)x16 * x24)) + ((0x2 * ((uint64_t)x18 * x22)) + ((0x2 * ((uint64_t)x20 * x20)) + ((0x2 * ((uint64_t)x22 * x18)) + ((0x2 * ((uint64_t)x24 * x16)) + ((0x2 * ((uint64_t)x26 * x14)) + ((0x2 * ((uint64_t)x28 * x12)) + ((0x2 * ((uint64_t)x30 * x10)) + ((0x2 * ((uint64_t)x32 * x8)) + ((0x2 * ((uint64_t)x34 * x6)) + (0x2 * ((uint64_t)x33 * x4))))))))))))))))))));
+ uint64_t x53 = (x52 >> 0x16);
+ uint32_t x54 = ((uint32_t)x52 & 0x3fffff);
+ uint64_t x55 = (x53 + x51);
+ uint64_t x56 = (x55 >> 0x15);
+ uint32_t x57 = ((uint32_t)x55 & 0x1fffff);
+ uint64_t x58 = (x56 + x50);
+ uint64_t x59 = (x58 >> 0x15);
+ uint32_t x60 = ((uint32_t)x58 & 0x1fffff);
+ uint64_t x61 = (x59 + x49);
+ uint64_t x62 = (x61 >> 0x16);
+ uint32_t x63 = ((uint32_t)x61 & 0x3fffff);
+ uint64_t x64 = (x62 + x48);
+ uint64_t x65 = (x64 >> 0x15);
+ uint32_t x66 = ((uint32_t)x64 & 0x1fffff);
+ uint64_t x67 = (x65 + x47);
+ uint64_t x68 = (x67 >> 0x15);
+ uint32_t x69 = ((uint32_t)x67 & 0x1fffff);
+ uint64_t x70 = (x68 + x46);
+ uint64_t x71 = (x70 >> 0x15);
+ uint32_t x72 = ((uint32_t)x70 & 0x1fffff);
+ uint64_t x73 = (x71 + x45);
+ uint64_t x74 = (x73 >> 0x16);
+ uint32_t x75 = ((uint32_t)x73 & 0x3fffff);
+ uint64_t x76 = (x74 + x44);
+ uint64_t x77 = (x76 >> 0x15);
+ uint32_t x78 = ((uint32_t)x76 & 0x1fffff);
+ uint64_t x79 = (x77 + x43);
+ uint64_t x80 = (x79 >> 0x15);
+ uint32_t x81 = ((uint32_t)x79 & 0x1fffff);
+ uint64_t x82 = (x80 + x42);
+ uint64_t x83 = (x82 >> 0x16);
+ uint32_t x84 = ((uint32_t)x82 & 0x3fffff);
+ uint64_t x85 = (x83 + x41);
+ uint64_t x86 = (x85 >> 0x15);
+ uint32_t x87 = ((uint32_t)x85 & 0x1fffff);
+ uint64_t x88 = (x86 + x40);
+ uint64_t x89 = (x88 >> 0x15);
+ uint32_t x90 = ((uint32_t)x88 & 0x1fffff);
+ uint64_t x91 = (x89 + x39);
+ uint64_t x92 = (x91 >> 0x15);
+ uint32_t x93 = ((uint32_t)x91 & 0x1fffff);
+ uint64_t x94 = (x92 + x38);
+ uint64_t x95 = (x94 >> 0x16);
+ uint32_t x96 = ((uint32_t)x94 & 0x3fffff);
+ uint64_t x97 = (x95 + x37);
+ uint64_t x98 = (x97 >> 0x15);
+ uint32_t x99 = ((uint32_t)x97 & 0x1fffff);
+ uint64_t x100 = (x98 + x36);
+ uint64_t x101 = (x100 >> 0x15);
+ uint32_t x102 = ((uint32_t)x100 & 0x1fffff);
+ uint64_t x103 = (x101 + x35);
+ uint32_t x104 = (uint32_t) (x103 >> 0x15);
+ uint32_t x105 = ((uint32_t)x103 & 0x1fffff);
+ uint64_t x106 = (x54 + ((uint64_t)0x1a5 * x104));
+ uint32_t x107 = (uint32_t) (x106 >> 0x16);
+ uint32_t x108 = ((uint32_t)x106 & 0x3fffff);
+ uint32_t x109 = (x107 + x57);
+ uint32_t x110 = (x109 >> 0x15);
+ uint32_t x111 = (x109 & 0x1fffff);
+ return (Return x105, Return x102, Return x99, Return x96, Return x93, Return x90, Return x87, Return x84, Return x81, Return x78, Return x75, Return x72, Return x69, Return x66, Return x63, (x110 + x60), Return x111, Return x108))
+x
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m421_18limbs/fesub.c b/src/Specific/solinas32_2e383m421_18limbs/fesub.c
index 2e8c215ef..211321bfe 100644
--- a/src/Specific/solinas32_2e383m421_18limbs/fesub.c
+++ b/src/Specific/solinas32_2e383m421_18limbs/fesub.c
@@ -35,7 +35,7 @@ static void fesub(uint32_t out[18], const uint32_t in1[18], const uint32_t in2[1
{ const uint32_t x43 = in2[2];
{ const uint32_t x41 = in2[1];
{ const uint32_t x39 = in2[0];
- out[0] = ((Const 8387766 + x5) - x39);
+ out[0] = ((0x7ffcb6 + x5) - x39);
out[1] = ((0x3ffffe + x7) - x41);
out[2] = ((0x3ffffe + x9) - x43);
out[3] = ((0x7ffffe + x11) - x45);
diff --git a/src/Specific/solinas32_2e383m421_18limbs/fesubDisplay.log b/src/Specific/solinas32_2e383m421_18limbs/fesubDisplay.log
index 8ad9239bf..a315c2c2a 100644
--- a/src/Specific/solinas32_2e383m421_18limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e383m421_18limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x36, x37, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x70, x71, x69, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39))%core,
- (((0x3ffffe + x36) - x70), ((0x3ffffe + x37) - x71), ((0x3ffffe + x35) - x69), ((0x7ffffe + x33) - x67), ((0x3ffffe + x31) - x65), ((0x3ffffe + x29) - x63), ((0x3ffffe + x27) - x61), ((0x7ffffe + x25) - x59), ((0x3ffffe + x23) - x57), ((0x3ffffe + x21) - x55), ((0x7ffffe + x19) - x53), ((0x3ffffe + x17) - x51), ((0x3ffffe + x15) - x49), ((0x3ffffe + x13) - x47), ((0x7ffffe + x11) - x45), ((0x3ffffe + x9) - x43), ((0x3ffffe + x7) - x41), ((Const 8387766 + x5) - x39)))
+ (((0x3ffffe + x36) - x70), ((0x3ffffe + x37) - x71), ((0x3ffffe + x35) - x69), ((0x7ffffe + x33) - x67), ((0x3ffffe + x31) - x65), ((0x3ffffe + x29) - x63), ((0x3ffffe + x27) - x61), ((0x7ffffe + x25) - x59), ((0x3ffffe + x23) - x57), ((0x3ffffe + x21) - x55), ((0x7ffffe + x19) - x53), ((0x3ffffe + x17) - x51), ((0x3ffffe + x15) - x49), ((0x3ffffe + x13) - x47), ((0x7ffffe + x11) - x45), ((0x3ffffe + x9) - x43), ((0x3ffffe + x7) - x41), ((0x7ffcb6 + x5) - x39)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e383m421_18limbs/freeze.c b/src/Specific/solinas32_2e383m421_18limbs/freeze.c
index 2787df5c9..967de9472 100644
--- a/src/Specific/solinas32_2e383m421_18limbs/freeze.c
+++ b/src/Specific/solinas32_2e383m421_18limbs/freeze.c
@@ -17,7 +17,7 @@ static void freeze(uint32_t out[18], const uint32_t in1[18]) {
{ const uint32_t x6 = in1[2];
{ const uint32_t x4 = in1[1];
{ const uint32_t x2 = in1[0];
- { uint32_t x36, uint8_t x37 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 4193883);
+ { uint32_t x36, uint8_t x37 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x3ffe5b);
{ uint32_t x39, uint8_t x40 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x37, Return x4, 0x1fffff);
{ uint32_t x42, uint8_t x43 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x40, Return x6, 0x1fffff);
{ uint32_t x45, uint8_t x46 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x43, Return x8, 0x3fffff);
@@ -36,7 +36,7 @@ static void freeze(uint32_t out[18], const uint32_t in1[18]) {
{ uint32_t x84, uint8_t x85 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x82, Return x34, 0x1fffff);
{ uint32_t x87, uint8_t x88 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x85, Return x33, 0x1fffff);
{ uint32_t x89 = cmovznz32(x88, 0x0, 0xffffffff);
- { uint32_t x90 = (x89 & Const 4193883);
+ { uint32_t x90 = (x89 & 0x3ffe5b);
{ uint32_t x92, uint8_t x93 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x36, Return x90);
{ uint32_t x94 = (x89 & 0x1fffff);
{ uint32_t x96, uint8_t x97 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x93, Return x39, Return x94);
diff --git a/src/Specific/solinas32_2e383m421_18limbs/freezeDisplay.log b/src/Specific/solinas32_2e383m421_18limbs/freezeDisplay.log
index 4d3c7eb24..2a6e4c9ac 100644
--- a/src/Specific/solinas32_2e383m421_18limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e383m421_18limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x33, x34, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x36, uint8_t x37 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 4193883);
+ uint32_t x36, uint8_t x37 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x3ffe5b);
uint32_t x39, uint8_t x40 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x37, Return x4, 0x1fffff);
uint32_t x42, uint8_t x43 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x40, Return x6, 0x1fffff);
uint32_t x45, uint8_t x46 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x43, Return x8, 0x3fffff);
@@ -21,7 +21,7 @@ Interp-η
uint32_t x84, uint8_t x85 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x82, Return x34, 0x1fffff);
uint32_t x87, uint8_t x88 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x85, Return x33, 0x1fffff);
uint32_t x89 = cmovznz32(x88, 0x0, 0xffffffff);
- uint32_t x90 = (x89 & Const 4193883);
+ uint32_t x90 = (x89 & 0x3ffe5b);
uint32_t x92, uint8_t x93 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x36, Return x90);
uint32_t x94 = (x89 & 0x1fffff);
uint32_t x96, uint8_t x97 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x93, Return x39, Return x94);
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_18limbs/feadd.c b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_18limbs/feadd.c
new file mode 100644
index 000000000..7b8380410
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_18limbs/feadd.c
@@ -0,0 +1,57 @@
+static void feadd(uint32_t out[18], const uint32_t in1[18], const uint32_t in2[18]) {
+ { const uint32_t x36 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x70 = in2[17];
+ { const uint32_t x71 = in2[16];
+ { const uint32_t x69 = in2[15];
+ { const uint32_t x67 = in2[14];
+ { const uint32_t x65 = in2[13];
+ { const uint32_t x63 = in2[12];
+ { const uint32_t x61 = in2[11];
+ { const uint32_t x59 = in2[10];
+ { const uint32_t x57 = in2[9];
+ { const uint32_t x55 = in2[8];
+ { const uint32_t x53 = in2[7];
+ { const uint32_t x51 = in2[6];
+ { const uint32_t x49 = in2[5];
+ { const uint32_t x47 = in2[4];
+ { const uint32_t x45 = in2[3];
+ { const uint32_t x43 = in2[2];
+ { const uint32_t x41 = in2[1];
+ { const uint32_t x39 = in2[0];
+ out[0] = (x5 + x39);
+ out[1] = (x7 + x41);
+ out[2] = (x9 + x43);
+ out[3] = (x11 + x45);
+ out[4] = (x13 + x47);
+ out[5] = (x15 + x49);
+ out[6] = (x17 + x51);
+ out[7] = (x19 + x53);
+ out[8] = (x21 + x55);
+ out[9] = (x23 + x57);
+ out[10] = (x25 + x59);
+ out[11] = (x27 + x61);
+ out[12] = (x29 + x63);
+ out[13] = (x31 + x65);
+ out[14] = (x33 + x67);
+ out[15] = (x35 + x69);
+ out[16] = (x37 + x71);
+ out[17] = (x36 + x70);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_18limbs/freeze.c b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_18limbs/freeze.c
new file mode 100644
index 000000000..bb169a01d
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_18limbs/freeze.c
@@ -0,0 +1,92 @@
+static void freeze(uint32_t out[18], const uint32_t in1[18]) {
+ { const uint32_t x33 = in1[17];
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x36, uint8_t x37 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x3fffff);
+ { uint32_t x39, ℤ x40 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) Syntax.TZ) (Return x37, Return x4, 0x3ff);
+ { uint32_t x42, ℤ x43 = Op (Syntax.SubWithGetBorrow 21 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x40, Return x6, 0x0);
+ { uint32_t x45, ℤ x46 = Op (Syntax.SubWithGetBorrow 22 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x43, Return x8, 0x0);
+ { uint32_t x48, uint8_t x49 = Op (Syntax.SubWithGetBorrow 21 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x46, Return x10, 0x1ffc00);
+ { uint32_t x51, uint8_t x52 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x49, Return x12, 0x1fffff);
+ { uint32_t x54, uint8_t x55 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x52, Return x14, 0x3ffffe);
+ { uint32_t x57, uint8_t x58 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x55, Return x16, 0x1fffff);
+ { uint32_t x60, uint8_t x61 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x58, Return x18, 0x1fffff);
+ { uint32_t x63, uint8_t x64 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x61, Return x20, 0x3fffff);
+ { uint32_t x66, uint8_t x67 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x64, Return x22, 0x1fffff);
+ { uint32_t x69, uint8_t x70 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x67, Return x24, 0x1fffff);
+ { uint32_t x72, uint8_t x73 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x70, Return x26, 0x3fffff);
+ { uint32_t x75, uint8_t x76 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x73, Return x28, 0x1fffff);
+ { uint32_t x78, uint8_t x79 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x76, Return x30, 0x1fffff);
+ { uint32_t x81, uint8_t x82 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x79, Return x32, 0x3fffff);
+ { uint32_t x84, uint8_t x85 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x82, Return x34, 0x1fffff);
+ { uint32_t x87, uint8_t x88 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x85, Return x33, 0x1fffff);
+ { uint32_t x89 = cmovznz32(x88, 0x0, 0xffffffff);
+ { uint32_t x90 = (x89 & 0x3fffff);
+ { uint32_t x92, uint8_t x93 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x36, Return x90);
+ { uint32_t x94 = (x89 & 0x3ff);
+ { uint32_t x96, uint8_t x97 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x93, Return x39, Return x94);
+ { uint32_t x99, uint8_t x100 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x97, Return x42, 0x0);
+ { uint32_t x102, uint8_t x103 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x100, Return x45, 0x0);
+ { uint32_t x104 = (x89 & 0x1ffc00);
+ { uint32_t x106, uint8_t x107 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x103, Return x48, Return x104);
+ { uint32_t x108 = (x89 & 0x1fffff);
+ { uint32_t x110, uint8_t x111 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x107, Return x51, Return x108);
+ { uint32_t x112 = (x89 & 0x3ffffe);
+ { uint32_t x114, uint8_t x115 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x111, Return x54, Return x112);
+ { uint32_t x116 = (x89 & 0x1fffff);
+ { uint32_t x118, uint8_t x119 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x115, Return x57, Return x116);
+ { uint32_t x120 = (x89 & 0x1fffff);
+ { uint32_t x122, uint8_t x123 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x119, Return x60, Return x120);
+ { uint32_t x124 = (x89 & 0x3fffff);
+ { uint32_t x126, uint8_t x127 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x123, Return x63, Return x124);
+ { uint32_t x128 = (x89 & 0x1fffff);
+ { uint32_t x130, uint8_t x131 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x127, Return x66, Return x128);
+ { uint32_t x132 = (x89 & 0x1fffff);
+ { uint32_t x134, uint8_t x135 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x131, Return x69, Return x132);
+ { uint32_t x136 = (x89 & 0x3fffff);
+ { uint32_t x138, uint8_t x139 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x135, Return x72, Return x136);
+ { uint32_t x140 = (x89 & 0x1fffff);
+ { uint32_t x142, uint8_t x143 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x139, Return x75, Return x140);
+ { uint32_t x144 = (x89 & 0x1fffff);
+ { uint32_t x146, uint8_t x147 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x143, Return x78, Return x144);
+ { uint32_t x148 = (x89 & 0x3fffff);
+ { uint32_t x150, uint8_t x151 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x147, Return x81, Return x148);
+ { uint32_t x152 = (x89 & 0x1fffff);
+ { uint32_t x154, uint8_t x155 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x151, Return x84, Return x152);
+ { uint32_t x156 = (x89 & 0x1fffff);
+ { uint32_t x158, uint8_t _ = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x155, Return x87, Return x156);
+ out[0] = x92;
+ out[1] = x96;
+ out[2] = x99;
+ out[3] = x102;
+ out[4] = x106;
+ out[5] = x110;
+ out[6] = x114;
+ out[7] = x118;
+ out[8] = x122;
+ out[9] = x126;
+ out[10] = x130;
+ out[11] = x134;
+ out[12] = x138;
+ out[13] = x142;
+ out[14] = x146;
+ out[15] = x150;
+ out[16] = x154;
+ out[17] = x158;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/feadd.c b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/feadd.c
new file mode 100644
index 000000000..7432e2ef1
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/feadd.c
@@ -0,0 +1,60 @@
+static void feadd(uint32_t out[19], const uint32_t in1[19], const uint32_t in2[19]) {
+ { const uint32_t x38 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x74 = in2[18];
+ { const uint32_t x75 = in2[17];
+ { const uint32_t x73 = in2[16];
+ { const uint32_t x71 = in2[15];
+ { const uint32_t x69 = in2[14];
+ { const uint32_t x67 = in2[13];
+ { const uint32_t x65 = in2[12];
+ { const uint32_t x63 = in2[11];
+ { const uint32_t x61 = in2[10];
+ { const uint32_t x59 = in2[9];
+ { const uint32_t x57 = in2[8];
+ { const uint32_t x55 = in2[7];
+ { const uint32_t x53 = in2[6];
+ { const uint32_t x51 = in2[5];
+ { const uint32_t x49 = in2[4];
+ { const uint32_t x47 = in2[3];
+ { const uint32_t x45 = in2[2];
+ { const uint32_t x43 = in2[1];
+ { const uint32_t x41 = in2[0];
+ out[0] = (x5 + x41);
+ out[1] = (x7 + x43);
+ out[2] = (x9 + x45);
+ out[3] = (x11 + x47);
+ out[4] = (x13 + x49);
+ out[5] = (x15 + x51);
+ out[6] = (x17 + x53);
+ out[7] = (x19 + x55);
+ out[8] = (x21 + x57);
+ out[9] = (x23 + x59);
+ out[10] = (x25 + x61);
+ out[11] = (x27 + x63);
+ out[12] = (x29 + x65);
+ out[13] = (x31 + x67);
+ out[14] = (x33 + x69);
+ out[15] = (x35 + x71);
+ out[16] = (x37 + x73);
+ out[17] = (x39 + x75);
+ out[18] = (x38 + x74);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/freeze.c b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/freeze.c
new file mode 100644
index 000000000..18b0039e4
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/freeze.c
@@ -0,0 +1,97 @@
+static void freeze(uint32_t out[19], const uint32_t in1[19]) {
+ { const uint32_t x35 = in1[18];
+ { const uint32_t x36 = in1[17];
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x1fffff);
+ { uint32_t x41, ℤ x42 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) Syntax.TZ) (Return x39, Return x4, 0x7ff);
+ { uint32_t x44, ℤ x45 = Op (Syntax.SubWithGetBorrow 20 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x42, Return x6, 0x0);
+ { uint32_t x47, ℤ x48 = Op (Syntax.SubWithGetBorrow 20 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x45, Return x8, 0x0);
+ { uint32_t x50, uint8_t x51 = Op (Syntax.SubWithGetBorrow 21 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x48, Return x10, 0x1f8000);
+ { uint32_t x53, uint8_t x54 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x51, Return x12, 0xfffff);
+ { uint32_t x56, uint8_t x57 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x54, Return x14, 0xfffbf);
+ { uint32_t x59, uint8_t x60 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x57, Return x16, 0xfffff);
+ { uint32_t x62, uint8_t x63 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x60, Return x18, 0xfffff);
+ { uint32_t x65, uint8_t x66 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x63, Return x20, 0x1fffff);
+ { uint32_t x68, uint8_t x69 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x66, Return x22, 0xfffff);
+ { uint32_t x71, uint8_t x72 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x69, Return x24, 0xfffff);
+ { uint32_t x74, uint8_t x75 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x72, Return x26, 0xfffff);
+ { uint32_t x77, uint8_t x78 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x75, Return x28, 0xfffff);
+ { uint32_t x80, uint8_t x81 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x78, Return x30, 0x1fffff);
+ { uint32_t x83, uint8_t x84 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x81, Return x32, 0xfffff);
+ { uint32_t x86, uint8_t x87 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x84, Return x34, 0xfffff);
+ { uint32_t x89, uint8_t x90 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x87, Return x36, 0xfffff);
+ { uint32_t x92, uint8_t x93 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x90, Return x35, 0xfffff);
+ { uint32_t x94 = cmovznz32(x93, 0x0, 0xffffffff);
+ { uint32_t x95 = (x94 & 0x1fffff);
+ { uint32_t x97, uint8_t x98 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x38, Return x95);
+ { uint32_t x99 = (x94 & 0x7ff);
+ { uint32_t x101, uint8_t x102 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x98, Return x41, Return x99);
+ { uint32_t x104, uint8_t x105 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x102, Return x44, 0x0);
+ { uint32_t x107, uint8_t x108 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x105, Return x47, 0x0);
+ { uint32_t x109 = (x94 & 0x1f8000);
+ { uint32_t x111, uint8_t x112 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x108, Return x50, Return x109);
+ { uint32_t x113 = (x94 & 0xfffff);
+ { uint32_t x115, uint8_t x116 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x112, Return x53, Return x113);
+ { uint32_t x117 = (x94 & 0xfffbf);
+ { uint32_t x119, uint8_t x120 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x116, Return x56, Return x117);
+ { uint32_t x121 = (x94 & 0xfffff);
+ { uint32_t x123, uint8_t x124 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x120, Return x59, Return x121);
+ { uint32_t x125 = (x94 & 0xfffff);
+ { uint32_t x127, uint8_t x128 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x124, Return x62, Return x125);
+ { uint32_t x129 = (x94 & 0x1fffff);
+ { uint32_t x131, uint8_t x132 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x128, Return x65, Return x129);
+ { uint32_t x133 = (x94 & 0xfffff);
+ { uint32_t x135, uint8_t x136 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x132, Return x68, Return x133);
+ { uint32_t x137 = (x94 & 0xfffff);
+ { uint32_t x139, uint8_t x140 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x136, Return x71, Return x137);
+ { uint32_t x141 = (x94 & 0xfffff);
+ { uint32_t x143, uint8_t x144 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x140, Return x74, Return x141);
+ { uint32_t x145 = (x94 & 0xfffff);
+ { uint32_t x147, uint8_t x148 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x144, Return x77, Return x145);
+ { uint32_t x149 = (x94 & 0x1fffff);
+ { uint32_t x151, uint8_t x152 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x148, Return x80, Return x149);
+ { uint32_t x153 = (x94 & 0xfffff);
+ { uint32_t x155, uint8_t x156 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x152, Return x83, Return x153);
+ { uint32_t x157 = (x94 & 0xfffff);
+ { uint32_t x159, uint8_t x160 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x156, Return x86, Return x157);
+ { uint32_t x161 = (x94 & 0xfffff);
+ { uint32_t x163, uint8_t x164 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x160, Return x89, Return x161);
+ { uint32_t x165 = (x94 & 0xfffff);
+ { uint32_t x167, uint8_t _ = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x164, Return x92, Return x165);
+ out[0] = x97;
+ out[1] = x101;
+ out[2] = x104;
+ out[3] = x107;
+ out[4] = x111;
+ out[5] = x115;
+ out[6] = x119;
+ out[7] = x123;
+ out[8] = x127;
+ out[9] = x131;
+ out[10] = x135;
+ out[11] = x139;
+ out[12] = x143;
+ out[13] = x147;
+ out[14] = x151;
+ out[15] = x155;
+ out[16] = x159;
+ out[17] = x163;
+ out[18] = x167;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/freezeDisplay.log b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/freezeDisplay.log
index 27df2c9a0..b6f00e6ed 100644
--- a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1_19limbs/freezeDisplay.log
@@ -6,9 +6,9 @@ Interp-η
uint32_t x41, ℤ x42 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) Syntax.TZ) (Return x39, Return x4, 0x7ff);
uint32_t x44, ℤ x45 = Op (Syntax.SubWithGetBorrow 20 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x42, Return x6, 0x0);
uint32_t x47, ℤ x48 = Op (Syntax.SubWithGetBorrow 20 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) Syntax.TZ) (Return x45, Return x8, 0x0);
- uint32_t x50, uint8_t x51 = Op (Syntax.SubWithGetBorrow 21 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x48, Return x10, Const 2064384);
+ uint32_t x50, uint8_t x51 = Op (Syntax.SubWithGetBorrow 21 Syntax.TZ (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x48, Return x10, 0x1f8000);
uint32_t x53, uint8_t x54 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x51, Return x12, 0xfffff);
- uint32_t x56, uint8_t x57 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x54, Return x14, Const 1048511);
+ uint32_t x56, uint8_t x57 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x54, Return x14, 0xfffbf);
uint32_t x59, uint8_t x60 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x57, Return x16, 0xfffff);
uint32_t x62, uint8_t x63 = Op (Syntax.SubWithGetBorrow 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x60, Return x18, 0xfffff);
uint32_t x65, uint8_t x66 = Op (Syntax.SubWithGetBorrow 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x63, Return x20, 0x1fffff);
@@ -28,11 +28,11 @@ Interp-η
uint32_t x101, uint8_t x102 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x98, Return x41, Return x99);
uint32_t x104, uint8_t x105 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x102, Return x44, 0x0);
uint32_t x107, uint8_t x108 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x105, Return x47, 0x0);
- uint32_t x109 = (x94 & Const 2064384);
+ uint32_t x109 = (x94 & 0x1f8000);
uint32_t x111, uint8_t x112 = Op (Syntax.AddWithGetCarry 21 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x108, Return x50, Return x109);
uint32_t x113 = (x94 & 0xfffff);
uint32_t x115, uint8_t x116 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x112, Return x53, Return x113);
- uint32_t x117 = (x94 & Const 1048511);
+ uint32_t x117 = (x94 & 0xfffbf);
uint32_t x119, uint8_t x120 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x116, Return x56, Return x117);
uint32_t x121 = (x94 & 0xfffff);
uint32_t x123, uint8_t x124 = Op (Syntax.AddWithGetCarry 20 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x120, Return x59, Return x121);
diff --git a/src/Specific/solinas32_2e384m317_17limbs/femul.c b/src/Specific/solinas32_2e384m317_17limbs/femul.c
new file mode 100644
index 000000000..456a5ced2
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317_17limbs/femul.c
@@ -0,0 +1,127 @@
+static void femul(uint32_t out[17], const uint32_t in1[17], const uint32_t in2[17]) {
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x66 = in2[16];
+ { const uint32_t x67 = in2[15];
+ { const uint32_t x65 = in2[14];
+ { const uint32_t x63 = in2[13];
+ { const uint32_t x61 = in2[12];
+ { const uint32_t x59 = in2[11];
+ { const uint32_t x57 = in2[10];
+ { const uint32_t x55 = in2[9];
+ { const uint32_t x53 = in2[8];
+ { const uint32_t x51 = in2[7];
+ { const uint32_t x49 = in2[6];
+ { const uint32_t x47 = in2[5];
+ { const uint32_t x45 = in2[4];
+ { const uint32_t x43 = in2[3];
+ { const uint32_t x41 = in2[2];
+ { const uint32_t x39 = in2[1];
+ { const uint32_t x37 = in2[0];
+ { uint64_t x68 = (((uint64_t)x5 * x66) + (((uint64_t)x7 * x67) + ((0x2 * ((uint64_t)x9 * x65)) + (((uint64_t)x11 * x63) + ((0x2 * ((uint64_t)x13 * x61)) + (((uint64_t)x15 * x59) + (((uint64_t)x17 * x57) + ((0x2 * ((uint64_t)x19 * x55)) + (((uint64_t)x21 * x53) + ((0x2 * ((uint64_t)x23 * x51)) + (((uint64_t)x25 * x49) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + (((uint64_t)x31 * x43) + ((0x2 * ((uint64_t)x33 * x41)) + (((uint64_t)x35 * x39) + ((uint64_t)x34 * x37)))))))))))))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x67) + ((0x2 * ((uint64_t)x7 * x65)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + (((uint64_t)x15 * x57) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + (((uint64_t)x25 * x47) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + ((uint64_t)x35 * x37)))))))))))))))) + (0x13d * (0x2 * ((uint64_t)x34 * x66))));
+ { uint64_t x70 = ((((uint64_t)x5 * x65) + (((uint64_t)x7 * x63) + ((0x2 * ((uint64_t)x9 * x61)) + (((uint64_t)x11 * x59) + (((uint64_t)x13 * x57) + (((uint64_t)x15 * x55) + (((uint64_t)x17 * x53) + ((0x2 * ((uint64_t)x19 * x51)) + (((uint64_t)x21 * x49) + (((uint64_t)x23 * x47) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + ((uint64_t)x33 * x37))))))))))))))) + (0x13d * (((uint64_t)x35 * x66) + ((uint64_t)x34 * x67))));
+ { uint64_t x71 = ((((uint64_t)x5 * x63) + ((0x2 * ((uint64_t)x7 * x61)) + ((0x2 * ((uint64_t)x9 * x59)) + (((uint64_t)x11 * x57) + ((0x2 * ((uint64_t)x13 * x55)) + (((uint64_t)x15 * x53) + ((0x2 * ((uint64_t)x17 * x51)) + ((0x2 * ((uint64_t)x19 * x49)) + (((uint64_t)x21 * x47) + ((0x2 * ((uint64_t)x23 * x45)) + (((uint64_t)x25 * x43) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + ((uint64_t)x31 * x37)))))))))))))) + (0x13d * ((0x2 * ((uint64_t)x33 * x66)) + (((uint64_t)x35 * x67) + (0x2 * ((uint64_t)x34 * x65))))));
+ { uint64_t x72 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + ((uint64_t)x29 * x37))))))))))))) + (0x13d * (((uint64_t)x31 * x66) + (((uint64_t)x33 * x67) + (((uint64_t)x35 * x65) + ((uint64_t)x34 * x63))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + ((0x2 * ((uint64_t)x9 * x55)) + (((uint64_t)x11 * x53) + ((0x2 * ((uint64_t)x13 * x51)) + (((uint64_t)x15 * x49) + (((uint64_t)x17 * x47) + ((0x2 * ((uint64_t)x19 * x45)) + (((uint64_t)x21 * x43) + ((0x2 * ((uint64_t)x23 * x41)) + (((uint64_t)x25 * x39) + ((uint64_t)x27 * x37)))))))))))) + (0x13d * ((0x2 * ((uint64_t)x29 * x66)) + (((uint64_t)x31 * x67) + ((0x2 * ((uint64_t)x33 * x65)) + (((uint64_t)x35 * x63) + (0x2 * ((uint64_t)x34 * x61))))))));
+ { uint64_t x74 = ((((uint64_t)x5 * x57) + ((0x2 * ((uint64_t)x7 * x55)) + ((0x2 * ((uint64_t)x9 * x53)) + ((0x2 * ((uint64_t)x11 * x51)) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + ((0x2 * ((uint64_t)x17 * x45)) + ((0x2 * ((uint64_t)x19 * x43)) + ((0x2 * ((uint64_t)x21 * x41)) + ((0x2 * ((uint64_t)x23 * x39)) + ((uint64_t)x25 * x37))))))))))) + (0x13d * ((0x2 * ((uint64_t)x27 * x66)) + ((0x2 * ((uint64_t)x29 * x67)) + ((0x2 * ((uint64_t)x31 * x65)) + ((0x2 * ((uint64_t)x33 * x63)) + ((0x2 * ((uint64_t)x35 * x61)) + (0x2 * ((uint64_t)x34 * x59)))))))));
+ { uint64_t x75 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + ((0x2 * ((uint64_t)x9 * x51)) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + ((0x2 * ((uint64_t)x19 * x41)) + (((uint64_t)x21 * x39) + ((uint64_t)x23 * x37)))))))))) + (0x13d * (((uint64_t)x25 * x66) + (((uint64_t)x27 * x67) + ((0x2 * ((uint64_t)x29 * x65)) + (((uint64_t)x31 * x63) + ((0x2 * ((uint64_t)x33 * x61)) + (((uint64_t)x35 * x59) + ((uint64_t)x34 * x57)))))))));
+ { uint64_t x76 = ((((uint64_t)x5 * x53) + ((0x2 * ((uint64_t)x7 * x51)) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + ((0x2 * ((uint64_t)x19 * x39)) + ((uint64_t)x21 * x37))))))))) + (0x13d * ((0x2 * ((uint64_t)x23 * x66)) + (((uint64_t)x25 * x67) + ((0x2 * ((uint64_t)x27 * x65)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + ((0x2 * ((uint64_t)x33 * x59)) + (((uint64_t)x35 * x57) + (0x2 * ((uint64_t)x34 * x55)))))))))));
+ { uint64_t x77 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + (((uint64_t)x13 * x43) + (((uint64_t)x15 * x41) + (((uint64_t)x17 * x39) + ((uint64_t)x19 * x37)))))))) + (0x13d * (((uint64_t)x21 * x66) + (((uint64_t)x23 * x67) + (((uint64_t)x25 * x65) + (((uint64_t)x27 * x63) + ((0x2 * ((uint64_t)x29 * x61)) + (((uint64_t)x31 * x59) + (((uint64_t)x33 * x57) + (((uint64_t)x35 * x55) + ((uint64_t)x34 * x53)))))))))));
+ { uint64_t x78 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + ((0x2 * ((uint64_t)x9 * x45)) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + (((uint64_t)x15 * x39) + ((uint64_t)x17 * x37))))))) + (0x13d * ((0x2 * ((uint64_t)x19 * x66)) + (((uint64_t)x21 * x67) + ((0x2 * ((uint64_t)x23 * x65)) + (((uint64_t)x25 * x63) + ((0x2 * ((uint64_t)x27 * x61)) + ((0x2 * ((uint64_t)x29 * x59)) + (((uint64_t)x31 * x57) + ((0x2 * ((uint64_t)x33 * x55)) + (((uint64_t)x35 * x53) + (0x2 * ((uint64_t)x34 * x51)))))))))))));
+ { uint64_t x79 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((uint64_t)x15 * x37)))))) + (0x13d * ((0x2 * ((uint64_t)x17 * x66)) + ((0x2 * ((uint64_t)x19 * x67)) + ((0x2 * ((uint64_t)x21 * x65)) + ((0x2 * ((uint64_t)x23 * x63)) + ((0x2 * ((uint64_t)x25 * x61)) + ((0x2 * ((uint64_t)x27 * x59)) + ((0x2 * ((uint64_t)x29 * x57)) + ((0x2 * ((uint64_t)x31 * x55)) + ((0x2 * ((uint64_t)x33 * x53)) + ((0x2 * ((uint64_t)x35 * x51)) + (0x2 * ((uint64_t)x34 * x49))))))))))))));
+ { uint64_t x80 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + (((uint64_t)x11 * x39) + ((uint64_t)x13 * x37))))) + (0x13d * (((uint64_t)x15 * x66) + (((uint64_t)x17 * x67) + ((0x2 * ((uint64_t)x19 * x65)) + (((uint64_t)x21 * x63) + ((0x2 * ((uint64_t)x23 * x61)) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + ((0x2 * ((uint64_t)x29 * x55)) + (((uint64_t)x31 * x53) + ((0x2 * ((uint64_t)x33 * x51)) + (((uint64_t)x35 * x49) + ((uint64_t)x34 * x47))))))))))))));
+ { uint64_t x81 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((uint64_t)x11 * x37)))) + (0x13d * ((0x2 * ((uint64_t)x13 * x66)) + (((uint64_t)x15 * x67) + ((0x2 * ((uint64_t)x17 * x65)) + ((0x2 * ((uint64_t)x19 * x63)) + ((0x2 * ((uint64_t)x21 * x61)) + ((0x2 * ((uint64_t)x23 * x59)) + (((uint64_t)x25 * x57) + ((0x2 * ((uint64_t)x27 * x55)) + ((0x2 * ((uint64_t)x29 * x53)) + ((0x2 * ((uint64_t)x31 * x51)) + ((0x2 * ((uint64_t)x33 * x49)) + (((uint64_t)x35 * x47) + (0x2 * ((uint64_t)x34 * x45))))))))))))))));
+ { uint64_t x82 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + ((uint64_t)x9 * x37))) + (0x13d * (((uint64_t)x11 * x66) + (((uint64_t)x13 * x67) + (((uint64_t)x15 * x65) + (((uint64_t)x17 * x63) + ((0x2 * ((uint64_t)x19 * x61)) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + ((0x2 * ((uint64_t)x29 * x51)) + (((uint64_t)x31 * x49) + (((uint64_t)x33 * x47) + (((uint64_t)x35 * x45) + ((uint64_t)x34 * x43))))))))))))))));
+ { uint64_t x83 = ((((uint64_t)x5 * x39) + ((uint64_t)x7 * x37)) + (0x13d * ((0x2 * ((uint64_t)x9 * x66)) + (((uint64_t)x11 * x67) + ((0x2 * ((uint64_t)x13 * x65)) + (((uint64_t)x15 * x63) + ((0x2 * ((uint64_t)x17 * x61)) + ((0x2 * ((uint64_t)x19 * x59)) + (((uint64_t)x21 * x57) + ((0x2 * ((uint64_t)x23 * x55)) + (((uint64_t)x25 * x53) + ((0x2 * ((uint64_t)x27 * x51)) + ((0x2 * ((uint64_t)x29 * x49)) + (((uint64_t)x31 * x47) + ((0x2 * ((uint64_t)x33 * x45)) + (((uint64_t)x35 * x43) + (0x2 * ((uint64_t)x34 * x41))))))))))))))))));
+ { uint64_t x84 = (((uint64_t)x5 * x37) + (0x13d * ((0x2 * ((uint64_t)x7 * x66)) + ((0x2 * ((uint64_t)x9 * x67)) + ((0x2 * ((uint64_t)x11 * x65)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + ((0x2 * ((uint64_t)x35 * x41)) + (0x2 * ((uint64_t)x34 * x39)))))))))))))))))));
+ { uint64_t x85 = (x84 >> 0x17);
+ { uint32_t x86 = ((uint32_t)x84 & 0x7fffff);
+ { uint64_t x87 = (x85 + x83);
+ { uint64_t x88 = (x87 >> 0x17);
+ { uint32_t x89 = ((uint32_t)x87 & 0x7fffff);
+ { uint64_t x90 = (x88 + x82);
+ { uint64_t x91 = (x90 >> 0x16);
+ { uint32_t x92 = ((uint32_t)x90 & 0x3fffff);
+ { uint64_t x93 = (x91 + x81);
+ { uint64_t x94 = (x93 >> 0x17);
+ { uint32_t x95 = ((uint32_t)x93 & 0x7fffff);
+ { uint64_t x96 = (x94 + x80);
+ { uint64_t x97 = (x96 >> 0x16);
+ { uint32_t x98 = ((uint32_t)x96 & 0x3fffff);
+ { uint64_t x99 = (x97 + x79);
+ { uint64_t x100 = (x99 >> 0x17);
+ { uint32_t x101 = ((uint32_t)x99 & 0x7fffff);
+ { uint64_t x102 = (x100 + x78);
+ { uint64_t x103 = (x102 >> 0x17);
+ { uint32_t x104 = ((uint32_t)x102 & 0x7fffff);
+ { uint64_t x105 = (x103 + x77);
+ { uint64_t x106 = (x105 >> 0x16);
+ { uint32_t x107 = ((uint32_t)x105 & 0x3fffff);
+ { uint64_t x108 = (x106 + x76);
+ { uint64_t x109 = (x108 >> 0x17);
+ { uint32_t x110 = ((uint32_t)x108 & 0x7fffff);
+ { uint64_t x111 = (x109 + x75);
+ { uint64_t x112 = (x111 >> 0x16);
+ { uint32_t x113 = ((uint32_t)x111 & 0x3fffff);
+ { uint64_t x114 = (x112 + x74);
+ { uint64_t x115 = (x114 >> 0x17);
+ { uint32_t x116 = ((uint32_t)x114 & 0x7fffff);
+ { uint64_t x117 = (x115 + x73);
+ { uint64_t x118 = (x117 >> 0x17);
+ { uint32_t x119 = ((uint32_t)x117 & 0x7fffff);
+ { uint64_t x120 = (x118 + x72);
+ { uint64_t x121 = (x120 >> 0x16);
+ { uint32_t x122 = ((uint32_t)x120 & 0x3fffff);
+ { uint64_t x123 = (x121 + x71);
+ { uint64_t x124 = (x123 >> 0x17);
+ { uint32_t x125 = ((uint32_t)x123 & 0x7fffff);
+ { uint64_t x126 = (x124 + x70);
+ { uint64_t x127 = (x126 >> 0x16);
+ { uint32_t x128 = ((uint32_t)x126 & 0x3fffff);
+ { uint64_t x129 = (x127 + x69);
+ { uint64_t x130 = (x129 >> 0x17);
+ { uint32_t x131 = ((uint32_t)x129 & 0x7fffff);
+ { uint64_t x132 = (x130 + x68);
+ { uint32_t x133 = (uint32_t) (x132 >> 0x16);
+ { uint32_t x134 = ((uint32_t)x132 & 0x3fffff);
+ { uint64_t x135 = (x86 + ((uint64_t)0x13d * x133));
+ { uint32_t x136 = (uint32_t) (x135 >> 0x17);
+ { uint32_t x137 = ((uint32_t)x135 & 0x7fffff);
+ { uint32_t x138 = (x136 + x89);
+ { uint32_t x139 = (x138 >> 0x17);
+ { uint32_t x140 = (x138 & 0x7fffff);
+ out[0] = x137;
+ out[1] = x140;
+ out[2] = (x139 + x92);
+ out[3] = x95;
+ out[4] = x98;
+ out[5] = x101;
+ out[6] = x104;
+ out[7] = x107;
+ out[8] = x110;
+ out[9] = x113;
+ out[10] = x116;
+ out[11] = x119;
+ out[12] = x122;
+ out[13] = x125;
+ out[14] = x128;
+ out[15] = x131;
+ out[16] = x134;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e384m317_17limbs/femulDisplay.log b/src/Specific/solinas32_2e384m317_17limbs/femulDisplay.log
new file mode 100644
index 000000000..3da863e0f
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317_17limbs/femulDisplay.log
@@ -0,0 +1,80 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x34, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x66, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37))%core,
+ uint64_t x68 = (((uint64_t)x5 * x66) + (((uint64_t)x7 * x67) + ((0x2 * ((uint64_t)x9 * x65)) + (((uint64_t)x11 * x63) + ((0x2 * ((uint64_t)x13 * x61)) + (((uint64_t)x15 * x59) + (((uint64_t)x17 * x57) + ((0x2 * ((uint64_t)x19 * x55)) + (((uint64_t)x21 * x53) + ((0x2 * ((uint64_t)x23 * x51)) + (((uint64_t)x25 * x49) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + (((uint64_t)x31 * x43) + ((0x2 * ((uint64_t)x33 * x41)) + (((uint64_t)x35 * x39) + ((uint64_t)x34 * x37)))))))))))))))));
+ uint64_t x69 = ((((uint64_t)x5 * x67) + ((0x2 * ((uint64_t)x7 * x65)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + (((uint64_t)x15 * x57) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + (((uint64_t)x25 * x47) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + ((uint64_t)x35 * x37)))))))))))))))) + (0x13d * (0x2 * ((uint64_t)x34 * x66))));
+ uint64_t x70 = ((((uint64_t)x5 * x65) + (((uint64_t)x7 * x63) + ((0x2 * ((uint64_t)x9 * x61)) + (((uint64_t)x11 * x59) + (((uint64_t)x13 * x57) + (((uint64_t)x15 * x55) + (((uint64_t)x17 * x53) + ((0x2 * ((uint64_t)x19 * x51)) + (((uint64_t)x21 * x49) + (((uint64_t)x23 * x47) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + ((uint64_t)x33 * x37))))))))))))))) + (0x13d * (((uint64_t)x35 * x66) + ((uint64_t)x34 * x67))));
+ uint64_t x71 = ((((uint64_t)x5 * x63) + ((0x2 * ((uint64_t)x7 * x61)) + ((0x2 * ((uint64_t)x9 * x59)) + (((uint64_t)x11 * x57) + ((0x2 * ((uint64_t)x13 * x55)) + (((uint64_t)x15 * x53) + ((0x2 * ((uint64_t)x17 * x51)) + ((0x2 * ((uint64_t)x19 * x49)) + (((uint64_t)x21 * x47) + ((0x2 * ((uint64_t)x23 * x45)) + (((uint64_t)x25 * x43) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + ((uint64_t)x31 * x37)))))))))))))) + (0x13d * ((0x2 * ((uint64_t)x33 * x66)) + (((uint64_t)x35 * x67) + (0x2 * ((uint64_t)x34 * x65))))));
+ uint64_t x72 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + ((uint64_t)x29 * x37))))))))))))) + (0x13d * (((uint64_t)x31 * x66) + (((uint64_t)x33 * x67) + (((uint64_t)x35 * x65) + ((uint64_t)x34 * x63))))));
+ uint64_t x73 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + ((0x2 * ((uint64_t)x9 * x55)) + (((uint64_t)x11 * x53) + ((0x2 * ((uint64_t)x13 * x51)) + (((uint64_t)x15 * x49) + (((uint64_t)x17 * x47) + ((0x2 * ((uint64_t)x19 * x45)) + (((uint64_t)x21 * x43) + ((0x2 * ((uint64_t)x23 * x41)) + (((uint64_t)x25 * x39) + ((uint64_t)x27 * x37)))))))))))) + (0x13d * ((0x2 * ((uint64_t)x29 * x66)) + (((uint64_t)x31 * x67) + ((0x2 * ((uint64_t)x33 * x65)) + (((uint64_t)x35 * x63) + (0x2 * ((uint64_t)x34 * x61))))))));
+ uint64_t x74 = ((((uint64_t)x5 * x57) + ((0x2 * ((uint64_t)x7 * x55)) + ((0x2 * ((uint64_t)x9 * x53)) + ((0x2 * ((uint64_t)x11 * x51)) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + ((0x2 * ((uint64_t)x17 * x45)) + ((0x2 * ((uint64_t)x19 * x43)) + ((0x2 * ((uint64_t)x21 * x41)) + ((0x2 * ((uint64_t)x23 * x39)) + ((uint64_t)x25 * x37))))))))))) + (0x13d * ((0x2 * ((uint64_t)x27 * x66)) + ((0x2 * ((uint64_t)x29 * x67)) + ((0x2 * ((uint64_t)x31 * x65)) + ((0x2 * ((uint64_t)x33 * x63)) + ((0x2 * ((uint64_t)x35 * x61)) + (0x2 * ((uint64_t)x34 * x59)))))))));
+ uint64_t x75 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + ((0x2 * ((uint64_t)x9 * x51)) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + ((0x2 * ((uint64_t)x19 * x41)) + (((uint64_t)x21 * x39) + ((uint64_t)x23 * x37)))))))))) + (0x13d * (((uint64_t)x25 * x66) + (((uint64_t)x27 * x67) + ((0x2 * ((uint64_t)x29 * x65)) + (((uint64_t)x31 * x63) + ((0x2 * ((uint64_t)x33 * x61)) + (((uint64_t)x35 * x59) + ((uint64_t)x34 * x57)))))))));
+ uint64_t x76 = ((((uint64_t)x5 * x53) + ((0x2 * ((uint64_t)x7 * x51)) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + ((0x2 * ((uint64_t)x19 * x39)) + ((uint64_t)x21 * x37))))))))) + (0x13d * ((0x2 * ((uint64_t)x23 * x66)) + (((uint64_t)x25 * x67) + ((0x2 * ((uint64_t)x27 * x65)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + ((0x2 * ((uint64_t)x33 * x59)) + (((uint64_t)x35 * x57) + (0x2 * ((uint64_t)x34 * x55)))))))))));
+ uint64_t x77 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + (((uint64_t)x13 * x43) + (((uint64_t)x15 * x41) + (((uint64_t)x17 * x39) + ((uint64_t)x19 * x37)))))))) + (0x13d * (((uint64_t)x21 * x66) + (((uint64_t)x23 * x67) + (((uint64_t)x25 * x65) + (((uint64_t)x27 * x63) + ((0x2 * ((uint64_t)x29 * x61)) + (((uint64_t)x31 * x59) + (((uint64_t)x33 * x57) + (((uint64_t)x35 * x55) + ((uint64_t)x34 * x53)))))))))));
+ uint64_t x78 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + ((0x2 * ((uint64_t)x9 * x45)) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + (((uint64_t)x15 * x39) + ((uint64_t)x17 * x37))))))) + (0x13d * ((0x2 * ((uint64_t)x19 * x66)) + (((uint64_t)x21 * x67) + ((0x2 * ((uint64_t)x23 * x65)) + (((uint64_t)x25 * x63) + ((0x2 * ((uint64_t)x27 * x61)) + ((0x2 * ((uint64_t)x29 * x59)) + (((uint64_t)x31 * x57) + ((0x2 * ((uint64_t)x33 * x55)) + (((uint64_t)x35 * x53) + (0x2 * ((uint64_t)x34 * x51)))))))))))));
+ uint64_t x79 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((uint64_t)x15 * x37)))))) + (0x13d * ((0x2 * ((uint64_t)x17 * x66)) + ((0x2 * ((uint64_t)x19 * x67)) + ((0x2 * ((uint64_t)x21 * x65)) + ((0x2 * ((uint64_t)x23 * x63)) + ((0x2 * ((uint64_t)x25 * x61)) + ((0x2 * ((uint64_t)x27 * x59)) + ((0x2 * ((uint64_t)x29 * x57)) + ((0x2 * ((uint64_t)x31 * x55)) + ((0x2 * ((uint64_t)x33 * x53)) + ((0x2 * ((uint64_t)x35 * x51)) + (0x2 * ((uint64_t)x34 * x49))))))))))))));
+ uint64_t x80 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + (((uint64_t)x11 * x39) + ((uint64_t)x13 * x37))))) + (0x13d * (((uint64_t)x15 * x66) + (((uint64_t)x17 * x67) + ((0x2 * ((uint64_t)x19 * x65)) + (((uint64_t)x21 * x63) + ((0x2 * ((uint64_t)x23 * x61)) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + ((0x2 * ((uint64_t)x29 * x55)) + (((uint64_t)x31 * x53) + ((0x2 * ((uint64_t)x33 * x51)) + (((uint64_t)x35 * x49) + ((uint64_t)x34 * x47))))))))))))));
+ uint64_t x81 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((uint64_t)x11 * x37)))) + (0x13d * ((0x2 * ((uint64_t)x13 * x66)) + (((uint64_t)x15 * x67) + ((0x2 * ((uint64_t)x17 * x65)) + ((0x2 * ((uint64_t)x19 * x63)) + ((0x2 * ((uint64_t)x21 * x61)) + ((0x2 * ((uint64_t)x23 * x59)) + (((uint64_t)x25 * x57) + ((0x2 * ((uint64_t)x27 * x55)) + ((0x2 * ((uint64_t)x29 * x53)) + ((0x2 * ((uint64_t)x31 * x51)) + ((0x2 * ((uint64_t)x33 * x49)) + (((uint64_t)x35 * x47) + (0x2 * ((uint64_t)x34 * x45))))))))))))))));
+ uint64_t x82 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + ((uint64_t)x9 * x37))) + (0x13d * (((uint64_t)x11 * x66) + (((uint64_t)x13 * x67) + (((uint64_t)x15 * x65) + (((uint64_t)x17 * x63) + ((0x2 * ((uint64_t)x19 * x61)) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + ((0x2 * ((uint64_t)x29 * x51)) + (((uint64_t)x31 * x49) + (((uint64_t)x33 * x47) + (((uint64_t)x35 * x45) + ((uint64_t)x34 * x43))))))))))))))));
+ uint64_t x83 = ((((uint64_t)x5 * x39) + ((uint64_t)x7 * x37)) + (0x13d * ((0x2 * ((uint64_t)x9 * x66)) + (((uint64_t)x11 * x67) + ((0x2 * ((uint64_t)x13 * x65)) + (((uint64_t)x15 * x63) + ((0x2 * ((uint64_t)x17 * x61)) + ((0x2 * ((uint64_t)x19 * x59)) + (((uint64_t)x21 * x57) + ((0x2 * ((uint64_t)x23 * x55)) + (((uint64_t)x25 * x53) + ((0x2 * ((uint64_t)x27 * x51)) + ((0x2 * ((uint64_t)x29 * x49)) + (((uint64_t)x31 * x47) + ((0x2 * ((uint64_t)x33 * x45)) + (((uint64_t)x35 * x43) + (0x2 * ((uint64_t)x34 * x41))))))))))))))))));
+ uint64_t x84 = (((uint64_t)x5 * x37) + (0x13d * ((0x2 * ((uint64_t)x7 * x66)) + ((0x2 * ((uint64_t)x9 * x67)) + ((0x2 * ((uint64_t)x11 * x65)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + ((0x2 * ((uint64_t)x35 * x41)) + (0x2 * ((uint64_t)x34 * x39)))))))))))))))))));
+ uint64_t x85 = (x84 >> 0x17);
+ uint32_t x86 = ((uint32_t)x84 & 0x7fffff);
+ uint64_t x87 = (x85 + x83);
+ uint64_t x88 = (x87 >> 0x17);
+ uint32_t x89 = ((uint32_t)x87 & 0x7fffff);
+ uint64_t x90 = (x88 + x82);
+ uint64_t x91 = (x90 >> 0x16);
+ uint32_t x92 = ((uint32_t)x90 & 0x3fffff);
+ uint64_t x93 = (x91 + x81);
+ uint64_t x94 = (x93 >> 0x17);
+ uint32_t x95 = ((uint32_t)x93 & 0x7fffff);
+ uint64_t x96 = (x94 + x80);
+ uint64_t x97 = (x96 >> 0x16);
+ uint32_t x98 = ((uint32_t)x96 & 0x3fffff);
+ uint64_t x99 = (x97 + x79);
+ uint64_t x100 = (x99 >> 0x17);
+ uint32_t x101 = ((uint32_t)x99 & 0x7fffff);
+ uint64_t x102 = (x100 + x78);
+ uint64_t x103 = (x102 >> 0x17);
+ uint32_t x104 = ((uint32_t)x102 & 0x7fffff);
+ uint64_t x105 = (x103 + x77);
+ uint64_t x106 = (x105 >> 0x16);
+ uint32_t x107 = ((uint32_t)x105 & 0x3fffff);
+ uint64_t x108 = (x106 + x76);
+ uint64_t x109 = (x108 >> 0x17);
+ uint32_t x110 = ((uint32_t)x108 & 0x7fffff);
+ uint64_t x111 = (x109 + x75);
+ uint64_t x112 = (x111 >> 0x16);
+ uint32_t x113 = ((uint32_t)x111 & 0x3fffff);
+ uint64_t x114 = (x112 + x74);
+ uint64_t x115 = (x114 >> 0x17);
+ uint32_t x116 = ((uint32_t)x114 & 0x7fffff);
+ uint64_t x117 = (x115 + x73);
+ uint64_t x118 = (x117 >> 0x17);
+ uint32_t x119 = ((uint32_t)x117 & 0x7fffff);
+ uint64_t x120 = (x118 + x72);
+ uint64_t x121 = (x120 >> 0x16);
+ uint32_t x122 = ((uint32_t)x120 & 0x3fffff);
+ uint64_t x123 = (x121 + x71);
+ uint64_t x124 = (x123 >> 0x17);
+ uint32_t x125 = ((uint32_t)x123 & 0x7fffff);
+ uint64_t x126 = (x124 + x70);
+ uint64_t x127 = (x126 >> 0x16);
+ uint32_t x128 = ((uint32_t)x126 & 0x3fffff);
+ uint64_t x129 = (x127 + x69);
+ uint64_t x130 = (x129 >> 0x17);
+ uint32_t x131 = ((uint32_t)x129 & 0x7fffff);
+ uint64_t x132 = (x130 + x68);
+ uint32_t x133 = (uint32_t) (x132 >> 0x16);
+ uint32_t x134 = ((uint32_t)x132 & 0x3fffff);
+ uint64_t x135 = (x86 + ((uint64_t)0x13d * x133));
+ uint32_t x136 = (uint32_t) (x135 >> 0x17);
+ uint32_t x137 = ((uint32_t)x135 & 0x7fffff);
+ uint32_t x138 = (x136 + x89);
+ uint32_t x139 = (x138 >> 0x17);
+ uint32_t x140 = (x138 & 0x7fffff);
+ return (Return x134, Return x131, Return x128, Return x125, Return x122, Return x119, Return x116, Return x113, Return x110, Return x107, Return x104, Return x101, Return x98, Return x95, (x139 + x92), Return x140, Return x137))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e384m317_17limbs/fesquare.c b/src/Specific/solinas32_2e384m317_17limbs/fesquare.c
new file mode 100644
index 000000000..0bf42c666
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317_17limbs/fesquare.c
@@ -0,0 +1,110 @@
+static void fesquare(uint32_t out[17], const uint32_t in1[17]) {
+ { const uint32_t x31 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint64_t x33 = (((uint64_t)x2 * x31) + (((uint64_t)x4 * x32) + ((0x2 * ((uint64_t)x6 * x30)) + (((uint64_t)x8 * x28) + ((0x2 * ((uint64_t)x10 * x26)) + (((uint64_t)x12 * x24) + (((uint64_t)x14 * x22) + ((0x2 * ((uint64_t)x16 * x20)) + (((uint64_t)x18 * x18) + ((0x2 * ((uint64_t)x20 * x16)) + (((uint64_t)x22 * x14) + (((uint64_t)x24 * x12) + ((0x2 * ((uint64_t)x26 * x10)) + (((uint64_t)x28 * x8) + ((0x2 * ((uint64_t)x30 * x6)) + (((uint64_t)x32 * x4) + ((uint64_t)x31 * x2)))))))))))))))));
+ { uint64_t x34 = ((((uint64_t)x2 * x32) + ((0x2 * ((uint64_t)x4 * x30)) + ((0x2 * ((uint64_t)x6 * x28)) + ((0x2 * ((uint64_t)x8 * x26)) + ((0x2 * ((uint64_t)x10 * x24)) + (((uint64_t)x12 * x22) + ((0x2 * ((uint64_t)x14 * x20)) + ((0x2 * ((uint64_t)x16 * x18)) + ((0x2 * ((uint64_t)x18 * x16)) + ((0x2 * ((uint64_t)x20 * x14)) + (((uint64_t)x22 * x12) + ((0x2 * ((uint64_t)x24 * x10)) + ((0x2 * ((uint64_t)x26 * x8)) + ((0x2 * ((uint64_t)x28 * x6)) + ((0x2 * ((uint64_t)x30 * x4)) + ((uint64_t)x32 * x2)))))))))))))))) + (0x13d * (0x2 * ((uint64_t)x31 * x31))));
+ { uint64_t x35 = ((((uint64_t)x2 * x30) + (((uint64_t)x4 * x28) + ((0x2 * ((uint64_t)x6 * x26)) + (((uint64_t)x8 * x24) + (((uint64_t)x10 * x22) + (((uint64_t)x12 * x20) + (((uint64_t)x14 * x18) + ((0x2 * ((uint64_t)x16 * x16)) + (((uint64_t)x18 * x14) + (((uint64_t)x20 * x12) + (((uint64_t)x22 * x10) + (((uint64_t)x24 * x8) + ((0x2 * ((uint64_t)x26 * x6)) + (((uint64_t)x28 * x4) + ((uint64_t)x30 * x2))))))))))))))) + (0x13d * (((uint64_t)x32 * x31) + ((uint64_t)x31 * x32))));
+ { uint64_t x36 = ((((uint64_t)x2 * x28) + ((0x2 * ((uint64_t)x4 * x26)) + ((0x2 * ((uint64_t)x6 * x24)) + (((uint64_t)x8 * x22) + ((0x2 * ((uint64_t)x10 * x20)) + (((uint64_t)x12 * x18) + ((0x2 * ((uint64_t)x14 * x16)) + ((0x2 * ((uint64_t)x16 * x14)) + (((uint64_t)x18 * x12) + ((0x2 * ((uint64_t)x20 * x10)) + (((uint64_t)x22 * x8) + ((0x2 * ((uint64_t)x24 * x6)) + ((0x2 * ((uint64_t)x26 * x4)) + ((uint64_t)x28 * x2)))))))))))))) + (0x13d * ((0x2 * ((uint64_t)x30 * x31)) + (((uint64_t)x32 * x32) + (0x2 * ((uint64_t)x31 * x30))))));
+ { uint64_t x37 = ((((uint64_t)x2 * x26) + (((uint64_t)x4 * x24) + (((uint64_t)x6 * x22) + (((uint64_t)x8 * x20) + (((uint64_t)x10 * x18) + (((uint64_t)x12 * x16) + (((uint64_t)x14 * x14) + (((uint64_t)x16 * x12) + (((uint64_t)x18 * x10) + (((uint64_t)x20 * x8) + (((uint64_t)x22 * x6) + (((uint64_t)x24 * x4) + ((uint64_t)x26 * x2))))))))))))) + (0x13d * (((uint64_t)x28 * x31) + (((uint64_t)x30 * x32) + (((uint64_t)x32 * x30) + ((uint64_t)x31 * x28))))));
+ { uint64_t x38 = ((((uint64_t)x2 * x24) + (((uint64_t)x4 * x22) + ((0x2 * ((uint64_t)x6 * x20)) + (((uint64_t)x8 * x18) + ((0x2 * ((uint64_t)x10 * x16)) + (((uint64_t)x12 * x14) + (((uint64_t)x14 * x12) + ((0x2 * ((uint64_t)x16 * x10)) + (((uint64_t)x18 * x8) + ((0x2 * ((uint64_t)x20 * x6)) + (((uint64_t)x22 * x4) + ((uint64_t)x24 * x2)))))))))))) + (0x13d * ((0x2 * ((uint64_t)x26 * x31)) + (((uint64_t)x28 * x32) + ((0x2 * ((uint64_t)x30 * x30)) + (((uint64_t)x32 * x28) + (0x2 * ((uint64_t)x31 * x26))))))));
+ { uint64_t x39 = ((((uint64_t)x2 * x22) + ((0x2 * ((uint64_t)x4 * x20)) + ((0x2 * ((uint64_t)x6 * x18)) + ((0x2 * ((uint64_t)x8 * x16)) + ((0x2 * ((uint64_t)x10 * x14)) + (((uint64_t)x12 * x12) + ((0x2 * ((uint64_t)x14 * x10)) + ((0x2 * ((uint64_t)x16 * x8)) + ((0x2 * ((uint64_t)x18 * x6)) + ((0x2 * ((uint64_t)x20 * x4)) + ((uint64_t)x22 * x2))))))))))) + (0x13d * ((0x2 * ((uint64_t)x24 * x31)) + ((0x2 * ((uint64_t)x26 * x32)) + ((0x2 * ((uint64_t)x28 * x30)) + ((0x2 * ((uint64_t)x30 * x28)) + ((0x2 * ((uint64_t)x32 * x26)) + (0x2 * ((uint64_t)x31 * x24)))))))));
+ { uint64_t x40 = ((((uint64_t)x2 * x20) + (((uint64_t)x4 * x18) + ((0x2 * ((uint64_t)x6 * x16)) + (((uint64_t)x8 * x14) + (((uint64_t)x10 * x12) + (((uint64_t)x12 * x10) + (((uint64_t)x14 * x8) + ((0x2 * ((uint64_t)x16 * x6)) + (((uint64_t)x18 * x4) + ((uint64_t)x20 * x2)))))))))) + (0x13d * (((uint64_t)x22 * x31) + (((uint64_t)x24 * x32) + ((0x2 * ((uint64_t)x26 * x30)) + (((uint64_t)x28 * x28) + ((0x2 * ((uint64_t)x30 * x26)) + (((uint64_t)x32 * x24) + ((uint64_t)x31 * x22)))))))));
+ { uint64_t x41 = ((((uint64_t)x2 * x18) + ((0x2 * ((uint64_t)x4 * x16)) + ((0x2 * ((uint64_t)x6 * x14)) + (((uint64_t)x8 * x12) + ((0x2 * ((uint64_t)x10 * x10)) + (((uint64_t)x12 * x8) + ((0x2 * ((uint64_t)x14 * x6)) + ((0x2 * ((uint64_t)x16 * x4)) + ((uint64_t)x18 * x2))))))))) + (0x13d * ((0x2 * ((uint64_t)x20 * x31)) + (((uint64_t)x22 * x32) + ((0x2 * ((uint64_t)x24 * x30)) + ((0x2 * ((uint64_t)x26 * x28)) + ((0x2 * ((uint64_t)x28 * x26)) + ((0x2 * ((uint64_t)x30 * x24)) + (((uint64_t)x32 * x22) + (0x2 * ((uint64_t)x31 * x20)))))))))));
+ { uint64_t x42 = ((((uint64_t)x2 * x16) + (((uint64_t)x4 * x14) + (((uint64_t)x6 * x12) + (((uint64_t)x8 * x10) + (((uint64_t)x10 * x8) + (((uint64_t)x12 * x6) + (((uint64_t)x14 * x4) + ((uint64_t)x16 * x2)))))))) + (0x13d * (((uint64_t)x18 * x31) + (((uint64_t)x20 * x32) + (((uint64_t)x22 * x30) + (((uint64_t)x24 * x28) + ((0x2 * ((uint64_t)x26 * x26)) + (((uint64_t)x28 * x24) + (((uint64_t)x30 * x22) + (((uint64_t)x32 * x20) + ((uint64_t)x31 * x18)))))))))));
+ { uint64_t x43 = ((((uint64_t)x2 * x14) + (((uint64_t)x4 * x12) + ((0x2 * ((uint64_t)x6 * x10)) + (((uint64_t)x8 * x8) + ((0x2 * ((uint64_t)x10 * x6)) + (((uint64_t)x12 * x4) + ((uint64_t)x14 * x2))))))) + (0x13d * ((0x2 * ((uint64_t)x16 * x31)) + (((uint64_t)x18 * x32) + ((0x2 * ((uint64_t)x20 * x30)) + (((uint64_t)x22 * x28) + ((0x2 * ((uint64_t)x24 * x26)) + ((0x2 * ((uint64_t)x26 * x24)) + (((uint64_t)x28 * x22) + ((0x2 * ((uint64_t)x30 * x20)) + (((uint64_t)x32 * x18) + (0x2 * ((uint64_t)x31 * x16)))))))))))));
+ { uint64_t x44 = ((((uint64_t)x2 * x12) + ((0x2 * ((uint64_t)x4 * x10)) + ((0x2 * ((uint64_t)x6 * x8)) + ((0x2 * ((uint64_t)x8 * x6)) + ((0x2 * ((uint64_t)x10 * x4)) + ((uint64_t)x12 * x2)))))) + (0x13d * ((0x2 * ((uint64_t)x14 * x31)) + ((0x2 * ((uint64_t)x16 * x32)) + ((0x2 * ((uint64_t)x18 * x30)) + ((0x2 * ((uint64_t)x20 * x28)) + ((0x2 * ((uint64_t)x22 * x26)) + ((0x2 * ((uint64_t)x24 * x24)) + ((0x2 * ((uint64_t)x26 * x22)) + ((0x2 * ((uint64_t)x28 * x20)) + ((0x2 * ((uint64_t)x30 * x18)) + ((0x2 * ((uint64_t)x32 * x16)) + (0x2 * ((uint64_t)x31 * x14))))))))))))));
+ { uint64_t x45 = ((((uint64_t)x2 * x10) + (((uint64_t)x4 * x8) + ((0x2 * ((uint64_t)x6 * x6)) + (((uint64_t)x8 * x4) + ((uint64_t)x10 * x2))))) + (0x13d * (((uint64_t)x12 * x31) + (((uint64_t)x14 * x32) + ((0x2 * ((uint64_t)x16 * x30)) + (((uint64_t)x18 * x28) + ((0x2 * ((uint64_t)x20 * x26)) + (((uint64_t)x22 * x24) + (((uint64_t)x24 * x22) + ((0x2 * ((uint64_t)x26 * x20)) + (((uint64_t)x28 * x18) + ((0x2 * ((uint64_t)x30 * x16)) + (((uint64_t)x32 * x14) + ((uint64_t)x31 * x12))))))))))))));
+ { uint64_t x46 = ((((uint64_t)x2 * x8) + ((0x2 * ((uint64_t)x4 * x6)) + ((0x2 * ((uint64_t)x6 * x4)) + ((uint64_t)x8 * x2)))) + (0x13d * ((0x2 * ((uint64_t)x10 * x31)) + (((uint64_t)x12 * x32) + ((0x2 * ((uint64_t)x14 * x30)) + ((0x2 * ((uint64_t)x16 * x28)) + ((0x2 * ((uint64_t)x18 * x26)) + ((0x2 * ((uint64_t)x20 * x24)) + (((uint64_t)x22 * x22) + ((0x2 * ((uint64_t)x24 * x20)) + ((0x2 * ((uint64_t)x26 * x18)) + ((0x2 * ((uint64_t)x28 * x16)) + ((0x2 * ((uint64_t)x30 * x14)) + (((uint64_t)x32 * x12) + (0x2 * ((uint64_t)x31 * x10))))))))))))))));
+ { uint64_t x47 = ((((uint64_t)x2 * x6) + (((uint64_t)x4 * x4) + ((uint64_t)x6 * x2))) + (0x13d * (((uint64_t)x8 * x31) + (((uint64_t)x10 * x32) + (((uint64_t)x12 * x30) + (((uint64_t)x14 * x28) + ((0x2 * ((uint64_t)x16 * x26)) + (((uint64_t)x18 * x24) + (((uint64_t)x20 * x22) + (((uint64_t)x22 * x20) + (((uint64_t)x24 * x18) + ((0x2 * ((uint64_t)x26 * x16)) + (((uint64_t)x28 * x14) + (((uint64_t)x30 * x12) + (((uint64_t)x32 * x10) + ((uint64_t)x31 * x8))))))))))))))));
+ { uint64_t x48 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0x13d * ((0x2 * ((uint64_t)x6 * x31)) + (((uint64_t)x8 * x32) + ((0x2 * ((uint64_t)x10 * x30)) + (((uint64_t)x12 * x28) + ((0x2 * ((uint64_t)x14 * x26)) + ((0x2 * ((uint64_t)x16 * x24)) + (((uint64_t)x18 * x22) + ((0x2 * ((uint64_t)x20 * x20)) + (((uint64_t)x22 * x18) + ((0x2 * ((uint64_t)x24 * x16)) + ((0x2 * ((uint64_t)x26 * x14)) + (((uint64_t)x28 * x12) + ((0x2 * ((uint64_t)x30 * x10)) + (((uint64_t)x32 * x8) + (0x2 * ((uint64_t)x31 * x6))))))))))))))))));
+ { uint64_t x49 = (((uint64_t)x2 * x2) + (0x13d * ((0x2 * ((uint64_t)x4 * x31)) + ((0x2 * ((uint64_t)x6 * x32)) + ((0x2 * ((uint64_t)x8 * x30)) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + ((0x2 * ((uint64_t)x16 * x22)) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + ((0x2 * ((uint64_t)x22 * x16)) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + ((0x2 * ((uint64_t)x30 * x8)) + ((0x2 * ((uint64_t)x32 * x6)) + (0x2 * ((uint64_t)x31 * x4)))))))))))))))))));
+ { uint64_t x50 = (x49 >> 0x17);
+ { uint32_t x51 = ((uint32_t)x49 & 0x7fffff);
+ { uint64_t x52 = (x50 + x48);
+ { uint64_t x53 = (x52 >> 0x17);
+ { uint32_t x54 = ((uint32_t)x52 & 0x7fffff);
+ { uint64_t x55 = (x53 + x47);
+ { uint64_t x56 = (x55 >> 0x16);
+ { uint32_t x57 = ((uint32_t)x55 & 0x3fffff);
+ { uint64_t x58 = (x56 + x46);
+ { uint64_t x59 = (x58 >> 0x17);
+ { uint32_t x60 = ((uint32_t)x58 & 0x7fffff);
+ { uint64_t x61 = (x59 + x45);
+ { uint64_t x62 = (x61 >> 0x16);
+ { uint32_t x63 = ((uint32_t)x61 & 0x3fffff);
+ { uint64_t x64 = (x62 + x44);
+ { uint64_t x65 = (x64 >> 0x17);
+ { uint32_t x66 = ((uint32_t)x64 & 0x7fffff);
+ { uint64_t x67 = (x65 + x43);
+ { uint64_t x68 = (x67 >> 0x17);
+ { uint32_t x69 = ((uint32_t)x67 & 0x7fffff);
+ { uint64_t x70 = (x68 + x42);
+ { uint64_t x71 = (x70 >> 0x16);
+ { uint32_t x72 = ((uint32_t)x70 & 0x3fffff);
+ { uint64_t x73 = (x71 + x41);
+ { uint64_t x74 = (x73 >> 0x17);
+ { uint32_t x75 = ((uint32_t)x73 & 0x7fffff);
+ { uint64_t x76 = (x74 + x40);
+ { uint64_t x77 = (x76 >> 0x16);
+ { uint32_t x78 = ((uint32_t)x76 & 0x3fffff);
+ { uint64_t x79 = (x77 + x39);
+ { uint64_t x80 = (x79 >> 0x17);
+ { uint32_t x81 = ((uint32_t)x79 & 0x7fffff);
+ { uint64_t x82 = (x80 + x38);
+ { uint64_t x83 = (x82 >> 0x17);
+ { uint32_t x84 = ((uint32_t)x82 & 0x7fffff);
+ { uint64_t x85 = (x83 + x37);
+ { uint64_t x86 = (x85 >> 0x16);
+ { uint32_t x87 = ((uint32_t)x85 & 0x3fffff);
+ { uint64_t x88 = (x86 + x36);
+ { uint64_t x89 = (x88 >> 0x17);
+ { uint32_t x90 = ((uint32_t)x88 & 0x7fffff);
+ { uint64_t x91 = (x89 + x35);
+ { uint64_t x92 = (x91 >> 0x16);
+ { uint32_t x93 = ((uint32_t)x91 & 0x3fffff);
+ { uint64_t x94 = (x92 + x34);
+ { uint64_t x95 = (x94 >> 0x17);
+ { uint32_t x96 = ((uint32_t)x94 & 0x7fffff);
+ { uint64_t x97 = (x95 + x33);
+ { uint32_t x98 = (uint32_t) (x97 >> 0x16);
+ { uint32_t x99 = ((uint32_t)x97 & 0x3fffff);
+ { uint64_t x100 = (x51 + ((uint64_t)0x13d * x98));
+ { uint32_t x101 = (uint32_t) (x100 >> 0x17);
+ { uint32_t x102 = ((uint32_t)x100 & 0x7fffff);
+ { uint32_t x103 = (x101 + x54);
+ { uint32_t x104 = (x103 >> 0x17);
+ { uint32_t x105 = (x103 & 0x7fffff);
+ out[0] = x102;
+ out[1] = x105;
+ out[2] = (x104 + x57);
+ out[3] = x60;
+ out[4] = x63;
+ out[5] = x66;
+ out[6] = x69;
+ out[7] = x72;
+ out[8] = x75;
+ out[9] = x78;
+ out[10] = x81;
+ out[11] = x84;
+ out[12] = x87;
+ out[13] = x90;
+ out[14] = x93;
+ out[15] = x96;
+ out[16] = x99;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e384m317_17limbs/fesquareDisplay.log b/src/Specific/solinas32_2e384m317_17limbs/fesquareDisplay.log
new file mode 100644
index 000000000..79331e699
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317_17limbs/fesquareDisplay.log
@@ -0,0 +1,80 @@
+λ x : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x31, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
+ uint64_t x33 = (((uint64_t)x2 * x31) + (((uint64_t)x4 * x32) + ((0x2 * ((uint64_t)x6 * x30)) + (((uint64_t)x8 * x28) + ((0x2 * ((uint64_t)x10 * x26)) + (((uint64_t)x12 * x24) + (((uint64_t)x14 * x22) + ((0x2 * ((uint64_t)x16 * x20)) + (((uint64_t)x18 * x18) + ((0x2 * ((uint64_t)x20 * x16)) + (((uint64_t)x22 * x14) + (((uint64_t)x24 * x12) + ((0x2 * ((uint64_t)x26 * x10)) + (((uint64_t)x28 * x8) + ((0x2 * ((uint64_t)x30 * x6)) + (((uint64_t)x32 * x4) + ((uint64_t)x31 * x2)))))))))))))))));
+ uint64_t x34 = ((((uint64_t)x2 * x32) + ((0x2 * ((uint64_t)x4 * x30)) + ((0x2 * ((uint64_t)x6 * x28)) + ((0x2 * ((uint64_t)x8 * x26)) + ((0x2 * ((uint64_t)x10 * x24)) + (((uint64_t)x12 * x22) + ((0x2 * ((uint64_t)x14 * x20)) + ((0x2 * ((uint64_t)x16 * x18)) + ((0x2 * ((uint64_t)x18 * x16)) + ((0x2 * ((uint64_t)x20 * x14)) + (((uint64_t)x22 * x12) + ((0x2 * ((uint64_t)x24 * x10)) + ((0x2 * ((uint64_t)x26 * x8)) + ((0x2 * ((uint64_t)x28 * x6)) + ((0x2 * ((uint64_t)x30 * x4)) + ((uint64_t)x32 * x2)))))))))))))))) + (0x13d * (0x2 * ((uint64_t)x31 * x31))));
+ uint64_t x35 = ((((uint64_t)x2 * x30) + (((uint64_t)x4 * x28) + ((0x2 * ((uint64_t)x6 * x26)) + (((uint64_t)x8 * x24) + (((uint64_t)x10 * x22) + (((uint64_t)x12 * x20) + (((uint64_t)x14 * x18) + ((0x2 * ((uint64_t)x16 * x16)) + (((uint64_t)x18 * x14) + (((uint64_t)x20 * x12) + (((uint64_t)x22 * x10) + (((uint64_t)x24 * x8) + ((0x2 * ((uint64_t)x26 * x6)) + (((uint64_t)x28 * x4) + ((uint64_t)x30 * x2))))))))))))))) + (0x13d * (((uint64_t)x32 * x31) + ((uint64_t)x31 * x32))));
+ uint64_t x36 = ((((uint64_t)x2 * x28) + ((0x2 * ((uint64_t)x4 * x26)) + ((0x2 * ((uint64_t)x6 * x24)) + (((uint64_t)x8 * x22) + ((0x2 * ((uint64_t)x10 * x20)) + (((uint64_t)x12 * x18) + ((0x2 * ((uint64_t)x14 * x16)) + ((0x2 * ((uint64_t)x16 * x14)) + (((uint64_t)x18 * x12) + ((0x2 * ((uint64_t)x20 * x10)) + (((uint64_t)x22 * x8) + ((0x2 * ((uint64_t)x24 * x6)) + ((0x2 * ((uint64_t)x26 * x4)) + ((uint64_t)x28 * x2)))))))))))))) + (0x13d * ((0x2 * ((uint64_t)x30 * x31)) + (((uint64_t)x32 * x32) + (0x2 * ((uint64_t)x31 * x30))))));
+ uint64_t x37 = ((((uint64_t)x2 * x26) + (((uint64_t)x4 * x24) + (((uint64_t)x6 * x22) + (((uint64_t)x8 * x20) + (((uint64_t)x10 * x18) + (((uint64_t)x12 * x16) + (((uint64_t)x14 * x14) + (((uint64_t)x16 * x12) + (((uint64_t)x18 * x10) + (((uint64_t)x20 * x8) + (((uint64_t)x22 * x6) + (((uint64_t)x24 * x4) + ((uint64_t)x26 * x2))))))))))))) + (0x13d * (((uint64_t)x28 * x31) + (((uint64_t)x30 * x32) + (((uint64_t)x32 * x30) + ((uint64_t)x31 * x28))))));
+ uint64_t x38 = ((((uint64_t)x2 * x24) + (((uint64_t)x4 * x22) + ((0x2 * ((uint64_t)x6 * x20)) + (((uint64_t)x8 * x18) + ((0x2 * ((uint64_t)x10 * x16)) + (((uint64_t)x12 * x14) + (((uint64_t)x14 * x12) + ((0x2 * ((uint64_t)x16 * x10)) + (((uint64_t)x18 * x8) + ((0x2 * ((uint64_t)x20 * x6)) + (((uint64_t)x22 * x4) + ((uint64_t)x24 * x2)))))))))))) + (0x13d * ((0x2 * ((uint64_t)x26 * x31)) + (((uint64_t)x28 * x32) + ((0x2 * ((uint64_t)x30 * x30)) + (((uint64_t)x32 * x28) + (0x2 * ((uint64_t)x31 * x26))))))));
+ uint64_t x39 = ((((uint64_t)x2 * x22) + ((0x2 * ((uint64_t)x4 * x20)) + ((0x2 * ((uint64_t)x6 * x18)) + ((0x2 * ((uint64_t)x8 * x16)) + ((0x2 * ((uint64_t)x10 * x14)) + (((uint64_t)x12 * x12) + ((0x2 * ((uint64_t)x14 * x10)) + ((0x2 * ((uint64_t)x16 * x8)) + ((0x2 * ((uint64_t)x18 * x6)) + ((0x2 * ((uint64_t)x20 * x4)) + ((uint64_t)x22 * x2))))))))))) + (0x13d * ((0x2 * ((uint64_t)x24 * x31)) + ((0x2 * ((uint64_t)x26 * x32)) + ((0x2 * ((uint64_t)x28 * x30)) + ((0x2 * ((uint64_t)x30 * x28)) + ((0x2 * ((uint64_t)x32 * x26)) + (0x2 * ((uint64_t)x31 * x24)))))))));
+ uint64_t x40 = ((((uint64_t)x2 * x20) + (((uint64_t)x4 * x18) + ((0x2 * ((uint64_t)x6 * x16)) + (((uint64_t)x8 * x14) + (((uint64_t)x10 * x12) + (((uint64_t)x12 * x10) + (((uint64_t)x14 * x8) + ((0x2 * ((uint64_t)x16 * x6)) + (((uint64_t)x18 * x4) + ((uint64_t)x20 * x2)))))))))) + (0x13d * (((uint64_t)x22 * x31) + (((uint64_t)x24 * x32) + ((0x2 * ((uint64_t)x26 * x30)) + (((uint64_t)x28 * x28) + ((0x2 * ((uint64_t)x30 * x26)) + (((uint64_t)x32 * x24) + ((uint64_t)x31 * x22)))))))));
+ uint64_t x41 = ((((uint64_t)x2 * x18) + ((0x2 * ((uint64_t)x4 * x16)) + ((0x2 * ((uint64_t)x6 * x14)) + (((uint64_t)x8 * x12) + ((0x2 * ((uint64_t)x10 * x10)) + (((uint64_t)x12 * x8) + ((0x2 * ((uint64_t)x14 * x6)) + ((0x2 * ((uint64_t)x16 * x4)) + ((uint64_t)x18 * x2))))))))) + (0x13d * ((0x2 * ((uint64_t)x20 * x31)) + (((uint64_t)x22 * x32) + ((0x2 * ((uint64_t)x24 * x30)) + ((0x2 * ((uint64_t)x26 * x28)) + ((0x2 * ((uint64_t)x28 * x26)) + ((0x2 * ((uint64_t)x30 * x24)) + (((uint64_t)x32 * x22) + (0x2 * ((uint64_t)x31 * x20)))))))))));
+ uint64_t x42 = ((((uint64_t)x2 * x16) + (((uint64_t)x4 * x14) + (((uint64_t)x6 * x12) + (((uint64_t)x8 * x10) + (((uint64_t)x10 * x8) + (((uint64_t)x12 * x6) + (((uint64_t)x14 * x4) + ((uint64_t)x16 * x2)))))))) + (0x13d * (((uint64_t)x18 * x31) + (((uint64_t)x20 * x32) + (((uint64_t)x22 * x30) + (((uint64_t)x24 * x28) + ((0x2 * ((uint64_t)x26 * x26)) + (((uint64_t)x28 * x24) + (((uint64_t)x30 * x22) + (((uint64_t)x32 * x20) + ((uint64_t)x31 * x18)))))))))));
+ uint64_t x43 = ((((uint64_t)x2 * x14) + (((uint64_t)x4 * x12) + ((0x2 * ((uint64_t)x6 * x10)) + (((uint64_t)x8 * x8) + ((0x2 * ((uint64_t)x10 * x6)) + (((uint64_t)x12 * x4) + ((uint64_t)x14 * x2))))))) + (0x13d * ((0x2 * ((uint64_t)x16 * x31)) + (((uint64_t)x18 * x32) + ((0x2 * ((uint64_t)x20 * x30)) + (((uint64_t)x22 * x28) + ((0x2 * ((uint64_t)x24 * x26)) + ((0x2 * ((uint64_t)x26 * x24)) + (((uint64_t)x28 * x22) + ((0x2 * ((uint64_t)x30 * x20)) + (((uint64_t)x32 * x18) + (0x2 * ((uint64_t)x31 * x16)))))))))))));
+ uint64_t x44 = ((((uint64_t)x2 * x12) + ((0x2 * ((uint64_t)x4 * x10)) + ((0x2 * ((uint64_t)x6 * x8)) + ((0x2 * ((uint64_t)x8 * x6)) + ((0x2 * ((uint64_t)x10 * x4)) + ((uint64_t)x12 * x2)))))) + (0x13d * ((0x2 * ((uint64_t)x14 * x31)) + ((0x2 * ((uint64_t)x16 * x32)) + ((0x2 * ((uint64_t)x18 * x30)) + ((0x2 * ((uint64_t)x20 * x28)) + ((0x2 * ((uint64_t)x22 * x26)) + ((0x2 * ((uint64_t)x24 * x24)) + ((0x2 * ((uint64_t)x26 * x22)) + ((0x2 * ((uint64_t)x28 * x20)) + ((0x2 * ((uint64_t)x30 * x18)) + ((0x2 * ((uint64_t)x32 * x16)) + (0x2 * ((uint64_t)x31 * x14))))))))))))));
+ uint64_t x45 = ((((uint64_t)x2 * x10) + (((uint64_t)x4 * x8) + ((0x2 * ((uint64_t)x6 * x6)) + (((uint64_t)x8 * x4) + ((uint64_t)x10 * x2))))) + (0x13d * (((uint64_t)x12 * x31) + (((uint64_t)x14 * x32) + ((0x2 * ((uint64_t)x16 * x30)) + (((uint64_t)x18 * x28) + ((0x2 * ((uint64_t)x20 * x26)) + (((uint64_t)x22 * x24) + (((uint64_t)x24 * x22) + ((0x2 * ((uint64_t)x26 * x20)) + (((uint64_t)x28 * x18) + ((0x2 * ((uint64_t)x30 * x16)) + (((uint64_t)x32 * x14) + ((uint64_t)x31 * x12))))))))))))));
+ uint64_t x46 = ((((uint64_t)x2 * x8) + ((0x2 * ((uint64_t)x4 * x6)) + ((0x2 * ((uint64_t)x6 * x4)) + ((uint64_t)x8 * x2)))) + (0x13d * ((0x2 * ((uint64_t)x10 * x31)) + (((uint64_t)x12 * x32) + ((0x2 * ((uint64_t)x14 * x30)) + ((0x2 * ((uint64_t)x16 * x28)) + ((0x2 * ((uint64_t)x18 * x26)) + ((0x2 * ((uint64_t)x20 * x24)) + (((uint64_t)x22 * x22) + ((0x2 * ((uint64_t)x24 * x20)) + ((0x2 * ((uint64_t)x26 * x18)) + ((0x2 * ((uint64_t)x28 * x16)) + ((0x2 * ((uint64_t)x30 * x14)) + (((uint64_t)x32 * x12) + (0x2 * ((uint64_t)x31 * x10))))))))))))))));
+ uint64_t x47 = ((((uint64_t)x2 * x6) + (((uint64_t)x4 * x4) + ((uint64_t)x6 * x2))) + (0x13d * (((uint64_t)x8 * x31) + (((uint64_t)x10 * x32) + (((uint64_t)x12 * x30) + (((uint64_t)x14 * x28) + ((0x2 * ((uint64_t)x16 * x26)) + (((uint64_t)x18 * x24) + (((uint64_t)x20 * x22) + (((uint64_t)x22 * x20) + (((uint64_t)x24 * x18) + ((0x2 * ((uint64_t)x26 * x16)) + (((uint64_t)x28 * x14) + (((uint64_t)x30 * x12) + (((uint64_t)x32 * x10) + ((uint64_t)x31 * x8))))))))))))))));
+ uint64_t x48 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0x13d * ((0x2 * ((uint64_t)x6 * x31)) + (((uint64_t)x8 * x32) + ((0x2 * ((uint64_t)x10 * x30)) + (((uint64_t)x12 * x28) + ((0x2 * ((uint64_t)x14 * x26)) + ((0x2 * ((uint64_t)x16 * x24)) + (((uint64_t)x18 * x22) + ((0x2 * ((uint64_t)x20 * x20)) + (((uint64_t)x22 * x18) + ((0x2 * ((uint64_t)x24 * x16)) + ((0x2 * ((uint64_t)x26 * x14)) + (((uint64_t)x28 * x12) + ((0x2 * ((uint64_t)x30 * x10)) + (((uint64_t)x32 * x8) + (0x2 * ((uint64_t)x31 * x6))))))))))))))))));
+ uint64_t x49 = (((uint64_t)x2 * x2) + (0x13d * ((0x2 * ((uint64_t)x4 * x31)) + ((0x2 * ((uint64_t)x6 * x32)) + ((0x2 * ((uint64_t)x8 * x30)) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + ((0x2 * ((uint64_t)x16 * x22)) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + ((0x2 * ((uint64_t)x22 * x16)) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + ((0x2 * ((uint64_t)x30 * x8)) + ((0x2 * ((uint64_t)x32 * x6)) + (0x2 * ((uint64_t)x31 * x4)))))))))))))))))));
+ uint64_t x50 = (x49 >> 0x17);
+ uint32_t x51 = ((uint32_t)x49 & 0x7fffff);
+ uint64_t x52 = (x50 + x48);
+ uint64_t x53 = (x52 >> 0x17);
+ uint32_t x54 = ((uint32_t)x52 & 0x7fffff);
+ uint64_t x55 = (x53 + x47);
+ uint64_t x56 = (x55 >> 0x16);
+ uint32_t x57 = ((uint32_t)x55 & 0x3fffff);
+ uint64_t x58 = (x56 + x46);
+ uint64_t x59 = (x58 >> 0x17);
+ uint32_t x60 = ((uint32_t)x58 & 0x7fffff);
+ uint64_t x61 = (x59 + x45);
+ uint64_t x62 = (x61 >> 0x16);
+ uint32_t x63 = ((uint32_t)x61 & 0x3fffff);
+ uint64_t x64 = (x62 + x44);
+ uint64_t x65 = (x64 >> 0x17);
+ uint32_t x66 = ((uint32_t)x64 & 0x7fffff);
+ uint64_t x67 = (x65 + x43);
+ uint64_t x68 = (x67 >> 0x17);
+ uint32_t x69 = ((uint32_t)x67 & 0x7fffff);
+ uint64_t x70 = (x68 + x42);
+ uint64_t x71 = (x70 >> 0x16);
+ uint32_t x72 = ((uint32_t)x70 & 0x3fffff);
+ uint64_t x73 = (x71 + x41);
+ uint64_t x74 = (x73 >> 0x17);
+ uint32_t x75 = ((uint32_t)x73 & 0x7fffff);
+ uint64_t x76 = (x74 + x40);
+ uint64_t x77 = (x76 >> 0x16);
+ uint32_t x78 = ((uint32_t)x76 & 0x3fffff);
+ uint64_t x79 = (x77 + x39);
+ uint64_t x80 = (x79 >> 0x17);
+ uint32_t x81 = ((uint32_t)x79 & 0x7fffff);
+ uint64_t x82 = (x80 + x38);
+ uint64_t x83 = (x82 >> 0x17);
+ uint32_t x84 = ((uint32_t)x82 & 0x7fffff);
+ uint64_t x85 = (x83 + x37);
+ uint64_t x86 = (x85 >> 0x16);
+ uint32_t x87 = ((uint32_t)x85 & 0x3fffff);
+ uint64_t x88 = (x86 + x36);
+ uint64_t x89 = (x88 >> 0x17);
+ uint32_t x90 = ((uint32_t)x88 & 0x7fffff);
+ uint64_t x91 = (x89 + x35);
+ uint64_t x92 = (x91 >> 0x16);
+ uint32_t x93 = ((uint32_t)x91 & 0x3fffff);
+ uint64_t x94 = (x92 + x34);
+ uint64_t x95 = (x94 >> 0x17);
+ uint32_t x96 = ((uint32_t)x94 & 0x7fffff);
+ uint64_t x97 = (x95 + x33);
+ uint32_t x98 = (uint32_t) (x97 >> 0x16);
+ uint32_t x99 = ((uint32_t)x97 & 0x3fffff);
+ uint64_t x100 = (x51 + ((uint64_t)0x13d * x98));
+ uint32_t x101 = (uint32_t) (x100 >> 0x17);
+ uint32_t x102 = ((uint32_t)x100 & 0x7fffff);
+ uint32_t x103 = (x101 + x54);
+ uint32_t x104 = (x103 >> 0x17);
+ uint32_t x105 = (x103 & 0x7fffff);
+ return (Return x99, Return x96, Return x93, Return x90, Return x87, Return x84, Return x81, Return x78, Return x75, Return x72, Return x69, Return x66, Return x63, Return x60, (x104 + x57), Return x105, Return x102))
+x
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e384m317_17limbs/fesub.c b/src/Specific/solinas32_2e384m317_17limbs/fesub.c
index 6c3da1935..4c4390597 100644
--- a/src/Specific/solinas32_2e384m317_17limbs/fesub.c
+++ b/src/Specific/solinas32_2e384m317_17limbs/fesub.c
@@ -33,7 +33,7 @@ static void fesub(uint32_t out[17], const uint32_t in1[17], const uint32_t in2[1
{ const uint32_t x41 = in2[2];
{ const uint32_t x39 = in2[1];
{ const uint32_t x37 = in2[0];
- out[0] = ((Const 16776582 + x5) - x37);
+ out[0] = ((0xfffd86 + x5) - x37);
out[1] = ((0xfffffe + x7) - x39);
out[2] = ((0x7ffffe + x9) - x41);
out[3] = ((0xfffffe + x11) - x43);
diff --git a/src/Specific/solinas32_2e384m317_17limbs/fesubDisplay.log b/src/Specific/solinas32_2e384m317_17limbs/fesubDisplay.log
index 35f663d2d..978eda426 100644
--- a/src/Specific/solinas32_2e384m317_17limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e384m317_17limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x34, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x66, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37))%core,
- (((0x7ffffe + x34) - x66), ((0xfffffe + x35) - x67), ((0x7ffffe + x33) - x65), ((0xfffffe + x31) - x63), ((0x7ffffe + x29) - x61), ((0xfffffe + x27) - x59), ((0xfffffe + x25) - x57), ((0x7ffffe + x23) - x55), ((0xfffffe + x21) - x53), ((0x7ffffe + x19) - x51), ((0xfffffe + x17) - x49), ((0xfffffe + x15) - x47), ((0x7ffffe + x13) - x45), ((0xfffffe + x11) - x43), ((0x7ffffe + x9) - x41), ((0xfffffe + x7) - x39), ((Const 16776582 + x5) - x37)))
+ (((0x7ffffe + x34) - x66), ((0xfffffe + x35) - x67), ((0x7ffffe + x33) - x65), ((0xfffffe + x31) - x63), ((0x7ffffe + x29) - x61), ((0xfffffe + x27) - x59), ((0xfffffe + x25) - x57), ((0x7ffffe + x23) - x55), ((0xfffffe + x21) - x53), ((0x7ffffe + x19) - x51), ((0xfffffe + x17) - x49), ((0xfffffe + x15) - x47), ((0x7ffffe + x13) - x45), ((0xfffffe + x11) - x43), ((0x7ffffe + x9) - x41), ((0xfffffe + x7) - x39), ((0xfffd86 + x5) - x37)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e384m317_17limbs/freeze.c b/src/Specific/solinas32_2e384m317_17limbs/freeze.c
index 580a1d967..5474ab624 100644
--- a/src/Specific/solinas32_2e384m317_17limbs/freeze.c
+++ b/src/Specific/solinas32_2e384m317_17limbs/freeze.c
@@ -16,7 +16,7 @@ static void freeze(uint32_t out[17], const uint32_t in1[17]) {
{ const uint32_t x6 = in1[2];
{ const uint32_t x4 = in1[1];
{ const uint32_t x2 = in1[0];
- { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 8388291);
+ { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x7ffec3);
{ uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x4, 0x7fffff);
{ uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x6, 0x3fffff);
{ uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x8, 0x7fffff);
@@ -34,7 +34,7 @@ static void freeze(uint32_t out[17], const uint32_t in1[17]) {
{ uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x32, 0x7fffff);
{ uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x31, 0x3fffff);
{ uint32_t x84 = cmovznz32(x83, 0x0, 0xffffffff);
- { uint32_t x85 = (x84 & Const 8388291);
+ { uint32_t x85 = (x84 & 0x7ffec3);
{ uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x34, Return x85);
{ uint32_t x89 = (x84 & 0x7fffff);
{ uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x37, Return x89);
diff --git a/src/Specific/solinas32_2e384m317_17limbs/freezeDisplay.log b/src/Specific/solinas32_2e384m317_17limbs/freezeDisplay.log
index c34c69860..acae41bef 100644
--- a/src/Specific/solinas32_2e384m317_17limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e384m317_17limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x31, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 8388291);
+ uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x7ffec3);
uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x4, 0x7fffff);
uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x6, 0x3fffff);
uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x8, 0x7fffff);
@@ -20,7 +20,7 @@ Interp-η
uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x32, 0x7fffff);
uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x31, 0x3fffff);
uint32_t x84 = cmovznz32(x83, 0x0, 0xffffffff);
- uint32_t x85 = (x84 & Const 8388291);
+ uint32_t x85 = (x84 & 0x7ffec3);
uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x34, Return x85);
uint32_t x89 = (x84 & 0x7fffff);
uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x37, Return x89);
diff --git a/src/Specific/solinas32_2e389m21_15limbs/fesub.c b/src/Specific/solinas32_2e389m21_15limbs/fesub.c
index ad160e33b..d6022b12b 100644
--- a/src/Specific/solinas32_2e389m21_15limbs/fesub.c
+++ b/src/Specific/solinas32_2e389m21_15limbs/fesub.c
@@ -29,7 +29,7 @@ static void fesub(uint32_t out[15], const uint32_t in1[15], const uint32_t in2[1
{ const uint32_t x37 = in2[2];
{ const uint32_t x35 = in2[1];
{ const uint32_t x33 = in2[0];
- out[0] = ((Const 134217686 + x5) - x33);
+ out[0] = ((0x7ffffd6 + x5) - x33);
out[1] = ((0x7fffffe + x7) - x35);
out[2] = ((0x7fffffe + x9) - x37);
out[3] = ((0x7fffffe + x11) - x39);
diff --git a/src/Specific/solinas32_2e389m21_15limbs/fesubDisplay.log b/src/Specific/solinas32_2e389m21_15limbs/fesubDisplay.log
index 40905f1f6..ba3642347 100644
--- a/src/Specific/solinas32_2e389m21_15limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e389m21_15limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x30, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x58, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35, x33))%core,
- (((0x3fffffe + x30) - x58), ((0x7fffffe + x31) - x59), ((0x7fffffe + x29) - x57), ((0x7fffffe + x27) - x55), ((0x7fffffe + x25) - x53), ((0x7fffffe + x23) - x51), ((0x7fffffe + x21) - x49), ((0x7fffffe + x19) - x47), ((0x7fffffe + x17) - x45), ((0x7fffffe + x15) - x43), ((0x7fffffe + x13) - x41), ((0x7fffffe + x11) - x39), ((0x7fffffe + x9) - x37), ((0x7fffffe + x7) - x35), ((Const 134217686 + x5) - x33)))
+ (((0x3fffffe + x30) - x58), ((0x7fffffe + x31) - x59), ((0x7fffffe + x29) - x57), ((0x7fffffe + x27) - x55), ((0x7fffffe + x25) - x53), ((0x7fffffe + x23) - x51), ((0x7fffffe + x21) - x49), ((0x7fffffe + x19) - x47), ((0x7fffffe + x17) - x45), ((0x7fffffe + x15) - x43), ((0x7fffffe + x13) - x41), ((0x7fffffe + x11) - x39), ((0x7fffffe + x9) - x37), ((0x7fffffe + x7) - x35), ((0x7ffffd6 + x5) - x33)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e389m21_15limbs/freeze.c b/src/Specific/solinas32_2e389m21_15limbs/freeze.c
index 20464257a..45136bd66 100644
--- a/src/Specific/solinas32_2e389m21_15limbs/freeze.c
+++ b/src/Specific/solinas32_2e389m21_15limbs/freeze.c
@@ -14,7 +14,7 @@ static void freeze(uint32_t out[15], const uint32_t in1[15]) {
{ const uint32_t x6 = in1[2];
{ const uint32_t x4 = in1[1];
{ const uint32_t x2 = in1[0];
- { uint32_t x30, uint8_t x31 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 67108843);
+ { uint32_t x30, uint8_t x31 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x3ffffeb);
{ uint32_t x33, uint8_t x34 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x31, Return x4, 0x3ffffff);
{ uint32_t x36, uint8_t x37 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x34, Return x6, 0x3ffffff);
{ uint32_t x39, uint8_t x40 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x37, Return x8, 0x3ffffff);
@@ -30,7 +30,7 @@ static void freeze(uint32_t out[15], const uint32_t in1[15]) {
{ uint32_t x69, uint8_t x70 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x67, Return x28, 0x3ffffff);
{ uint32_t x72, uint8_t x73 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x70, Return x27, 0x1ffffff);
{ uint32_t x74 = cmovznz32(x73, 0x0, 0xffffffff);
- { uint32_t x75 = (x74 & Const 67108843);
+ { uint32_t x75 = (x74 & 0x3ffffeb);
{ uint32_t x77, uint8_t x78 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x30, Return x75);
{ uint32_t x79 = (x74 & 0x3ffffff);
{ uint32_t x81, uint8_t x82 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x78, Return x33, Return x79);
diff --git a/src/Specific/solinas32_2e389m21_15limbs/freezeDisplay.log b/src/Specific/solinas32_2e389m21_15limbs/freezeDisplay.log
index 255be8369..9b71caa46 100644
--- a/src/Specific/solinas32_2e389m21_15limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e389m21_15limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x27, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x30, uint8_t x31 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 67108843);
+ uint32_t x30, uint8_t x31 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x3ffffeb);
uint32_t x33, uint8_t x34 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x31, Return x4, 0x3ffffff);
uint32_t x36, uint8_t x37 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x34, Return x6, 0x3ffffff);
uint32_t x39, uint8_t x40 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x37, Return x8, 0x3ffffff);
@@ -18,7 +18,7 @@ Interp-η
uint32_t x69, uint8_t x70 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x67, Return x28, 0x3ffffff);
uint32_t x72, uint8_t x73 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x70, Return x27, 0x1ffffff);
uint32_t x74 = cmovznz32(x73, 0x0, 0xffffffff);
- uint32_t x75 = (x74 & Const 67108843);
+ uint32_t x75 = (x74 & 0x3ffffeb);
uint32_t x77, uint8_t x78 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x30, Return x75);
uint32_t x79 = (x74 & 0x3ffffff);
uint32_t x81, uint8_t x82 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x78, Return x33, Return x79);
diff --git a/src/Specific/solinas32_2e389m21_16limbs/femul.c b/src/Specific/solinas32_2e389m21_16limbs/femul.c
new file mode 100644
index 000000000..541d9b657
--- /dev/null
+++ b/src/Specific/solinas32_2e389m21_16limbs/femul.c
@@ -0,0 +1,120 @@
+static void femul(uint32_t out[16], const uint32_t in1[16], const uint32_t in2[16]) {
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x62 = in2[15];
+ { const uint32_t x63 = in2[14];
+ { const uint32_t x61 = in2[13];
+ { const uint32_t x59 = in2[12];
+ { const uint32_t x57 = in2[11];
+ { const uint32_t x55 = in2[10];
+ { const uint32_t x53 = in2[9];
+ { const uint32_t x51 = in2[8];
+ { const uint32_t x49 = in2[7];
+ { const uint32_t x47 = in2[6];
+ { const uint32_t x45 = in2[5];
+ { const uint32_t x43 = in2[4];
+ { const uint32_t x41 = in2[3];
+ { const uint32_t x39 = in2[2];
+ { const uint32_t x37 = in2[1];
+ { const uint32_t x35 = in2[0];
+ { uint64_t x64 = (((uint64_t)x5 * x62) + ((0x2 * ((uint64_t)x7 * x63)) + ((0x2 * ((uint64_t)x9 * x61)) + (((uint64_t)x11 * x59) + ((0x2 * ((uint64_t)x13 * x57)) + ((0x2 * ((uint64_t)x15 * x55)) + (((uint64_t)x17 * x53) + ((0x2 * ((uint64_t)x19 * x51)) + ((0x2 * ((uint64_t)x21 * x49)) + (((uint64_t)x23 * x47) + ((0x2 * ((uint64_t)x25 * x45)) + ((0x2 * ((uint64_t)x27 * x43)) + (((uint64_t)x29 * x41) + ((0x2 * ((uint64_t)x31 * x39)) + ((0x2 * ((uint64_t)x33 * x37)) + ((uint64_t)x32 * x35))))))))))))))));
+ { uint64_t x65 = ((((uint64_t)x5 * x63) + ((0x2 * ((uint64_t)x7 * x61)) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + ((0x2 * ((uint64_t)x13 * x55)) + (((uint64_t)x15 * x53) + (((uint64_t)x17 * x51) + ((0x2 * ((uint64_t)x19 * x49)) + (((uint64_t)x21 * x47) + (((uint64_t)x23 * x45) + ((0x2 * ((uint64_t)x25 * x43)) + (((uint64_t)x27 * x41) + (((uint64_t)x29 * x39) + ((0x2 * ((uint64_t)x31 * x37)) + ((uint64_t)x33 * x35))))))))))))))) + (0x15 * ((uint64_t)x32 * x62)));
+ { uint64_t x66 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + (((uint64_t)x29 * x37) + ((uint64_t)x31 * x35)))))))))))))) + (0x15 * (((uint64_t)x33 * x62) + ((uint64_t)x32 * x63))));
+ { uint64_t x67 = ((((uint64_t)x5 * x59) + ((0x2 * ((uint64_t)x7 * x57)) + ((0x2 * ((uint64_t)x9 * x55)) + (((uint64_t)x11 * x53) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + (((uint64_t)x17 * x47) + ((0x2 * ((uint64_t)x19 * x45)) + ((0x2 * ((uint64_t)x21 * x43)) + (((uint64_t)x23 * x41) + ((0x2 * ((uint64_t)x25 * x39)) + ((0x2 * ((uint64_t)x27 * x37)) + ((uint64_t)x29 * x35))))))))))))) + (0x15 * ((0x2 * ((uint64_t)x31 * x62)) + ((0x2 * ((uint64_t)x33 * x63)) + (0x2 * ((uint64_t)x32 * x61))))));
+ { uint64_t x68 = ((((uint64_t)x5 * x57) + ((0x2 * ((uint64_t)x7 * x55)) + (((uint64_t)x9 * x53) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + (((uint64_t)x17 * x45) + ((0x2 * ((uint64_t)x19 * x43)) + (((uint64_t)x21 * x41) + (((uint64_t)x23 * x39) + ((0x2 * ((uint64_t)x25 * x37)) + ((uint64_t)x27 * x35)))))))))))) + (0x15 * (((uint64_t)x29 * x62) + ((0x2 * ((uint64_t)x31 * x63)) + ((0x2 * ((uint64_t)x33 * x61)) + ((uint64_t)x32 * x59))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + (((uint64_t)x21 * x39) + (((uint64_t)x23 * x37) + ((uint64_t)x25 * x35))))))))))) + (0x15 * (((uint64_t)x27 * x62) + (((uint64_t)x29 * x63) + ((0x2 * ((uint64_t)x31 * x61)) + (((uint64_t)x33 * x59) + ((uint64_t)x32 * x57)))))));
+ { uint64_t x70 = ((((uint64_t)x5 * x53) + ((0x2 * ((uint64_t)x7 * x51)) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + ((0x2 * ((uint64_t)x15 * x43)) + (((uint64_t)x17 * x41) + ((0x2 * ((uint64_t)x19 * x39)) + ((0x2 * ((uint64_t)x21 * x37)) + ((uint64_t)x23 * x35)))))))))) + (0x15 * ((0x2 * ((uint64_t)x25 * x62)) + ((0x2 * ((uint64_t)x27 * x63)) + ((0x2 * ((uint64_t)x29 * x61)) + ((0x2 * ((uint64_t)x31 * x59)) + ((0x2 * ((uint64_t)x33 * x57)) + (0x2 * ((uint64_t)x32 * x55)))))))));
+ { uint64_t x71 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + ((0x2 * ((uint64_t)x13 * x43)) + (((uint64_t)x15 * x41) + (((uint64_t)x17 * x39) + ((0x2 * ((uint64_t)x19 * x37)) + ((uint64_t)x21 * x35))))))))) + (0x15 * (((uint64_t)x23 * x62) + ((0x2 * ((uint64_t)x25 * x63)) + ((0x2 * ((uint64_t)x27 * x61)) + (((uint64_t)x29 * x59) + ((0x2 * ((uint64_t)x31 * x57)) + ((0x2 * ((uint64_t)x33 * x55)) + ((uint64_t)x32 * x53)))))))));
+ { uint64_t x72 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + (((uint64_t)x9 * x45) + (((uint64_t)x11 * x43) + (((uint64_t)x13 * x41) + (((uint64_t)x15 * x39) + (((uint64_t)x17 * x37) + ((uint64_t)x19 * x35)))))))) + (0x15 * (((uint64_t)x21 * x62) + (((uint64_t)x23 * x63) + ((0x2 * ((uint64_t)x25 * x61)) + (((uint64_t)x27 * x59) + (((uint64_t)x29 * x57) + ((0x2 * ((uint64_t)x31 * x55)) + (((uint64_t)x33 * x53) + ((uint64_t)x32 * x51))))))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + (((uint64_t)x11 * x41) + ((0x2 * ((uint64_t)x13 * x39)) + ((0x2 * ((uint64_t)x15 * x37)) + ((uint64_t)x17 * x35))))))) + (0x15 * ((0x2 * ((uint64_t)x19 * x62)) + ((0x2 * ((uint64_t)x21 * x63)) + ((0x2 * ((uint64_t)x23 * x61)) + ((0x2 * ((uint64_t)x25 * x59)) + ((0x2 * ((uint64_t)x27 * x57)) + ((0x2 * ((uint64_t)x29 * x55)) + ((0x2 * ((uint64_t)x31 * x53)) + ((0x2 * ((uint64_t)x33 * x51)) + (0x2 * ((uint64_t)x32 * x49))))))))))));
+ { uint64_t x74 = ((((uint64_t)x5 * x45) + ((0x2 * ((uint64_t)x7 * x43)) + (((uint64_t)x9 * x41) + (((uint64_t)x11 * x39) + ((0x2 * ((uint64_t)x13 * x37)) + ((uint64_t)x15 * x35)))))) + (0x15 * (((uint64_t)x17 * x62) + ((0x2 * ((uint64_t)x19 * x63)) + ((0x2 * ((uint64_t)x21 * x61)) + (((uint64_t)x23 * x59) + ((0x2 * ((uint64_t)x25 * x57)) + ((0x2 * ((uint64_t)x27 * x55)) + (((uint64_t)x29 * x53) + ((0x2 * ((uint64_t)x31 * x51)) + ((0x2 * ((uint64_t)x33 * x49)) + ((uint64_t)x32 * x47))))))))))));
+ { uint64_t x75 = ((((uint64_t)x5 * x43) + (((uint64_t)x7 * x41) + (((uint64_t)x9 * x39) + (((uint64_t)x11 * x37) + ((uint64_t)x13 * x35))))) + (0x15 * (((uint64_t)x15 * x62) + (((uint64_t)x17 * x63) + ((0x2 * ((uint64_t)x19 * x61)) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + ((0x2 * ((uint64_t)x25 * x55)) + (((uint64_t)x27 * x53) + (((uint64_t)x29 * x51) + ((0x2 * ((uint64_t)x31 * x49)) + (((uint64_t)x33 * x47) + ((uint64_t)x32 * x45)))))))))))));
+ { uint64_t x76 = ((((uint64_t)x5 * x41) + ((0x2 * ((uint64_t)x7 * x39)) + ((0x2 * ((uint64_t)x9 * x37)) + ((uint64_t)x11 * x35)))) + (0x15 * ((0x2 * ((uint64_t)x13 * x62)) + ((0x2 * ((uint64_t)x15 * x63)) + ((0x2 * ((uint64_t)x17 * x61)) + ((0x2 * ((uint64_t)x19 * x59)) + ((0x2 * ((uint64_t)x21 * x57)) + ((0x2 * ((uint64_t)x23 * x55)) + ((0x2 * ((uint64_t)x25 * x53)) + ((0x2 * ((uint64_t)x27 * x51)) + ((0x2 * ((uint64_t)x29 * x49)) + ((0x2 * ((uint64_t)x31 * x47)) + ((0x2 * ((uint64_t)x33 * x45)) + (0x2 * ((uint64_t)x32 * x43)))))))))))))));
+ { uint64_t x77 = ((((uint64_t)x5 * x39) + ((0x2 * ((uint64_t)x7 * x37)) + ((uint64_t)x9 * x35))) + (0x15 * (((uint64_t)x11 * x62) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + (((uint64_t)x17 * x59) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + (((uint64_t)x23 * x53) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + (((uint64_t)x29 * x47) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + ((uint64_t)x32 * x41)))))))))))))));
+ { uint64_t x78 = ((((uint64_t)x5 * x37) + ((uint64_t)x7 * x35)) + (0x15 * (((uint64_t)x9 * x62) + (((uint64_t)x11 * x63) + ((0x2 * ((uint64_t)x13 * x61)) + (((uint64_t)x15 * x59) + (((uint64_t)x17 * x57) + ((0x2 * ((uint64_t)x19 * x55)) + (((uint64_t)x21 * x53) + (((uint64_t)x23 * x51) + ((0x2 * ((uint64_t)x25 * x49)) + (((uint64_t)x27 * x47) + (((uint64_t)x29 * x45) + ((0x2 * ((uint64_t)x31 * x43)) + (((uint64_t)x33 * x41) + ((uint64_t)x32 * x39))))))))))))))));
+ { uint64_t x79 = (((uint64_t)x5 * x35) + (0x15 * ((0x2 * ((uint64_t)x7 * x62)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + (0x2 * ((uint64_t)x32 * x37))))))))))))))))));
+ { uint64_t x80 = (x79 >> 0x19);
+ { uint32_t x81 = ((uint32_t)x79 & 0x1ffffff);
+ { uint64_t x82 = (x80 + x78);
+ { uint64_t x83 = (x82 >> 0x18);
+ { uint32_t x84 = ((uint32_t)x82 & 0xffffff);
+ { uint64_t x85 = (x83 + x77);
+ { uint64_t x86 = (x85 >> 0x18);
+ { uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ { uint64_t x88 = (x86 + x76);
+ { uint64_t x89 = (x88 >> 0x19);
+ { uint32_t x90 = ((uint32_t)x88 & 0x1ffffff);
+ { uint64_t x91 = (x89 + x75);
+ { uint64_t x92 = (x91 >> 0x18);
+ { uint32_t x93 = ((uint32_t)x91 & 0xffffff);
+ { uint64_t x94 = (x92 + x74);
+ { uint64_t x95 = (x94 >> 0x18);
+ { uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ { uint64_t x97 = (x95 + x73);
+ { uint64_t x98 = (x97 >> 0x19);
+ { uint32_t x99 = ((uint32_t)x97 & 0x1ffffff);
+ { uint64_t x100 = (x98 + x72);
+ { uint64_t x101 = (x100 >> 0x18);
+ { uint32_t x102 = ((uint32_t)x100 & 0xffffff);
+ { uint64_t x103 = (x101 + x71);
+ { uint64_t x104 = (x103 >> 0x18);
+ { uint32_t x105 = ((uint32_t)x103 & 0xffffff);
+ { uint64_t x106 = (x104 + x70);
+ { uint64_t x107 = (x106 >> 0x19);
+ { uint32_t x108 = ((uint32_t)x106 & 0x1ffffff);
+ { uint64_t x109 = (x107 + x69);
+ { uint64_t x110 = (x109 >> 0x18);
+ { uint32_t x111 = ((uint32_t)x109 & 0xffffff);
+ { uint64_t x112 = (x110 + x68);
+ { uint64_t x113 = (x112 >> 0x18);
+ { uint32_t x114 = ((uint32_t)x112 & 0xffffff);
+ { uint64_t x115 = (x113 + x67);
+ { uint64_t x116 = (x115 >> 0x19);
+ { uint32_t x117 = ((uint32_t)x115 & 0x1ffffff);
+ { uint64_t x118 = (x116 + x66);
+ { uint64_t x119 = (x118 >> 0x18);
+ { uint32_t x120 = ((uint32_t)x118 & 0xffffff);
+ { uint64_t x121 = (x119 + x65);
+ { uint64_t x122 = (x121 >> 0x18);
+ { uint32_t x123 = ((uint32_t)x121 & 0xffffff);
+ { uint64_t x124 = (x122 + x64);
+ { uint64_t x125 = (x124 >> 0x18);
+ { uint32_t x126 = ((uint32_t)x124 & 0xffffff);
+ { uint64_t x127 = (x81 + (0x15 * x125));
+ { uint32_t x128 = (uint32_t) (x127 >> 0x19);
+ { uint32_t x129 = ((uint32_t)x127 & 0x1ffffff);
+ { uint32_t x130 = (x128 + x84);
+ { uint32_t x131 = (x130 >> 0x18);
+ { uint32_t x132 = (x130 & 0xffffff);
+ out[0] = x129;
+ out[1] = x132;
+ out[2] = (x131 + x87);
+ out[3] = x90;
+ out[4] = x93;
+ out[5] = x96;
+ out[6] = x99;
+ out[7] = x102;
+ out[8] = x105;
+ out[9] = x108;
+ out[10] = x111;
+ out[11] = x114;
+ out[12] = x117;
+ out[13] = x120;
+ out[14] = x123;
+ out[15] = x126;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e389m21_16limbs/femulDisplay.log b/src/Specific/solinas32_2e389m21_16limbs/femulDisplay.log
new file mode 100644
index 000000000..23efc380a
--- /dev/null
+++ b/src/Specific/solinas32_2e389m21_16limbs/femulDisplay.log
@@ -0,0 +1,76 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x32, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x62, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35))%core,
+ uint64_t x64 = (((uint64_t)x5 * x62) + ((0x2 * ((uint64_t)x7 * x63)) + ((0x2 * ((uint64_t)x9 * x61)) + (((uint64_t)x11 * x59) + ((0x2 * ((uint64_t)x13 * x57)) + ((0x2 * ((uint64_t)x15 * x55)) + (((uint64_t)x17 * x53) + ((0x2 * ((uint64_t)x19 * x51)) + ((0x2 * ((uint64_t)x21 * x49)) + (((uint64_t)x23 * x47) + ((0x2 * ((uint64_t)x25 * x45)) + ((0x2 * ((uint64_t)x27 * x43)) + (((uint64_t)x29 * x41) + ((0x2 * ((uint64_t)x31 * x39)) + ((0x2 * ((uint64_t)x33 * x37)) + ((uint64_t)x32 * x35))))))))))))))));
+ uint64_t x65 = ((((uint64_t)x5 * x63) + ((0x2 * ((uint64_t)x7 * x61)) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + ((0x2 * ((uint64_t)x13 * x55)) + (((uint64_t)x15 * x53) + (((uint64_t)x17 * x51) + ((0x2 * ((uint64_t)x19 * x49)) + (((uint64_t)x21 * x47) + (((uint64_t)x23 * x45) + ((0x2 * ((uint64_t)x25 * x43)) + (((uint64_t)x27 * x41) + (((uint64_t)x29 * x39) + ((0x2 * ((uint64_t)x31 * x37)) + ((uint64_t)x33 * x35))))))))))))))) + (0x15 * ((uint64_t)x32 * x62)));
+ uint64_t x66 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + (((uint64_t)x29 * x37) + ((uint64_t)x31 * x35)))))))))))))) + (0x15 * (((uint64_t)x33 * x62) + ((uint64_t)x32 * x63))));
+ uint64_t x67 = ((((uint64_t)x5 * x59) + ((0x2 * ((uint64_t)x7 * x57)) + ((0x2 * ((uint64_t)x9 * x55)) + (((uint64_t)x11 * x53) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + (((uint64_t)x17 * x47) + ((0x2 * ((uint64_t)x19 * x45)) + ((0x2 * ((uint64_t)x21 * x43)) + (((uint64_t)x23 * x41) + ((0x2 * ((uint64_t)x25 * x39)) + ((0x2 * ((uint64_t)x27 * x37)) + ((uint64_t)x29 * x35))))))))))))) + (0x15 * ((0x2 * ((uint64_t)x31 * x62)) + ((0x2 * ((uint64_t)x33 * x63)) + (0x2 * ((uint64_t)x32 * x61))))));
+ uint64_t x68 = ((((uint64_t)x5 * x57) + ((0x2 * ((uint64_t)x7 * x55)) + (((uint64_t)x9 * x53) + (((uint64_t)x11 * x51) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + (((uint64_t)x17 * x45) + ((0x2 * ((uint64_t)x19 * x43)) + (((uint64_t)x21 * x41) + (((uint64_t)x23 * x39) + ((0x2 * ((uint64_t)x25 * x37)) + ((uint64_t)x27 * x35)))))))))))) + (0x15 * (((uint64_t)x29 * x62) + ((0x2 * ((uint64_t)x31 * x63)) + ((0x2 * ((uint64_t)x33 * x61)) + ((uint64_t)x32 * x59))))));
+ uint64_t x69 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + (((uint64_t)x21 * x39) + (((uint64_t)x23 * x37) + ((uint64_t)x25 * x35))))))))))) + (0x15 * (((uint64_t)x27 * x62) + (((uint64_t)x29 * x63) + ((0x2 * ((uint64_t)x31 * x61)) + (((uint64_t)x33 * x59) + ((uint64_t)x32 * x57)))))));
+ uint64_t x70 = ((((uint64_t)x5 * x53) + ((0x2 * ((uint64_t)x7 * x51)) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + ((0x2 * ((uint64_t)x15 * x43)) + (((uint64_t)x17 * x41) + ((0x2 * ((uint64_t)x19 * x39)) + ((0x2 * ((uint64_t)x21 * x37)) + ((uint64_t)x23 * x35)))))))))) + (0x15 * ((0x2 * ((uint64_t)x25 * x62)) + ((0x2 * ((uint64_t)x27 * x63)) + ((0x2 * ((uint64_t)x29 * x61)) + ((0x2 * ((uint64_t)x31 * x59)) + ((0x2 * ((uint64_t)x33 * x57)) + (0x2 * ((uint64_t)x32 * x55)))))))));
+ uint64_t x71 = ((((uint64_t)x5 * x51) + ((0x2 * ((uint64_t)x7 * x49)) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + ((0x2 * ((uint64_t)x13 * x43)) + (((uint64_t)x15 * x41) + (((uint64_t)x17 * x39) + ((0x2 * ((uint64_t)x19 * x37)) + ((uint64_t)x21 * x35))))))))) + (0x15 * (((uint64_t)x23 * x62) + ((0x2 * ((uint64_t)x25 * x63)) + ((0x2 * ((uint64_t)x27 * x61)) + (((uint64_t)x29 * x59) + ((0x2 * ((uint64_t)x31 * x57)) + ((0x2 * ((uint64_t)x33 * x55)) + ((uint64_t)x32 * x53)))))))));
+ uint64_t x72 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + (((uint64_t)x9 * x45) + (((uint64_t)x11 * x43) + (((uint64_t)x13 * x41) + (((uint64_t)x15 * x39) + (((uint64_t)x17 * x37) + ((uint64_t)x19 * x35)))))))) + (0x15 * (((uint64_t)x21 * x62) + (((uint64_t)x23 * x63) + ((0x2 * ((uint64_t)x25 * x61)) + (((uint64_t)x27 * x59) + (((uint64_t)x29 * x57) + ((0x2 * ((uint64_t)x31 * x55)) + (((uint64_t)x33 * x53) + ((uint64_t)x32 * x51))))))))));
+ uint64_t x73 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + (((uint64_t)x11 * x41) + ((0x2 * ((uint64_t)x13 * x39)) + ((0x2 * ((uint64_t)x15 * x37)) + ((uint64_t)x17 * x35))))))) + (0x15 * ((0x2 * ((uint64_t)x19 * x62)) + ((0x2 * ((uint64_t)x21 * x63)) + ((0x2 * ((uint64_t)x23 * x61)) + ((0x2 * ((uint64_t)x25 * x59)) + ((0x2 * ((uint64_t)x27 * x57)) + ((0x2 * ((uint64_t)x29 * x55)) + ((0x2 * ((uint64_t)x31 * x53)) + ((0x2 * ((uint64_t)x33 * x51)) + (0x2 * ((uint64_t)x32 * x49))))))))))));
+ uint64_t x74 = ((((uint64_t)x5 * x45) + ((0x2 * ((uint64_t)x7 * x43)) + (((uint64_t)x9 * x41) + (((uint64_t)x11 * x39) + ((0x2 * ((uint64_t)x13 * x37)) + ((uint64_t)x15 * x35)))))) + (0x15 * (((uint64_t)x17 * x62) + ((0x2 * ((uint64_t)x19 * x63)) + ((0x2 * ((uint64_t)x21 * x61)) + (((uint64_t)x23 * x59) + ((0x2 * ((uint64_t)x25 * x57)) + ((0x2 * ((uint64_t)x27 * x55)) + (((uint64_t)x29 * x53) + ((0x2 * ((uint64_t)x31 * x51)) + ((0x2 * ((uint64_t)x33 * x49)) + ((uint64_t)x32 * x47))))))))))));
+ uint64_t x75 = ((((uint64_t)x5 * x43) + (((uint64_t)x7 * x41) + (((uint64_t)x9 * x39) + (((uint64_t)x11 * x37) + ((uint64_t)x13 * x35))))) + (0x15 * (((uint64_t)x15 * x62) + (((uint64_t)x17 * x63) + ((0x2 * ((uint64_t)x19 * x61)) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + ((0x2 * ((uint64_t)x25 * x55)) + (((uint64_t)x27 * x53) + (((uint64_t)x29 * x51) + ((0x2 * ((uint64_t)x31 * x49)) + (((uint64_t)x33 * x47) + ((uint64_t)x32 * x45)))))))))))));
+ uint64_t x76 = ((((uint64_t)x5 * x41) + ((0x2 * ((uint64_t)x7 * x39)) + ((0x2 * ((uint64_t)x9 * x37)) + ((uint64_t)x11 * x35)))) + (0x15 * ((0x2 * ((uint64_t)x13 * x62)) + ((0x2 * ((uint64_t)x15 * x63)) + ((0x2 * ((uint64_t)x17 * x61)) + ((0x2 * ((uint64_t)x19 * x59)) + ((0x2 * ((uint64_t)x21 * x57)) + ((0x2 * ((uint64_t)x23 * x55)) + ((0x2 * ((uint64_t)x25 * x53)) + ((0x2 * ((uint64_t)x27 * x51)) + ((0x2 * ((uint64_t)x29 * x49)) + ((0x2 * ((uint64_t)x31 * x47)) + ((0x2 * ((uint64_t)x33 * x45)) + (0x2 * ((uint64_t)x32 * x43)))))))))))))));
+ uint64_t x77 = ((((uint64_t)x5 * x39) + ((0x2 * ((uint64_t)x7 * x37)) + ((uint64_t)x9 * x35))) + (0x15 * (((uint64_t)x11 * x62) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + (((uint64_t)x17 * x59) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + (((uint64_t)x23 * x53) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + (((uint64_t)x29 * x47) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + ((uint64_t)x32 * x41)))))))))))))));
+ uint64_t x78 = ((((uint64_t)x5 * x37) + ((uint64_t)x7 * x35)) + (0x15 * (((uint64_t)x9 * x62) + (((uint64_t)x11 * x63) + ((0x2 * ((uint64_t)x13 * x61)) + (((uint64_t)x15 * x59) + (((uint64_t)x17 * x57) + ((0x2 * ((uint64_t)x19 * x55)) + (((uint64_t)x21 * x53) + (((uint64_t)x23 * x51) + ((0x2 * ((uint64_t)x25 * x49)) + (((uint64_t)x27 * x47) + (((uint64_t)x29 * x45) + ((0x2 * ((uint64_t)x31 * x43)) + (((uint64_t)x33 * x41) + ((uint64_t)x32 * x39))))))))))))))));
+ uint64_t x79 = (((uint64_t)x5 * x35) + (0x15 * ((0x2 * ((uint64_t)x7 * x62)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + (0x2 * ((uint64_t)x32 * x37))))))))))))))))));
+ uint64_t x80 = (x79 >> 0x19);
+ uint32_t x81 = ((uint32_t)x79 & 0x1ffffff);
+ uint64_t x82 = (x80 + x78);
+ uint64_t x83 = (x82 >> 0x18);
+ uint32_t x84 = ((uint32_t)x82 & 0xffffff);
+ uint64_t x85 = (x83 + x77);
+ uint64_t x86 = (x85 >> 0x18);
+ uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ uint64_t x88 = (x86 + x76);
+ uint64_t x89 = (x88 >> 0x19);
+ uint32_t x90 = ((uint32_t)x88 & 0x1ffffff);
+ uint64_t x91 = (x89 + x75);
+ uint64_t x92 = (x91 >> 0x18);
+ uint32_t x93 = ((uint32_t)x91 & 0xffffff);
+ uint64_t x94 = (x92 + x74);
+ uint64_t x95 = (x94 >> 0x18);
+ uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ uint64_t x97 = (x95 + x73);
+ uint64_t x98 = (x97 >> 0x19);
+ uint32_t x99 = ((uint32_t)x97 & 0x1ffffff);
+ uint64_t x100 = (x98 + x72);
+ uint64_t x101 = (x100 >> 0x18);
+ uint32_t x102 = ((uint32_t)x100 & 0xffffff);
+ uint64_t x103 = (x101 + x71);
+ uint64_t x104 = (x103 >> 0x18);
+ uint32_t x105 = ((uint32_t)x103 & 0xffffff);
+ uint64_t x106 = (x104 + x70);
+ uint64_t x107 = (x106 >> 0x19);
+ uint32_t x108 = ((uint32_t)x106 & 0x1ffffff);
+ uint64_t x109 = (x107 + x69);
+ uint64_t x110 = (x109 >> 0x18);
+ uint32_t x111 = ((uint32_t)x109 & 0xffffff);
+ uint64_t x112 = (x110 + x68);
+ uint64_t x113 = (x112 >> 0x18);
+ uint32_t x114 = ((uint32_t)x112 & 0xffffff);
+ uint64_t x115 = (x113 + x67);
+ uint64_t x116 = (x115 >> 0x19);
+ uint32_t x117 = ((uint32_t)x115 & 0x1ffffff);
+ uint64_t x118 = (x116 + x66);
+ uint64_t x119 = (x118 >> 0x18);
+ uint32_t x120 = ((uint32_t)x118 & 0xffffff);
+ uint64_t x121 = (x119 + x65);
+ uint64_t x122 = (x121 >> 0x18);
+ uint32_t x123 = ((uint32_t)x121 & 0xffffff);
+ uint64_t x124 = (x122 + x64);
+ uint64_t x125 = (x124 >> 0x18);
+ uint32_t x126 = ((uint32_t)x124 & 0xffffff);
+ uint64_t x127 = (x81 + (0x15 * x125));
+ uint32_t x128 = (uint32_t) (x127 >> 0x19);
+ uint32_t x129 = ((uint32_t)x127 & 0x1ffffff);
+ uint32_t x130 = (x128 + x84);
+ uint32_t x131 = (x130 >> 0x18);
+ uint32_t x132 = (x130 & 0xffffff);
+ return (Return x126, Return x123, Return x120, Return x117, Return x114, Return x111, Return x108, Return x105, Return x102, Return x99, Return x96, Return x93, Return x90, (x131 + x87), Return x132, Return x129))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e389m21_16limbs/fesub.c b/src/Specific/solinas32_2e389m21_16limbs/fesub.c
index dd4a1b3cc..31289b421 100644
--- a/src/Specific/solinas32_2e389m21_16limbs/fesub.c
+++ b/src/Specific/solinas32_2e389m21_16limbs/fesub.c
@@ -31,7 +31,7 @@ static void fesub(uint32_t out[16], const uint32_t in1[16], const uint32_t in2[1
{ const uint32_t x39 = in2[2];
{ const uint32_t x37 = in2[1];
{ const uint32_t x35 = in2[0];
- out[0] = ((Const 67108822 + x5) - x35);
+ out[0] = ((0x3ffffd6 + x5) - x35);
out[1] = ((0x1fffffe + x7) - x37);
out[2] = ((0x1fffffe + x9) - x39);
out[3] = ((0x3fffffe + x11) - x41);
diff --git a/src/Specific/solinas32_2e389m21_16limbs/fesubDisplay.log b/src/Specific/solinas32_2e389m21_16limbs/fesubDisplay.log
index 7ebb8f2f8..7ce38839e 100644
--- a/src/Specific/solinas32_2e389m21_16limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e389m21_16limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x32, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x62, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35))%core,
- (((0x1fffffe + x32) - x62), ((0x1fffffe + x33) - x63), ((0x1fffffe + x31) - x61), ((0x3fffffe + x29) - x59), ((0x1fffffe + x27) - x57), ((0x1fffffe + x25) - x55), ((0x3fffffe + x23) - x53), ((0x1fffffe + x21) - x51), ((0x1fffffe + x19) - x49), ((0x3fffffe + x17) - x47), ((0x1fffffe + x15) - x45), ((0x1fffffe + x13) - x43), ((0x3fffffe + x11) - x41), ((0x1fffffe + x9) - x39), ((0x1fffffe + x7) - x37), ((Const 67108822 + x5) - x35)))
+ (((0x1fffffe + x32) - x62), ((0x1fffffe + x33) - x63), ((0x1fffffe + x31) - x61), ((0x3fffffe + x29) - x59), ((0x1fffffe + x27) - x57), ((0x1fffffe + x25) - x55), ((0x3fffffe + x23) - x53), ((0x1fffffe + x21) - x51), ((0x1fffffe + x19) - x49), ((0x3fffffe + x17) - x47), ((0x1fffffe + x15) - x45), ((0x1fffffe + x13) - x43), ((0x3fffffe + x11) - x41), ((0x1fffffe + x9) - x39), ((0x1fffffe + x7) - x37), ((0x3ffffd6 + x5) - x35)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e389m21_16limbs/freeze.c b/src/Specific/solinas32_2e389m21_16limbs/freeze.c
index 33dc4e655..54164cff7 100644
--- a/src/Specific/solinas32_2e389m21_16limbs/freeze.c
+++ b/src/Specific/solinas32_2e389m21_16limbs/freeze.c
@@ -15,7 +15,7 @@ static void freeze(uint32_t out[16], const uint32_t in1[16]) {
{ const uint32_t x6 = in1[2];
{ const uint32_t x4 = in1[1];
{ const uint32_t x2 = in1[0];
- { uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 33554411);
+ { uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x1ffffeb);
{ uint32_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x33, Return x4, 0xffffff);
{ uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x36, Return x6, 0xffffff);
{ uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x8, 0x1ffffff);
@@ -32,7 +32,7 @@ static void freeze(uint32_t out[16], const uint32_t in1[16]) {
{ uint32_t x74, uint8_t x75 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x72, Return x30, 0xffffff);
{ uint32_t x77, uint8_t x78 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x75, Return x29, 0xffffff);
{ uint32_t x79 = cmovznz32(x78, 0x0, 0xffffffff);
- { uint32_t x80 = (x79 & Const 33554411);
+ { uint32_t x80 = (x79 & 0x1ffffeb);
{ uint32_t x82, uint8_t x83 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x32, Return x80);
{ uint32_t x84 = (x79 & 0xffffff);
{ uint32_t x86, uint8_t x87 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x35, Return x84);
diff --git a/src/Specific/solinas32_2e389m21_16limbs/freezeDisplay.log b/src/Specific/solinas32_2e389m21_16limbs/freezeDisplay.log
index a9ecd8117..eccd435b4 100644
--- a/src/Specific/solinas32_2e389m21_16limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e389m21_16limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x29, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 33554411);
+ uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x1ffffeb);
uint32_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x33, Return x4, 0xffffff);
uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x36, Return x6, 0xffffff);
uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x8, 0x1ffffff);
@@ -19,7 +19,7 @@ Interp-η
uint32_t x74, uint8_t x75 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x72, Return x30, 0xffffff);
uint32_t x77, uint8_t x78 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x75, Return x29, 0xffffff);
uint32_t x79 = cmovznz32(x78, 0x0, 0xffffffff);
- uint32_t x80 = (x79 & Const 33554411);
+ uint32_t x80 = (x79 & 0x1ffffeb);
uint32_t x82, uint8_t x83 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x32, Return x80);
uint32_t x84 = (x79 & 0xffffff);
uint32_t x86, uint8_t x87 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x35, Return x84);
diff --git a/src/Specific/solinas32_2e401m31_17limbs/femul.c b/src/Specific/solinas32_2e401m31_17limbs/femul.c
new file mode 100644
index 000000000..b830cdbab
--- /dev/null
+++ b/src/Specific/solinas32_2e401m31_17limbs/femul.c
@@ -0,0 +1,127 @@
+static void femul(uint32_t out[17], const uint32_t in1[17], const uint32_t in2[17]) {
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x66 = in2[16];
+ { const uint32_t x67 = in2[15];
+ { const uint32_t x65 = in2[14];
+ { const uint32_t x63 = in2[13];
+ { const uint32_t x61 = in2[12];
+ { const uint32_t x59 = in2[11];
+ { const uint32_t x57 = in2[10];
+ { const uint32_t x55 = in2[9];
+ { const uint32_t x53 = in2[8];
+ { const uint32_t x51 = in2[7];
+ { const uint32_t x49 = in2[6];
+ { const uint32_t x47 = in2[5];
+ { const uint32_t x45 = in2[4];
+ { const uint32_t x43 = in2[3];
+ { const uint32_t x41 = in2[2];
+ { const uint32_t x39 = in2[1];
+ { const uint32_t x37 = in2[0];
+ { uint64_t x68 = (((uint64_t)x5 * x66) + (((uint64_t)x7 * x67) + ((0x2 * ((uint64_t)x9 * x65)) + (((uint64_t)x11 * x63) + ((0x2 * ((uint64_t)x13 * x61)) + (((uint64_t)x15 * x59) + (((uint64_t)x17 * x57) + ((0x2 * ((uint64_t)x19 * x55)) + (((uint64_t)x21 * x53) + ((0x2 * ((uint64_t)x23 * x51)) + (((uint64_t)x25 * x49) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + (((uint64_t)x31 * x43) + ((0x2 * ((uint64_t)x33 * x41)) + (((uint64_t)x35 * x39) + ((uint64_t)x34 * x37)))))))))))))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x67) + ((0x2 * ((uint64_t)x7 * x65)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + (((uint64_t)x15 * x57) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + (((uint64_t)x25 * x47) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + ((uint64_t)x35 * x37)))))))))))))))) + (0x1f * (0x2 * ((uint64_t)x34 * x66))));
+ { uint64_t x70 = ((((uint64_t)x5 * x65) + (((uint64_t)x7 * x63) + ((0x2 * ((uint64_t)x9 * x61)) + (((uint64_t)x11 * x59) + (((uint64_t)x13 * x57) + (((uint64_t)x15 * x55) + (((uint64_t)x17 * x53) + ((0x2 * ((uint64_t)x19 * x51)) + (((uint64_t)x21 * x49) + (((uint64_t)x23 * x47) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + ((uint64_t)x33 * x37))))))))))))))) + (0x1f * (((uint64_t)x35 * x66) + ((uint64_t)x34 * x67))));
+ { uint64_t x71 = ((((uint64_t)x5 * x63) + ((0x2 * ((uint64_t)x7 * x61)) + ((0x2 * ((uint64_t)x9 * x59)) + (((uint64_t)x11 * x57) + ((0x2 * ((uint64_t)x13 * x55)) + (((uint64_t)x15 * x53) + ((0x2 * ((uint64_t)x17 * x51)) + ((0x2 * ((uint64_t)x19 * x49)) + (((uint64_t)x21 * x47) + ((0x2 * ((uint64_t)x23 * x45)) + (((uint64_t)x25 * x43) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + ((uint64_t)x31 * x37)))))))))))))) + (0x1f * ((0x2 * ((uint64_t)x33 * x66)) + (((uint64_t)x35 * x67) + (0x2 * ((uint64_t)x34 * x65))))));
+ { uint64_t x72 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + ((uint64_t)x29 * x37))))))))))))) + (0x1f * (((uint64_t)x31 * x66) + (((uint64_t)x33 * x67) + (((uint64_t)x35 * x65) + ((uint64_t)x34 * x63))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + ((0x2 * ((uint64_t)x9 * x55)) + (((uint64_t)x11 * x53) + ((0x2 * ((uint64_t)x13 * x51)) + (((uint64_t)x15 * x49) + (((uint64_t)x17 * x47) + ((0x2 * ((uint64_t)x19 * x45)) + (((uint64_t)x21 * x43) + ((0x2 * ((uint64_t)x23 * x41)) + (((uint64_t)x25 * x39) + ((uint64_t)x27 * x37)))))))))))) + (0x1f * ((0x2 * ((uint64_t)x29 * x66)) + (((uint64_t)x31 * x67) + ((0x2 * ((uint64_t)x33 * x65)) + (((uint64_t)x35 * x63) + (0x2 * ((uint64_t)x34 * x61))))))));
+ { uint64_t x74 = ((((uint64_t)x5 * x57) + ((0x2 * ((uint64_t)x7 * x55)) + ((0x2 * ((uint64_t)x9 * x53)) + ((0x2 * ((uint64_t)x11 * x51)) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + ((0x2 * ((uint64_t)x17 * x45)) + ((0x2 * ((uint64_t)x19 * x43)) + ((0x2 * ((uint64_t)x21 * x41)) + ((0x2 * ((uint64_t)x23 * x39)) + ((uint64_t)x25 * x37))))))))))) + (0x1f * ((0x2 * ((uint64_t)x27 * x66)) + ((0x2 * ((uint64_t)x29 * x67)) + ((0x2 * ((uint64_t)x31 * x65)) + ((0x2 * ((uint64_t)x33 * x63)) + ((0x2 * ((uint64_t)x35 * x61)) + (0x2 * ((uint64_t)x34 * x59)))))))));
+ { uint64_t x75 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + ((0x2 * ((uint64_t)x9 * x51)) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + ((0x2 * ((uint64_t)x19 * x41)) + (((uint64_t)x21 * x39) + ((uint64_t)x23 * x37)))))))))) + (0x1f * (((uint64_t)x25 * x66) + (((uint64_t)x27 * x67) + ((0x2 * ((uint64_t)x29 * x65)) + (((uint64_t)x31 * x63) + ((0x2 * ((uint64_t)x33 * x61)) + (((uint64_t)x35 * x59) + ((uint64_t)x34 * x57)))))))));
+ { uint64_t x76 = ((((uint64_t)x5 * x53) + ((0x2 * ((uint64_t)x7 * x51)) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + ((0x2 * ((uint64_t)x19 * x39)) + ((uint64_t)x21 * x37))))))))) + (0x1f * ((0x2 * ((uint64_t)x23 * x66)) + (((uint64_t)x25 * x67) + ((0x2 * ((uint64_t)x27 * x65)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + ((0x2 * ((uint64_t)x33 * x59)) + (((uint64_t)x35 * x57) + (0x2 * ((uint64_t)x34 * x55)))))))))));
+ { uint64_t x77 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + (((uint64_t)x13 * x43) + (((uint64_t)x15 * x41) + (((uint64_t)x17 * x39) + ((uint64_t)x19 * x37)))))))) + (0x1f * (((uint64_t)x21 * x66) + (((uint64_t)x23 * x67) + (((uint64_t)x25 * x65) + (((uint64_t)x27 * x63) + ((0x2 * ((uint64_t)x29 * x61)) + (((uint64_t)x31 * x59) + (((uint64_t)x33 * x57) + (((uint64_t)x35 * x55) + ((uint64_t)x34 * x53)))))))))));
+ { uint64_t x78 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + ((0x2 * ((uint64_t)x9 * x45)) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + (((uint64_t)x15 * x39) + ((uint64_t)x17 * x37))))))) + (0x1f * ((0x2 * ((uint64_t)x19 * x66)) + (((uint64_t)x21 * x67) + ((0x2 * ((uint64_t)x23 * x65)) + (((uint64_t)x25 * x63) + ((0x2 * ((uint64_t)x27 * x61)) + ((0x2 * ((uint64_t)x29 * x59)) + (((uint64_t)x31 * x57) + ((0x2 * ((uint64_t)x33 * x55)) + (((uint64_t)x35 * x53) + (0x2 * ((uint64_t)x34 * x51)))))))))))));
+ { uint64_t x79 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((uint64_t)x15 * x37)))))) + (0x1f * ((0x2 * ((uint64_t)x17 * x66)) + ((0x2 * ((uint64_t)x19 * x67)) + ((0x2 * ((uint64_t)x21 * x65)) + ((0x2 * ((uint64_t)x23 * x63)) + ((0x2 * ((uint64_t)x25 * x61)) + ((0x2 * ((uint64_t)x27 * x59)) + ((0x2 * ((uint64_t)x29 * x57)) + ((0x2 * ((uint64_t)x31 * x55)) + ((0x2 * ((uint64_t)x33 * x53)) + ((0x2 * ((uint64_t)x35 * x51)) + (0x2 * ((uint64_t)x34 * x49))))))))))))));
+ { uint64_t x80 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + (((uint64_t)x11 * x39) + ((uint64_t)x13 * x37))))) + (0x1f * (((uint64_t)x15 * x66) + (((uint64_t)x17 * x67) + ((0x2 * ((uint64_t)x19 * x65)) + (((uint64_t)x21 * x63) + ((0x2 * ((uint64_t)x23 * x61)) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + ((0x2 * ((uint64_t)x29 * x55)) + (((uint64_t)x31 * x53) + ((0x2 * ((uint64_t)x33 * x51)) + (((uint64_t)x35 * x49) + ((uint64_t)x34 * x47))))))))))))));
+ { uint64_t x81 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((uint64_t)x11 * x37)))) + (0x1f * ((0x2 * ((uint64_t)x13 * x66)) + (((uint64_t)x15 * x67) + ((0x2 * ((uint64_t)x17 * x65)) + ((0x2 * ((uint64_t)x19 * x63)) + ((0x2 * ((uint64_t)x21 * x61)) + ((0x2 * ((uint64_t)x23 * x59)) + (((uint64_t)x25 * x57) + ((0x2 * ((uint64_t)x27 * x55)) + ((0x2 * ((uint64_t)x29 * x53)) + ((0x2 * ((uint64_t)x31 * x51)) + ((0x2 * ((uint64_t)x33 * x49)) + (((uint64_t)x35 * x47) + (0x2 * ((uint64_t)x34 * x45))))))))))))))));
+ { uint64_t x82 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + ((uint64_t)x9 * x37))) + (0x1f * (((uint64_t)x11 * x66) + (((uint64_t)x13 * x67) + (((uint64_t)x15 * x65) + (((uint64_t)x17 * x63) + ((0x2 * ((uint64_t)x19 * x61)) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + ((0x2 * ((uint64_t)x29 * x51)) + (((uint64_t)x31 * x49) + (((uint64_t)x33 * x47) + (((uint64_t)x35 * x45) + ((uint64_t)x34 * x43))))))))))))))));
+ { uint64_t x83 = ((((uint64_t)x5 * x39) + ((uint64_t)x7 * x37)) + (0x1f * ((0x2 * ((uint64_t)x9 * x66)) + (((uint64_t)x11 * x67) + ((0x2 * ((uint64_t)x13 * x65)) + (((uint64_t)x15 * x63) + ((0x2 * ((uint64_t)x17 * x61)) + ((0x2 * ((uint64_t)x19 * x59)) + (((uint64_t)x21 * x57) + ((0x2 * ((uint64_t)x23 * x55)) + (((uint64_t)x25 * x53) + ((0x2 * ((uint64_t)x27 * x51)) + ((0x2 * ((uint64_t)x29 * x49)) + (((uint64_t)x31 * x47) + ((0x2 * ((uint64_t)x33 * x45)) + (((uint64_t)x35 * x43) + (0x2 * ((uint64_t)x34 * x41))))))))))))))))));
+ { uint64_t x84 = (((uint64_t)x5 * x37) + (0x1f * ((0x2 * ((uint64_t)x7 * x66)) + ((0x2 * ((uint64_t)x9 * x67)) + ((0x2 * ((uint64_t)x11 * x65)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + ((0x2 * ((uint64_t)x35 * x41)) + (0x2 * ((uint64_t)x34 * x39)))))))))))))))))));
+ { uint64_t x85 = (x84 >> 0x18);
+ { uint32_t x86 = ((uint32_t)x84 & 0xffffff);
+ { uint64_t x87 = (x85 + x83);
+ { uint64_t x88 = (x87 >> 0x18);
+ { uint32_t x89 = ((uint32_t)x87 & 0xffffff);
+ { uint64_t x90 = (x88 + x82);
+ { uint64_t x91 = (x90 >> 0x17);
+ { uint32_t x92 = ((uint32_t)x90 & 0x7fffff);
+ { uint64_t x93 = (x91 + x81);
+ { uint64_t x94 = (x93 >> 0x18);
+ { uint32_t x95 = ((uint32_t)x93 & 0xffffff);
+ { uint64_t x96 = (x94 + x80);
+ { uint64_t x97 = (x96 >> 0x17);
+ { uint32_t x98 = ((uint32_t)x96 & 0x7fffff);
+ { uint64_t x99 = (x97 + x79);
+ { uint64_t x100 = (x99 >> 0x18);
+ { uint32_t x101 = ((uint32_t)x99 & 0xffffff);
+ { uint64_t x102 = (x100 + x78);
+ { uint64_t x103 = (x102 >> 0x18);
+ { uint32_t x104 = ((uint32_t)x102 & 0xffffff);
+ { uint64_t x105 = (x103 + x77);
+ { uint64_t x106 = (x105 >> 0x17);
+ { uint32_t x107 = ((uint32_t)x105 & 0x7fffff);
+ { uint64_t x108 = (x106 + x76);
+ { uint64_t x109 = (x108 >> 0x18);
+ { uint32_t x110 = ((uint32_t)x108 & 0xffffff);
+ { uint64_t x111 = (x109 + x75);
+ { uint64_t x112 = (x111 >> 0x17);
+ { uint32_t x113 = ((uint32_t)x111 & 0x7fffff);
+ { uint64_t x114 = (x112 + x74);
+ { uint64_t x115 = (x114 >> 0x18);
+ { uint32_t x116 = ((uint32_t)x114 & 0xffffff);
+ { uint64_t x117 = (x115 + x73);
+ { uint64_t x118 = (x117 >> 0x18);
+ { uint32_t x119 = ((uint32_t)x117 & 0xffffff);
+ { uint64_t x120 = (x118 + x72);
+ { uint64_t x121 = (x120 >> 0x17);
+ { uint32_t x122 = ((uint32_t)x120 & 0x7fffff);
+ { uint64_t x123 = (x121 + x71);
+ { uint64_t x124 = (x123 >> 0x18);
+ { uint32_t x125 = ((uint32_t)x123 & 0xffffff);
+ { uint64_t x126 = (x124 + x70);
+ { uint64_t x127 = (x126 >> 0x17);
+ { uint32_t x128 = ((uint32_t)x126 & 0x7fffff);
+ { uint64_t x129 = (x127 + x69);
+ { uint64_t x130 = (x129 >> 0x18);
+ { uint32_t x131 = ((uint32_t)x129 & 0xffffff);
+ { uint64_t x132 = (x130 + x68);
+ { uint64_t x133 = (x132 >> 0x17);
+ { uint32_t x134 = ((uint32_t)x132 & 0x7fffff);
+ { uint64_t x135 = (x86 + (0x1f * x133));
+ { uint32_t x136 = (uint32_t) (x135 >> 0x18);
+ { uint32_t x137 = ((uint32_t)x135 & 0xffffff);
+ { uint32_t x138 = (x136 + x89);
+ { uint32_t x139 = (x138 >> 0x18);
+ { uint32_t x140 = (x138 & 0xffffff);
+ out[0] = x137;
+ out[1] = x140;
+ out[2] = (x139 + x92);
+ out[3] = x95;
+ out[4] = x98;
+ out[5] = x101;
+ out[6] = x104;
+ out[7] = x107;
+ out[8] = x110;
+ out[9] = x113;
+ out[10] = x116;
+ out[11] = x119;
+ out[12] = x122;
+ out[13] = x125;
+ out[14] = x128;
+ out[15] = x131;
+ out[16] = x134;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e401m31_17limbs/femulDisplay.log b/src/Specific/solinas32_2e401m31_17limbs/femulDisplay.log
new file mode 100644
index 000000000..498ed8562
--- /dev/null
+++ b/src/Specific/solinas32_2e401m31_17limbs/femulDisplay.log
@@ -0,0 +1,80 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x34, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x66, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37))%core,
+ uint64_t x68 = (((uint64_t)x5 * x66) + (((uint64_t)x7 * x67) + ((0x2 * ((uint64_t)x9 * x65)) + (((uint64_t)x11 * x63) + ((0x2 * ((uint64_t)x13 * x61)) + (((uint64_t)x15 * x59) + (((uint64_t)x17 * x57) + ((0x2 * ((uint64_t)x19 * x55)) + (((uint64_t)x21 * x53) + ((0x2 * ((uint64_t)x23 * x51)) + (((uint64_t)x25 * x49) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + (((uint64_t)x31 * x43) + ((0x2 * ((uint64_t)x33 * x41)) + (((uint64_t)x35 * x39) + ((uint64_t)x34 * x37)))))))))))))))));
+ uint64_t x69 = ((((uint64_t)x5 * x67) + ((0x2 * ((uint64_t)x7 * x65)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + (((uint64_t)x15 * x57) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + (((uint64_t)x25 * x47) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + ((uint64_t)x35 * x37)))))))))))))))) + (0x1f * (0x2 * ((uint64_t)x34 * x66))));
+ uint64_t x70 = ((((uint64_t)x5 * x65) + (((uint64_t)x7 * x63) + ((0x2 * ((uint64_t)x9 * x61)) + (((uint64_t)x11 * x59) + (((uint64_t)x13 * x57) + (((uint64_t)x15 * x55) + (((uint64_t)x17 * x53) + ((0x2 * ((uint64_t)x19 * x51)) + (((uint64_t)x21 * x49) + (((uint64_t)x23 * x47) + (((uint64_t)x25 * x45) + (((uint64_t)x27 * x43) + ((0x2 * ((uint64_t)x29 * x41)) + (((uint64_t)x31 * x39) + ((uint64_t)x33 * x37))))))))))))))) + (0x1f * (((uint64_t)x35 * x66) + ((uint64_t)x34 * x67))));
+ uint64_t x71 = ((((uint64_t)x5 * x63) + ((0x2 * ((uint64_t)x7 * x61)) + ((0x2 * ((uint64_t)x9 * x59)) + (((uint64_t)x11 * x57) + ((0x2 * ((uint64_t)x13 * x55)) + (((uint64_t)x15 * x53) + ((0x2 * ((uint64_t)x17 * x51)) + ((0x2 * ((uint64_t)x19 * x49)) + (((uint64_t)x21 * x47) + ((0x2 * ((uint64_t)x23 * x45)) + (((uint64_t)x25 * x43) + ((0x2 * ((uint64_t)x27 * x41)) + ((0x2 * ((uint64_t)x29 * x39)) + ((uint64_t)x31 * x37)))))))))))))) + (0x1f * ((0x2 * ((uint64_t)x33 * x66)) + (((uint64_t)x35 * x67) + (0x2 * ((uint64_t)x34 * x65))))));
+ uint64_t x72 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + (((uint64_t)x11 * x55) + (((uint64_t)x13 * x53) + (((uint64_t)x15 * x51) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + (((uint64_t)x21 * x45) + (((uint64_t)x23 * x43) + (((uint64_t)x25 * x41) + (((uint64_t)x27 * x39) + ((uint64_t)x29 * x37))))))))))))) + (0x1f * (((uint64_t)x31 * x66) + (((uint64_t)x33 * x67) + (((uint64_t)x35 * x65) + ((uint64_t)x34 * x63))))));
+ uint64_t x73 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + ((0x2 * ((uint64_t)x9 * x55)) + (((uint64_t)x11 * x53) + ((0x2 * ((uint64_t)x13 * x51)) + (((uint64_t)x15 * x49) + (((uint64_t)x17 * x47) + ((0x2 * ((uint64_t)x19 * x45)) + (((uint64_t)x21 * x43) + ((0x2 * ((uint64_t)x23 * x41)) + (((uint64_t)x25 * x39) + ((uint64_t)x27 * x37)))))))))))) + (0x1f * ((0x2 * ((uint64_t)x29 * x66)) + (((uint64_t)x31 * x67) + ((0x2 * ((uint64_t)x33 * x65)) + (((uint64_t)x35 * x63) + (0x2 * ((uint64_t)x34 * x61))))))));
+ uint64_t x74 = ((((uint64_t)x5 * x57) + ((0x2 * ((uint64_t)x7 * x55)) + ((0x2 * ((uint64_t)x9 * x53)) + ((0x2 * ((uint64_t)x11 * x51)) + ((0x2 * ((uint64_t)x13 * x49)) + (((uint64_t)x15 * x47) + ((0x2 * ((uint64_t)x17 * x45)) + ((0x2 * ((uint64_t)x19 * x43)) + ((0x2 * ((uint64_t)x21 * x41)) + ((0x2 * ((uint64_t)x23 * x39)) + ((uint64_t)x25 * x37))))))))))) + (0x1f * ((0x2 * ((uint64_t)x27 * x66)) + ((0x2 * ((uint64_t)x29 * x67)) + ((0x2 * ((uint64_t)x31 * x65)) + ((0x2 * ((uint64_t)x33 * x63)) + ((0x2 * ((uint64_t)x35 * x61)) + (0x2 * ((uint64_t)x34 * x59)))))))));
+ uint64_t x75 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + ((0x2 * ((uint64_t)x9 * x51)) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + (((uint64_t)x15 * x45) + (((uint64_t)x17 * x43) + ((0x2 * ((uint64_t)x19 * x41)) + (((uint64_t)x21 * x39) + ((uint64_t)x23 * x37)))))))))) + (0x1f * (((uint64_t)x25 * x66) + (((uint64_t)x27 * x67) + ((0x2 * ((uint64_t)x29 * x65)) + (((uint64_t)x31 * x63) + ((0x2 * ((uint64_t)x33 * x61)) + (((uint64_t)x35 * x59) + ((uint64_t)x34 * x57)))))))));
+ uint64_t x76 = ((((uint64_t)x5 * x53) + ((0x2 * ((uint64_t)x7 * x51)) + ((0x2 * ((uint64_t)x9 * x49)) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + (((uint64_t)x15 * x43) + ((0x2 * ((uint64_t)x17 * x41)) + ((0x2 * ((uint64_t)x19 * x39)) + ((uint64_t)x21 * x37))))))))) + (0x1f * ((0x2 * ((uint64_t)x23 * x66)) + (((uint64_t)x25 * x67) + ((0x2 * ((uint64_t)x27 * x65)) + ((0x2 * ((uint64_t)x29 * x63)) + ((0x2 * ((uint64_t)x31 * x61)) + ((0x2 * ((uint64_t)x33 * x59)) + (((uint64_t)x35 * x57) + (0x2 * ((uint64_t)x34 * x55)))))))))));
+ uint64_t x77 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + (((uint64_t)x9 * x47) + (((uint64_t)x11 * x45) + (((uint64_t)x13 * x43) + (((uint64_t)x15 * x41) + (((uint64_t)x17 * x39) + ((uint64_t)x19 * x37)))))))) + (0x1f * (((uint64_t)x21 * x66) + (((uint64_t)x23 * x67) + (((uint64_t)x25 * x65) + (((uint64_t)x27 * x63) + ((0x2 * ((uint64_t)x29 * x61)) + (((uint64_t)x31 * x59) + (((uint64_t)x33 * x57) + (((uint64_t)x35 * x55) + ((uint64_t)x34 * x53)))))))))));
+ uint64_t x78 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + ((0x2 * ((uint64_t)x9 * x45)) + (((uint64_t)x11 * x43) + ((0x2 * ((uint64_t)x13 * x41)) + (((uint64_t)x15 * x39) + ((uint64_t)x17 * x37))))))) + (0x1f * ((0x2 * ((uint64_t)x19 * x66)) + (((uint64_t)x21 * x67) + ((0x2 * ((uint64_t)x23 * x65)) + (((uint64_t)x25 * x63) + ((0x2 * ((uint64_t)x27 * x61)) + ((0x2 * ((uint64_t)x29 * x59)) + (((uint64_t)x31 * x57) + ((0x2 * ((uint64_t)x33 * x55)) + (((uint64_t)x35 * x53) + (0x2 * ((uint64_t)x34 * x51)))))))))))));
+ uint64_t x79 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((uint64_t)x15 * x37)))))) + (0x1f * ((0x2 * ((uint64_t)x17 * x66)) + ((0x2 * ((uint64_t)x19 * x67)) + ((0x2 * ((uint64_t)x21 * x65)) + ((0x2 * ((uint64_t)x23 * x63)) + ((0x2 * ((uint64_t)x25 * x61)) + ((0x2 * ((uint64_t)x27 * x59)) + ((0x2 * ((uint64_t)x29 * x57)) + ((0x2 * ((uint64_t)x31 * x55)) + ((0x2 * ((uint64_t)x33 * x53)) + ((0x2 * ((uint64_t)x35 * x51)) + (0x2 * ((uint64_t)x34 * x49))))))))))))));
+ uint64_t x80 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + ((0x2 * ((uint64_t)x9 * x41)) + (((uint64_t)x11 * x39) + ((uint64_t)x13 * x37))))) + (0x1f * (((uint64_t)x15 * x66) + (((uint64_t)x17 * x67) + ((0x2 * ((uint64_t)x19 * x65)) + (((uint64_t)x21 * x63) + ((0x2 * ((uint64_t)x23 * x61)) + (((uint64_t)x25 * x59) + (((uint64_t)x27 * x57) + ((0x2 * ((uint64_t)x29 * x55)) + (((uint64_t)x31 * x53) + ((0x2 * ((uint64_t)x33 * x51)) + (((uint64_t)x35 * x49) + ((uint64_t)x34 * x47))))))))))))));
+ uint64_t x81 = ((((uint64_t)x5 * x43) + ((0x2 * ((uint64_t)x7 * x41)) + ((0x2 * ((uint64_t)x9 * x39)) + ((uint64_t)x11 * x37)))) + (0x1f * ((0x2 * ((uint64_t)x13 * x66)) + (((uint64_t)x15 * x67) + ((0x2 * ((uint64_t)x17 * x65)) + ((0x2 * ((uint64_t)x19 * x63)) + ((0x2 * ((uint64_t)x21 * x61)) + ((0x2 * ((uint64_t)x23 * x59)) + (((uint64_t)x25 * x57) + ((0x2 * ((uint64_t)x27 * x55)) + ((0x2 * ((uint64_t)x29 * x53)) + ((0x2 * ((uint64_t)x31 * x51)) + ((0x2 * ((uint64_t)x33 * x49)) + (((uint64_t)x35 * x47) + (0x2 * ((uint64_t)x34 * x45))))))))))))))));
+ uint64_t x82 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + ((uint64_t)x9 * x37))) + (0x1f * (((uint64_t)x11 * x66) + (((uint64_t)x13 * x67) + (((uint64_t)x15 * x65) + (((uint64_t)x17 * x63) + ((0x2 * ((uint64_t)x19 * x61)) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + (((uint64_t)x25 * x55) + (((uint64_t)x27 * x53) + ((0x2 * ((uint64_t)x29 * x51)) + (((uint64_t)x31 * x49) + (((uint64_t)x33 * x47) + (((uint64_t)x35 * x45) + ((uint64_t)x34 * x43))))))))))))))));
+ uint64_t x83 = ((((uint64_t)x5 * x39) + ((uint64_t)x7 * x37)) + (0x1f * ((0x2 * ((uint64_t)x9 * x66)) + (((uint64_t)x11 * x67) + ((0x2 * ((uint64_t)x13 * x65)) + (((uint64_t)x15 * x63) + ((0x2 * ((uint64_t)x17 * x61)) + ((0x2 * ((uint64_t)x19 * x59)) + (((uint64_t)x21 * x57) + ((0x2 * ((uint64_t)x23 * x55)) + (((uint64_t)x25 * x53) + ((0x2 * ((uint64_t)x27 * x51)) + ((0x2 * ((uint64_t)x29 * x49)) + (((uint64_t)x31 * x47) + ((0x2 * ((uint64_t)x33 * x45)) + (((uint64_t)x35 * x43) + (0x2 * ((uint64_t)x34 * x41))))))))))))))))));
+ uint64_t x84 = (((uint64_t)x5 * x37) + (0x1f * ((0x2 * ((uint64_t)x7 * x66)) + ((0x2 * ((uint64_t)x9 * x67)) + ((0x2 * ((uint64_t)x11 * x65)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + ((0x2 * ((uint64_t)x17 * x59)) + ((0x2 * ((uint64_t)x19 * x57)) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + ((0x2 * ((uint64_t)x27 * x49)) + ((0x2 * ((uint64_t)x29 * x47)) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + ((0x2 * ((uint64_t)x35 * x41)) + (0x2 * ((uint64_t)x34 * x39)))))))))))))))))));
+ uint64_t x85 = (x84 >> 0x18);
+ uint32_t x86 = ((uint32_t)x84 & 0xffffff);
+ uint64_t x87 = (x85 + x83);
+ uint64_t x88 = (x87 >> 0x18);
+ uint32_t x89 = ((uint32_t)x87 & 0xffffff);
+ uint64_t x90 = (x88 + x82);
+ uint64_t x91 = (x90 >> 0x17);
+ uint32_t x92 = ((uint32_t)x90 & 0x7fffff);
+ uint64_t x93 = (x91 + x81);
+ uint64_t x94 = (x93 >> 0x18);
+ uint32_t x95 = ((uint32_t)x93 & 0xffffff);
+ uint64_t x96 = (x94 + x80);
+ uint64_t x97 = (x96 >> 0x17);
+ uint32_t x98 = ((uint32_t)x96 & 0x7fffff);
+ uint64_t x99 = (x97 + x79);
+ uint64_t x100 = (x99 >> 0x18);
+ uint32_t x101 = ((uint32_t)x99 & 0xffffff);
+ uint64_t x102 = (x100 + x78);
+ uint64_t x103 = (x102 >> 0x18);
+ uint32_t x104 = ((uint32_t)x102 & 0xffffff);
+ uint64_t x105 = (x103 + x77);
+ uint64_t x106 = (x105 >> 0x17);
+ uint32_t x107 = ((uint32_t)x105 & 0x7fffff);
+ uint64_t x108 = (x106 + x76);
+ uint64_t x109 = (x108 >> 0x18);
+ uint32_t x110 = ((uint32_t)x108 & 0xffffff);
+ uint64_t x111 = (x109 + x75);
+ uint64_t x112 = (x111 >> 0x17);
+ uint32_t x113 = ((uint32_t)x111 & 0x7fffff);
+ uint64_t x114 = (x112 + x74);
+ uint64_t x115 = (x114 >> 0x18);
+ uint32_t x116 = ((uint32_t)x114 & 0xffffff);
+ uint64_t x117 = (x115 + x73);
+ uint64_t x118 = (x117 >> 0x18);
+ uint32_t x119 = ((uint32_t)x117 & 0xffffff);
+ uint64_t x120 = (x118 + x72);
+ uint64_t x121 = (x120 >> 0x17);
+ uint32_t x122 = ((uint32_t)x120 & 0x7fffff);
+ uint64_t x123 = (x121 + x71);
+ uint64_t x124 = (x123 >> 0x18);
+ uint32_t x125 = ((uint32_t)x123 & 0xffffff);
+ uint64_t x126 = (x124 + x70);
+ uint64_t x127 = (x126 >> 0x17);
+ uint32_t x128 = ((uint32_t)x126 & 0x7fffff);
+ uint64_t x129 = (x127 + x69);
+ uint64_t x130 = (x129 >> 0x18);
+ uint32_t x131 = ((uint32_t)x129 & 0xffffff);
+ uint64_t x132 = (x130 + x68);
+ uint64_t x133 = (x132 >> 0x17);
+ uint32_t x134 = ((uint32_t)x132 & 0x7fffff);
+ uint64_t x135 = (x86 + (0x1f * x133));
+ uint32_t x136 = (uint32_t) (x135 >> 0x18);
+ uint32_t x137 = ((uint32_t)x135 & 0xffffff);
+ uint32_t x138 = (x136 + x89);
+ uint32_t x139 = (x138 >> 0x18);
+ uint32_t x140 = (x138 & 0xffffff);
+ return (Return x134, Return x131, Return x128, Return x125, Return x122, Return x119, Return x116, Return x113, Return x110, Return x107, Return x104, Return x101, Return x98, Return x95, (x139 + x92), Return x140, Return x137))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e401m31_17limbs/fesub.c b/src/Specific/solinas32_2e401m31_17limbs/fesub.c
index 56268d308..4860a8735 100644
--- a/src/Specific/solinas32_2e401m31_17limbs/fesub.c
+++ b/src/Specific/solinas32_2e401m31_17limbs/fesub.c
@@ -33,7 +33,7 @@ static void fesub(uint32_t out[17], const uint32_t in1[17], const uint32_t in2[1
{ const uint32_t x41 = in2[2];
{ const uint32_t x39 = in2[1];
{ const uint32_t x37 = in2[0];
- out[0] = ((Const 33554370 + x5) - x37);
+ out[0] = ((0x1ffffc2 + x5) - x37);
out[1] = ((0x1fffffe + x7) - x39);
out[2] = ((0xfffffe + x9) - x41);
out[3] = ((0x1fffffe + x11) - x43);
diff --git a/src/Specific/solinas32_2e401m31_17limbs/fesubDisplay.log b/src/Specific/solinas32_2e401m31_17limbs/fesubDisplay.log
index cbaedfc26..12835d864 100644
--- a/src/Specific/solinas32_2e401m31_17limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e401m31_17limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x34, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x66, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37))%core,
- (((0xfffffe + x34) - x66), ((0x1fffffe + x35) - x67), ((0xfffffe + x33) - x65), ((0x1fffffe + x31) - x63), ((0xfffffe + x29) - x61), ((0x1fffffe + x27) - x59), ((0x1fffffe + x25) - x57), ((0xfffffe + x23) - x55), ((0x1fffffe + x21) - x53), ((0xfffffe + x19) - x51), ((0x1fffffe + x17) - x49), ((0x1fffffe + x15) - x47), ((0xfffffe + x13) - x45), ((0x1fffffe + x11) - x43), ((0xfffffe + x9) - x41), ((0x1fffffe + x7) - x39), ((Const 33554370 + x5) - x37)))
+ (((0xfffffe + x34) - x66), ((0x1fffffe + x35) - x67), ((0xfffffe + x33) - x65), ((0x1fffffe + x31) - x63), ((0xfffffe + x29) - x61), ((0x1fffffe + x27) - x59), ((0x1fffffe + x25) - x57), ((0xfffffe + x23) - x55), ((0x1fffffe + x21) - x53), ((0xfffffe + x19) - x51), ((0x1fffffe + x17) - x49), ((0x1fffffe + x15) - x47), ((0xfffffe + x13) - x45), ((0x1fffffe + x11) - x43), ((0xfffffe + x9) - x41), ((0x1fffffe + x7) - x39), ((0x1ffffc2 + x5) - x37)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e401m31_17limbs/freeze.c b/src/Specific/solinas32_2e401m31_17limbs/freeze.c
index 162e05c9f..20404a23b 100644
--- a/src/Specific/solinas32_2e401m31_17limbs/freeze.c
+++ b/src/Specific/solinas32_2e401m31_17limbs/freeze.c
@@ -16,7 +16,7 @@ static void freeze(uint32_t out[17], const uint32_t in1[17]) {
{ const uint32_t x6 = in1[2];
{ const uint32_t x4 = in1[1];
{ const uint32_t x2 = in1[0];
- { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 16777185);
+ { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xffffe1);
{ uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x4, 0xffffff);
{ uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x6, 0x7fffff);
{ uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x8, 0xffffff);
@@ -34,7 +34,7 @@ static void freeze(uint32_t out[17], const uint32_t in1[17]) {
{ uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x32, 0xffffff);
{ uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x31, 0x7fffff);
{ uint32_t x84 = cmovznz32(x83, 0x0, 0xffffffff);
- { uint32_t x85 = (x84 & Const 16777185);
+ { uint32_t x85 = (x84 & 0xffffe1);
{ uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x34, Return x85);
{ uint32_t x89 = (x84 & 0xffffff);
{ uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x37, Return x89);
diff --git a/src/Specific/solinas32_2e401m31_17limbs/freezeDisplay.log b/src/Specific/solinas32_2e401m31_17limbs/freezeDisplay.log
index a735c9b96..e8e584f85 100644
--- a/src/Specific/solinas32_2e401m31_17limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e401m31_17limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x31, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 16777185);
+ uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xffffe1);
uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x4, 0xffffff);
uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x6, 0x7fffff);
uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x8, 0xffffff);
@@ -20,7 +20,7 @@ Interp-η
uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x32, 0xffffff);
uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x31, 0x7fffff);
uint32_t x84 = cmovznz32(x83, 0x0, 0xffffffff);
- uint32_t x85 = (x84 & Const 16777185);
+ uint32_t x85 = (x84 & 0xffffe1);
uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x34, Return x85);
uint32_t x89 = (x84 & 0xffffff);
uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x37, Return x89);
diff --git a/src/Specific/solinas32_2e413m21_16limbs/femul.c b/src/Specific/solinas32_2e413m21_16limbs/femul.c
new file mode 100644
index 000000000..9fddbd58d
--- /dev/null
+++ b/src/Specific/solinas32_2e413m21_16limbs/femul.c
@@ -0,0 +1,120 @@
+static void femul(uint32_t out[16], const uint32_t in1[16], const uint32_t in2[16]) {
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x62 = in2[15];
+ { const uint32_t x63 = in2[14];
+ { const uint32_t x61 = in2[13];
+ { const uint32_t x59 = in2[12];
+ { const uint32_t x57 = in2[11];
+ { const uint32_t x55 = in2[10];
+ { const uint32_t x53 = in2[9];
+ { const uint32_t x51 = in2[8];
+ { const uint32_t x49 = in2[7];
+ { const uint32_t x47 = in2[6];
+ { const uint32_t x45 = in2[5];
+ { const uint32_t x43 = in2[4];
+ { const uint32_t x41 = in2[3];
+ { const uint32_t x39 = in2[2];
+ { const uint32_t x37 = in2[1];
+ { const uint32_t x35 = in2[0];
+ { uint64_t x64 = (((uint64_t)x5 * x62) + (((uint64_t)x7 * x63) + (((uint64_t)x9 * x61) + (((uint64_t)x11 * x59) + (((uint64_t)x13 * x57) + ((0x2 * ((uint64_t)x15 * x55)) + (((uint64_t)x17 * x53) + (((uint64_t)x19 * x51) + (((uint64_t)x21 * x49) + (((uint64_t)x23 * x47) + ((0x2 * ((uint64_t)x25 * x45)) + (((uint64_t)x27 * x43) + (((uint64_t)x29 * x41) + (((uint64_t)x31 * x39) + (((uint64_t)x33 * x37) + ((uint64_t)x32 * x35))))))))))))))));
+ { uint64_t x65 = ((((uint64_t)x5 * x63) + (((uint64_t)x7 * x61) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + ((0x2 * ((uint64_t)x13 * x55)) + ((0x2 * ((uint64_t)x15 * x53)) + (((uint64_t)x17 * x51) + (((uint64_t)x19 * x49) + (((uint64_t)x21 * x47) + ((0x2 * ((uint64_t)x23 * x45)) + ((0x2 * ((uint64_t)x25 * x43)) + (((uint64_t)x27 * x41) + (((uint64_t)x29 * x39) + (((uint64_t)x31 * x37) + ((uint64_t)x33 * x35))))))))))))))) + (0x15 * (0x2 * ((uint64_t)x32 * x62))));
+ { uint64_t x66 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + ((0x2 * ((uint64_t)x11 * x55)) + ((0x2 * ((uint64_t)x13 * x53)) + ((0x2 * ((uint64_t)x15 * x51)) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + ((0x2 * ((uint64_t)x21 * x45)) + ((0x2 * ((uint64_t)x23 * x43)) + ((0x2 * ((uint64_t)x25 * x41)) + (((uint64_t)x27 * x39) + (((uint64_t)x29 * x37) + ((uint64_t)x31 * x35)))))))))))))) + (0x15 * ((0x2 * ((uint64_t)x33 * x62)) + (0x2 * ((uint64_t)x32 * x63)))));
+ { uint64_t x67 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + ((0x2 * ((uint64_t)x9 * x55)) + ((0x2 * ((uint64_t)x11 * x53)) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + (((uint64_t)x17 * x47) + ((0x2 * ((uint64_t)x19 * x45)) + ((0x2 * ((uint64_t)x21 * x43)) + ((0x2 * ((uint64_t)x23 * x41)) + ((0x2 * ((uint64_t)x25 * x39)) + (((uint64_t)x27 * x37) + ((uint64_t)x29 * x35))))))))))))) + (0x15 * ((0x2 * ((uint64_t)x31 * x62)) + ((0x2 * ((uint64_t)x33 * x63)) + (0x2 * ((uint64_t)x32 * x61))))));
+ { uint64_t x68 = ((((uint64_t)x5 * x57) + ((0x2 * ((uint64_t)x7 * x55)) + ((0x2 * ((uint64_t)x9 * x53)) + ((0x2 * ((uint64_t)x11 * x51)) + ((0x2 * ((uint64_t)x13 * x49)) + ((0x2 * ((uint64_t)x15 * x47)) + ((0x2 * ((uint64_t)x17 * x45)) + ((0x2 * ((uint64_t)x19 * x43)) + ((0x2 * ((uint64_t)x21 * x41)) + ((0x2 * ((uint64_t)x23 * x39)) + ((0x2 * ((uint64_t)x25 * x37)) + ((uint64_t)x27 * x35)))))))))))) + (0x15 * ((0x2 * ((uint64_t)x29 * x62)) + ((0x2 * ((uint64_t)x31 * x63)) + ((0x2 * ((uint64_t)x33 * x61)) + (0x2 * ((uint64_t)x32 * x59)))))));
+ { uint64_t x69 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + ((0x2 * ((uint64_t)x15 * x45)) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + (((uint64_t)x21 * x39) + (((uint64_t)x23 * x37) + ((uint64_t)x25 * x35))))))))))) + (0x15 * (((uint64_t)x27 * x62) + (((uint64_t)x29 * x63) + (((uint64_t)x31 * x61) + (((uint64_t)x33 * x59) + ((uint64_t)x32 * x57)))))));
+ { uint64_t x70 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + (((uint64_t)x9 * x49) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + ((0x2 * ((uint64_t)x15 * x43)) + (((uint64_t)x17 * x41) + (((uint64_t)x19 * x39) + (((uint64_t)x21 * x37) + ((uint64_t)x23 * x35)))))))))) + (0x15 * ((0x2 * ((uint64_t)x25 * x62)) + (((uint64_t)x27 * x63) + (((uint64_t)x29 * x61) + (((uint64_t)x31 * x59) + (((uint64_t)x33 * x57) + (0x2 * ((uint64_t)x32 * x55)))))))));
+ { uint64_t x71 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + (((uint64_t)x9 * x47) + ((0x2 * ((uint64_t)x11 * x45)) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + (((uint64_t)x17 * x39) + (((uint64_t)x19 * x37) + ((uint64_t)x21 * x35))))))))) + (0x15 * ((0x2 * ((uint64_t)x23 * x62)) + ((0x2 * ((uint64_t)x25 * x63)) + (((uint64_t)x27 * x61) + (((uint64_t)x29 * x59) + (((uint64_t)x31 * x57) + ((0x2 * ((uint64_t)x33 * x55)) + (0x2 * ((uint64_t)x32 * x53))))))))));
+ { uint64_t x72 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + ((0x2 * ((uint64_t)x9 * x45)) + ((0x2 * ((uint64_t)x11 * x43)) + ((0x2 * ((uint64_t)x13 * x41)) + ((0x2 * ((uint64_t)x15 * x39)) + (((uint64_t)x17 * x37) + ((uint64_t)x19 * x35)))))))) + (0x15 * ((0x2 * ((uint64_t)x21 * x62)) + ((0x2 * ((uint64_t)x23 * x63)) + ((0x2 * ((uint64_t)x25 * x61)) + (((uint64_t)x27 * x59) + (((uint64_t)x29 * x57) + ((0x2 * ((uint64_t)x31 * x55)) + ((0x2 * ((uint64_t)x33 * x53)) + (0x2 * ((uint64_t)x32 * x51)))))))))));
+ { uint64_t x73 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((0x2 * ((uint64_t)x15 * x37)) + ((uint64_t)x17 * x35))))))) + (0x15 * ((0x2 * ((uint64_t)x19 * x62)) + ((0x2 * ((uint64_t)x21 * x63)) + ((0x2 * ((uint64_t)x23 * x61)) + ((0x2 * ((uint64_t)x25 * x59)) + (((uint64_t)x27 * x57) + ((0x2 * ((uint64_t)x29 * x55)) + ((0x2 * ((uint64_t)x31 * x53)) + ((0x2 * ((uint64_t)x33 * x51)) + (0x2 * ((uint64_t)x32 * x49))))))))))));
+ { uint64_t x74 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + (((uint64_t)x9 * x41) + (((uint64_t)x11 * x39) + (((uint64_t)x13 * x37) + ((uint64_t)x15 * x35)))))) + (0x15 * (((uint64_t)x17 * x62) + (((uint64_t)x19 * x63) + (((uint64_t)x21 * x61) + (((uint64_t)x23 * x59) + (((uint64_t)x25 * x57) + (((uint64_t)x27 * x55) + (((uint64_t)x29 * x53) + (((uint64_t)x31 * x51) + (((uint64_t)x33 * x49) + ((uint64_t)x32 * x47))))))))))));
+ { uint64_t x75 = ((((uint64_t)x5 * x43) + (((uint64_t)x7 * x41) + (((uint64_t)x9 * x39) + (((uint64_t)x11 * x37) + ((uint64_t)x13 * x35))))) + (0x15 * ((0x2 * ((uint64_t)x15 * x62)) + (((uint64_t)x17 * x63) + (((uint64_t)x19 * x61) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + ((0x2 * ((uint64_t)x25 * x55)) + (((uint64_t)x27 * x53) + (((uint64_t)x29 * x51) + (((uint64_t)x31 * x49) + (((uint64_t)x33 * x47) + (0x2 * ((uint64_t)x32 * x45))))))))))))));
+ { uint64_t x76 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + ((uint64_t)x11 * x35)))) + (0x15 * ((0x2 * ((uint64_t)x13 * x62)) + ((0x2 * ((uint64_t)x15 * x63)) + (((uint64_t)x17 * x61) + (((uint64_t)x19 * x59) + (((uint64_t)x21 * x57) + ((0x2 * ((uint64_t)x23 * x55)) + ((0x2 * ((uint64_t)x25 * x53)) + (((uint64_t)x27 * x51) + (((uint64_t)x29 * x49) + (((uint64_t)x31 * x47) + ((0x2 * ((uint64_t)x33 * x45)) + (0x2 * ((uint64_t)x32 * x43)))))))))))))));
+ { uint64_t x77 = ((((uint64_t)x5 * x39) + (((uint64_t)x7 * x37) + ((uint64_t)x9 * x35))) + (0x15 * ((0x2 * ((uint64_t)x11 * x62)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + (((uint64_t)x17 * x59) + (((uint64_t)x19 * x57) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + (((uint64_t)x27 * x49) + (((uint64_t)x29 * x47) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + (0x2 * ((uint64_t)x32 * x41))))))))))))))));
+ { ℤ x78 = ((((uint64_t)x5 * x37) + ((uint64_t)x7 * x35)) +ℤ (0x15 *ℤ ((0x2 * ((uint64_t)x9 * x62)) + ((0x2 * ((uint64_t)x11 * x63)) + ((0x2 * ((uint64_t)x13 * x61)) + ((0x2 * ((uint64_t)x15 * x59)) + (((uint64_t)x17 * x57) + ((0x2 * ((uint64_t)x19 * x55)) + ((0x2 * ((uint64_t)x21 * x53)) + ((0x2 * ((uint64_t)x23 * x51)) + ((0x2 * ((uint64_t)x25 * x49)) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + ((0x2 * ((uint64_t)x31 * x43)) + ((0x2 * ((uint64_t)x33 * x41)) + (0x2 * ((uint64_t)x32 * x39)))))))))))))))));
+ { ℤ x79 = (((uint64_t)x5 * x35) +ℤ (0x15 *ℤ ((0x2 * ((uint64_t)x7 * x62)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + (0x2 * ((uint64_t)x32 * x37))))))))))))))))));
+ { uint64_t x80 = (x79 >> 0x1a);
+ { uint32_t x81 = (x79 & 0x3ffffff);
+ { ℤ x82 = (x80 +ℤ x78);
+ { uint64_t x83 = (x82 >> 0x1a);
+ { uint32_t x84 = (x82 & 0x3ffffff);
+ { uint64_t x85 = (x83 + x77);
+ { uint64_t x86 = (x85 >> 0x1a);
+ { uint32_t x87 = ((uint32_t)x85 & 0x3ffffff);
+ { uint64_t x88 = (x86 + x76);
+ { uint64_t x89 = (x88 >> 0x1a);
+ { uint32_t x90 = ((uint32_t)x88 & 0x3ffffff);
+ { uint64_t x91 = (x89 + x75);
+ { uint64_t x92 = (x91 >> 0x1a);
+ { uint32_t x93 = ((uint32_t)x91 & 0x3ffffff);
+ { uint64_t x94 = (x92 + x74);
+ { uint64_t x95 = (x94 >> 0x19);
+ { uint32_t x96 = ((uint32_t)x94 & 0x1ffffff);
+ { uint64_t x97 = (x95 + x73);
+ { uint64_t x98 = (x97 >> 0x1a);
+ { uint32_t x99 = ((uint32_t)x97 & 0x3ffffff);
+ { uint64_t x100 = (x98 + x72);
+ { uint64_t x101 = (x100 >> 0x1a);
+ { uint32_t x102 = ((uint32_t)x100 & 0x3ffffff);
+ { uint64_t x103 = (x101 + x71);
+ { uint64_t x104 = (x103 >> 0x1a);
+ { uint32_t x105 = ((uint32_t)x103 & 0x3ffffff);
+ { uint64_t x106 = (x104 + x70);
+ { uint64_t x107 = (x106 >> 0x1a);
+ { uint32_t x108 = ((uint32_t)x106 & 0x3ffffff);
+ { uint64_t x109 = (x107 + x69);
+ { uint64_t x110 = (x109 >> 0x19);
+ { uint32_t x111 = ((uint32_t)x109 & 0x1ffffff);
+ { uint64_t x112 = (x110 + x68);
+ { uint64_t x113 = (x112 >> 0x1a);
+ { uint32_t x114 = ((uint32_t)x112 & 0x3ffffff);
+ { uint64_t x115 = (x113 + x67);
+ { uint64_t x116 = (x115 >> 0x1a);
+ { uint32_t x117 = ((uint32_t)x115 & 0x3ffffff);
+ { uint64_t x118 = (x116 + x66);
+ { uint64_t x119 = (x118 >> 0x1a);
+ { uint32_t x120 = ((uint32_t)x118 & 0x3ffffff);
+ { uint64_t x121 = (x119 + x65);
+ { uint64_t x122 = (x121 >> 0x1a);
+ { uint32_t x123 = ((uint32_t)x121 & 0x3ffffff);
+ { uint64_t x124 = (x122 + x64);
+ { uint64_t x125 = (x124 >> 0x19);
+ { uint32_t x126 = ((uint32_t)x124 & 0x1ffffff);
+ { uint64_t x127 = (x81 + (0x15 * x125));
+ { uint32_t x128 = (uint32_t) (x127 >> 0x1a);
+ { uint32_t x129 = ((uint32_t)x127 & 0x3ffffff);
+ { uint32_t x130 = (x128 + x84);
+ { uint32_t x131 = (x130 >> 0x1a);
+ { uint32_t x132 = (x130 & 0x3ffffff);
+ out[0] = x129;
+ out[1] = x132;
+ out[2] = (x131 + x87);
+ out[3] = x90;
+ out[4] = x93;
+ out[5] = x96;
+ out[6] = x99;
+ out[7] = x102;
+ out[8] = x105;
+ out[9] = x108;
+ out[10] = x111;
+ out[11] = x114;
+ out[12] = x117;
+ out[13] = x120;
+ out[14] = x123;
+ out[15] = x126;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e413m21_16limbs/femulDisplay.log b/src/Specific/solinas32_2e413m21_16limbs/femulDisplay.log
new file mode 100644
index 000000000..1e744ca34
--- /dev/null
+++ b/src/Specific/solinas32_2e413m21_16limbs/femulDisplay.log
@@ -0,0 +1,76 @@
+λ x x0 : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x32, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x62, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35))%core,
+ uint64_t x64 = (((uint64_t)x5 * x62) + (((uint64_t)x7 * x63) + (((uint64_t)x9 * x61) + (((uint64_t)x11 * x59) + (((uint64_t)x13 * x57) + ((0x2 * ((uint64_t)x15 * x55)) + (((uint64_t)x17 * x53) + (((uint64_t)x19 * x51) + (((uint64_t)x21 * x49) + (((uint64_t)x23 * x47) + ((0x2 * ((uint64_t)x25 * x45)) + (((uint64_t)x27 * x43) + (((uint64_t)x29 * x41) + (((uint64_t)x31 * x39) + (((uint64_t)x33 * x37) + ((uint64_t)x32 * x35))))))))))))))));
+ uint64_t x65 = ((((uint64_t)x5 * x63) + (((uint64_t)x7 * x61) + (((uint64_t)x9 * x59) + (((uint64_t)x11 * x57) + ((0x2 * ((uint64_t)x13 * x55)) + ((0x2 * ((uint64_t)x15 * x53)) + (((uint64_t)x17 * x51) + (((uint64_t)x19 * x49) + (((uint64_t)x21 * x47) + ((0x2 * ((uint64_t)x23 * x45)) + ((0x2 * ((uint64_t)x25 * x43)) + (((uint64_t)x27 * x41) + (((uint64_t)x29 * x39) + (((uint64_t)x31 * x37) + ((uint64_t)x33 * x35))))))))))))))) + (0x15 * (0x2 * ((uint64_t)x32 * x62))));
+ uint64_t x66 = ((((uint64_t)x5 * x61) + (((uint64_t)x7 * x59) + (((uint64_t)x9 * x57) + ((0x2 * ((uint64_t)x11 * x55)) + ((0x2 * ((uint64_t)x13 * x53)) + ((0x2 * ((uint64_t)x15 * x51)) + (((uint64_t)x17 * x49) + (((uint64_t)x19 * x47) + ((0x2 * ((uint64_t)x21 * x45)) + ((0x2 * ((uint64_t)x23 * x43)) + ((0x2 * ((uint64_t)x25 * x41)) + (((uint64_t)x27 * x39) + (((uint64_t)x29 * x37) + ((uint64_t)x31 * x35)))))))))))))) + (0x15 * ((0x2 * ((uint64_t)x33 * x62)) + (0x2 * ((uint64_t)x32 * x63)))));
+ uint64_t x67 = ((((uint64_t)x5 * x59) + (((uint64_t)x7 * x57) + ((0x2 * ((uint64_t)x9 * x55)) + ((0x2 * ((uint64_t)x11 * x53)) + ((0x2 * ((uint64_t)x13 * x51)) + ((0x2 * ((uint64_t)x15 * x49)) + (((uint64_t)x17 * x47) + ((0x2 * ((uint64_t)x19 * x45)) + ((0x2 * ((uint64_t)x21 * x43)) + ((0x2 * ((uint64_t)x23 * x41)) + ((0x2 * ((uint64_t)x25 * x39)) + (((uint64_t)x27 * x37) + ((uint64_t)x29 * x35))))))))))))) + (0x15 * ((0x2 * ((uint64_t)x31 * x62)) + ((0x2 * ((uint64_t)x33 * x63)) + (0x2 * ((uint64_t)x32 * x61))))));
+ uint64_t x68 = ((((uint64_t)x5 * x57) + ((0x2 * ((uint64_t)x7 * x55)) + ((0x2 * ((uint64_t)x9 * x53)) + ((0x2 * ((uint64_t)x11 * x51)) + ((0x2 * ((uint64_t)x13 * x49)) + ((0x2 * ((uint64_t)x15 * x47)) + ((0x2 * ((uint64_t)x17 * x45)) + ((0x2 * ((uint64_t)x19 * x43)) + ((0x2 * ((uint64_t)x21 * x41)) + ((0x2 * ((uint64_t)x23 * x39)) + ((0x2 * ((uint64_t)x25 * x37)) + ((uint64_t)x27 * x35)))))))))))) + (0x15 * ((0x2 * ((uint64_t)x29 * x62)) + ((0x2 * ((uint64_t)x31 * x63)) + ((0x2 * ((uint64_t)x33 * x61)) + (0x2 * ((uint64_t)x32 * x59)))))));
+ uint64_t x69 = ((((uint64_t)x5 * x55) + (((uint64_t)x7 * x53) + (((uint64_t)x9 * x51) + (((uint64_t)x11 * x49) + (((uint64_t)x13 * x47) + ((0x2 * ((uint64_t)x15 * x45)) + (((uint64_t)x17 * x43) + (((uint64_t)x19 * x41) + (((uint64_t)x21 * x39) + (((uint64_t)x23 * x37) + ((uint64_t)x25 * x35))))))))))) + (0x15 * (((uint64_t)x27 * x62) + (((uint64_t)x29 * x63) + (((uint64_t)x31 * x61) + (((uint64_t)x33 * x59) + ((uint64_t)x32 * x57)))))));
+ uint64_t x70 = ((((uint64_t)x5 * x53) + (((uint64_t)x7 * x51) + (((uint64_t)x9 * x49) + (((uint64_t)x11 * x47) + ((0x2 * ((uint64_t)x13 * x45)) + ((0x2 * ((uint64_t)x15 * x43)) + (((uint64_t)x17 * x41) + (((uint64_t)x19 * x39) + (((uint64_t)x21 * x37) + ((uint64_t)x23 * x35)))))))))) + (0x15 * ((0x2 * ((uint64_t)x25 * x62)) + (((uint64_t)x27 * x63) + (((uint64_t)x29 * x61) + (((uint64_t)x31 * x59) + (((uint64_t)x33 * x57) + (0x2 * ((uint64_t)x32 * x55)))))))));
+ uint64_t x71 = ((((uint64_t)x5 * x51) + (((uint64_t)x7 * x49) + (((uint64_t)x9 * x47) + ((0x2 * ((uint64_t)x11 * x45)) + ((0x2 * ((uint64_t)x13 * x43)) + ((0x2 * ((uint64_t)x15 * x41)) + (((uint64_t)x17 * x39) + (((uint64_t)x19 * x37) + ((uint64_t)x21 * x35))))))))) + (0x15 * ((0x2 * ((uint64_t)x23 * x62)) + ((0x2 * ((uint64_t)x25 * x63)) + (((uint64_t)x27 * x61) + (((uint64_t)x29 * x59) + (((uint64_t)x31 * x57) + ((0x2 * ((uint64_t)x33 * x55)) + (0x2 * ((uint64_t)x32 * x53))))))))));
+ uint64_t x72 = ((((uint64_t)x5 * x49) + (((uint64_t)x7 * x47) + ((0x2 * ((uint64_t)x9 * x45)) + ((0x2 * ((uint64_t)x11 * x43)) + ((0x2 * ((uint64_t)x13 * x41)) + ((0x2 * ((uint64_t)x15 * x39)) + (((uint64_t)x17 * x37) + ((uint64_t)x19 * x35)))))))) + (0x15 * ((0x2 * ((uint64_t)x21 * x62)) + ((0x2 * ((uint64_t)x23 * x63)) + ((0x2 * ((uint64_t)x25 * x61)) + (((uint64_t)x27 * x59) + (((uint64_t)x29 * x57) + ((0x2 * ((uint64_t)x31 * x55)) + ((0x2 * ((uint64_t)x33 * x53)) + (0x2 * ((uint64_t)x32 * x51)))))))))));
+ uint64_t x73 = ((((uint64_t)x5 * x47) + ((0x2 * ((uint64_t)x7 * x45)) + ((0x2 * ((uint64_t)x9 * x43)) + ((0x2 * ((uint64_t)x11 * x41)) + ((0x2 * ((uint64_t)x13 * x39)) + ((0x2 * ((uint64_t)x15 * x37)) + ((uint64_t)x17 * x35))))))) + (0x15 * ((0x2 * ((uint64_t)x19 * x62)) + ((0x2 * ((uint64_t)x21 * x63)) + ((0x2 * ((uint64_t)x23 * x61)) + ((0x2 * ((uint64_t)x25 * x59)) + (((uint64_t)x27 * x57) + ((0x2 * ((uint64_t)x29 * x55)) + ((0x2 * ((uint64_t)x31 * x53)) + ((0x2 * ((uint64_t)x33 * x51)) + (0x2 * ((uint64_t)x32 * x49))))))))))));
+ uint64_t x74 = ((((uint64_t)x5 * x45) + (((uint64_t)x7 * x43) + (((uint64_t)x9 * x41) + (((uint64_t)x11 * x39) + (((uint64_t)x13 * x37) + ((uint64_t)x15 * x35)))))) + (0x15 * (((uint64_t)x17 * x62) + (((uint64_t)x19 * x63) + (((uint64_t)x21 * x61) + (((uint64_t)x23 * x59) + (((uint64_t)x25 * x57) + (((uint64_t)x27 * x55) + (((uint64_t)x29 * x53) + (((uint64_t)x31 * x51) + (((uint64_t)x33 * x49) + ((uint64_t)x32 * x47))))))))))));
+ uint64_t x75 = ((((uint64_t)x5 * x43) + (((uint64_t)x7 * x41) + (((uint64_t)x9 * x39) + (((uint64_t)x11 * x37) + ((uint64_t)x13 * x35))))) + (0x15 * ((0x2 * ((uint64_t)x15 * x62)) + (((uint64_t)x17 * x63) + (((uint64_t)x19 * x61) + (((uint64_t)x21 * x59) + (((uint64_t)x23 * x57) + ((0x2 * ((uint64_t)x25 * x55)) + (((uint64_t)x27 * x53) + (((uint64_t)x29 * x51) + (((uint64_t)x31 * x49) + (((uint64_t)x33 * x47) + (0x2 * ((uint64_t)x32 * x45))))))))))))));
+ uint64_t x76 = ((((uint64_t)x5 * x41) + (((uint64_t)x7 * x39) + (((uint64_t)x9 * x37) + ((uint64_t)x11 * x35)))) + (0x15 * ((0x2 * ((uint64_t)x13 * x62)) + ((0x2 * ((uint64_t)x15 * x63)) + (((uint64_t)x17 * x61) + (((uint64_t)x19 * x59) + (((uint64_t)x21 * x57) + ((0x2 * ((uint64_t)x23 * x55)) + ((0x2 * ((uint64_t)x25 * x53)) + (((uint64_t)x27 * x51) + (((uint64_t)x29 * x49) + (((uint64_t)x31 * x47) + ((0x2 * ((uint64_t)x33 * x45)) + (0x2 * ((uint64_t)x32 * x43)))))))))))))));
+ uint64_t x77 = ((((uint64_t)x5 * x39) + (((uint64_t)x7 * x37) + ((uint64_t)x9 * x35))) + (0x15 * ((0x2 * ((uint64_t)x11 * x62)) + ((0x2 * ((uint64_t)x13 * x63)) + ((0x2 * ((uint64_t)x15 * x61)) + (((uint64_t)x17 * x59) + (((uint64_t)x19 * x57) + ((0x2 * ((uint64_t)x21 * x55)) + ((0x2 * ((uint64_t)x23 * x53)) + ((0x2 * ((uint64_t)x25 * x51)) + (((uint64_t)x27 * x49) + (((uint64_t)x29 * x47) + ((0x2 * ((uint64_t)x31 * x45)) + ((0x2 * ((uint64_t)x33 * x43)) + (0x2 * ((uint64_t)x32 * x41))))))))))))))));
+ ℤ x78 = ((((uint64_t)x5 * x37) + ((uint64_t)x7 * x35)) +ℤ (0x15 *ℤ ((0x2 * ((uint64_t)x9 * x62)) + ((0x2 * ((uint64_t)x11 * x63)) + ((0x2 * ((uint64_t)x13 * x61)) + ((0x2 * ((uint64_t)x15 * x59)) + (((uint64_t)x17 * x57) + ((0x2 * ((uint64_t)x19 * x55)) + ((0x2 * ((uint64_t)x21 * x53)) + ((0x2 * ((uint64_t)x23 * x51)) + ((0x2 * ((uint64_t)x25 * x49)) + (((uint64_t)x27 * x47) + ((0x2 * ((uint64_t)x29 * x45)) + ((0x2 * ((uint64_t)x31 * x43)) + ((0x2 * ((uint64_t)x33 * x41)) + (0x2 * ((uint64_t)x32 * x39)))))))))))))))));
+ ℤ x79 = (((uint64_t)x5 * x35) +ℤ (0x15 *ℤ ((0x2 * ((uint64_t)x7 * x62)) + ((0x2 * ((uint64_t)x9 * x63)) + ((0x2 * ((uint64_t)x11 * x61)) + ((0x2 * ((uint64_t)x13 * x59)) + ((0x2 * ((uint64_t)x15 * x57)) + ((0x2 * ((uint64_t)x17 * x55)) + ((0x2 * ((uint64_t)x19 * x53)) + ((0x2 * ((uint64_t)x21 * x51)) + ((0x2 * ((uint64_t)x23 * x49)) + ((0x2 * ((uint64_t)x25 * x47)) + ((0x2 * ((uint64_t)x27 * x45)) + ((0x2 * ((uint64_t)x29 * x43)) + ((0x2 * ((uint64_t)x31 * x41)) + ((0x2 * ((uint64_t)x33 * x39)) + (0x2 * ((uint64_t)x32 * x37))))))))))))))))));
+ uint64_t x80 = (x79 >> 0x1a);
+ uint32_t x81 = (x79 & 0x3ffffff);
+ ℤ x82 = (x80 +ℤ x78);
+ uint64_t x83 = (x82 >> 0x1a);
+ uint32_t x84 = (x82 & 0x3ffffff);
+ uint64_t x85 = (x83 + x77);
+ uint64_t x86 = (x85 >> 0x1a);
+ uint32_t x87 = ((uint32_t)x85 & 0x3ffffff);
+ uint64_t x88 = (x86 + x76);
+ uint64_t x89 = (x88 >> 0x1a);
+ uint32_t x90 = ((uint32_t)x88 & 0x3ffffff);
+ uint64_t x91 = (x89 + x75);
+ uint64_t x92 = (x91 >> 0x1a);
+ uint32_t x93 = ((uint32_t)x91 & 0x3ffffff);
+ uint64_t x94 = (x92 + x74);
+ uint64_t x95 = (x94 >> 0x19);
+ uint32_t x96 = ((uint32_t)x94 & 0x1ffffff);
+ uint64_t x97 = (x95 + x73);
+ uint64_t x98 = (x97 >> 0x1a);
+ uint32_t x99 = ((uint32_t)x97 & 0x3ffffff);
+ uint64_t x100 = (x98 + x72);
+ uint64_t x101 = (x100 >> 0x1a);
+ uint32_t x102 = ((uint32_t)x100 & 0x3ffffff);
+ uint64_t x103 = (x101 + x71);
+ uint64_t x104 = (x103 >> 0x1a);
+ uint32_t x105 = ((uint32_t)x103 & 0x3ffffff);
+ uint64_t x106 = (x104 + x70);
+ uint64_t x107 = (x106 >> 0x1a);
+ uint32_t x108 = ((uint32_t)x106 & 0x3ffffff);
+ uint64_t x109 = (x107 + x69);
+ uint64_t x110 = (x109 >> 0x19);
+ uint32_t x111 = ((uint32_t)x109 & 0x1ffffff);
+ uint64_t x112 = (x110 + x68);
+ uint64_t x113 = (x112 >> 0x1a);
+ uint32_t x114 = ((uint32_t)x112 & 0x3ffffff);
+ uint64_t x115 = (x113 + x67);
+ uint64_t x116 = (x115 >> 0x1a);
+ uint32_t x117 = ((uint32_t)x115 & 0x3ffffff);
+ uint64_t x118 = (x116 + x66);
+ uint64_t x119 = (x118 >> 0x1a);
+ uint32_t x120 = ((uint32_t)x118 & 0x3ffffff);
+ uint64_t x121 = (x119 + x65);
+ uint64_t x122 = (x121 >> 0x1a);
+ uint32_t x123 = ((uint32_t)x121 & 0x3ffffff);
+ uint64_t x124 = (x122 + x64);
+ uint64_t x125 = (x124 >> 0x19);
+ uint32_t x126 = ((uint32_t)x124 & 0x1ffffff);
+ uint64_t x127 = (x81 + (0x15 * x125));
+ uint32_t x128 = (uint32_t) (x127 >> 0x1a);
+ uint32_t x129 = ((uint32_t)x127 & 0x3ffffff);
+ uint32_t x130 = (x128 + x84);
+ uint32_t x131 = (x130 >> 0x1a);
+ uint32_t x132 = (x130 & 0x3ffffff);
+ return (Return x126, Return x123, Return x120, Return x117, Return x114, Return x111, Return x108, Return x105, Return x102, Return x99, Return x96, Return x93, Return x90, (x131 + x87), Return x132, Return x129))
+(x, x0)%core
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e413m21_16limbs/fesub.c b/src/Specific/solinas32_2e413m21_16limbs/fesub.c
index 9f63c1f80..521b0bd2d 100644
--- a/src/Specific/solinas32_2e413m21_16limbs/fesub.c
+++ b/src/Specific/solinas32_2e413m21_16limbs/fesub.c
@@ -31,7 +31,7 @@ static void fesub(uint32_t out[16], const uint32_t in1[16], const uint32_t in2[1
{ const uint32_t x39 = in2[2];
{ const uint32_t x37 = in2[1];
{ const uint32_t x35 = in2[0];
- out[0] = ((Const 134217686 + x5) - x35);
+ out[0] = ((0x7ffffd6 + x5) - x35);
out[1] = ((0x7fffffe + x7) - x37);
out[2] = ((0x7fffffe + x9) - x39);
out[3] = ((0x7fffffe + x11) - x41);
diff --git a/src/Specific/solinas32_2e413m21_16limbs/fesubDisplay.log b/src/Specific/solinas32_2e413m21_16limbs/fesubDisplay.log
index 8334c6c76..bfac52a38 100644
--- a/src/Specific/solinas32_2e413m21_16limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e413m21_16limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x32, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x62, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37, x35))%core,
- (((0x3fffffe + x32) - x62), ((0x7fffffe + x33) - x63), ((0x7fffffe + x31) - x61), ((0x7fffffe + x29) - x59), ((0x7fffffe + x27) - x57), ((0x3fffffe + x25) - x55), ((0x7fffffe + x23) - x53), ((0x7fffffe + x21) - x51), ((0x7fffffe + x19) - x49), ((0x7fffffe + x17) - x47), ((0x3fffffe + x15) - x45), ((0x7fffffe + x13) - x43), ((0x7fffffe + x11) - x41), ((0x7fffffe + x9) - x39), ((0x7fffffe + x7) - x37), ((Const 134217686 + x5) - x35)))
+ (((0x3fffffe + x32) - x62), ((0x7fffffe + x33) - x63), ((0x7fffffe + x31) - x61), ((0x7fffffe + x29) - x59), ((0x7fffffe + x27) - x57), ((0x3fffffe + x25) - x55), ((0x7fffffe + x23) - x53), ((0x7fffffe + x21) - x51), ((0x7fffffe + x19) - x49), ((0x7fffffe + x17) - x47), ((0x3fffffe + x15) - x45), ((0x7fffffe + x13) - x43), ((0x7fffffe + x11) - x41), ((0x7fffffe + x9) - x39), ((0x7fffffe + x7) - x37), ((0x7ffffd6 + x5) - x35)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e413m21_16limbs/freeze.c b/src/Specific/solinas32_2e413m21_16limbs/freeze.c
index bfb462de2..939da9121 100644
--- a/src/Specific/solinas32_2e413m21_16limbs/freeze.c
+++ b/src/Specific/solinas32_2e413m21_16limbs/freeze.c
@@ -15,7 +15,7 @@ static void freeze(uint32_t out[16], const uint32_t in1[16]) {
{ const uint32_t x6 = in1[2];
{ const uint32_t x4 = in1[1];
{ const uint32_t x2 = in1[0];
- { uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 67108843);
+ { uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x3ffffeb);
{ uint32_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x33, Return x4, 0x3ffffff);
{ uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x36, Return x6, 0x3ffffff);
{ uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x8, 0x3ffffff);
@@ -32,7 +32,7 @@ static void freeze(uint32_t out[16], const uint32_t in1[16]) {
{ uint32_t x74, uint8_t x75 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x72, Return x30, 0x3ffffff);
{ uint32_t x77, uint8_t x78 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x75, Return x29, 0x1ffffff);
{ uint32_t x79 = cmovznz32(x78, 0x0, 0xffffffff);
- { uint32_t x80 = (x79 & Const 67108843);
+ { uint32_t x80 = (x79 & 0x3ffffeb);
{ uint32_t x82, uint8_t x83 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x32, Return x80);
{ uint32_t x84 = (x79 & 0x3ffffff);
{ uint32_t x86, uint8_t x87 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x35, Return x84);
diff --git a/src/Specific/solinas32_2e413m21_16limbs/freezeDisplay.log b/src/Specific/solinas32_2e413m21_16limbs/freezeDisplay.log
index fb328ab3b..e9c73f3aa 100644
--- a/src/Specific/solinas32_2e413m21_16limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e413m21_16limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x29, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 67108843);
+ uint32_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x3ffffeb);
uint32_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x33, Return x4, 0x3ffffff);
uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x36, Return x6, 0x3ffffff);
uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x8, 0x3ffffff);
@@ -19,7 +19,7 @@ Interp-η
uint32_t x74, uint8_t x75 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x72, Return x30, 0x3ffffff);
uint32_t x77, uint8_t x78 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x75, Return x29, 0x1ffffff);
uint32_t x79 = cmovznz32(x78, 0x0, 0xffffffff);
- uint32_t x80 = (x79 & Const 67108843);
+ uint32_t x80 = (x79 & 0x3ffffeb);
uint32_t x82, uint8_t x83 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x32, Return x80);
uint32_t x84 = (x79 & 0x3ffffff);
uint32_t x86, uint8_t x87 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x35, Return x84);
diff --git a/src/Specific/solinas32_2e413m21_17limbs/fesub.c b/src/Specific/solinas32_2e413m21_17limbs/fesub.c
index 62d684887..96318485c 100644
--- a/src/Specific/solinas32_2e413m21_17limbs/fesub.c
+++ b/src/Specific/solinas32_2e413m21_17limbs/fesub.c
@@ -33,7 +33,7 @@ static void fesub(uint32_t out[17], const uint32_t in1[17], const uint32_t in2[1
{ const uint32_t x41 = in2[2];
{ const uint32_t x39 = in2[1];
{ const uint32_t x37 = in2[0];
- out[0] = ((Const 67108822 + x5) - x37);
+ out[0] = ((0x3ffffd6 + x5) - x37);
out[1] = ((0x1fffffe + x7) - x39);
out[2] = ((0x1fffffe + x9) - x41);
out[3] = ((0x3fffffe + x11) - x43);
diff --git a/src/Specific/solinas32_2e413m21_17limbs/fesubDisplay.log b/src/Specific/solinas32_2e413m21_17limbs/fesubDisplay.log
index 8820d51dc..930fe52b6 100644
--- a/src/Specific/solinas32_2e413m21_17limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e413m21_17limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x34, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x66, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37))%core,
- (((0x1fffffe + x34) - x66), ((0x1fffffe + x35) - x67), ((0x1fffffe + x33) - x65), ((0x3fffffe + x31) - x63), ((0x1fffffe + x29) - x61), ((0x1fffffe + x27) - x59), ((0x3fffffe + x25) - x57), ((0x1fffffe + x23) - x55), ((0x1fffffe + x21) - x53), ((0x1fffffe + x19) - x51), ((0x3fffffe + x17) - x49), ((0x1fffffe + x15) - x47), ((0x1fffffe + x13) - x45), ((0x3fffffe + x11) - x43), ((0x1fffffe + x9) - x41), ((0x1fffffe + x7) - x39), ((Const 67108822 + x5) - x37)))
+ (((0x1fffffe + x34) - x66), ((0x1fffffe + x35) - x67), ((0x1fffffe + x33) - x65), ((0x3fffffe + x31) - x63), ((0x1fffffe + x29) - x61), ((0x1fffffe + x27) - x59), ((0x3fffffe + x25) - x57), ((0x1fffffe + x23) - x55), ((0x1fffffe + x21) - x53), ((0x1fffffe + x19) - x51), ((0x3fffffe + x17) - x49), ((0x1fffffe + x15) - x47), ((0x1fffffe + x13) - x45), ((0x3fffffe + x11) - x43), ((0x1fffffe + x9) - x41), ((0x1fffffe + x7) - x39), ((0x3ffffd6 + x5) - x37)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e413m21_17limbs/freeze.c b/src/Specific/solinas32_2e413m21_17limbs/freeze.c
index 2b78a5f33..5458feafa 100644
--- a/src/Specific/solinas32_2e413m21_17limbs/freeze.c
+++ b/src/Specific/solinas32_2e413m21_17limbs/freeze.c
@@ -16,7 +16,7 @@ static void freeze(uint32_t out[17], const uint32_t in1[17]) {
{ const uint32_t x6 = in1[2];
{ const uint32_t x4 = in1[1];
{ const uint32_t x2 = in1[0];
- { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 33554411);
+ { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x1ffffeb);
{ uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x4, 0xffffff);
{ uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x6, 0xffffff);
{ uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x8, 0x1ffffff);
@@ -34,7 +34,7 @@ static void freeze(uint32_t out[17], const uint32_t in1[17]) {
{ uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x32, 0xffffff);
{ uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x31, 0xffffff);
{ uint32_t x84 = cmovznz32(x83, 0x0, 0xffffffff);
- { uint32_t x85 = (x84 & Const 33554411);
+ { uint32_t x85 = (x84 & 0x1ffffeb);
{ uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x34, Return x85);
{ uint32_t x89 = (x84 & 0xffffff);
{ uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x37, Return x89);
diff --git a/src/Specific/solinas32_2e413m21_17limbs/freezeDisplay.log b/src/Specific/solinas32_2e413m21_17limbs/freezeDisplay.log
index aed06efd5..0c486296d 100644
--- a/src/Specific/solinas32_2e413m21_17limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e413m21_17limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x31, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 33554411);
+ uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x1ffffeb);
uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x4, 0xffffff);
uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x6, 0xffffff);
uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x8, 0x1ffffff);
@@ -20,7 +20,7 @@ Interp-η
uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x32, 0xffffff);
uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x31, 0xffffff);
uint32_t x84 = cmovznz32(x83, 0x0, 0xffffffff);
- uint32_t x85 = (x84 & Const 33554411);
+ uint32_t x85 = (x84 & 0x1ffffeb);
uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x34, Return x85);
uint32_t x89 = (x84 & 0xffffff);
uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x37, Return x89);
diff --git a/src/Specific/solinas32_2e414m17_17limbs/fesquare.c b/src/Specific/solinas32_2e414m17_17limbs/fesquare.c
new file mode 100644
index 000000000..2f910b321
--- /dev/null
+++ b/src/Specific/solinas32_2e414m17_17limbs/fesquare.c
@@ -0,0 +1,110 @@
+static void fesquare(uint32_t out[17], const uint32_t in1[17]) {
+ { const uint32_t x31 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint64_t x33 = (((uint64_t)x2 * x31) + ((0x2 * ((uint64_t)x4 * x32)) + (((uint64_t)x6 * x30) + ((0x2 * ((uint64_t)x8 * x28)) + ((0x2 * ((uint64_t)x10 * x26)) + (((uint64_t)x12 * x24) + ((0x2 * ((uint64_t)x14 * x22)) + ((0x2 * ((uint64_t)x16 * x20)) + (((uint64_t)x18 * x18) + ((0x2 * ((uint64_t)x20 * x16)) + ((0x2 * ((uint64_t)x22 * x14)) + (((uint64_t)x24 * x12) + ((0x2 * ((uint64_t)x26 * x10)) + ((0x2 * ((uint64_t)x28 * x8)) + (((uint64_t)x30 * x6) + ((0x2 * ((uint64_t)x32 * x4)) + ((uint64_t)x31 * x2)))))))))))))))));
+ { uint64_t x34 = ((((uint64_t)x2 * x32) + (((uint64_t)x4 * x30) + (((uint64_t)x6 * x28) + ((0x2 * ((uint64_t)x8 * x26)) + (((uint64_t)x10 * x24) + (((uint64_t)x12 * x22) + ((0x2 * ((uint64_t)x14 * x20)) + (((uint64_t)x16 * x18) + (((uint64_t)x18 * x16) + ((0x2 * ((uint64_t)x20 * x14)) + (((uint64_t)x22 * x12) + (((uint64_t)x24 * x10) + ((0x2 * ((uint64_t)x26 * x8)) + (((uint64_t)x28 * x6) + (((uint64_t)x30 * x4) + ((uint64_t)x32 * x2)))))))))))))))) + (0x11 * ((uint64_t)x31 * x31)));
+ { uint64_t x35 = ((((uint64_t)x2 * x30) + ((0x2 * ((uint64_t)x4 * x28)) + ((0x2 * ((uint64_t)x6 * x26)) + ((0x2 * ((uint64_t)x8 * x24)) + ((0x2 * ((uint64_t)x10 * x22)) + ((0x2 * ((uint64_t)x12 * x20)) + ((0x2 * ((uint64_t)x14 * x18)) + ((0x2 * ((uint64_t)x16 * x16)) + ((0x2 * ((uint64_t)x18 * x14)) + ((0x2 * ((uint64_t)x20 * x12)) + ((0x2 * ((uint64_t)x22 * x10)) + ((0x2 * ((uint64_t)x24 * x8)) + ((0x2 * ((uint64_t)x26 * x6)) + ((0x2 * ((uint64_t)x28 * x4)) + ((uint64_t)x30 * x2))))))))))))))) + (0x11 * ((0x2 * ((uint64_t)x32 * x31)) + (0x2 * ((uint64_t)x31 * x32)))));
+ { uint64_t x36 = ((((uint64_t)x2 * x28) + ((0x2 * ((uint64_t)x4 * x26)) + (((uint64_t)x6 * x24) + ((0x2 * ((uint64_t)x8 * x22)) + ((0x2 * ((uint64_t)x10 * x20)) + (((uint64_t)x12 * x18) + ((0x2 * ((uint64_t)x14 * x16)) + ((0x2 * ((uint64_t)x16 * x14)) + (((uint64_t)x18 * x12) + ((0x2 * ((uint64_t)x20 * x10)) + ((0x2 * ((uint64_t)x22 * x8)) + (((uint64_t)x24 * x6) + ((0x2 * ((uint64_t)x26 * x4)) + ((uint64_t)x28 * x2)))))))))))))) + (0x11 * (((uint64_t)x30 * x31) + ((0x2 * ((uint64_t)x32 * x32)) + ((uint64_t)x31 * x30)))));
+ { uint64_t x37 = ((((uint64_t)x2 * x26) + (((uint64_t)x4 * x24) + (((uint64_t)x6 * x22) + ((0x2 * ((uint64_t)x8 * x20)) + (((uint64_t)x10 * x18) + (((uint64_t)x12 * x16) + ((0x2 * ((uint64_t)x14 * x14)) + (((uint64_t)x16 * x12) + (((uint64_t)x18 * x10) + ((0x2 * ((uint64_t)x20 * x8)) + (((uint64_t)x22 * x6) + (((uint64_t)x24 * x4) + ((uint64_t)x26 * x2))))))))))))) + (0x11 * (((uint64_t)x28 * x31) + (((uint64_t)x30 * x32) + (((uint64_t)x32 * x30) + ((uint64_t)x31 * x28))))));
+ { uint64_t x38 = ((((uint64_t)x2 * x24) + ((0x2 * ((uint64_t)x4 * x22)) + ((0x2 * ((uint64_t)x6 * x20)) + ((0x2 * ((uint64_t)x8 * x18)) + ((0x2 * ((uint64_t)x10 * x16)) + ((0x2 * ((uint64_t)x12 * x14)) + ((0x2 * ((uint64_t)x14 * x12)) + ((0x2 * ((uint64_t)x16 * x10)) + ((0x2 * ((uint64_t)x18 * x8)) + ((0x2 * ((uint64_t)x20 * x6)) + ((0x2 * ((uint64_t)x22 * x4)) + ((uint64_t)x24 * x2)))))))))))) + (0x11 * ((0x2 * ((uint64_t)x26 * x31)) + ((0x2 * ((uint64_t)x28 * x32)) + (((uint64_t)x30 * x30) + ((0x2 * ((uint64_t)x32 * x28)) + (0x2 * ((uint64_t)x31 * x26))))))));
+ { uint64_t x39 = ((((uint64_t)x2 * x22) + ((0x2 * ((uint64_t)x4 * x20)) + (((uint64_t)x6 * x18) + ((0x2 * ((uint64_t)x8 * x16)) + ((0x2 * ((uint64_t)x10 * x14)) + (((uint64_t)x12 * x12) + ((0x2 * ((uint64_t)x14 * x10)) + ((0x2 * ((uint64_t)x16 * x8)) + (((uint64_t)x18 * x6) + ((0x2 * ((uint64_t)x20 * x4)) + ((uint64_t)x22 * x2))))))))))) + (0x11 * (((uint64_t)x24 * x31) + ((0x2 * ((uint64_t)x26 * x32)) + (((uint64_t)x28 * x30) + (((uint64_t)x30 * x28) + ((0x2 * ((uint64_t)x32 * x26)) + ((uint64_t)x31 * x24))))))));
+ { uint64_t x40 = ((((uint64_t)x2 * x20) + (((uint64_t)x4 * x18) + (((uint64_t)x6 * x16) + ((0x2 * ((uint64_t)x8 * x14)) + (((uint64_t)x10 * x12) + (((uint64_t)x12 * x10) + ((0x2 * ((uint64_t)x14 * x8)) + (((uint64_t)x16 * x6) + (((uint64_t)x18 * x4) + ((uint64_t)x20 * x2)))))))))) + (0x11 * (((uint64_t)x22 * x31) + (((uint64_t)x24 * x32) + (((uint64_t)x26 * x30) + (((uint64_t)x28 * x28) + (((uint64_t)x30 * x26) + (((uint64_t)x32 * x24) + ((uint64_t)x31 * x22)))))))));
+ { uint64_t x41 = ((((uint64_t)x2 * x18) + ((0x2 * ((uint64_t)x4 * x16)) + ((0x2 * ((uint64_t)x6 * x14)) + ((0x2 * ((uint64_t)x8 * x12)) + ((0x2 * ((uint64_t)x10 * x10)) + ((0x2 * ((uint64_t)x12 * x8)) + ((0x2 * ((uint64_t)x14 * x6)) + ((0x2 * ((uint64_t)x16 * x4)) + ((uint64_t)x18 * x2))))))))) + (0x11 * ((0x2 * ((uint64_t)x20 * x31)) + ((0x2 * ((uint64_t)x22 * x32)) + (((uint64_t)x24 * x30) + ((0x2 * ((uint64_t)x26 * x28)) + ((0x2 * ((uint64_t)x28 * x26)) + (((uint64_t)x30 * x24) + ((0x2 * ((uint64_t)x32 * x22)) + (0x2 * ((uint64_t)x31 * x20)))))))))));
+ { uint64_t x42 = ((((uint64_t)x2 * x16) + ((0x2 * ((uint64_t)x4 * x14)) + (((uint64_t)x6 * x12) + ((0x2 * ((uint64_t)x8 * x10)) + ((0x2 * ((uint64_t)x10 * x8)) + (((uint64_t)x12 * x6) + ((0x2 * ((uint64_t)x14 * x4)) + ((uint64_t)x16 * x2)))))))) + (0x11 * (((uint64_t)x18 * x31) + ((0x2 * ((uint64_t)x20 * x32)) + (((uint64_t)x22 * x30) + (((uint64_t)x24 * x28) + ((0x2 * ((uint64_t)x26 * x26)) + (((uint64_t)x28 * x24) + (((uint64_t)x30 * x22) + ((0x2 * ((uint64_t)x32 * x20)) + ((uint64_t)x31 * x18)))))))))));
+ { uint64_t x43 = ((((uint64_t)x2 * x14) + (((uint64_t)x4 * x12) + (((uint64_t)x6 * x10) + ((0x2 * ((uint64_t)x8 * x8)) + (((uint64_t)x10 * x6) + (((uint64_t)x12 * x4) + ((uint64_t)x14 * x2))))))) + (0x11 * (((uint64_t)x16 * x31) + (((uint64_t)x18 * x32) + (((uint64_t)x20 * x30) + (((uint64_t)x22 * x28) + (((uint64_t)x24 * x26) + (((uint64_t)x26 * x24) + (((uint64_t)x28 * x22) + (((uint64_t)x30 * x20) + (((uint64_t)x32 * x18) + ((uint64_t)x31 * x16))))))))))));
+ { uint64_t x44 = ((((uint64_t)x2 * x12) + ((0x2 * ((uint64_t)x4 * x10)) + ((0x2 * ((uint64_t)x6 * x8)) + ((0x2 * ((uint64_t)x8 * x6)) + ((0x2 * ((uint64_t)x10 * x4)) + ((uint64_t)x12 * x2)))))) + (0x11 * ((0x2 * ((uint64_t)x14 * x31)) + ((0x2 * ((uint64_t)x16 * x32)) + (((uint64_t)x18 * x30) + ((0x2 * ((uint64_t)x20 * x28)) + ((0x2 * ((uint64_t)x22 * x26)) + (((uint64_t)x24 * x24) + ((0x2 * ((uint64_t)x26 * x22)) + ((0x2 * ((uint64_t)x28 * x20)) + (((uint64_t)x30 * x18) + ((0x2 * ((uint64_t)x32 * x16)) + (0x2 * ((uint64_t)x31 * x14))))))))))))));
+ { uint64_t x45 = ((((uint64_t)x2 * x10) + ((0x2 * ((uint64_t)x4 * x8)) + (((uint64_t)x6 * x6) + ((0x2 * ((uint64_t)x8 * x4)) + ((uint64_t)x10 * x2))))) + (0x11 * (((uint64_t)x12 * x31) + ((0x2 * ((uint64_t)x14 * x32)) + (((uint64_t)x16 * x30) + (((uint64_t)x18 * x28) + ((0x2 * ((uint64_t)x20 * x26)) + (((uint64_t)x22 * x24) + (((uint64_t)x24 * x22) + ((0x2 * ((uint64_t)x26 * x20)) + (((uint64_t)x28 * x18) + (((uint64_t)x30 * x16) + ((0x2 * ((uint64_t)x32 * x14)) + ((uint64_t)x31 * x12))))))))))))));
+ { uint64_t x46 = ((((uint64_t)x2 * x8) + (((uint64_t)x4 * x6) + (((uint64_t)x6 * x4) + ((uint64_t)x8 * x2)))) + (0x11 * (((uint64_t)x10 * x31) + (((uint64_t)x12 * x32) + (((uint64_t)x14 * x30) + (((uint64_t)x16 * x28) + (((uint64_t)x18 * x26) + (((uint64_t)x20 * x24) + (((uint64_t)x22 * x22) + (((uint64_t)x24 * x20) + (((uint64_t)x26 * x18) + (((uint64_t)x28 * x16) + (((uint64_t)x30 * x14) + (((uint64_t)x32 * x12) + ((uint64_t)x31 * x10)))))))))))))));
+ { uint64_t x47 = ((((uint64_t)x2 * x6) + ((0x2 * ((uint64_t)x4 * x4)) + ((uint64_t)x6 * x2))) + (0x11 * ((0x2 * ((uint64_t)x8 * x31)) + ((0x2 * ((uint64_t)x10 * x32)) + (((uint64_t)x12 * x30) + ((0x2 * ((uint64_t)x14 * x28)) + ((0x2 * ((uint64_t)x16 * x26)) + (((uint64_t)x18 * x24) + ((0x2 * ((uint64_t)x20 * x22)) + ((0x2 * ((uint64_t)x22 * x20)) + (((uint64_t)x24 * x18) + ((0x2 * ((uint64_t)x26 * x16)) + ((0x2 * ((uint64_t)x28 * x14)) + (((uint64_t)x30 * x12) + ((0x2 * ((uint64_t)x32 * x10)) + (0x2 * ((uint64_t)x31 * x8)))))))))))))))));
+ { uint64_t x48 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0x11 * (((uint64_t)x6 * x31) + ((0x2 * ((uint64_t)x8 * x32)) + (((uint64_t)x10 * x30) + (((uint64_t)x12 * x28) + ((0x2 * ((uint64_t)x14 * x26)) + (((uint64_t)x16 * x24) + (((uint64_t)x18 * x22) + ((0x2 * ((uint64_t)x20 * x20)) + (((uint64_t)x22 * x18) + (((uint64_t)x24 * x16) + ((0x2 * ((uint64_t)x26 * x14)) + (((uint64_t)x28 * x12) + (((uint64_t)x30 * x10) + ((0x2 * ((uint64_t)x32 * x8)) + ((uint64_t)x31 * x6)))))))))))))))));
+ { uint64_t x49 = (((uint64_t)x2 * x2) + (0x11 * ((0x2 * ((uint64_t)x4 * x31)) + ((0x2 * ((uint64_t)x6 * x32)) + ((0x2 * ((uint64_t)x8 * x30)) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + ((0x2 * ((uint64_t)x16 * x22)) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + ((0x2 * ((uint64_t)x22 * x16)) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + ((0x2 * ((uint64_t)x30 * x8)) + ((0x2 * ((uint64_t)x32 * x6)) + (0x2 * ((uint64_t)x31 * x4)))))))))))))))))));
+ { uint64_t x50 = (x49 >> 0x19);
+ { uint32_t x51 = ((uint32_t)x49 & 0x1ffffff);
+ { uint64_t x52 = (x50 + x48);
+ { uint64_t x53 = (x52 >> 0x18);
+ { uint32_t x54 = ((uint32_t)x52 & 0xffffff);
+ { uint64_t x55 = (x53 + x47);
+ { uint64_t x56 = (x55 >> 0x19);
+ { uint32_t x57 = ((uint32_t)x55 & 0x1ffffff);
+ { uint64_t x58 = (x56 + x46);
+ { uint64_t x59 = (x58 >> 0x18);
+ { uint32_t x60 = ((uint32_t)x58 & 0xffffff);
+ { uint64_t x61 = (x59 + x45);
+ { uint64_t x62 = (x61 >> 0x18);
+ { uint32_t x63 = ((uint32_t)x61 & 0xffffff);
+ { uint64_t x64 = (x62 + x44);
+ { uint64_t x65 = (x64 >> 0x19);
+ { uint32_t x66 = ((uint32_t)x64 & 0x1ffffff);
+ { uint64_t x67 = (x65 + x43);
+ { uint64_t x68 = (x67 >> 0x18);
+ { uint32_t x69 = ((uint32_t)x67 & 0xffffff);
+ { uint64_t x70 = (x68 + x42);
+ { uint64_t x71 = (x70 >> 0x18);
+ { uint32_t x72 = ((uint32_t)x70 & 0xffffff);
+ { uint64_t x73 = (x71 + x41);
+ { uint64_t x74 = (x73 >> 0x19);
+ { uint32_t x75 = ((uint32_t)x73 & 0x1ffffff);
+ { uint64_t x76 = (x74 + x40);
+ { uint64_t x77 = (x76 >> 0x18);
+ { uint32_t x78 = ((uint32_t)x76 & 0xffffff);
+ { uint64_t x79 = (x77 + x39);
+ { uint64_t x80 = (x79 >> 0x18);
+ { uint32_t x81 = ((uint32_t)x79 & 0xffffff);
+ { uint64_t x82 = (x80 + x38);
+ { uint64_t x83 = (x82 >> 0x19);
+ { uint32_t x84 = ((uint32_t)x82 & 0x1ffffff);
+ { uint64_t x85 = (x83 + x37);
+ { uint64_t x86 = (x85 >> 0x18);
+ { uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ { uint64_t x88 = (x86 + x36);
+ { uint64_t x89 = (x88 >> 0x18);
+ { uint32_t x90 = ((uint32_t)x88 & 0xffffff);
+ { uint64_t x91 = (x89 + x35);
+ { uint64_t x92 = (x91 >> 0x19);
+ { uint32_t x93 = ((uint32_t)x91 & 0x1ffffff);
+ { uint64_t x94 = (x92 + x34);
+ { uint64_t x95 = (x94 >> 0x18);
+ { uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ { uint64_t x97 = (x95 + x33);
+ { uint64_t x98 = (x97 >> 0x18);
+ { uint32_t x99 = ((uint32_t)x97 & 0xffffff);
+ { uint64_t x100 = (x51 + (0x11 * x98));
+ { uint32_t x101 = (uint32_t) (x100 >> 0x19);
+ { uint32_t x102 = ((uint32_t)x100 & 0x1ffffff);
+ { uint32_t x103 = (x101 + x54);
+ { uint32_t x104 = (x103 >> 0x18);
+ { uint32_t x105 = (x103 & 0xffffff);
+ out[0] = x102;
+ out[1] = x105;
+ out[2] = (x104 + x57);
+ out[3] = x60;
+ out[4] = x63;
+ out[5] = x66;
+ out[6] = x69;
+ out[7] = x72;
+ out[8] = x75;
+ out[9] = x78;
+ out[10] = x81;
+ out[11] = x84;
+ out[12] = x87;
+ out[13] = x90;
+ out[14] = x93;
+ out[15] = x96;
+ out[16] = x99;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e414m17_17limbs/fesquareDisplay.log b/src/Specific/solinas32_2e414m17_17limbs/fesquareDisplay.log
new file mode 100644
index 000000000..6b40ab078
--- /dev/null
+++ b/src/Specific/solinas32_2e414m17_17limbs/fesquareDisplay.log
@@ -0,0 +1,80 @@
+λ x : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32,
+Interp-η
+(λ var : Syntax.base_type → Type,
+ λ '(x31, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
+ uint64_t x33 = (((uint64_t)x2 * x31) + ((0x2 * ((uint64_t)x4 * x32)) + (((uint64_t)x6 * x30) + ((0x2 * ((uint64_t)x8 * x28)) + ((0x2 * ((uint64_t)x10 * x26)) + (((uint64_t)x12 * x24) + ((0x2 * ((uint64_t)x14 * x22)) + ((0x2 * ((uint64_t)x16 * x20)) + (((uint64_t)x18 * x18) + ((0x2 * ((uint64_t)x20 * x16)) + ((0x2 * ((uint64_t)x22 * x14)) + (((uint64_t)x24 * x12) + ((0x2 * ((uint64_t)x26 * x10)) + ((0x2 * ((uint64_t)x28 * x8)) + (((uint64_t)x30 * x6) + ((0x2 * ((uint64_t)x32 * x4)) + ((uint64_t)x31 * x2)))))))))))))))));
+ uint64_t x34 = ((((uint64_t)x2 * x32) + (((uint64_t)x4 * x30) + (((uint64_t)x6 * x28) + ((0x2 * ((uint64_t)x8 * x26)) + (((uint64_t)x10 * x24) + (((uint64_t)x12 * x22) + ((0x2 * ((uint64_t)x14 * x20)) + (((uint64_t)x16 * x18) + (((uint64_t)x18 * x16) + ((0x2 * ((uint64_t)x20 * x14)) + (((uint64_t)x22 * x12) + (((uint64_t)x24 * x10) + ((0x2 * ((uint64_t)x26 * x8)) + (((uint64_t)x28 * x6) + (((uint64_t)x30 * x4) + ((uint64_t)x32 * x2)))))))))))))))) + (0x11 * ((uint64_t)x31 * x31)));
+ uint64_t x35 = ((((uint64_t)x2 * x30) + ((0x2 * ((uint64_t)x4 * x28)) + ((0x2 * ((uint64_t)x6 * x26)) + ((0x2 * ((uint64_t)x8 * x24)) + ((0x2 * ((uint64_t)x10 * x22)) + ((0x2 * ((uint64_t)x12 * x20)) + ((0x2 * ((uint64_t)x14 * x18)) + ((0x2 * ((uint64_t)x16 * x16)) + ((0x2 * ((uint64_t)x18 * x14)) + ((0x2 * ((uint64_t)x20 * x12)) + ((0x2 * ((uint64_t)x22 * x10)) + ((0x2 * ((uint64_t)x24 * x8)) + ((0x2 * ((uint64_t)x26 * x6)) + ((0x2 * ((uint64_t)x28 * x4)) + ((uint64_t)x30 * x2))))))))))))))) + (0x11 * ((0x2 * ((uint64_t)x32 * x31)) + (0x2 * ((uint64_t)x31 * x32)))));
+ uint64_t x36 = ((((uint64_t)x2 * x28) + ((0x2 * ((uint64_t)x4 * x26)) + (((uint64_t)x6 * x24) + ((0x2 * ((uint64_t)x8 * x22)) + ((0x2 * ((uint64_t)x10 * x20)) + (((uint64_t)x12 * x18) + ((0x2 * ((uint64_t)x14 * x16)) + ((0x2 * ((uint64_t)x16 * x14)) + (((uint64_t)x18 * x12) + ((0x2 * ((uint64_t)x20 * x10)) + ((0x2 * ((uint64_t)x22 * x8)) + (((uint64_t)x24 * x6) + ((0x2 * ((uint64_t)x26 * x4)) + ((uint64_t)x28 * x2)))))))))))))) + (0x11 * (((uint64_t)x30 * x31) + ((0x2 * ((uint64_t)x32 * x32)) + ((uint64_t)x31 * x30)))));
+ uint64_t x37 = ((((uint64_t)x2 * x26) + (((uint64_t)x4 * x24) + (((uint64_t)x6 * x22) + ((0x2 * ((uint64_t)x8 * x20)) + (((uint64_t)x10 * x18) + (((uint64_t)x12 * x16) + ((0x2 * ((uint64_t)x14 * x14)) + (((uint64_t)x16 * x12) + (((uint64_t)x18 * x10) + ((0x2 * ((uint64_t)x20 * x8)) + (((uint64_t)x22 * x6) + (((uint64_t)x24 * x4) + ((uint64_t)x26 * x2))))))))))))) + (0x11 * (((uint64_t)x28 * x31) + (((uint64_t)x30 * x32) + (((uint64_t)x32 * x30) + ((uint64_t)x31 * x28))))));
+ uint64_t x38 = ((((uint64_t)x2 * x24) + ((0x2 * ((uint64_t)x4 * x22)) + ((0x2 * ((uint64_t)x6 * x20)) + ((0x2 * ((uint64_t)x8 * x18)) + ((0x2 * ((uint64_t)x10 * x16)) + ((0x2 * ((uint64_t)x12 * x14)) + ((0x2 * ((uint64_t)x14 * x12)) + ((0x2 * ((uint64_t)x16 * x10)) + ((0x2 * ((uint64_t)x18 * x8)) + ((0x2 * ((uint64_t)x20 * x6)) + ((0x2 * ((uint64_t)x22 * x4)) + ((uint64_t)x24 * x2)))))))))))) + (0x11 * ((0x2 * ((uint64_t)x26 * x31)) + ((0x2 * ((uint64_t)x28 * x32)) + (((uint64_t)x30 * x30) + ((0x2 * ((uint64_t)x32 * x28)) + (0x2 * ((uint64_t)x31 * x26))))))));
+ uint64_t x39 = ((((uint64_t)x2 * x22) + ((0x2 * ((uint64_t)x4 * x20)) + (((uint64_t)x6 * x18) + ((0x2 * ((uint64_t)x8 * x16)) + ((0x2 * ((uint64_t)x10 * x14)) + (((uint64_t)x12 * x12) + ((0x2 * ((uint64_t)x14 * x10)) + ((0x2 * ((uint64_t)x16 * x8)) + (((uint64_t)x18 * x6) + ((0x2 * ((uint64_t)x20 * x4)) + ((uint64_t)x22 * x2))))))))))) + (0x11 * (((uint64_t)x24 * x31) + ((0x2 * ((uint64_t)x26 * x32)) + (((uint64_t)x28 * x30) + (((uint64_t)x30 * x28) + ((0x2 * ((uint64_t)x32 * x26)) + ((uint64_t)x31 * x24))))))));
+ uint64_t x40 = ((((uint64_t)x2 * x20) + (((uint64_t)x4 * x18) + (((uint64_t)x6 * x16) + ((0x2 * ((uint64_t)x8 * x14)) + (((uint64_t)x10 * x12) + (((uint64_t)x12 * x10) + ((0x2 * ((uint64_t)x14 * x8)) + (((uint64_t)x16 * x6) + (((uint64_t)x18 * x4) + ((uint64_t)x20 * x2)))))))))) + (0x11 * (((uint64_t)x22 * x31) + (((uint64_t)x24 * x32) + (((uint64_t)x26 * x30) + (((uint64_t)x28 * x28) + (((uint64_t)x30 * x26) + (((uint64_t)x32 * x24) + ((uint64_t)x31 * x22)))))))));
+ uint64_t x41 = ((((uint64_t)x2 * x18) + ((0x2 * ((uint64_t)x4 * x16)) + ((0x2 * ((uint64_t)x6 * x14)) + ((0x2 * ((uint64_t)x8 * x12)) + ((0x2 * ((uint64_t)x10 * x10)) + ((0x2 * ((uint64_t)x12 * x8)) + ((0x2 * ((uint64_t)x14 * x6)) + ((0x2 * ((uint64_t)x16 * x4)) + ((uint64_t)x18 * x2))))))))) + (0x11 * ((0x2 * ((uint64_t)x20 * x31)) + ((0x2 * ((uint64_t)x22 * x32)) + (((uint64_t)x24 * x30) + ((0x2 * ((uint64_t)x26 * x28)) + ((0x2 * ((uint64_t)x28 * x26)) + (((uint64_t)x30 * x24) + ((0x2 * ((uint64_t)x32 * x22)) + (0x2 * ((uint64_t)x31 * x20)))))))))));
+ uint64_t x42 = ((((uint64_t)x2 * x16) + ((0x2 * ((uint64_t)x4 * x14)) + (((uint64_t)x6 * x12) + ((0x2 * ((uint64_t)x8 * x10)) + ((0x2 * ((uint64_t)x10 * x8)) + (((uint64_t)x12 * x6) + ((0x2 * ((uint64_t)x14 * x4)) + ((uint64_t)x16 * x2)))))))) + (0x11 * (((uint64_t)x18 * x31) + ((0x2 * ((uint64_t)x20 * x32)) + (((uint64_t)x22 * x30) + (((uint64_t)x24 * x28) + ((0x2 * ((uint64_t)x26 * x26)) + (((uint64_t)x28 * x24) + (((uint64_t)x30 * x22) + ((0x2 * ((uint64_t)x32 * x20)) + ((uint64_t)x31 * x18)))))))))));
+ uint64_t x43 = ((((uint64_t)x2 * x14) + (((uint64_t)x4 * x12) + (((uint64_t)x6 * x10) + ((0x2 * ((uint64_t)x8 * x8)) + (((uint64_t)x10 * x6) + (((uint64_t)x12 * x4) + ((uint64_t)x14 * x2))))))) + (0x11 * (((uint64_t)x16 * x31) + (((uint64_t)x18 * x32) + (((uint64_t)x20 * x30) + (((uint64_t)x22 * x28) + (((uint64_t)x24 * x26) + (((uint64_t)x26 * x24) + (((uint64_t)x28 * x22) + (((uint64_t)x30 * x20) + (((uint64_t)x32 * x18) + ((uint64_t)x31 * x16))))))))))));
+ uint64_t x44 = ((((uint64_t)x2 * x12) + ((0x2 * ((uint64_t)x4 * x10)) + ((0x2 * ((uint64_t)x6 * x8)) + ((0x2 * ((uint64_t)x8 * x6)) + ((0x2 * ((uint64_t)x10 * x4)) + ((uint64_t)x12 * x2)))))) + (0x11 * ((0x2 * ((uint64_t)x14 * x31)) + ((0x2 * ((uint64_t)x16 * x32)) + (((uint64_t)x18 * x30) + ((0x2 * ((uint64_t)x20 * x28)) + ((0x2 * ((uint64_t)x22 * x26)) + (((uint64_t)x24 * x24) + ((0x2 * ((uint64_t)x26 * x22)) + ((0x2 * ((uint64_t)x28 * x20)) + (((uint64_t)x30 * x18) + ((0x2 * ((uint64_t)x32 * x16)) + (0x2 * ((uint64_t)x31 * x14))))))))))))));
+ uint64_t x45 = ((((uint64_t)x2 * x10) + ((0x2 * ((uint64_t)x4 * x8)) + (((uint64_t)x6 * x6) + ((0x2 * ((uint64_t)x8 * x4)) + ((uint64_t)x10 * x2))))) + (0x11 * (((uint64_t)x12 * x31) + ((0x2 * ((uint64_t)x14 * x32)) + (((uint64_t)x16 * x30) + (((uint64_t)x18 * x28) + ((0x2 * ((uint64_t)x20 * x26)) + (((uint64_t)x22 * x24) + (((uint64_t)x24 * x22) + ((0x2 * ((uint64_t)x26 * x20)) + (((uint64_t)x28 * x18) + (((uint64_t)x30 * x16) + ((0x2 * ((uint64_t)x32 * x14)) + ((uint64_t)x31 * x12))))))))))))));
+ uint64_t x46 = ((((uint64_t)x2 * x8) + (((uint64_t)x4 * x6) + (((uint64_t)x6 * x4) + ((uint64_t)x8 * x2)))) + (0x11 * (((uint64_t)x10 * x31) + (((uint64_t)x12 * x32) + (((uint64_t)x14 * x30) + (((uint64_t)x16 * x28) + (((uint64_t)x18 * x26) + (((uint64_t)x20 * x24) + (((uint64_t)x22 * x22) + (((uint64_t)x24 * x20) + (((uint64_t)x26 * x18) + (((uint64_t)x28 * x16) + (((uint64_t)x30 * x14) + (((uint64_t)x32 * x12) + ((uint64_t)x31 * x10)))))))))))))));
+ uint64_t x47 = ((((uint64_t)x2 * x6) + ((0x2 * ((uint64_t)x4 * x4)) + ((uint64_t)x6 * x2))) + (0x11 * ((0x2 * ((uint64_t)x8 * x31)) + ((0x2 * ((uint64_t)x10 * x32)) + (((uint64_t)x12 * x30) + ((0x2 * ((uint64_t)x14 * x28)) + ((0x2 * ((uint64_t)x16 * x26)) + (((uint64_t)x18 * x24) + ((0x2 * ((uint64_t)x20 * x22)) + ((0x2 * ((uint64_t)x22 * x20)) + (((uint64_t)x24 * x18) + ((0x2 * ((uint64_t)x26 * x16)) + ((0x2 * ((uint64_t)x28 * x14)) + (((uint64_t)x30 * x12) + ((0x2 * ((uint64_t)x32 * x10)) + (0x2 * ((uint64_t)x31 * x8)))))))))))))))));
+ uint64_t x48 = ((((uint64_t)x2 * x4) + ((uint64_t)x4 * x2)) + (0x11 * (((uint64_t)x6 * x31) + ((0x2 * ((uint64_t)x8 * x32)) + (((uint64_t)x10 * x30) + (((uint64_t)x12 * x28) + ((0x2 * ((uint64_t)x14 * x26)) + (((uint64_t)x16 * x24) + (((uint64_t)x18 * x22) + ((0x2 * ((uint64_t)x20 * x20)) + (((uint64_t)x22 * x18) + (((uint64_t)x24 * x16) + ((0x2 * ((uint64_t)x26 * x14)) + (((uint64_t)x28 * x12) + (((uint64_t)x30 * x10) + ((0x2 * ((uint64_t)x32 * x8)) + ((uint64_t)x31 * x6)))))))))))))))));
+ uint64_t x49 = (((uint64_t)x2 * x2) + (0x11 * ((0x2 * ((uint64_t)x4 * x31)) + ((0x2 * ((uint64_t)x6 * x32)) + ((0x2 * ((uint64_t)x8 * x30)) + ((0x2 * ((uint64_t)x10 * x28)) + ((0x2 * ((uint64_t)x12 * x26)) + ((0x2 * ((uint64_t)x14 * x24)) + ((0x2 * ((uint64_t)x16 * x22)) + ((0x2 * ((uint64_t)x18 * x20)) + ((0x2 * ((uint64_t)x20 * x18)) + ((0x2 * ((uint64_t)x22 * x16)) + ((0x2 * ((uint64_t)x24 * x14)) + ((0x2 * ((uint64_t)x26 * x12)) + ((0x2 * ((uint64_t)x28 * x10)) + ((0x2 * ((uint64_t)x30 * x8)) + ((0x2 * ((uint64_t)x32 * x6)) + (0x2 * ((uint64_t)x31 * x4)))))))))))))))))));
+ uint64_t x50 = (x49 >> 0x19);
+ uint32_t x51 = ((uint32_t)x49 & 0x1ffffff);
+ uint64_t x52 = (x50 + x48);
+ uint64_t x53 = (x52 >> 0x18);
+ uint32_t x54 = ((uint32_t)x52 & 0xffffff);
+ uint64_t x55 = (x53 + x47);
+ uint64_t x56 = (x55 >> 0x19);
+ uint32_t x57 = ((uint32_t)x55 & 0x1ffffff);
+ uint64_t x58 = (x56 + x46);
+ uint64_t x59 = (x58 >> 0x18);
+ uint32_t x60 = ((uint32_t)x58 & 0xffffff);
+ uint64_t x61 = (x59 + x45);
+ uint64_t x62 = (x61 >> 0x18);
+ uint32_t x63 = ((uint32_t)x61 & 0xffffff);
+ uint64_t x64 = (x62 + x44);
+ uint64_t x65 = (x64 >> 0x19);
+ uint32_t x66 = ((uint32_t)x64 & 0x1ffffff);
+ uint64_t x67 = (x65 + x43);
+ uint64_t x68 = (x67 >> 0x18);
+ uint32_t x69 = ((uint32_t)x67 & 0xffffff);
+ uint64_t x70 = (x68 + x42);
+ uint64_t x71 = (x70 >> 0x18);
+ uint32_t x72 = ((uint32_t)x70 & 0xffffff);
+ uint64_t x73 = (x71 + x41);
+ uint64_t x74 = (x73 >> 0x19);
+ uint32_t x75 = ((uint32_t)x73 & 0x1ffffff);
+ uint64_t x76 = (x74 + x40);
+ uint64_t x77 = (x76 >> 0x18);
+ uint32_t x78 = ((uint32_t)x76 & 0xffffff);
+ uint64_t x79 = (x77 + x39);
+ uint64_t x80 = (x79 >> 0x18);
+ uint32_t x81 = ((uint32_t)x79 & 0xffffff);
+ uint64_t x82 = (x80 + x38);
+ uint64_t x83 = (x82 >> 0x19);
+ uint32_t x84 = ((uint32_t)x82 & 0x1ffffff);
+ uint64_t x85 = (x83 + x37);
+ uint64_t x86 = (x85 >> 0x18);
+ uint32_t x87 = ((uint32_t)x85 & 0xffffff);
+ uint64_t x88 = (x86 + x36);
+ uint64_t x89 = (x88 >> 0x18);
+ uint32_t x90 = ((uint32_t)x88 & 0xffffff);
+ uint64_t x91 = (x89 + x35);
+ uint64_t x92 = (x91 >> 0x19);
+ uint32_t x93 = ((uint32_t)x91 & 0x1ffffff);
+ uint64_t x94 = (x92 + x34);
+ uint64_t x95 = (x94 >> 0x18);
+ uint32_t x96 = ((uint32_t)x94 & 0xffffff);
+ uint64_t x97 = (x95 + x33);
+ uint64_t x98 = (x97 >> 0x18);
+ uint32_t x99 = ((uint32_t)x97 & 0xffffff);
+ uint64_t x100 = (x51 + (0x11 * x98));
+ uint32_t x101 = (uint32_t) (x100 >> 0x19);
+ uint32_t x102 = ((uint32_t)x100 & 0x1ffffff);
+ uint32_t x103 = (x101 + x54);
+ uint32_t x104 = (x103 >> 0x18);
+ uint32_t x105 = (x103 & 0xffffff);
+ return (Return x99, Return x96, Return x93, Return x90, Return x87, Return x84, Return x81, Return x78, Return x75, Return x72, Return x69, Return x66, Return x63, Return x60, (x104 + x57), Return x105, Return x102))
+x
+ : word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e416m2e208m1_18limbs/fesub.c b/src/Specific/solinas32_2e416m2e208m1_18limbs/fesub.c
index 06c838baf..032a19381 100644
--- a/src/Specific/solinas32_2e416m2e208m1_18limbs/fesub.c
+++ b/src/Specific/solinas32_2e416m2e208m1_18limbs/fesub.c
@@ -44,7 +44,7 @@ static void fesub(uint32_t out[18], const uint32_t in1[18], const uint32_t in2[1
out[6] = ((0xfffffe + x17) - x51);
out[7] = ((0xfffffe + x19) - x53);
out[8] = ((0xfffffe + x21) - x55);
- out[9] = ((Const 33554428 + x23) - x57);
+ out[9] = ((0x1fffffc + x23) - x57);
out[10] = ((0xfffffe + x25) - x59);
out[11] = ((0xfffffe + x27) - x61);
out[12] = ((0xfffffe + x29) - x63);
diff --git a/src/Specific/solinas32_2e416m2e208m1_18limbs/fesubDisplay.log b/src/Specific/solinas32_2e416m2e208m1_18limbs/fesubDisplay.log
index 53315a232..9374ad1ca 100644
--- a/src/Specific/solinas32_2e416m2e208m1_18limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e416m2e208m1_18limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x36, x37, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x70, x71, x69, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39))%core,
- (((0xfffffe + x36) - x70), ((0xfffffe + x37) - x71), ((0xfffffe + x35) - x69), ((0xfffffe + x33) - x67), ((0xfffffe + x31) - x65), ((0xfffffe + x29) - x63), ((0xfffffe + x27) - x61), ((0xfffffe + x25) - x59), ((Const 33554428 + x23) - x57), ((0xfffffe + x21) - x55), ((0xfffffe + x19) - x53), ((0xfffffe + x17) - x51), ((0xfffffe + x15) - x49), ((0xfffffe + x13) - x47), ((0xfffffe + x11) - x45), ((0xfffffe + x9) - x43), ((0xfffffe + x7) - x41), ((0x1fffffe + x5) - x39)))
+ (((0xfffffe + x36) - x70), ((0xfffffe + x37) - x71), ((0xfffffe + x35) - x69), ((0xfffffe + x33) - x67), ((0xfffffe + x31) - x65), ((0xfffffe + x29) - x63), ((0xfffffe + x27) - x61), ((0xfffffe + x25) - x59), ((0x1fffffc + x23) - x57), ((0xfffffe + x21) - x55), ((0xfffffe + x19) - x53), ((0xfffffe + x17) - x51), ((0xfffffe + x15) - x49), ((0xfffffe + x13) - x47), ((0xfffffe + x11) - x45), ((0xfffffe + x9) - x43), ((0xfffffe + x7) - x41), ((0x1fffffe + x5) - x39)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e444m17_17limbs/fesub.c b/src/Specific/solinas32_2e444m17_17limbs/fesub.c
index f325955d5..fc24efe86 100644
--- a/src/Specific/solinas32_2e444m17_17limbs/fesub.c
+++ b/src/Specific/solinas32_2e444m17_17limbs/fesub.c
@@ -33,7 +33,7 @@ static void fesub(uint32_t out[17], const uint32_t in1[17], const uint32_t in2[1
{ const uint32_t x41 = in2[2];
{ const uint32_t x39 = in2[1];
{ const uint32_t x37 = in2[0];
- out[0] = ((Const 268435422 + x5) - x37);
+ out[0] = ((0xfffffde + x5) - x37);
out[1] = ((0x7fffffe + x7) - x39);
out[2] = ((0x7fffffe + x9) - x41);
out[3] = ((0x7fffffe + x11) - x43);
diff --git a/src/Specific/solinas32_2e444m17_17limbs/fesubDisplay.log b/src/Specific/solinas32_2e444m17_17limbs/fesubDisplay.log
index dbbddf7e8..1ccd52dd3 100644
--- a/src/Specific/solinas32_2e444m17_17limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e444m17_17limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x34, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x66, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39, x37))%core,
- (((0x7fffffe + x34) - x66), ((0x7fffffe + x35) - x67), ((0x7fffffe + x33) - x65), ((0x7fffffe + x31) - x63), ((0x7fffffe + x29) - x61), ((0x7fffffe + x27) - x59), ((0x7fffffe + x25) - x57), ((0x7fffffe + x23) - x55), ((0xffffffe + x21) - x53), ((0x7fffffe + x19) - x51), ((0x7fffffe + x17) - x49), ((0x7fffffe + x15) - x47), ((0x7fffffe + x13) - x45), ((0x7fffffe + x11) - x43), ((0x7fffffe + x9) - x41), ((0x7fffffe + x7) - x39), ((Const 268435422 + x5) - x37)))
+ (((0x7fffffe + x34) - x66), ((0x7fffffe + x35) - x67), ((0x7fffffe + x33) - x65), ((0x7fffffe + x31) - x63), ((0x7fffffe + x29) - x61), ((0x7fffffe + x27) - x59), ((0x7fffffe + x25) - x57), ((0x7fffffe + x23) - x55), ((0xffffffe + x21) - x53), ((0x7fffffe + x19) - x51), ((0x7fffffe + x17) - x49), ((0x7fffffe + x15) - x47), ((0x7fffffe + x13) - x45), ((0x7fffffe + x11) - x43), ((0x7fffffe + x9) - x41), ((0x7fffffe + x7) - x39), ((0xfffffde + x5) - x37)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e444m17_17limbs/freeze.c b/src/Specific/solinas32_2e444m17_17limbs/freeze.c
index ef92f9b50..cb0c59f8a 100644
--- a/src/Specific/solinas32_2e444m17_17limbs/freeze.c
+++ b/src/Specific/solinas32_2e444m17_17limbs/freeze.c
@@ -16,7 +16,7 @@ static void freeze(uint32_t out[17], const uint32_t in1[17]) {
{ const uint32_t x6 = in1[2];
{ const uint32_t x4 = in1[1];
{ const uint32_t x2 = in1[0];
- { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 134217711);
+ { uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x7ffffef);
{ uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x4, 0x3ffffff);
{ uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x6, 0x3ffffff);
{ uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x8, 0x3ffffff);
@@ -34,7 +34,7 @@ static void freeze(uint32_t out[17], const uint32_t in1[17]) {
{ uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x32, 0x3ffffff);
{ uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x31, 0x3ffffff);
{ uint32_t x84 = cmovznz32(x83, 0x0, 0xffffffff);
- { uint32_t x85 = (x84 & Const 134217711);
+ { uint32_t x85 = (x84 & 0x7ffffef);
{ uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x34, Return x85);
{ uint32_t x89 = (x84 & 0x3ffffff);
{ uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x37, Return x89);
diff --git a/src/Specific/solinas32_2e444m17_17limbs/freezeDisplay.log b/src/Specific/solinas32_2e444m17_17limbs/freezeDisplay.log
index 81d2a8f61..522f24f2d 100644
--- a/src/Specific/solinas32_2e444m17_17limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e444m17_17limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x31, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 134217711);
+ uint32_t x34, uint8_t x35 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x7ffffef);
uint32_t x37, uint8_t x38 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x35, Return x4, 0x3ffffff);
uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x38, Return x6, 0x3ffffff);
uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x8, 0x3ffffff);
@@ -20,7 +20,7 @@ Interp-η
uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x32, 0x3ffffff);
uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x31, 0x3ffffff);
uint32_t x84 = cmovznz32(x83, 0x0, 0xffffffff);
- uint32_t x85 = (x84 & Const 134217711);
+ uint32_t x85 = (x84 & 0x7ffffef);
uint32_t x87, uint8_t x88 = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x34, Return x85);
uint32_t x89 = (x84 & 0x3ffffff);
uint32_t x91, uint8_t x92 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x37, Return x89);
diff --git a/src/Specific/solinas32_2e448m2e224m1_18limbs/fesub.c b/src/Specific/solinas32_2e448m2e224m1_18limbs/fesub.c
index dd979f427..5991a474f 100644
--- a/src/Specific/solinas32_2e448m2e224m1_18limbs/fesub.c
+++ b/src/Specific/solinas32_2e448m2e224m1_18limbs/fesub.c
@@ -44,7 +44,7 @@ static void fesub(uint32_t out[18], const uint32_t in1[18], const uint32_t in2[1
out[6] = ((0x3fffffe + x17) - x51);
out[7] = ((0x3fffffe + x19) - x53);
out[8] = ((0x1fffffe + x21) - x55);
- out[9] = ((Const 67108860 + x23) - x57);
+ out[9] = ((0x3fffffc + x23) - x57);
out[10] = ((0x3fffffe + x25) - x59);
out[11] = ((0x3fffffe + x27) - x61);
out[12] = ((0x3fffffe + x29) - x63);
diff --git a/src/Specific/solinas32_2e448m2e224m1_18limbs/fesubDisplay.log b/src/Specific/solinas32_2e448m2e224m1_18limbs/fesubDisplay.log
index 63cdc73ef..70588da86 100644
--- a/src/Specific/solinas32_2e448m2e224m1_18limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e448m2e224m1_18limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x36, x37, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x70, x71, x69, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39))%core,
- (((0x1fffffe + x36) - x70), ((0x3fffffe + x37) - x71), ((0x3fffffe + x35) - x69), ((0x3fffffe + x33) - x67), ((0x3fffffe + x31) - x65), ((0x3fffffe + x29) - x63), ((0x3fffffe + x27) - x61), ((0x3fffffe + x25) - x59), ((Const 67108860 + x23) - x57), ((0x1fffffe + x21) - x55), ((0x3fffffe + x19) - x53), ((0x3fffffe + x17) - x51), ((0x3fffffe + x15) - x49), ((0x3fffffe + x13) - x47), ((0x3fffffe + x11) - x45), ((0x3fffffe + x9) - x43), ((0x3fffffe + x7) - x41), ((0x3fffffe + x5) - x39)))
+ (((0x1fffffe + x36) - x70), ((0x3fffffe + x37) - x71), ((0x3fffffe + x35) - x69), ((0x3fffffe + x33) - x67), ((0x3fffffe + x31) - x65), ((0x3fffffe + x29) - x63), ((0x3fffffe + x27) - x61), ((0x3fffffe + x25) - x59), ((0x3fffffc + x23) - x57), ((0x1fffffe + x21) - x55), ((0x3fffffe + x19) - x53), ((0x3fffffe + x17) - x51), ((0x3fffffe + x15) - x49), ((0x3fffffe + x13) - x47), ((0x3fffffe + x11) - x45), ((0x3fffffe + x9) - x43), ((0x3fffffe + x7) - x41), ((0x3fffffe + x5) - x39)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e450m2e225m1_18limbs/fesub.c b/src/Specific/solinas32_2e450m2e225m1_18limbs/fesub.c
index 8e7b9713c..286014641 100644
--- a/src/Specific/solinas32_2e450m2e225m1_18limbs/fesub.c
+++ b/src/Specific/solinas32_2e450m2e225m1_18limbs/fesub.c
@@ -44,7 +44,7 @@ static void fesub(uint32_t out[18], const uint32_t in1[18], const uint32_t in2[1
out[6] = ((0x3fffffe + x17) - x51);
out[7] = ((0x3fffffe + x19) - x53);
out[8] = ((0x3fffffe + x21) - x55);
- out[9] = ((Const 67108860 + x23) - x57);
+ out[9] = ((0x3fffffc + x23) - x57);
out[10] = ((0x3fffffe + x25) - x59);
out[11] = ((0x3fffffe + x27) - x61);
out[12] = ((0x3fffffe + x29) - x63);
diff --git a/src/Specific/solinas32_2e450m2e225m1_18limbs/fesubDisplay.log b/src/Specific/solinas32_2e450m2e225m1_18limbs/fesubDisplay.log
index aedda4253..888ae180b 100644
--- a/src/Specific/solinas32_2e450m2e225m1_18limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e450m2e225m1_18limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x36, x37, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x70, x71, x69, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41, x39))%core,
- (((0x3fffffe + x36) - x70), ((0x3fffffe + x37) - x71), ((0x3fffffe + x35) - x69), ((0x3fffffe + x33) - x67), ((0x3fffffe + x31) - x65), ((0x3fffffe + x29) - x63), ((0x3fffffe + x27) - x61), ((0x3fffffe + x25) - x59), ((Const 67108860 + x23) - x57), ((0x3fffffe + x21) - x55), ((0x3fffffe + x19) - x53), ((0x3fffffe + x17) - x51), ((0x3fffffe + x15) - x49), ((0x3fffffe + x13) - x47), ((0x3fffffe + x11) - x45), ((0x3fffffe + x9) - x43), ((0x3fffffe + x7) - x41), ((0x3fffffe + x5) - x39)))
+ (((0x3fffffe + x36) - x70), ((0x3fffffe + x37) - x71), ((0x3fffffe + x35) - x69), ((0x3fffffe + x33) - x67), ((0x3fffffe + x31) - x65), ((0x3fffffe + x29) - x63), ((0x3fffffe + x27) - x61), ((0x3fffffe + x25) - x59), ((0x3fffffc + x23) - x57), ((0x3fffffe + x21) - x55), ((0x3fffffe + x19) - x53), ((0x3fffffe + x17) - x51), ((0x3fffffe + x15) - x49), ((0x3fffffe + x13) - x47), ((0x3fffffe + x11) - x45), ((0x3fffffe + x9) - x43), ((0x3fffffe + x7) - x41), ((0x3fffffe + x5) - x39)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e450m2e225m1_20limbs/feadd.c b/src/Specific/solinas32_2e450m2e225m1_20limbs/feadd.c
new file mode 100644
index 000000000..28ee6f665
--- /dev/null
+++ b/src/Specific/solinas32_2e450m2e225m1_20limbs/feadd.c
@@ -0,0 +1,63 @@
+static void feadd(uint32_t out[20], const uint32_t in1[20], const uint32_t in2[20]) {
+ { const uint32_t x40 = in1[19];
+ { const uint32_t x41 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x78 = in2[19];
+ { const uint32_t x79 = in2[18];
+ { const uint32_t x77 = in2[17];
+ { const uint32_t x75 = in2[16];
+ { const uint32_t x73 = in2[15];
+ { const uint32_t x71 = in2[14];
+ { const uint32_t x69 = in2[13];
+ { const uint32_t x67 = in2[12];
+ { const uint32_t x65 = in2[11];
+ { const uint32_t x63 = in2[10];
+ { const uint32_t x61 = in2[9];
+ { const uint32_t x59 = in2[8];
+ { const uint32_t x57 = in2[7];
+ { const uint32_t x55 = in2[6];
+ { const uint32_t x53 = in2[5];
+ { const uint32_t x51 = in2[4];
+ { const uint32_t x49 = in2[3];
+ { const uint32_t x47 = in2[2];
+ { const uint32_t x45 = in2[1];
+ { const uint32_t x43 = in2[0];
+ out[0] = (x5 + x43);
+ out[1] = (x7 + x45);
+ out[2] = (x9 + x47);
+ out[3] = (x11 + x49);
+ out[4] = (x13 + x51);
+ out[5] = (x15 + x53);
+ out[6] = (x17 + x55);
+ out[7] = (x19 + x57);
+ out[8] = (x21 + x59);
+ out[9] = (x23 + x61);
+ out[10] = (x25 + x63);
+ out[11] = (x27 + x65);
+ out[12] = (x29 + x67);
+ out[13] = (x31 + x69);
+ out[14] = (x33 + x71);
+ out[15] = (x35 + x73);
+ out[16] = (x37 + x75);
+ out[17] = (x39 + x77);
+ out[18] = (x41 + x79);
+ out[19] = (x40 + x78);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e450m2e225m1_20limbs/fesub.c b/src/Specific/solinas32_2e450m2e225m1_20limbs/fesub.c
new file mode 100644
index 000000000..ed639ad94
--- /dev/null
+++ b/src/Specific/solinas32_2e450m2e225m1_20limbs/fesub.c
@@ -0,0 +1,63 @@
+static void fesub(uint32_t out[20], const uint32_t in1[20], const uint32_t in2[20]) {
+ { const uint32_t x40 = in1[19];
+ { const uint32_t x41 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x78 = in2[19];
+ { const uint32_t x79 = in2[18];
+ { const uint32_t x77 = in2[17];
+ { const uint32_t x75 = in2[16];
+ { const uint32_t x73 = in2[15];
+ { const uint32_t x71 = in2[14];
+ { const uint32_t x69 = in2[13];
+ { const uint32_t x67 = in2[12];
+ { const uint32_t x65 = in2[11];
+ { const uint32_t x63 = in2[10];
+ { const uint32_t x61 = in2[9];
+ { const uint32_t x59 = in2[8];
+ { const uint32_t x57 = in2[7];
+ { const uint32_t x55 = in2[6];
+ { const uint32_t x53 = in2[5];
+ { const uint32_t x51 = in2[4];
+ { const uint32_t x49 = in2[3];
+ { const uint32_t x47 = in2[2];
+ { const uint32_t x45 = in2[1];
+ { const uint32_t x43 = in2[0];
+ out[0] = ((0xfffffe + x5) - x43);
+ out[1] = ((0x7ffffe + x7) - x45);
+ out[2] = ((0xfffffe + x9) - x47);
+ out[3] = ((0x7ffffe + x11) - x49);
+ out[4] = ((0xfffffe + x13) - x51);
+ out[5] = ((0x7ffffe + x15) - x53);
+ out[6] = ((0xfffffe + x17) - x55);
+ out[7] = ((0x7ffffe + x19) - x57);
+ out[8] = ((0xfffffe + x21) - x59);
+ out[9] = ((0x7ffffe + x23) - x61);
+ out[10] = ((0xfffffc + x25) - x63);
+ out[11] = ((0x7ffffe + x27) - x65);
+ out[12] = ((0xfffffe + x29) - x67);
+ out[13] = ((0x7ffffe + x31) - x69);
+ out[14] = ((0xfffffe + x33) - x71);
+ out[15] = ((0x7ffffe + x35) - x73);
+ out[16] = ((0xfffffe + x37) - x75);
+ out[17] = ((0x7ffffe + x39) - x77);
+ out[18] = ((0xfffffe + x41) - x79);
+ out[19] = ((0x7ffffe + x40) - x78);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e450m2e225m1_20limbs/freeze.c b/src/Specific/solinas32_2e450m2e225m1_20limbs/freeze.c
new file mode 100644
index 000000000..20510dff8
--- /dev/null
+++ b/src/Specific/solinas32_2e450m2e225m1_20limbs/freeze.c
@@ -0,0 +1,104 @@
+static void freeze(uint32_t out[20], const uint32_t in1[20]) {
+ { const uint32_t x37 = in1[19];
+ { const uint32_t x38 = in1[18];
+ { const uint32_t x36 = in1[17];
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x7fffff);
+ { uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x4, 0x3fffff);
+ { uint32_t x46, uint8_t x47 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x44, Return x6, 0x7fffff);
+ { uint32_t x49, uint8_t x50 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x47, Return x8, 0x3fffff);
+ { uint32_t x52, uint8_t x53 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x50, Return x10, 0x7fffff);
+ { uint32_t x55, uint8_t x56 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x53, Return x12, 0x3fffff);
+ { uint32_t x58, uint8_t x59 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x56, Return x14, 0x7fffff);
+ { uint32_t x61, uint8_t x62 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x59, Return x16, 0x3fffff);
+ { uint32_t x64, uint8_t x65 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x62, Return x18, 0x7fffff);
+ { uint32_t x67, uint8_t x68 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x65, Return x20, 0x3fffff);
+ { uint32_t x70, uint8_t x71 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x68, Return x22, 0x7ffffe);
+ { uint32_t x73, uint8_t x74 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x71, Return x24, 0x3fffff);
+ { uint32_t x76, uint8_t x77 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x74, Return x26, 0x7fffff);
+ { uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x28, 0x3fffff);
+ { uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x30, 0x7fffff);
+ { uint32_t x85, uint8_t x86 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x32, 0x3fffff);
+ { uint32_t x88, uint8_t x89 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x86, Return x34, 0x7fffff);
+ { uint32_t x91, uint8_t x92 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x89, Return x36, 0x3fffff);
+ { uint32_t x94, uint8_t x95 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x92, Return x38, 0x7fffff);
+ { uint32_t x97, uint8_t x98 = Op (Syntax.SubWithGetBorrow 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x95, Return x37, 0x3fffff);
+ { uint32_t x99 = cmovznz32(x98, 0x0, 0xffffffff);
+ { uint32_t x100 = (x99 & 0x7fffff);
+ { uint32_t x102, uint8_t x103 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x40, Return x100);
+ { uint32_t x104 = (x99 & 0x3fffff);
+ { uint32_t x106, uint8_t x107 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x103, Return x43, Return x104);
+ { uint32_t x108 = (x99 & 0x7fffff);
+ { uint32_t x110, uint8_t x111 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x107, Return x46, Return x108);
+ { uint32_t x112 = (x99 & 0x3fffff);
+ { uint32_t x114, uint8_t x115 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x111, Return x49, Return x112);
+ { uint32_t x116 = (x99 & 0x7fffff);
+ { uint32_t x118, uint8_t x119 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x115, Return x52, Return x116);
+ { uint32_t x120 = (x99 & 0x3fffff);
+ { uint32_t x122, uint8_t x123 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x119, Return x55, Return x120);
+ { uint32_t x124 = (x99 & 0x7fffff);
+ { uint32_t x126, uint8_t x127 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x123, Return x58, Return x124);
+ { uint32_t x128 = (x99 & 0x3fffff);
+ { uint32_t x130, uint8_t x131 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x127, Return x61, Return x128);
+ { uint32_t x132 = (x99 & 0x7fffff);
+ { uint32_t x134, uint8_t x135 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x131, Return x64, Return x132);
+ { uint32_t x136 = (x99 & 0x3fffff);
+ { uint32_t x138, uint8_t x139 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x135, Return x67, Return x136);
+ { uint32_t x140 = (x99 & 0x7ffffe);
+ { uint32_t x142, uint8_t x143 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x139, Return x70, Return x140);
+ { uint32_t x144 = (x99 & 0x3fffff);
+ { uint32_t x146, uint8_t x147 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x143, Return x73, Return x144);
+ { uint32_t x148 = (x99 & 0x7fffff);
+ { uint32_t x150, uint8_t x151 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x147, Return x76, Return x148);
+ { uint32_t x152 = (x99 & 0x3fffff);
+ { uint32_t x154, uint8_t x155 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x151, Return x79, Return x152);
+ { uint32_t x156 = (x99 & 0x7fffff);
+ { uint32_t x158, uint8_t x159 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x155, Return x82, Return x156);
+ { uint32_t x160 = (x99 & 0x3fffff);
+ { uint32_t x162, uint8_t x163 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x159, Return x85, Return x160);
+ { uint32_t x164 = (x99 & 0x7fffff);
+ { uint32_t x166, uint8_t x167 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x163, Return x88, Return x164);
+ { uint32_t x168 = (x99 & 0x3fffff);
+ { uint32_t x170, uint8_t x171 = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x167, Return x91, Return x168);
+ { uint32_t x172 = (x99 & 0x7fffff);
+ { uint32_t x174, uint8_t x175 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x171, Return x94, Return x172);
+ { uint32_t x176 = (x99 & 0x3fffff);
+ { uint32_t x178, uint8_t _ = Op (Syntax.AddWithGetCarry 22 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x175, Return x97, Return x176);
+ out[0] = x102;
+ out[1] = x106;
+ out[2] = x110;
+ out[3] = x114;
+ out[4] = x118;
+ out[5] = x122;
+ out[6] = x126;
+ out[7] = x130;
+ out[8] = x134;
+ out[9] = x138;
+ out[10] = x142;
+ out[11] = x146;
+ out[12] = x150;
+ out[13] = x154;
+ out[14] = x158;
+ out[15] = x162;
+ out[16] = x166;
+ out[17] = x170;
+ out[18] = x174;
+ out[19] = x178;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e480m2e240m1_20limbs/feadd.c b/src/Specific/solinas32_2e480m2e240m1_20limbs/feadd.c
new file mode 100644
index 000000000..28ee6f665
--- /dev/null
+++ b/src/Specific/solinas32_2e480m2e240m1_20limbs/feadd.c
@@ -0,0 +1,63 @@
+static void feadd(uint32_t out[20], const uint32_t in1[20], const uint32_t in2[20]) {
+ { const uint32_t x40 = in1[19];
+ { const uint32_t x41 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x78 = in2[19];
+ { const uint32_t x79 = in2[18];
+ { const uint32_t x77 = in2[17];
+ { const uint32_t x75 = in2[16];
+ { const uint32_t x73 = in2[15];
+ { const uint32_t x71 = in2[14];
+ { const uint32_t x69 = in2[13];
+ { const uint32_t x67 = in2[12];
+ { const uint32_t x65 = in2[11];
+ { const uint32_t x63 = in2[10];
+ { const uint32_t x61 = in2[9];
+ { const uint32_t x59 = in2[8];
+ { const uint32_t x57 = in2[7];
+ { const uint32_t x55 = in2[6];
+ { const uint32_t x53 = in2[5];
+ { const uint32_t x51 = in2[4];
+ { const uint32_t x49 = in2[3];
+ { const uint32_t x47 = in2[2];
+ { const uint32_t x45 = in2[1];
+ { const uint32_t x43 = in2[0];
+ out[0] = (x5 + x43);
+ out[1] = (x7 + x45);
+ out[2] = (x9 + x47);
+ out[3] = (x11 + x49);
+ out[4] = (x13 + x51);
+ out[5] = (x15 + x53);
+ out[6] = (x17 + x55);
+ out[7] = (x19 + x57);
+ out[8] = (x21 + x59);
+ out[9] = (x23 + x61);
+ out[10] = (x25 + x63);
+ out[11] = (x27 + x65);
+ out[12] = (x29 + x67);
+ out[13] = (x31 + x69);
+ out[14] = (x33 + x71);
+ out[15] = (x35 + x73);
+ out[16] = (x37 + x75);
+ out[17] = (x39 + x77);
+ out[18] = (x41 + x79);
+ out[19] = (x40 + x78);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e480m2e240m1_20limbs/fesub.c b/src/Specific/solinas32_2e480m2e240m1_20limbs/fesub.c
new file mode 100644
index 000000000..ec2beda21
--- /dev/null
+++ b/src/Specific/solinas32_2e480m2e240m1_20limbs/fesub.c
@@ -0,0 +1,63 @@
+static void fesub(uint32_t out[20], const uint32_t in1[20], const uint32_t in2[20]) {
+ { const uint32_t x40 = in1[19];
+ { const uint32_t x41 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x78 = in2[19];
+ { const uint32_t x79 = in2[18];
+ { const uint32_t x77 = in2[17];
+ { const uint32_t x75 = in2[16];
+ { const uint32_t x73 = in2[15];
+ { const uint32_t x71 = in2[14];
+ { const uint32_t x69 = in2[13];
+ { const uint32_t x67 = in2[12];
+ { const uint32_t x65 = in2[11];
+ { const uint32_t x63 = in2[10];
+ { const uint32_t x61 = in2[9];
+ { const uint32_t x59 = in2[8];
+ { const uint32_t x57 = in2[7];
+ { const uint32_t x55 = in2[6];
+ { const uint32_t x53 = in2[5];
+ { const uint32_t x51 = in2[4];
+ { const uint32_t x49 = in2[3];
+ { const uint32_t x47 = in2[2];
+ { const uint32_t x45 = in2[1];
+ { const uint32_t x43 = in2[0];
+ out[0] = ((0x1fffffe + x5) - x43);
+ out[1] = ((0x1fffffe + x7) - x45);
+ out[2] = ((0x1fffffe + x9) - x47);
+ out[3] = ((0x1fffffe + x11) - x49);
+ out[4] = ((0x1fffffe + x13) - x51);
+ out[5] = ((0x1fffffe + x15) - x53);
+ out[6] = ((0x1fffffe + x17) - x55);
+ out[7] = ((0x1fffffe + x19) - x57);
+ out[8] = ((0x1fffffe + x21) - x59);
+ out[9] = ((0x1fffffe + x23) - x61);
+ out[10] = ((0x1fffffc + x25) - x63);
+ out[11] = ((0x1fffffe + x27) - x65);
+ out[12] = ((0x1fffffe + x29) - x67);
+ out[13] = ((0x1fffffe + x31) - x69);
+ out[14] = ((0x1fffffe + x33) - x71);
+ out[15] = ((0x1fffffe + x35) - x73);
+ out[16] = ((0x1fffffe + x37) - x75);
+ out[17] = ((0x1fffffe + x39) - x77);
+ out[18] = ((0x1fffffe + x41) - x79);
+ out[19] = ((0x1fffffe + x40) - x78);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e480m2e240m1_20limbs/fesubDisplay.log b/src/Specific/solinas32_2e480m2e240m1_20limbs/fesubDisplay.log
index bbb7f10be..761d9228e 100644
--- a/src/Specific/solinas32_2e480m2e240m1_20limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e480m2e240m1_20limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x40, x41, x39, x37, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x78, x79, x77, x75, x73, x71, x69, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43))%core,
- (((0x1fffffe + x40) - x78), ((0x1fffffe + x41) - x79), ((0x1fffffe + x39) - x77), ((0x1fffffe + x37) - x75), ((0x1fffffe + x35) - x73), ((0x1fffffe + x33) - x71), ((0x1fffffe + x31) - x69), ((0x1fffffe + x29) - x67), ((0x1fffffe + x27) - x65), ((Const 33554428 + x25) - x63), ((0x1fffffe + x23) - x61), ((0x1fffffe + x21) - x59), ((0x1fffffe + x19) - x57), ((0x1fffffe + x17) - x55), ((0x1fffffe + x15) - x53), ((0x1fffffe + x13) - x51), ((0x1fffffe + x11) - x49), ((0x1fffffe + x9) - x47), ((0x1fffffe + x7) - x45), ((0x1fffffe + x5) - x43)))
+ (((0x1fffffe + x40) - x78), ((0x1fffffe + x41) - x79), ((0x1fffffe + x39) - x77), ((0x1fffffe + x37) - x75), ((0x1fffffe + x35) - x73), ((0x1fffffe + x33) - x71), ((0x1fffffe + x31) - x69), ((0x1fffffe + x29) - x67), ((0x1fffffe + x27) - x65), ((0x1fffffc + x25) - x63), ((0x1fffffe + x23) - x61), ((0x1fffffe + x21) - x59), ((0x1fffffe + x19) - x57), ((0x1fffffe + x17) - x55), ((0x1fffffe + x15) - x53), ((0x1fffffe + x13) - x51), ((0x1fffffe + x11) - x49), ((0x1fffffe + x9) - x47), ((0x1fffffe + x7) - x45), ((0x1fffffe + x5) - x43)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e480m2e240m1_20limbs/freeze.c b/src/Specific/solinas32_2e480m2e240m1_20limbs/freeze.c
new file mode 100644
index 000000000..319462208
--- /dev/null
+++ b/src/Specific/solinas32_2e480m2e240m1_20limbs/freeze.c
@@ -0,0 +1,104 @@
+static void freeze(uint32_t out[20], const uint32_t in1[20]) {
+ { const uint32_t x37 = in1[19];
+ { const uint32_t x38 = in1[18];
+ { const uint32_t x36 = in1[17];
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xffffff);
+ { uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x4, 0xffffff);
+ { uint32_t x46, uint8_t x47 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x44, Return x6, 0xffffff);
+ { uint32_t x49, uint8_t x50 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x47, Return x8, 0xffffff);
+ { uint32_t x52, uint8_t x53 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x50, Return x10, 0xffffff);
+ { uint32_t x55, uint8_t x56 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x53, Return x12, 0xffffff);
+ { uint32_t x58, uint8_t x59 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x56, Return x14, 0xffffff);
+ { uint32_t x61, uint8_t x62 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x59, Return x16, 0xffffff);
+ { uint32_t x64, uint8_t x65 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x62, Return x18, 0xffffff);
+ { uint32_t x67, uint8_t x68 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x65, Return x20, 0xffffff);
+ { uint32_t x70, uint8_t x71 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x68, Return x22, 0xfffffe);
+ { uint32_t x73, uint8_t x74 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x71, Return x24, 0xffffff);
+ { uint32_t x76, uint8_t x77 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x74, Return x26, 0xffffff);
+ { uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x28, 0xffffff);
+ { uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x30, 0xffffff);
+ { uint32_t x85, uint8_t x86 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x32, 0xffffff);
+ { uint32_t x88, uint8_t x89 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x86, Return x34, 0xffffff);
+ { uint32_t x91, uint8_t x92 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x89, Return x36, 0xffffff);
+ { uint32_t x94, uint8_t x95 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x92, Return x38, 0xffffff);
+ { uint32_t x97, uint8_t x98 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x95, Return x37, 0xffffff);
+ { uint32_t x99 = cmovznz32(x98, 0x0, 0xffffffff);
+ { uint32_t x100 = (x99 & 0xffffff);
+ { uint32_t x102, uint8_t x103 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x40, Return x100);
+ { uint32_t x104 = (x99 & 0xffffff);
+ { uint32_t x106, uint8_t x107 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x103, Return x43, Return x104);
+ { uint32_t x108 = (x99 & 0xffffff);
+ { uint32_t x110, uint8_t x111 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x107, Return x46, Return x108);
+ { uint32_t x112 = (x99 & 0xffffff);
+ { uint32_t x114, uint8_t x115 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x111, Return x49, Return x112);
+ { uint32_t x116 = (x99 & 0xffffff);
+ { uint32_t x118, uint8_t x119 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x115, Return x52, Return x116);
+ { uint32_t x120 = (x99 & 0xffffff);
+ { uint32_t x122, uint8_t x123 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x119, Return x55, Return x120);
+ { uint32_t x124 = (x99 & 0xffffff);
+ { uint32_t x126, uint8_t x127 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x123, Return x58, Return x124);
+ { uint32_t x128 = (x99 & 0xffffff);
+ { uint32_t x130, uint8_t x131 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x127, Return x61, Return x128);
+ { uint32_t x132 = (x99 & 0xffffff);
+ { uint32_t x134, uint8_t x135 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x131, Return x64, Return x132);
+ { uint32_t x136 = (x99 & 0xffffff);
+ { uint32_t x138, uint8_t x139 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x135, Return x67, Return x136);
+ { uint32_t x140 = (x99 & 0xfffffe);
+ { uint32_t x142, uint8_t x143 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x139, Return x70, Return x140);
+ { uint32_t x144 = (x99 & 0xffffff);
+ { uint32_t x146, uint8_t x147 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x143, Return x73, Return x144);
+ { uint32_t x148 = (x99 & 0xffffff);
+ { uint32_t x150, uint8_t x151 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x147, Return x76, Return x148);
+ { uint32_t x152 = (x99 & 0xffffff);
+ { uint32_t x154, uint8_t x155 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x151, Return x79, Return x152);
+ { uint32_t x156 = (x99 & 0xffffff);
+ { uint32_t x158, uint8_t x159 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x155, Return x82, Return x156);
+ { uint32_t x160 = (x99 & 0xffffff);
+ { uint32_t x162, uint8_t x163 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x159, Return x85, Return x160);
+ { uint32_t x164 = (x99 & 0xffffff);
+ { uint32_t x166, uint8_t x167 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x163, Return x88, Return x164);
+ { uint32_t x168 = (x99 & 0xffffff);
+ { uint32_t x170, uint8_t x171 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x167, Return x91, Return x168);
+ { uint32_t x172 = (x99 & 0xffffff);
+ { uint32_t x174, uint8_t x175 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x171, Return x94, Return x172);
+ { uint32_t x176 = (x99 & 0xffffff);
+ { uint32_t x178, uint8_t _ = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x175, Return x97, Return x176);
+ out[0] = x102;
+ out[1] = x106;
+ out[2] = x110;
+ out[3] = x114;
+ out[4] = x118;
+ out[5] = x122;
+ out[6] = x126;
+ out[7] = x130;
+ out[8] = x134;
+ out[9] = x138;
+ out[10] = x142;
+ out[11] = x146;
+ out[12] = x150;
+ out[13] = x154;
+ out[14] = x158;
+ out[15] = x162;
+ out[16] = x166;
+ out[17] = x170;
+ out[18] = x174;
+ out[19] = x178;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e488m17_20limbs/feadd.c b/src/Specific/solinas32_2e488m17_20limbs/feadd.c
new file mode 100644
index 000000000..28ee6f665
--- /dev/null
+++ b/src/Specific/solinas32_2e488m17_20limbs/feadd.c
@@ -0,0 +1,63 @@
+static void feadd(uint32_t out[20], const uint32_t in1[20], const uint32_t in2[20]) {
+ { const uint32_t x40 = in1[19];
+ { const uint32_t x41 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x78 = in2[19];
+ { const uint32_t x79 = in2[18];
+ { const uint32_t x77 = in2[17];
+ { const uint32_t x75 = in2[16];
+ { const uint32_t x73 = in2[15];
+ { const uint32_t x71 = in2[14];
+ { const uint32_t x69 = in2[13];
+ { const uint32_t x67 = in2[12];
+ { const uint32_t x65 = in2[11];
+ { const uint32_t x63 = in2[10];
+ { const uint32_t x61 = in2[9];
+ { const uint32_t x59 = in2[8];
+ { const uint32_t x57 = in2[7];
+ { const uint32_t x55 = in2[6];
+ { const uint32_t x53 = in2[5];
+ { const uint32_t x51 = in2[4];
+ { const uint32_t x49 = in2[3];
+ { const uint32_t x47 = in2[2];
+ { const uint32_t x45 = in2[1];
+ { const uint32_t x43 = in2[0];
+ out[0] = (x5 + x43);
+ out[1] = (x7 + x45);
+ out[2] = (x9 + x47);
+ out[3] = (x11 + x49);
+ out[4] = (x13 + x51);
+ out[5] = (x15 + x53);
+ out[6] = (x17 + x55);
+ out[7] = (x19 + x57);
+ out[8] = (x21 + x59);
+ out[9] = (x23 + x61);
+ out[10] = (x25 + x63);
+ out[11] = (x27 + x65);
+ out[12] = (x29 + x67);
+ out[13] = (x31 + x69);
+ out[14] = (x33 + x71);
+ out[15] = (x35 + x73);
+ out[16] = (x37 + x75);
+ out[17] = (x39 + x77);
+ out[18] = (x41 + x79);
+ out[19] = (x40 + x78);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e488m17_20limbs/fesub.c b/src/Specific/solinas32_2e488m17_20limbs/fesub.c
new file mode 100644
index 000000000..206417acd
--- /dev/null
+++ b/src/Specific/solinas32_2e488m17_20limbs/fesub.c
@@ -0,0 +1,63 @@
+static void fesub(uint32_t out[20], const uint32_t in1[20], const uint32_t in2[20]) {
+ { const uint32_t x40 = in1[19];
+ { const uint32_t x41 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x78 = in2[19];
+ { const uint32_t x79 = in2[18];
+ { const uint32_t x77 = in2[17];
+ { const uint32_t x75 = in2[16];
+ { const uint32_t x73 = in2[15];
+ { const uint32_t x71 = in2[14];
+ { const uint32_t x69 = in2[13];
+ { const uint32_t x67 = in2[12];
+ { const uint32_t x65 = in2[11];
+ { const uint32_t x63 = in2[10];
+ { const uint32_t x61 = in2[9];
+ { const uint32_t x59 = in2[8];
+ { const uint32_t x57 = in2[7];
+ { const uint32_t x55 = in2[6];
+ { const uint32_t x53 = in2[5];
+ { const uint32_t x51 = in2[4];
+ { const uint32_t x49 = in2[3];
+ { const uint32_t x47 = in2[2];
+ { const uint32_t x45 = in2[1];
+ { const uint32_t x43 = in2[0];
+ out[0] = ((0x3ffffde + x5) - x43);
+ out[1] = ((0x1fffffe + x7) - x45);
+ out[2] = ((0x3fffffe + x9) - x47);
+ out[3] = ((0x1fffffe + x11) - x49);
+ out[4] = ((0x1fffffe + x13) - x51);
+ out[5] = ((0x3fffffe + x15) - x53);
+ out[6] = ((0x1fffffe + x17) - x55);
+ out[7] = ((0x3fffffe + x19) - x57);
+ out[8] = ((0x1fffffe + x21) - x59);
+ out[9] = ((0x1fffffe + x23) - x61);
+ out[10] = ((0x3fffffe + x25) - x63);
+ out[11] = ((0x1fffffe + x27) - x65);
+ out[12] = ((0x3fffffe + x29) - x67);
+ out[13] = ((0x1fffffe + x31) - x69);
+ out[14] = ((0x1fffffe + x33) - x71);
+ out[15] = ((0x3fffffe + x35) - x73);
+ out[16] = ((0x1fffffe + x37) - x75);
+ out[17] = ((0x3fffffe + x39) - x77);
+ out[18] = ((0x1fffffe + x41) - x79);
+ out[19] = ((0x1fffffe + x40) - x78);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e488m17_20limbs/freeze.c b/src/Specific/solinas32_2e488m17_20limbs/freeze.c
new file mode 100644
index 000000000..79ed98278
--- /dev/null
+++ b/src/Specific/solinas32_2e488m17_20limbs/freeze.c
@@ -0,0 +1,104 @@
+static void freeze(uint32_t out[20], const uint32_t in1[20]) {
+ { const uint32_t x37 = in1[19];
+ { const uint32_t x38 = in1[18];
+ { const uint32_t x36 = in1[17];
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x1ffffef);
+ { uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x4, 0xffffff);
+ { uint32_t x46, uint8_t x47 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x44, Return x6, 0x1ffffff);
+ { uint32_t x49, uint8_t x50 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x47, Return x8, 0xffffff);
+ { uint32_t x52, uint8_t x53 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x50, Return x10, 0xffffff);
+ { uint32_t x55, uint8_t x56 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x53, Return x12, 0x1ffffff);
+ { uint32_t x58, uint8_t x59 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x56, Return x14, 0xffffff);
+ { uint32_t x61, uint8_t x62 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x59, Return x16, 0x1ffffff);
+ { uint32_t x64, uint8_t x65 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x62, Return x18, 0xffffff);
+ { uint32_t x67, uint8_t x68 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x65, Return x20, 0xffffff);
+ { uint32_t x70, uint8_t x71 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x68, Return x22, 0x1ffffff);
+ { uint32_t x73, uint8_t x74 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x71, Return x24, 0xffffff);
+ { uint32_t x76, uint8_t x77 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x74, Return x26, 0x1ffffff);
+ { uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x28, 0xffffff);
+ { uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x30, 0xffffff);
+ { uint32_t x85, uint8_t x86 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x32, 0x1ffffff);
+ { uint32_t x88, uint8_t x89 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x86, Return x34, 0xffffff);
+ { uint32_t x91, uint8_t x92 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x89, Return x36, 0x1ffffff);
+ { uint32_t x94, uint8_t x95 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x92, Return x38, 0xffffff);
+ { uint32_t x97, uint8_t x98 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x95, Return x37, 0xffffff);
+ { uint32_t x99 = cmovznz32(x98, 0x0, 0xffffffff);
+ { uint32_t x100 = (x99 & 0x1ffffef);
+ { uint32_t x102, uint8_t x103 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x40, Return x100);
+ { uint32_t x104 = (x99 & 0xffffff);
+ { uint32_t x106, uint8_t x107 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x103, Return x43, Return x104);
+ { uint32_t x108 = (x99 & 0x1ffffff);
+ { uint32_t x110, uint8_t x111 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x107, Return x46, Return x108);
+ { uint32_t x112 = (x99 & 0xffffff);
+ { uint32_t x114, uint8_t x115 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x111, Return x49, Return x112);
+ { uint32_t x116 = (x99 & 0xffffff);
+ { uint32_t x118, uint8_t x119 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x115, Return x52, Return x116);
+ { uint32_t x120 = (x99 & 0x1ffffff);
+ { uint32_t x122, uint8_t x123 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x119, Return x55, Return x120);
+ { uint32_t x124 = (x99 & 0xffffff);
+ { uint32_t x126, uint8_t x127 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x123, Return x58, Return x124);
+ { uint32_t x128 = (x99 & 0x1ffffff);
+ { uint32_t x130, uint8_t x131 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x127, Return x61, Return x128);
+ { uint32_t x132 = (x99 & 0xffffff);
+ { uint32_t x134, uint8_t x135 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x131, Return x64, Return x132);
+ { uint32_t x136 = (x99 & 0xffffff);
+ { uint32_t x138, uint8_t x139 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x135, Return x67, Return x136);
+ { uint32_t x140 = (x99 & 0x1ffffff);
+ { uint32_t x142, uint8_t x143 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x139, Return x70, Return x140);
+ { uint32_t x144 = (x99 & 0xffffff);
+ { uint32_t x146, uint8_t x147 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x143, Return x73, Return x144);
+ { uint32_t x148 = (x99 & 0x1ffffff);
+ { uint32_t x150, uint8_t x151 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x147, Return x76, Return x148);
+ { uint32_t x152 = (x99 & 0xffffff);
+ { uint32_t x154, uint8_t x155 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x151, Return x79, Return x152);
+ { uint32_t x156 = (x99 & 0xffffff);
+ { uint32_t x158, uint8_t x159 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x155, Return x82, Return x156);
+ { uint32_t x160 = (x99 & 0x1ffffff);
+ { uint32_t x162, uint8_t x163 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x159, Return x85, Return x160);
+ { uint32_t x164 = (x99 & 0xffffff);
+ { uint32_t x166, uint8_t x167 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x163, Return x88, Return x164);
+ { uint32_t x168 = (x99 & 0x1ffffff);
+ { uint32_t x170, uint8_t x171 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x167, Return x91, Return x168);
+ { uint32_t x172 = (x99 & 0xffffff);
+ { uint32_t x174, uint8_t x175 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x171, Return x94, Return x172);
+ { uint32_t x176 = (x99 & 0xffffff);
+ { uint32_t x178, uint8_t _ = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x175, Return x97, Return x176);
+ out[0] = x102;
+ out[1] = x106;
+ out[2] = x110;
+ out[3] = x114;
+ out[4] = x118;
+ out[5] = x122;
+ out[6] = x126;
+ out[7] = x130;
+ out[8] = x134;
+ out[9] = x138;
+ out[10] = x142;
+ out[11] = x146;
+ out[12] = x150;
+ out[13] = x154;
+ out[14] = x158;
+ out[15] = x162;
+ out[16] = x166;
+ out[17] = x170;
+ out[18] = x174;
+ out[19] = x178;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e489m21_19limbs/fesub.c b/src/Specific/solinas32_2e489m21_19limbs/fesub.c
index 41d77ed37..c03afdc41 100644
--- a/src/Specific/solinas32_2e489m21_19limbs/fesub.c
+++ b/src/Specific/solinas32_2e489m21_19limbs/fesub.c
@@ -37,7 +37,7 @@ static void fesub(uint32_t out[19], const uint32_t in1[19], const uint32_t in2[1
{ const uint32_t x45 = in2[2];
{ const uint32_t x43 = in2[1];
{ const uint32_t x41 = in2[0];
- out[0] = ((Const 134217686 + x5) - x41);
+ out[0] = ((0x7ffffd6 + x5) - x41);
out[1] = ((0x7fffffe + x7) - x43);
out[2] = ((0x7fffffe + x9) - x45);
out[3] = ((0x3fffffe + x11) - x47);
diff --git a/src/Specific/solinas32_2e489m21_19limbs/fesubDisplay.log b/src/Specific/solinas32_2e489m21_19limbs/fesubDisplay.log
index 0ffc770a7..a75514f62 100644
--- a/src/Specific/solinas32_2e489m21_19limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e489m21_19limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x38, x39, x37, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x74, x75, x73, x71, x69, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43, x41))%core,
- (((0x3fffffe + x38) - x74), ((0x7fffffe + x39) - x75), ((0x7fffffe + x37) - x73), ((0x3fffffe + x35) - x71), ((0x7fffffe + x33) - x69), ((0x7fffffe + x31) - x67), ((0x7fffffe + x29) - x65), ((0x3fffffe + x27) - x63), ((0x7fffffe + x25) - x61), ((0x7fffffe + x23) - x59), ((0x7fffffe + x21) - x57), ((0x3fffffe + x19) - x55), ((0x7fffffe + x17) - x53), ((0x7fffffe + x15) - x51), ((0x7fffffe + x13) - x49), ((0x3fffffe + x11) - x47), ((0x7fffffe + x9) - x45), ((0x7fffffe + x7) - x43), ((Const 134217686 + x5) - x41)))
+ (((0x3fffffe + x38) - x74), ((0x7fffffe + x39) - x75), ((0x7fffffe + x37) - x73), ((0x3fffffe + x35) - x71), ((0x7fffffe + x33) - x69), ((0x7fffffe + x31) - x67), ((0x7fffffe + x29) - x65), ((0x3fffffe + x27) - x63), ((0x7fffffe + x25) - x61), ((0x7fffffe + x23) - x59), ((0x7fffffe + x21) - x57), ((0x3fffffe + x19) - x55), ((0x7fffffe + x17) - x53), ((0x7fffffe + x15) - x51), ((0x7fffffe + x13) - x49), ((0x3fffffe + x11) - x47), ((0x7fffffe + x9) - x45), ((0x7fffffe + x7) - x43), ((0x7ffffd6 + x5) - x41)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e489m21_19limbs/freeze.c b/src/Specific/solinas32_2e489m21_19limbs/freeze.c
index f75706b61..ef122f7d9 100644
--- a/src/Specific/solinas32_2e489m21_19limbs/freeze.c
+++ b/src/Specific/solinas32_2e489m21_19limbs/freeze.c
@@ -18,7 +18,7 @@ static void freeze(uint32_t out[19], const uint32_t in1[19]) {
{ const uint32_t x6 = in1[2];
{ const uint32_t x4 = in1[1];
{ const uint32_t x2 = in1[0];
- { uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 67108843);
+ { uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x3ffffeb);
{ uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x4, 0x3ffffff);
{ uint32_t x44, uint8_t x45 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x42, Return x6, 0x3ffffff);
{ uint32_t x47, uint8_t x48 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x45, Return x8, 0x1ffffff);
@@ -38,7 +38,7 @@ static void freeze(uint32_t out[19], const uint32_t in1[19]) {
{ uint32_t x89, uint8_t x90 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x87, Return x36, 0x3ffffff);
{ uint32_t x92, uint8_t x93 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x90, Return x35, 0x1ffffff);
{ uint32_t x94 = cmovznz32(x93, 0x0, 0xffffffff);
- { uint32_t x95 = (x94 & Const 67108843);
+ { uint32_t x95 = (x94 & 0x3ffffeb);
{ uint32_t x97, uint8_t x98 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x38, Return x95);
{ uint32_t x99 = (x94 & 0x3ffffff);
{ uint32_t x101, uint8_t x102 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x98, Return x41, Return x99);
diff --git a/src/Specific/solinas32_2e489m21_19limbs/freezeDisplay.log b/src/Specific/solinas32_2e489m21_19limbs/freezeDisplay.log
index e7c4e1822..d2a4e4ae9 100644
--- a/src/Specific/solinas32_2e489m21_19limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e489m21_19limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x35, x36, x34, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 67108843);
+ uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x3ffffeb);
uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x4, 0x3ffffff);
uint32_t x44, uint8_t x45 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x42, Return x6, 0x3ffffff);
uint32_t x47, uint8_t x48 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x45, Return x8, 0x1ffffff);
@@ -22,7 +22,7 @@ Interp-η
uint32_t x89, uint8_t x90 = Op (Syntax.SubWithGetBorrow 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x87, Return x36, 0x3ffffff);
uint32_t x92, uint8_t x93 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x90, Return x35, 0x1ffffff);
uint32_t x94 = cmovznz32(x93, 0x0, 0xffffffff);
- uint32_t x95 = (x94 & Const 67108843);
+ uint32_t x95 = (x94 & 0x3ffffeb);
uint32_t x97, uint8_t x98 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x38, Return x95);
uint32_t x99 = (x94 & 0x3ffffff);
uint32_t x101, uint8_t x102 = Op (Syntax.AddWithGetCarry 26 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x98, Return x41, Return x99);
diff --git a/src/Specific/solinas32_2e489m21_20limbs/feadd.c b/src/Specific/solinas32_2e489m21_20limbs/feadd.c
new file mode 100644
index 000000000..28ee6f665
--- /dev/null
+++ b/src/Specific/solinas32_2e489m21_20limbs/feadd.c
@@ -0,0 +1,63 @@
+static void feadd(uint32_t out[20], const uint32_t in1[20], const uint32_t in2[20]) {
+ { const uint32_t x40 = in1[19];
+ { const uint32_t x41 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x78 = in2[19];
+ { const uint32_t x79 = in2[18];
+ { const uint32_t x77 = in2[17];
+ { const uint32_t x75 = in2[16];
+ { const uint32_t x73 = in2[15];
+ { const uint32_t x71 = in2[14];
+ { const uint32_t x69 = in2[13];
+ { const uint32_t x67 = in2[12];
+ { const uint32_t x65 = in2[11];
+ { const uint32_t x63 = in2[10];
+ { const uint32_t x61 = in2[9];
+ { const uint32_t x59 = in2[8];
+ { const uint32_t x57 = in2[7];
+ { const uint32_t x55 = in2[6];
+ { const uint32_t x53 = in2[5];
+ { const uint32_t x51 = in2[4];
+ { const uint32_t x49 = in2[3];
+ { const uint32_t x47 = in2[2];
+ { const uint32_t x45 = in2[1];
+ { const uint32_t x43 = in2[0];
+ out[0] = (x5 + x43);
+ out[1] = (x7 + x45);
+ out[2] = (x9 + x47);
+ out[3] = (x11 + x49);
+ out[4] = (x13 + x51);
+ out[5] = (x15 + x53);
+ out[6] = (x17 + x55);
+ out[7] = (x19 + x57);
+ out[8] = (x21 + x59);
+ out[9] = (x23 + x61);
+ out[10] = (x25 + x63);
+ out[11] = (x27 + x65);
+ out[12] = (x29 + x67);
+ out[13] = (x31 + x69);
+ out[14] = (x33 + x71);
+ out[15] = (x35 + x73);
+ out[16] = (x37 + x75);
+ out[17] = (x39 + x77);
+ out[18] = (x41 + x79);
+ out[19] = (x40 + x78);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e489m21_20limbs/fesub.c b/src/Specific/solinas32_2e489m21_20limbs/fesub.c
new file mode 100644
index 000000000..fa8347798
--- /dev/null
+++ b/src/Specific/solinas32_2e489m21_20limbs/fesub.c
@@ -0,0 +1,63 @@
+static void fesub(uint32_t out[20], const uint32_t in1[20], const uint32_t in2[20]) {
+ { const uint32_t x40 = in1[19];
+ { const uint32_t x41 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x78 = in2[19];
+ { const uint32_t x79 = in2[18];
+ { const uint32_t x77 = in2[17];
+ { const uint32_t x75 = in2[16];
+ { const uint32_t x73 = in2[15];
+ { const uint32_t x71 = in2[14];
+ { const uint32_t x69 = in2[13];
+ { const uint32_t x67 = in2[12];
+ { const uint32_t x65 = in2[11];
+ { const uint32_t x63 = in2[10];
+ { const uint32_t x61 = in2[9];
+ { const uint32_t x59 = in2[8];
+ { const uint32_t x57 = in2[7];
+ { const uint32_t x55 = in2[6];
+ { const uint32_t x53 = in2[5];
+ { const uint32_t x51 = in2[4];
+ { const uint32_t x49 = in2[3];
+ { const uint32_t x47 = in2[2];
+ { const uint32_t x45 = in2[1];
+ { const uint32_t x43 = in2[0];
+ out[0] = ((0x3ffffd6 + x5) - x43);
+ out[1] = ((0x1fffffe + x7) - x45);
+ out[2] = ((0x3fffffe + x9) - x47);
+ out[3] = ((0x1fffffe + x11) - x49);
+ out[4] = ((0x3fffffe + x13) - x51);
+ out[5] = ((0x1fffffe + x15) - x53);
+ out[6] = ((0x3fffffe + x17) - x55);
+ out[7] = ((0x1fffffe + x19) - x57);
+ out[8] = ((0x3fffffe + x21) - x59);
+ out[9] = ((0x1fffffe + x23) - x61);
+ out[10] = ((0x1fffffe + x25) - x63);
+ out[11] = ((0x3fffffe + x27) - x65);
+ out[12] = ((0x1fffffe + x29) - x67);
+ out[13] = ((0x3fffffe + x31) - x69);
+ out[14] = ((0x1fffffe + x33) - x71);
+ out[15] = ((0x3fffffe + x35) - x73);
+ out[16] = ((0x1fffffe + x37) - x75);
+ out[17] = ((0x3fffffe + x39) - x77);
+ out[18] = ((0x1fffffe + x41) - x79);
+ out[19] = ((0x1fffffe + x40) - x78);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e489m21_20limbs/fesubDisplay.log b/src/Specific/solinas32_2e489m21_20limbs/fesubDisplay.log
index 299003e3f..4e4869762 100644
--- a/src/Specific/solinas32_2e489m21_20limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e489m21_20limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x40, x41, x39, x37, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x78, x79, x77, x75, x73, x71, x69, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43))%core,
- (((0x1fffffe + x40) - x78), ((0x1fffffe + x41) - x79), ((0x3fffffe + x39) - x77), ((0x1fffffe + x37) - x75), ((0x3fffffe + x35) - x73), ((0x1fffffe + x33) - x71), ((0x3fffffe + x31) - x69), ((0x1fffffe + x29) - x67), ((0x3fffffe + x27) - x65), ((0x1fffffe + x25) - x63), ((0x1fffffe + x23) - x61), ((0x3fffffe + x21) - x59), ((0x1fffffe + x19) - x57), ((0x3fffffe + x17) - x55), ((0x1fffffe + x15) - x53), ((0x3fffffe + x13) - x51), ((0x1fffffe + x11) - x49), ((0x3fffffe + x9) - x47), ((0x1fffffe + x7) - x45), ((Const 67108822 + x5) - x43)))
+ (((0x1fffffe + x40) - x78), ((0x1fffffe + x41) - x79), ((0x3fffffe + x39) - x77), ((0x1fffffe + x37) - x75), ((0x3fffffe + x35) - x73), ((0x1fffffe + x33) - x71), ((0x3fffffe + x31) - x69), ((0x1fffffe + x29) - x67), ((0x3fffffe + x27) - x65), ((0x1fffffe + x25) - x63), ((0x1fffffe + x23) - x61), ((0x3fffffe + x21) - x59), ((0x1fffffe + x19) - x57), ((0x3fffffe + x17) - x55), ((0x1fffffe + x15) - x53), ((0x3fffffe + x13) - x51), ((0x1fffffe + x11) - x49), ((0x3fffffe + x9) - x47), ((0x1fffffe + x7) - x45), ((0x3ffffd6 + x5) - x43)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e489m21_20limbs/freeze.c b/src/Specific/solinas32_2e489m21_20limbs/freeze.c
new file mode 100644
index 000000000..74090ad04
--- /dev/null
+++ b/src/Specific/solinas32_2e489m21_20limbs/freeze.c
@@ -0,0 +1,104 @@
+static void freeze(uint32_t out[20], const uint32_t in1[20]) {
+ { const uint32_t x37 = in1[19];
+ { const uint32_t x38 = in1[18];
+ { const uint32_t x36 = in1[17];
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x1ffffeb);
+ { uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x4, 0xffffff);
+ { uint32_t x46, uint8_t x47 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x44, Return x6, 0x1ffffff);
+ { uint32_t x49, uint8_t x50 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x47, Return x8, 0xffffff);
+ { uint32_t x52, uint8_t x53 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x50, Return x10, 0x1ffffff);
+ { uint32_t x55, uint8_t x56 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x53, Return x12, 0xffffff);
+ { uint32_t x58, uint8_t x59 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x56, Return x14, 0x1ffffff);
+ { uint32_t x61, uint8_t x62 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x59, Return x16, 0xffffff);
+ { uint32_t x64, uint8_t x65 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x62, Return x18, 0x1ffffff);
+ { uint32_t x67, uint8_t x68 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x65, Return x20, 0xffffff);
+ { uint32_t x70, uint8_t x71 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x68, Return x22, 0xffffff);
+ { uint32_t x73, uint8_t x74 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x71, Return x24, 0x1ffffff);
+ { uint32_t x76, uint8_t x77 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x74, Return x26, 0xffffff);
+ { uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x28, 0x1ffffff);
+ { uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x30, 0xffffff);
+ { uint32_t x85, uint8_t x86 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x32, 0x1ffffff);
+ { uint32_t x88, uint8_t x89 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x86, Return x34, 0xffffff);
+ { uint32_t x91, uint8_t x92 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x89, Return x36, 0x1ffffff);
+ { uint32_t x94, uint8_t x95 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x92, Return x38, 0xffffff);
+ { uint32_t x97, uint8_t x98 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x95, Return x37, 0xffffff);
+ { uint32_t x99 = cmovznz32(x98, 0x0, 0xffffffff);
+ { uint32_t x100 = (x99 & 0x1ffffeb);
+ { uint32_t x102, uint8_t x103 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x40, Return x100);
+ { uint32_t x104 = (x99 & 0xffffff);
+ { uint32_t x106, uint8_t x107 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x103, Return x43, Return x104);
+ { uint32_t x108 = (x99 & 0x1ffffff);
+ { uint32_t x110, uint8_t x111 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x107, Return x46, Return x108);
+ { uint32_t x112 = (x99 & 0xffffff);
+ { uint32_t x114, uint8_t x115 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x111, Return x49, Return x112);
+ { uint32_t x116 = (x99 & 0x1ffffff);
+ { uint32_t x118, uint8_t x119 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x115, Return x52, Return x116);
+ { uint32_t x120 = (x99 & 0xffffff);
+ { uint32_t x122, uint8_t x123 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x119, Return x55, Return x120);
+ { uint32_t x124 = (x99 & 0x1ffffff);
+ { uint32_t x126, uint8_t x127 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x123, Return x58, Return x124);
+ { uint32_t x128 = (x99 & 0xffffff);
+ { uint32_t x130, uint8_t x131 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x127, Return x61, Return x128);
+ { uint32_t x132 = (x99 & 0x1ffffff);
+ { uint32_t x134, uint8_t x135 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x131, Return x64, Return x132);
+ { uint32_t x136 = (x99 & 0xffffff);
+ { uint32_t x138, uint8_t x139 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x135, Return x67, Return x136);
+ { uint32_t x140 = (x99 & 0xffffff);
+ { uint32_t x142, uint8_t x143 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x139, Return x70, Return x140);
+ { uint32_t x144 = (x99 & 0x1ffffff);
+ { uint32_t x146, uint8_t x147 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x143, Return x73, Return x144);
+ { uint32_t x148 = (x99 & 0xffffff);
+ { uint32_t x150, uint8_t x151 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x147, Return x76, Return x148);
+ { uint32_t x152 = (x99 & 0x1ffffff);
+ { uint32_t x154, uint8_t x155 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x151, Return x79, Return x152);
+ { uint32_t x156 = (x99 & 0xffffff);
+ { uint32_t x158, uint8_t x159 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x155, Return x82, Return x156);
+ { uint32_t x160 = (x99 & 0x1ffffff);
+ { uint32_t x162, uint8_t x163 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x159, Return x85, Return x160);
+ { uint32_t x164 = (x99 & 0xffffff);
+ { uint32_t x166, uint8_t x167 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x163, Return x88, Return x164);
+ { uint32_t x168 = (x99 & 0x1ffffff);
+ { uint32_t x170, uint8_t x171 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x167, Return x91, Return x168);
+ { uint32_t x172 = (x99 & 0xffffff);
+ { uint32_t x174, uint8_t x175 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x171, Return x94, Return x172);
+ { uint32_t x176 = (x99 & 0xffffff);
+ { uint32_t x178, uint8_t _ = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x175, Return x97, Return x176);
+ out[0] = x102;
+ out[1] = x106;
+ out[2] = x110;
+ out[3] = x114;
+ out[4] = x118;
+ out[5] = x122;
+ out[6] = x126;
+ out[7] = x130;
+ out[8] = x134;
+ out[9] = x138;
+ out[10] = x142;
+ out[11] = x146;
+ out[12] = x150;
+ out[13] = x154;
+ out[14] = x158;
+ out[15] = x162;
+ out[16] = x166;
+ out[17] = x170;
+ out[18] = x174;
+ out[19] = x178;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e489m21_20limbs/freezeDisplay.log b/src/Specific/solinas32_2e489m21_20limbs/freezeDisplay.log
index f2fed901d..c3e45107d 100644
--- a/src/Specific/solinas32_2e489m21_20limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e489m21_20limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x37, x38, x36, x34, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 33554411);
+ uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x1ffffeb);
uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x4, 0xffffff);
uint32_t x46, uint8_t x47 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x44, Return x6, 0x1ffffff);
uint32_t x49, uint8_t x50 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x47, Return x8, 0xffffff);
@@ -23,7 +23,7 @@ Interp-η
uint32_t x94, uint8_t x95 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x92, Return x38, 0xffffff);
uint32_t x97, uint8_t x98 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x95, Return x37, 0xffffff);
uint32_t x99 = cmovznz32(x98, 0x0, 0xffffffff);
- uint32_t x100 = (x99 & Const 33554411);
+ uint32_t x100 = (x99 & 0x1ffffeb);
uint32_t x102, uint8_t x103 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x40, Return x100);
uint32_t x104 = (x99 & 0xffffff);
uint32_t x106, uint8_t x107 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x103, Return x43, Return x104);
diff --git a/src/Specific/solinas32_2e495m31_20limbs/feadd.c b/src/Specific/solinas32_2e495m31_20limbs/feadd.c
new file mode 100644
index 000000000..28ee6f665
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31_20limbs/feadd.c
@@ -0,0 +1,63 @@
+static void feadd(uint32_t out[20], const uint32_t in1[20], const uint32_t in2[20]) {
+ { const uint32_t x40 = in1[19];
+ { const uint32_t x41 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x78 = in2[19];
+ { const uint32_t x79 = in2[18];
+ { const uint32_t x77 = in2[17];
+ { const uint32_t x75 = in2[16];
+ { const uint32_t x73 = in2[15];
+ { const uint32_t x71 = in2[14];
+ { const uint32_t x69 = in2[13];
+ { const uint32_t x67 = in2[12];
+ { const uint32_t x65 = in2[11];
+ { const uint32_t x63 = in2[10];
+ { const uint32_t x61 = in2[9];
+ { const uint32_t x59 = in2[8];
+ { const uint32_t x57 = in2[7];
+ { const uint32_t x55 = in2[6];
+ { const uint32_t x53 = in2[5];
+ { const uint32_t x51 = in2[4];
+ { const uint32_t x49 = in2[3];
+ { const uint32_t x47 = in2[2];
+ { const uint32_t x45 = in2[1];
+ { const uint32_t x43 = in2[0];
+ out[0] = (x5 + x43);
+ out[1] = (x7 + x45);
+ out[2] = (x9 + x47);
+ out[3] = (x11 + x49);
+ out[4] = (x13 + x51);
+ out[5] = (x15 + x53);
+ out[6] = (x17 + x55);
+ out[7] = (x19 + x57);
+ out[8] = (x21 + x59);
+ out[9] = (x23 + x61);
+ out[10] = (x25 + x63);
+ out[11] = (x27 + x65);
+ out[12] = (x29 + x67);
+ out[13] = (x31 + x69);
+ out[14] = (x33 + x71);
+ out[15] = (x35 + x73);
+ out[16] = (x37 + x75);
+ out[17] = (x39 + x77);
+ out[18] = (x41 + x79);
+ out[19] = (x40 + x78);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e495m31_20limbs/fesub.c b/src/Specific/solinas32_2e495m31_20limbs/fesub.c
new file mode 100644
index 000000000..f6af61356
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31_20limbs/fesub.c
@@ -0,0 +1,63 @@
+static void fesub(uint32_t out[20], const uint32_t in1[20], const uint32_t in2[20]) {
+ { const uint32_t x40 = in1[19];
+ { const uint32_t x41 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x78 = in2[19];
+ { const uint32_t x79 = in2[18];
+ { const uint32_t x77 = in2[17];
+ { const uint32_t x75 = in2[16];
+ { const uint32_t x73 = in2[15];
+ { const uint32_t x71 = in2[14];
+ { const uint32_t x69 = in2[13];
+ { const uint32_t x67 = in2[12];
+ { const uint32_t x65 = in2[11];
+ { const uint32_t x63 = in2[10];
+ { const uint32_t x61 = in2[9];
+ { const uint32_t x59 = in2[8];
+ { const uint32_t x57 = in2[7];
+ { const uint32_t x55 = in2[6];
+ { const uint32_t x53 = in2[5];
+ { const uint32_t x51 = in2[4];
+ { const uint32_t x49 = in2[3];
+ { const uint32_t x47 = in2[2];
+ { const uint32_t x45 = in2[1];
+ { const uint32_t x43 = in2[0];
+ out[0] = ((0x3ffffc2 + x5) - x43);
+ out[1] = ((0x3fffffe + x7) - x45);
+ out[2] = ((0x3fffffe + x9) - x47);
+ out[3] = ((0x1fffffe + x11) - x49);
+ out[4] = ((0x3fffffe + x13) - x51);
+ out[5] = ((0x3fffffe + x15) - x53);
+ out[6] = ((0x3fffffe + x17) - x55);
+ out[7] = ((0x1fffffe + x19) - x57);
+ out[8] = ((0x3fffffe + x21) - x59);
+ out[9] = ((0x3fffffe + x23) - x61);
+ out[10] = ((0x3fffffe + x25) - x63);
+ out[11] = ((0x1fffffe + x27) - x65);
+ out[12] = ((0x3fffffe + x29) - x67);
+ out[13] = ((0x3fffffe + x31) - x69);
+ out[14] = ((0x3fffffe + x33) - x71);
+ out[15] = ((0x1fffffe + x35) - x73);
+ out[16] = ((0x3fffffe + x37) - x75);
+ out[17] = ((0x3fffffe + x39) - x77);
+ out[18] = ((0x3fffffe + x41) - x79);
+ out[19] = ((0x1fffffe + x40) - x78);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e495m31_20limbs/fesubDisplay.log b/src/Specific/solinas32_2e495m31_20limbs/fesubDisplay.log
index ade0fa003..e42ae510a 100644
--- a/src/Specific/solinas32_2e495m31_20limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e495m31_20limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x40, x41, x39, x37, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x78, x79, x77, x75, x73, x71, x69, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45, x43))%core,
- (((0x1fffffe + x40) - x78), ((0x3fffffe + x41) - x79), ((0x3fffffe + x39) - x77), ((0x3fffffe + x37) - x75), ((0x1fffffe + x35) - x73), ((0x3fffffe + x33) - x71), ((0x3fffffe + x31) - x69), ((0x3fffffe + x29) - x67), ((0x1fffffe + x27) - x65), ((0x3fffffe + x25) - x63), ((0x3fffffe + x23) - x61), ((0x3fffffe + x21) - x59), ((0x1fffffe + x19) - x57), ((0x3fffffe + x17) - x55), ((0x3fffffe + x15) - x53), ((0x3fffffe + x13) - x51), ((0x1fffffe + x11) - x49), ((0x3fffffe + x9) - x47), ((0x3fffffe + x7) - x45), ((Const 67108802 + x5) - x43)))
+ (((0x1fffffe + x40) - x78), ((0x3fffffe + x41) - x79), ((0x3fffffe + x39) - x77), ((0x3fffffe + x37) - x75), ((0x1fffffe + x35) - x73), ((0x3fffffe + x33) - x71), ((0x3fffffe + x31) - x69), ((0x3fffffe + x29) - x67), ((0x1fffffe + x27) - x65), ((0x3fffffe + x25) - x63), ((0x3fffffe + x23) - x61), ((0x3fffffe + x21) - x59), ((0x1fffffe + x19) - x57), ((0x3fffffe + x17) - x55), ((0x3fffffe + x15) - x53), ((0x3fffffe + x13) - x51), ((0x1fffffe + x11) - x49), ((0x3fffffe + x9) - x47), ((0x3fffffe + x7) - x45), ((0x3ffffc2 + x5) - x43)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e495m31_20limbs/freeze.c b/src/Specific/solinas32_2e495m31_20limbs/freeze.c
new file mode 100644
index 000000000..3e5fd626b
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31_20limbs/freeze.c
@@ -0,0 +1,104 @@
+static void freeze(uint32_t out[20], const uint32_t in1[20]) {
+ { const uint32_t x37 = in1[19];
+ { const uint32_t x38 = in1[18];
+ { const uint32_t x36 = in1[17];
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x1ffffe1);
+ { uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x4, 0x1ffffff);
+ { uint32_t x46, uint8_t x47 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x44, Return x6, 0x1ffffff);
+ { uint32_t x49, uint8_t x50 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x47, Return x8, 0xffffff);
+ { uint32_t x52, uint8_t x53 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x50, Return x10, 0x1ffffff);
+ { uint32_t x55, uint8_t x56 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x53, Return x12, 0x1ffffff);
+ { uint32_t x58, uint8_t x59 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x56, Return x14, 0x1ffffff);
+ { uint32_t x61, uint8_t x62 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x59, Return x16, 0xffffff);
+ { uint32_t x64, uint8_t x65 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x62, Return x18, 0x1ffffff);
+ { uint32_t x67, uint8_t x68 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x65, Return x20, 0x1ffffff);
+ { uint32_t x70, uint8_t x71 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x68, Return x22, 0x1ffffff);
+ { uint32_t x73, uint8_t x74 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x71, Return x24, 0xffffff);
+ { uint32_t x76, uint8_t x77 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x74, Return x26, 0x1ffffff);
+ { uint32_t x79, uint8_t x80 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x77, Return x28, 0x1ffffff);
+ { uint32_t x82, uint8_t x83 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x80, Return x30, 0x1ffffff);
+ { uint32_t x85, uint8_t x86 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x83, Return x32, 0xffffff);
+ { uint32_t x88, uint8_t x89 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x86, Return x34, 0x1ffffff);
+ { uint32_t x91, uint8_t x92 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x89, Return x36, 0x1ffffff);
+ { uint32_t x94, uint8_t x95 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x92, Return x38, 0x1ffffff);
+ { uint32_t x97, uint8_t x98 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x95, Return x37, 0xffffff);
+ { uint32_t x99 = cmovznz32(x98, 0x0, 0xffffffff);
+ { uint32_t x100 = (x99 & 0x1ffffe1);
+ { uint32_t x102, uint8_t x103 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x40, Return x100);
+ { uint32_t x104 = (x99 & 0x1ffffff);
+ { uint32_t x106, uint8_t x107 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x103, Return x43, Return x104);
+ { uint32_t x108 = (x99 & 0x1ffffff);
+ { uint32_t x110, uint8_t x111 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x107, Return x46, Return x108);
+ { uint32_t x112 = (x99 & 0xffffff);
+ { uint32_t x114, uint8_t x115 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x111, Return x49, Return x112);
+ { uint32_t x116 = (x99 & 0x1ffffff);
+ { uint32_t x118, uint8_t x119 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x115, Return x52, Return x116);
+ { uint32_t x120 = (x99 & 0x1ffffff);
+ { uint32_t x122, uint8_t x123 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x119, Return x55, Return x120);
+ { uint32_t x124 = (x99 & 0x1ffffff);
+ { uint32_t x126, uint8_t x127 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x123, Return x58, Return x124);
+ { uint32_t x128 = (x99 & 0xffffff);
+ { uint32_t x130, uint8_t x131 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x127, Return x61, Return x128);
+ { uint32_t x132 = (x99 & 0x1ffffff);
+ { uint32_t x134, uint8_t x135 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x131, Return x64, Return x132);
+ { uint32_t x136 = (x99 & 0x1ffffff);
+ { uint32_t x138, uint8_t x139 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x135, Return x67, Return x136);
+ { uint32_t x140 = (x99 & 0x1ffffff);
+ { uint32_t x142, uint8_t x143 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x139, Return x70, Return x140);
+ { uint32_t x144 = (x99 & 0xffffff);
+ { uint32_t x146, uint8_t x147 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x143, Return x73, Return x144);
+ { uint32_t x148 = (x99 & 0x1ffffff);
+ { uint32_t x150, uint8_t x151 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x147, Return x76, Return x148);
+ { uint32_t x152 = (x99 & 0x1ffffff);
+ { uint32_t x154, uint8_t x155 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x151, Return x79, Return x152);
+ { uint32_t x156 = (x99 & 0x1ffffff);
+ { uint32_t x158, uint8_t x159 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x155, Return x82, Return x156);
+ { uint32_t x160 = (x99 & 0xffffff);
+ { uint32_t x162, uint8_t x163 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x159, Return x85, Return x160);
+ { uint32_t x164 = (x99 & 0x1ffffff);
+ { uint32_t x166, uint8_t x167 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x163, Return x88, Return x164);
+ { uint32_t x168 = (x99 & 0x1ffffff);
+ { uint32_t x170, uint8_t x171 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x167, Return x91, Return x168);
+ { uint32_t x172 = (x99 & 0x1ffffff);
+ { uint32_t x174, uint8_t x175 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x171, Return x94, Return x172);
+ { uint32_t x176 = (x99 & 0xffffff);
+ { uint32_t x178, uint8_t _ = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x175, Return x97, Return x176);
+ out[0] = x102;
+ out[1] = x106;
+ out[2] = x110;
+ out[3] = x114;
+ out[4] = x118;
+ out[5] = x122;
+ out[6] = x126;
+ out[7] = x130;
+ out[8] = x134;
+ out[9] = x138;
+ out[10] = x142;
+ out[11] = x146;
+ out[12] = x150;
+ out[13] = x154;
+ out[14] = x158;
+ out[15] = x162;
+ out[16] = x166;
+ out[17] = x170;
+ out[18] = x174;
+ out[19] = x178;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e495m31_20limbs/freezeDisplay.log b/src/Specific/solinas32_2e495m31_20limbs/freezeDisplay.log
index 74d525322..1da1ddb85 100644
--- a/src/Specific/solinas32_2e495m31_20limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e495m31_20limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x37, x38, x36, x34, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 33554401);
+ uint32_t x40, uint8_t x41 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0x1ffffe1);
uint32_t x43, uint8_t x44 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x41, Return x4, 0x1ffffff);
uint32_t x46, uint8_t x47 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x44, Return x6, 0x1ffffff);
uint32_t x49, uint8_t x50 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x47, Return x8, 0xffffff);
@@ -23,7 +23,7 @@ Interp-η
uint32_t x94, uint8_t x95 = Op (Syntax.SubWithGetBorrow 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x92, Return x38, 0x1ffffff);
uint32_t x97, uint8_t x98 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x95, Return x37, 0xffffff);
uint32_t x99 = cmovznz32(x98, 0x0, 0xffffffff);
- uint32_t x100 = (x99 & Const 33554401);
+ uint32_t x100 = (x99 & 0x1ffffe1);
uint32_t x102, uint8_t x103 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x40, Return x100);
uint32_t x104 = (x99 & 0x1ffffff);
uint32_t x106, uint8_t x107 = Op (Syntax.AddWithGetCarry 25 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x103, Return x43, Return x104);
diff --git a/src/Specific/solinas32_2e495m31_21limbs/feadd.c b/src/Specific/solinas32_2e495m31_21limbs/feadd.c
new file mode 100644
index 000000000..b5452623f
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31_21limbs/feadd.c
@@ -0,0 +1,66 @@
+static void feadd(uint32_t out[21], const uint32_t in1[21], const uint32_t in2[21]) {
+ { const uint32_t x42 = in1[20];
+ { const uint32_t x43 = in1[19];
+ { const uint32_t x41 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x82 = in2[20];
+ { const uint32_t x83 = in2[19];
+ { const uint32_t x81 = in2[18];
+ { const uint32_t x79 = in2[17];
+ { const uint32_t x77 = in2[16];
+ { const uint32_t x75 = in2[15];
+ { const uint32_t x73 = in2[14];
+ { const uint32_t x71 = in2[13];
+ { const uint32_t x69 = in2[12];
+ { const uint32_t x67 = in2[11];
+ { const uint32_t x65 = in2[10];
+ { const uint32_t x63 = in2[9];
+ { const uint32_t x61 = in2[8];
+ { const uint32_t x59 = in2[7];
+ { const uint32_t x57 = in2[6];
+ { const uint32_t x55 = in2[5];
+ { const uint32_t x53 = in2[4];
+ { const uint32_t x51 = in2[3];
+ { const uint32_t x49 = in2[2];
+ { const uint32_t x47 = in2[1];
+ { const uint32_t x45 = in2[0];
+ out[0] = (x5 + x45);
+ out[1] = (x7 + x47);
+ out[2] = (x9 + x49);
+ out[3] = (x11 + x51);
+ out[4] = (x13 + x53);
+ out[5] = (x15 + x55);
+ out[6] = (x17 + x57);
+ out[7] = (x19 + x59);
+ out[8] = (x21 + x61);
+ out[9] = (x23 + x63);
+ out[10] = (x25 + x65);
+ out[11] = (x27 + x67);
+ out[12] = (x29 + x69);
+ out[13] = (x31 + x71);
+ out[14] = (x33 + x73);
+ out[15] = (x35 + x75);
+ out[16] = (x37 + x77);
+ out[17] = (x39 + x79);
+ out[18] = (x41 + x81);
+ out[19] = (x43 + x83);
+ out[20] = (x42 + x82);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e495m31_21limbs/fesub.c b/src/Specific/solinas32_2e495m31_21limbs/fesub.c
new file mode 100644
index 000000000..7ef27ae2c
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31_21limbs/fesub.c
@@ -0,0 +1,66 @@
+static void fesub(uint32_t out[21], const uint32_t in1[21], const uint32_t in2[21]) {
+ { const uint32_t x42 = in1[20];
+ { const uint32_t x43 = in1[19];
+ { const uint32_t x41 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x82 = in2[20];
+ { const uint32_t x83 = in2[19];
+ { const uint32_t x81 = in2[18];
+ { const uint32_t x79 = in2[17];
+ { const uint32_t x77 = in2[16];
+ { const uint32_t x75 = in2[15];
+ { const uint32_t x73 = in2[14];
+ { const uint32_t x71 = in2[13];
+ { const uint32_t x69 = in2[12];
+ { const uint32_t x67 = in2[11];
+ { const uint32_t x65 = in2[10];
+ { const uint32_t x63 = in2[9];
+ { const uint32_t x61 = in2[8];
+ { const uint32_t x59 = in2[7];
+ { const uint32_t x57 = in2[6];
+ { const uint32_t x55 = in2[5];
+ { const uint32_t x53 = in2[4];
+ { const uint32_t x51 = in2[3];
+ { const uint32_t x49 = in2[2];
+ { const uint32_t x47 = in2[1];
+ { const uint32_t x45 = in2[0];
+ out[0] = ((0x1ffffc2 + x5) - x45);
+ out[1] = ((0x1fffffe + x7) - x47);
+ out[2] = ((0xfffffe + x9) - x49);
+ out[3] = ((0x1fffffe + x11) - x51);
+ out[4] = ((0xfffffe + x13) - x53);
+ out[5] = ((0x1fffffe + x15) - x55);
+ out[6] = ((0xfffffe + x17) - x57);
+ out[7] = ((0x1fffffe + x19) - x59);
+ out[8] = ((0x1fffffe + x21) - x61);
+ out[9] = ((0xfffffe + x23) - x63);
+ out[10] = ((0x1fffffe + x25) - x65);
+ out[11] = ((0xfffffe + x27) - x67);
+ out[12] = ((0x1fffffe + x29) - x69);
+ out[13] = ((0xfffffe + x31) - x71);
+ out[14] = ((0x1fffffe + x33) - x73);
+ out[15] = ((0x1fffffe + x35) - x75);
+ out[16] = ((0xfffffe + x37) - x77);
+ out[17] = ((0x1fffffe + x39) - x79);
+ out[18] = ((0xfffffe + x41) - x81);
+ out[19] = ((0x1fffffe + x43) - x83);
+ out[20] = ((0xfffffe + x42) - x82);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e495m31_21limbs/fesubDisplay.log b/src/Specific/solinas32_2e495m31_21limbs/fesubDisplay.log
index 36297ff63..7ec697dfc 100644
--- a/src/Specific/solinas32_2e495m31_21limbs/fesubDisplay.log
+++ b/src/Specific/solinas32_2e495m31_21limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x42, x43, x41, x39, x37, x35, x33, x31, x29, x27, x25, x23, x21, x19, x17, x15, x13, x11, x9, x7, x5, (x82, x83, x81, x79, x77, x75, x73, x71, x69, x67, x65, x63, x61, x59, x57, x55, x53, x51, x49, x47, x45))%core,
- (((0xfffffe + x42) - x82), ((0x1fffffe + x43) - x83), ((0xfffffe + x41) - x81), ((0x1fffffe + x39) - x79), ((0xfffffe + x37) - x77), ((0x1fffffe + x35) - x75), ((0x1fffffe + x33) - x73), ((0xfffffe + x31) - x71), ((0x1fffffe + x29) - x69), ((0xfffffe + x27) - x67), ((0x1fffffe + x25) - x65), ((0xfffffe + x23) - x63), ((0x1fffffe + x21) - x61), ((0x1fffffe + x19) - x59), ((0xfffffe + x17) - x57), ((0x1fffffe + x15) - x55), ((0xfffffe + x13) - x53), ((0x1fffffe + x11) - x51), ((0xfffffe + x9) - x49), ((0x1fffffe + x7) - x47), ((Const 33554370 + x5) - x45)))
+ (((0xfffffe + x42) - x82), ((0x1fffffe + x43) - x83), ((0xfffffe + x41) - x81), ((0x1fffffe + x39) - x79), ((0xfffffe + x37) - x77), ((0x1fffffe + x35) - x75), ((0x1fffffe + x33) - x73), ((0xfffffe + x31) - x71), ((0x1fffffe + x29) - x69), ((0xfffffe + x27) - x67), ((0x1fffffe + x25) - x65), ((0xfffffe + x23) - x63), ((0x1fffffe + x21) - x61), ((0x1fffffe + x19) - x59), ((0xfffffe + x17) - x57), ((0x1fffffe + x15) - x55), ((0xfffffe + x13) - x53), ((0x1fffffe + x11) - x51), ((0xfffffe + x9) - x49), ((0x1fffffe + x7) - x47), ((0x1ffffc2 + x5) - x45)))
(x, x0)%core
: word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 * word32 → ReturnType (uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t * uint32_t)
diff --git a/src/Specific/solinas32_2e495m31_21limbs/freeze.c b/src/Specific/solinas32_2e495m31_21limbs/freeze.c
new file mode 100644
index 000000000..7ec13fe90
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31_21limbs/freeze.c
@@ -0,0 +1,109 @@
+static void freeze(uint32_t out[21], const uint32_t in1[21]) {
+ { const uint32_t x39 = in1[20];
+ { const uint32_t x40 = in1[19];
+ { const uint32_t x38 = in1[18];
+ { const uint32_t x36 = in1[17];
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x42, uint8_t x43 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xffffe1);
+ { uint32_t x45, uint8_t x46 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x43, Return x4, 0xffffff);
+ { uint32_t x48, uint8_t x49 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x46, Return x6, 0x7fffff);
+ { uint32_t x51, uint8_t x52 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x49, Return x8, 0xffffff);
+ { uint32_t x54, uint8_t x55 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x52, Return x10, 0x7fffff);
+ { uint32_t x57, uint8_t x58 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x55, Return x12, 0xffffff);
+ { uint32_t x60, uint8_t x61 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x58, Return x14, 0x7fffff);
+ { uint32_t x63, uint8_t x64 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x61, Return x16, 0xffffff);
+ { uint32_t x66, uint8_t x67 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x64, Return x18, 0xffffff);
+ { uint32_t x69, uint8_t x70 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x67, Return x20, 0x7fffff);
+ { uint32_t x72, uint8_t x73 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x70, Return x22, 0xffffff);
+ { uint32_t x75, uint8_t x76 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x73, Return x24, 0x7fffff);
+ { uint32_t x78, uint8_t x79 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x76, Return x26, 0xffffff);
+ { uint32_t x81, uint8_t x82 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x79, Return x28, 0x7fffff);
+ { uint32_t x84, uint8_t x85 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x82, Return x30, 0xffffff);
+ { uint32_t x87, uint8_t x88 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x85, Return x32, 0xffffff);
+ { uint32_t x90, uint8_t x91 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x88, Return x34, 0x7fffff);
+ { uint32_t x93, uint8_t x94 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x91, Return x36, 0xffffff);
+ { uint32_t x96, uint8_t x97 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x94, Return x38, 0x7fffff);
+ { uint32_t x99, uint8_t x100 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x97, Return x40, 0xffffff);
+ { uint32_t x102, uint8_t x103 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x100, Return x39, 0x7fffff);
+ { uint32_t x104 = cmovznz32(x103, 0x0, 0xffffffff);
+ { uint32_t x105 = (x104 & 0xffffe1);
+ { uint32_t x107, uint8_t x108 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x42, Return x105);
+ { uint32_t x109 = (x104 & 0xffffff);
+ { uint32_t x111, uint8_t x112 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x108, Return x45, Return x109);
+ { uint32_t x113 = (x104 & 0x7fffff);
+ { uint32_t x115, uint8_t x116 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x112, Return x48, Return x113);
+ { uint32_t x117 = (x104 & 0xffffff);
+ { uint32_t x119, uint8_t x120 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x116, Return x51, Return x117);
+ { uint32_t x121 = (x104 & 0x7fffff);
+ { uint32_t x123, uint8_t x124 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x120, Return x54, Return x121);
+ { uint32_t x125 = (x104 & 0xffffff);
+ { uint32_t x127, uint8_t x128 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x124, Return x57, Return x125);
+ { uint32_t x129 = (x104 & 0x7fffff);
+ { uint32_t x131, uint8_t x132 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x128, Return x60, Return x129);
+ { uint32_t x133 = (x104 & 0xffffff);
+ { uint32_t x135, uint8_t x136 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x132, Return x63, Return x133);
+ { uint32_t x137 = (x104 & 0xffffff);
+ { uint32_t x139, uint8_t x140 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x136, Return x66, Return x137);
+ { uint32_t x141 = (x104 & 0x7fffff);
+ { uint32_t x143, uint8_t x144 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x140, Return x69, Return x141);
+ { uint32_t x145 = (x104 & 0xffffff);
+ { uint32_t x147, uint8_t x148 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x144, Return x72, Return x145);
+ { uint32_t x149 = (x104 & 0x7fffff);
+ { uint32_t x151, uint8_t x152 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x148, Return x75, Return x149);
+ { uint32_t x153 = (x104 & 0xffffff);
+ { uint32_t x155, uint8_t x156 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x152, Return x78, Return x153);
+ { uint32_t x157 = (x104 & 0x7fffff);
+ { uint32_t x159, uint8_t x160 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x156, Return x81, Return x157);
+ { uint32_t x161 = (x104 & 0xffffff);
+ { uint32_t x163, uint8_t x164 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x160, Return x84, Return x161);
+ { uint32_t x165 = (x104 & 0xffffff);
+ { uint32_t x167, uint8_t x168 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x164, Return x87, Return x165);
+ { uint32_t x169 = (x104 & 0x7fffff);
+ { uint32_t x171, uint8_t x172 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x168, Return x90, Return x169);
+ { uint32_t x173 = (x104 & 0xffffff);
+ { uint32_t x175, uint8_t x176 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x172, Return x93, Return x173);
+ { uint32_t x177 = (x104 & 0x7fffff);
+ { uint32_t x179, uint8_t x180 = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x176, Return x96, Return x177);
+ { uint32_t x181 = (x104 & 0xffffff);
+ { uint32_t x183, uint8_t x184 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x180, Return x99, Return x181);
+ { uint32_t x185 = (x104 & 0x7fffff);
+ { uint32_t x187, uint8_t _ = Op (Syntax.AddWithGetCarry 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x184, Return x102, Return x185);
+ out[0] = x107;
+ out[1] = x111;
+ out[2] = x115;
+ out[3] = x119;
+ out[4] = x123;
+ out[5] = x127;
+ out[6] = x131;
+ out[7] = x135;
+ out[8] = x139;
+ out[9] = x143;
+ out[10] = x147;
+ out[11] = x151;
+ out[12] = x155;
+ out[13] = x159;
+ out[14] = x163;
+ out[15] = x167;
+ out[16] = x171;
+ out[17] = x175;
+ out[18] = x179;
+ out[19] = x183;
+ out[20] = x187;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e495m31_21limbs/freezeDisplay.log b/src/Specific/solinas32_2e495m31_21limbs/freezeDisplay.log
index de25b0097..0317a3298 100644
--- a/src/Specific/solinas32_2e495m31_21limbs/freezeDisplay.log
+++ b/src/Specific/solinas32_2e495m31_21limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x39, x40, x38, x36, x34, x32, x30, x28, x26, x24, x22, x20, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
- uint32_t x42, uint8_t x43 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, Const 16777185);
+ uint32_t x42, uint8_t x43 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xffffe1);
uint32_t x45, uint8_t x46 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x43, Return x4, 0xffffff);
uint32_t x48, uint8_t x49 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x46, Return x6, 0x7fffff);
uint32_t x51, uint8_t x52 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x49, Return x8, 0xffffff);
@@ -24,7 +24,7 @@ Interp-η
uint32_t x99, uint8_t x100 = Op (Syntax.SubWithGetBorrow 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x97, Return x40, 0xffffff);
uint32_t x102, uint8_t x103 = Op (Syntax.SubWithGetBorrow 23 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x100, Return x39, 0x7fffff);
uint32_t x104 = cmovznz32(x103, 0x0, 0xffffffff);
- uint32_t x105 = (x104 & Const 16777185);
+ uint32_t x105 = (x104 & 0xffffe1);
uint32_t x107, uint8_t x108 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x42, Return x105);
uint32_t x109 = (x104 & 0xffffff);
uint32_t x111, uint8_t x112 = Op (Syntax.AddWithGetCarry 24 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x108, Return x45, Return x109);
diff --git a/src/Specific/solinas32_2e521m1_19limbs/feadd.c b/src/Specific/solinas32_2e521m1_19limbs/feadd.c
new file mode 100644
index 000000000..7432e2ef1
--- /dev/null
+++ b/src/Specific/solinas32_2e521m1_19limbs/feadd.c
@@ -0,0 +1,60 @@
+static void feadd(uint32_t out[19], const uint32_t in1[19], const uint32_t in2[19]) {
+ { const uint32_t x38 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x74 = in2[18];
+ { const uint32_t x75 = in2[17];
+ { const uint32_t x73 = in2[16];
+ { const uint32_t x71 = in2[15];
+ { const uint32_t x69 = in2[14];
+ { const uint32_t x67 = in2[13];
+ { const uint32_t x65 = in2[12];
+ { const uint32_t x63 = in2[11];
+ { const uint32_t x61 = in2[10];
+ { const uint32_t x59 = in2[9];
+ { const uint32_t x57 = in2[8];
+ { const uint32_t x55 = in2[7];
+ { const uint32_t x53 = in2[6];
+ { const uint32_t x51 = in2[5];
+ { const uint32_t x49 = in2[4];
+ { const uint32_t x47 = in2[3];
+ { const uint32_t x45 = in2[2];
+ { const uint32_t x43 = in2[1];
+ { const uint32_t x41 = in2[0];
+ out[0] = (x5 + x41);
+ out[1] = (x7 + x43);
+ out[2] = (x9 + x45);
+ out[3] = (x11 + x47);
+ out[4] = (x13 + x49);
+ out[5] = (x15 + x51);
+ out[6] = (x17 + x53);
+ out[7] = (x19 + x55);
+ out[8] = (x21 + x57);
+ out[9] = (x23 + x59);
+ out[10] = (x25 + x61);
+ out[11] = (x27 + x63);
+ out[12] = (x29 + x65);
+ out[13] = (x31 + x67);
+ out[14] = (x33 + x69);
+ out[15] = (x35 + x71);
+ out[16] = (x37 + x73);
+ out[17] = (x39 + x75);
+ out[18] = (x38 + x74);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e521m1_19limbs/fesub.c b/src/Specific/solinas32_2e521m1_19limbs/fesub.c
new file mode 100644
index 000000000..038fe49c1
--- /dev/null
+++ b/src/Specific/solinas32_2e521m1_19limbs/fesub.c
@@ -0,0 +1,60 @@
+static void fesub(uint32_t out[19], const uint32_t in1[19], const uint32_t in2[19]) {
+ { const uint32_t x38 = in1[18];
+ { const uint32_t x39 = in1[17];
+ { const uint32_t x37 = in1[16];
+ { const uint32_t x35 = in1[15];
+ { const uint32_t x33 = in1[14];
+ { const uint32_t x31 = in1[13];
+ { const uint32_t x29 = in1[12];
+ { const uint32_t x27 = in1[11];
+ { const uint32_t x25 = in1[10];
+ { const uint32_t x23 = in1[9];
+ { const uint32_t x21 = in1[8];
+ { const uint32_t x19 = in1[7];
+ { const uint32_t x17 = in1[6];
+ { const uint32_t x15 = in1[5];
+ { const uint32_t x13 = in1[4];
+ { const uint32_t x11 = in1[3];
+ { const uint32_t x9 = in1[2];
+ { const uint32_t x7 = in1[1];
+ { const uint32_t x5 = in1[0];
+ { const uint32_t x74 = in2[18];
+ { const uint32_t x75 = in2[17];
+ { const uint32_t x73 = in2[16];
+ { const uint32_t x71 = in2[15];
+ { const uint32_t x69 = in2[14];
+ { const uint32_t x67 = in2[13];
+ { const uint32_t x65 = in2[12];
+ { const uint32_t x63 = in2[11];
+ { const uint32_t x61 = in2[10];
+ { const uint32_t x59 = in2[9];
+ { const uint32_t x57 = in2[8];
+ { const uint32_t x55 = in2[7];
+ { const uint32_t x53 = in2[6];
+ { const uint32_t x51 = in2[5];
+ { const uint32_t x49 = in2[4];
+ { const uint32_t x47 = in2[3];
+ { const uint32_t x45 = in2[2];
+ { const uint32_t x43 = in2[1];
+ { const uint32_t x41 = in2[0];
+ out[0] = ((0x1ffffffe + x5) - x41);
+ out[1] = ((0xffffffe + x7) - x43);
+ out[2] = ((0x1ffffffe + x9) - x45);
+ out[3] = ((0xffffffe + x11) - x47);
+ out[4] = ((0x1ffffffe + x13) - x49);
+ out[5] = ((0xffffffe + x15) - x51);
+ out[6] = ((0xffffffe + x17) - x53);
+ out[7] = ((0x1ffffffe + x19) - x55);
+ out[8] = ((0xffffffe + x21) - x57);
+ out[9] = ((0x1ffffffe + x23) - x59);
+ out[10] = ((0xffffffe + x25) - x61);
+ out[11] = ((0x1ffffffe + x27) - x63);
+ out[12] = ((0xffffffe + x29) - x65);
+ out[13] = ((0xffffffe + x31) - x67);
+ out[14] = ((0x1ffffffe + x33) - x69);
+ out[15] = ((0xffffffe + x35) - x71);
+ out[16] = ((0x1ffffffe + x37) - x73);
+ out[17] = ((0xffffffe + x39) - x75);
+ out[18] = ((0xffffffe + x38) - x74);
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas32_2e521m1_19limbs/freeze.c b/src/Specific/solinas32_2e521m1_19limbs/freeze.c
new file mode 100644
index 000000000..126184b96
--- /dev/null
+++ b/src/Specific/solinas32_2e521m1_19limbs/freeze.c
@@ -0,0 +1,99 @@
+static void freeze(uint32_t out[19], const uint32_t in1[19]) {
+ { const uint32_t x35 = in1[18];
+ { const uint32_t x36 = in1[17];
+ { const uint32_t x34 = in1[16];
+ { const uint32_t x32 = in1[15];
+ { const uint32_t x30 = in1[14];
+ { const uint32_t x28 = in1[13];
+ { const uint32_t x26 = in1[12];
+ { const uint32_t x24 = in1[11];
+ { const uint32_t x22 = in1[10];
+ { const uint32_t x20 = in1[9];
+ { const uint32_t x18 = in1[8];
+ { const uint32_t x16 = in1[7];
+ { const uint32_t x14 = in1[6];
+ { const uint32_t x12 = in1[5];
+ { const uint32_t x10 = in1[4];
+ { const uint32_t x8 = in1[3];
+ { const uint32_t x6 = in1[2];
+ { const uint32_t x4 = in1[1];
+ { const uint32_t x2 = in1[0];
+ { uint32_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x2, 0xfffffff);
+ { uint32_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x39, Return x4, 0x7ffffff);
+ { uint32_t x44, uint8_t x45 = Op (Syntax.SubWithGetBorrow 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x42, Return x6, 0xfffffff);
+ { uint32_t x47, uint8_t x48 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x45, Return x8, 0x7ffffff);
+ { uint32_t x50, uint8_t x51 = Op (Syntax.SubWithGetBorrow 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x48, Return x10, 0xfffffff);
+ { uint32_t x53, uint8_t x54 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x51, Return x12, 0x7ffffff);
+ { uint32_t x56, uint8_t x57 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x54, Return x14, 0x7ffffff);
+ { uint32_t x59, uint8_t x60 = Op (Syntax.SubWithGetBorrow 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x57, Return x16, 0xfffffff);
+ { uint32_t x62, uint8_t x63 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x60, Return x18, 0x7ffffff);
+ { uint32_t x65, uint8_t x66 = Op (Syntax.SubWithGetBorrow 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x63, Return x20, 0xfffffff);
+ { uint32_t x68, uint8_t x69 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x66, Return x22, 0x7ffffff);
+ { uint32_t x71, uint8_t x72 = Op (Syntax.SubWithGetBorrow 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x69, Return x24, 0xfffffff);
+ { uint32_t x74, uint8_t x75 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x72, Return x26, 0x7ffffff);
+ { uint32_t x77, uint8_t x78 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x75, Return x28, 0x7ffffff);
+ { uint32_t x80, uint8_t x81 = Op (Syntax.SubWithGetBorrow 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x78, Return x30, 0xfffffff);
+ { uint32_t x83, uint8_t x84 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x81, Return x32, 0x7ffffff);
+ { uint32_t x86, uint8_t x87 = Op (Syntax.SubWithGetBorrow 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x84, Return x34, 0xfffffff);
+ { uint32_t x89, uint8_t x90 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x87, Return x36, 0x7ffffff);
+ { uint32_t x92, uint8_t x93 = Op (Syntax.SubWithGetBorrow 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x90, Return x35, 0x7ffffff);
+ { uint32_t x94 = cmovznz32(x93, 0x0, 0xffffffff);
+ { uint32_t x95 = (x94 & 0xfffffff);
+ { uint32_t x97, uint8_t x98 = Op (Syntax.AddWithGetCarry 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (0x0, Return x38, Return x95);
+ { uint32_t x99 = (x94 & 0x7ffffff);
+ { uint32_t x101, uint8_t x102 = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x98, Return x41, Return x99);
+ { uint32_t x103 = (x94 & 0xfffffff);
+ { uint32_t x105, uint8_t x106 = Op (Syntax.AddWithGetCarry 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x102, Return x44, Return x103);
+ { uint32_t x107 = (x94 & 0x7ffffff);
+ { uint32_t x109, uint8_t x110 = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x106, Return x47, Return x107);
+ { uint32_t x111 = (x94 & 0xfffffff);
+ { uint32_t x113, uint8_t x114 = Op (Syntax.AddWithGetCarry 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x110, Return x50, Return x111);
+ { uint32_t x115 = (x94 & 0x7ffffff);
+ { uint32_t x117, uint8_t x118 = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x114, Return x53, Return x115);
+ { uint32_t x119 = (x94 & 0x7ffffff);
+ { uint32_t x121, uint8_t x122 = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x118, Return x56, Return x119);
+ { uint32_t x123 = (x94 & 0xfffffff);
+ { uint32_t x125, uint8_t x126 = Op (Syntax.AddWithGetCarry 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x122, Return x59, Return x123);
+ { uint32_t x127 = (x94 & 0x7ffffff);
+ { uint32_t x129, uint8_t x130 = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x126, Return x62, Return x127);
+ { uint32_t x131 = (x94 & 0xfffffff);
+ { uint32_t x133, uint8_t x134 = Op (Syntax.AddWithGetCarry 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x130, Return x65, Return x131);
+ { uint32_t x135 = (x94 & 0x7ffffff);
+ { uint32_t x137, uint8_t x138 = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x134, Return x68, Return x135);
+ { uint32_t x139 = (x94 & 0xfffffff);
+ { uint32_t x141, uint8_t x142 = Op (Syntax.AddWithGetCarry 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x138, Return x71, Return x139);
+ { uint32_t x143 = (x94 & 0x7ffffff);
+ { uint32_t x145, uint8_t x146 = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x142, Return x74, Return x143);
+ { uint32_t x147 = (x94 & 0x7ffffff);
+ { uint32_t x149, uint8_t x150 = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x146, Return x77, Return x147);
+ { uint32_t x151 = (x94 & 0xfffffff);
+ { uint32_t x153, uint8_t x154 = Op (Syntax.AddWithGetCarry 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x150, Return x80, Return x151);
+ { uint32_t x155 = (x94 & 0x7ffffff);
+ { uint32_t x157, uint8_t x158 = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x154, Return x83, Return x155);
+ { uint32_t x159 = (x94 & 0xfffffff);
+ { uint32_t x161, uint8_t x162 = Op (Syntax.AddWithGetCarry 28 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x158, Return x86, Return x159);
+ { uint32_t x163 = (x94 & 0x7ffffff);
+ { uint32_t x165, uint8_t x166 = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x162, Return x89, Return x163);
+ { uint32_t x167 = (x94 & 0x7ffffff);
+ { uint32_t x169, uint8_t _ = Op (Syntax.AddWithGetCarry 27 (Syntax.TWord 3) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 5) (Syntax.TWord 3)) (Return x166, Return x92, Return x167);
+ out[0] = x97;
+ out[1] = x101;
+ out[2] = x105;
+ out[3] = x109;
+ out[4] = x113;
+ out[5] = x117;
+ out[6] = x121;
+ out[7] = x125;
+ out[8] = x129;
+ out[9] = x133;
+ out[10] = x137;
+ out[11] = x141;
+ out[12] = x145;
+ out[13] = x149;
+ out[14] = x153;
+ out[15] = x157;
+ out[16] = x161;
+ out[17] = x165;
+ out[18] = x169;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas64_2e256m2e32m977_7limbs/feadd.c b/src/Specific/solinas64_2e256m2e32m977_7limbs/feadd.c
new file mode 100644
index 000000000..9acf97578
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977_7limbs/feadd.c
@@ -0,0 +1,24 @@
+static void feadd(uint64_t out[7], const uint64_t in1[7], const uint64_t in2[7]) {
+ { const uint64_t x14 = in1[6];
+ { const uint64_t x15 = in1[5];
+ { const uint64_t x13 = in1[4];
+ { const uint64_t x11 = in1[3];
+ { const uint64_t x9 = in1[2];
+ { const uint64_t x7 = in1[1];
+ { const uint64_t x5 = in1[0];
+ { const uint64_t x26 = in2[6];
+ { const uint64_t x27 = in2[5];
+ { const uint64_t x25 = in2[4];
+ { const uint64_t x23 = in2[3];
+ { const uint64_t x21 = in2[2];
+ { const uint64_t x19 = in2[1];
+ { const uint64_t x17 = in2[0];
+ out[0] = (x5 + x17);
+ out[1] = (x7 + x19);
+ out[2] = (x9 + x21);
+ out[3] = (x11 + x23);
+ out[4] = (x13 + x25);
+ out[5] = (x15 + x27);
+ out[6] = (x14 + x26);
+ }}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas64_2e256m2e32m977_7limbs/femul.c b/src/Specific/solinas64_2e256m2e32m977_7limbs/femul.c
new file mode 100644
index 000000000..9944c28fa
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977_7limbs/femul.c
@@ -0,0 +1,65 @@
+static void femul(uint64_t out[7], const uint64_t in1[7], const uint64_t in2[7]) {
+ { const uint64_t x14 = in1[6];
+ { const uint64_t x15 = in1[5];
+ { const uint64_t x13 = in1[4];
+ { const uint64_t x11 = in1[3];
+ { const uint64_t x9 = in1[2];
+ { const uint64_t x7 = in1[1];
+ { const uint64_t x5 = in1[0];
+ { const uint64_t x26 = in2[6];
+ { const uint64_t x27 = in2[5];
+ { const uint64_t x25 = in2[4];
+ { const uint64_t x23 = in2[3];
+ { const uint64_t x21 = in2[2];
+ { const uint64_t x19 = in2[1];
+ { const uint64_t x17 = in2[0];
+ { uint128_t x28 = (((uint128_t)x5 * x26) + (((uint128_t)x7 * x27) + ((0x2 * ((uint128_t)x9 * x25)) + (((uint128_t)x11 * x23) + ((0x2 * ((uint128_t)x13 * x21)) + (((uint128_t)x15 * x19) + ((uint128_t)x14 * x17)))))));
+ { uint128_t x29 = ((((uint128_t)x5 * x27) + ((0x2 * ((uint128_t)x7 * x25)) + ((0x2 * ((uint128_t)x9 * x23)) + ((0x2 * ((uint128_t)x11 * x21)) + ((0x2 * ((uint128_t)x13 * x19)) + ((uint128_t)x15 * x17)))))) + ((0x3d1 * (0x2 * ((uint128_t)x14 * x26))) + (0x100000000 * (0x2 * ((uint128_t)x14 * x26)))));
+ { uint128_t x30 = ((((uint128_t)x5 * x25) + (((uint128_t)x7 * x23) + ((0x2 * ((uint128_t)x9 * x21)) + (((uint128_t)x11 * x19) + ((uint128_t)x13 * x17))))) + ((0x3d1 * (((uint128_t)x15 * x26) + ((uint128_t)x14 * x27))) + (0x100000000 * (((uint128_t)x15 * x26) + ((uint128_t)x14 * x27)))));
+ { uint128_t x31 = ((((uint128_t)x5 * x23) + ((0x2 * ((uint128_t)x7 * x21)) + ((0x2 * ((uint128_t)x9 * x19)) + ((uint128_t)x11 * x17)))) + ((0x3d1 * ((0x2 * ((uint128_t)x13 * x26)) + (((uint128_t)x15 * x27) + (0x2 * ((uint128_t)x14 * x25))))) + (0x100000000 * ((0x2 * ((uint128_t)x13 * x26)) + (((uint128_t)x15 * x27) + (0x2 * ((uint128_t)x14 * x25)))))));
+ { uint128_t x32 = ((((uint128_t)x5 * x21) + (((uint128_t)x7 * x19) + ((uint128_t)x9 * x17))) + ((0x3d1 * (((uint128_t)x11 * x26) + (((uint128_t)x13 * x27) + (((uint128_t)x15 * x25) + ((uint128_t)x14 * x23))))) + (0x100000000 * (((uint128_t)x11 * x26) + (((uint128_t)x13 * x27) + (((uint128_t)x15 * x25) + ((uint128_t)x14 * x23)))))));
+ { uint128_t x33 = ((((uint128_t)x5 * x19) + ((uint128_t)x7 * x17)) + ((0x3d1 * ((0x2 * ((uint128_t)x9 * x26)) + (((uint128_t)x11 * x27) + ((0x2 * ((uint128_t)x13 * x25)) + (((uint128_t)x15 * x23) + (0x2 * ((uint128_t)x14 * x21))))))) + (0x100000000 * ((0x2 * ((uint128_t)x9 * x26)) + (((uint128_t)x11 * x27) + ((0x2 * ((uint128_t)x13 * x25)) + (((uint128_t)x15 * x23) + (0x2 * ((uint128_t)x14 * x21)))))))));
+ { uint128_t x34 = (((uint128_t)x5 * x17) + ((0x3d1 * ((0x2 * ((uint128_t)x7 * x26)) + ((0x2 * ((uint128_t)x9 * x27)) + ((0x2 * ((uint128_t)x11 * x25)) + ((0x2 * ((uint128_t)x13 * x23)) + ((0x2 * ((uint128_t)x15 * x21)) + (0x2 * ((uint128_t)x14 * x19)))))))) + (0x100000000 * ((0x2 * ((uint128_t)x7 * x26)) + ((0x2 * ((uint128_t)x9 * x27)) + ((0x2 * ((uint128_t)x11 * x25)) + ((0x2 * ((uint128_t)x13 * x23)) + ((0x2 * ((uint128_t)x15 * x21)) + (0x2 * ((uint128_t)x14 * x19))))))))));
+ { uint64_t x35 = (uint64_t) (x28 >> 0x24);
+ { uint64_t x36 = ((uint64_t)x28 & 0xfffffffff);
+ { uint128_t x37 = (((uint128_t)0x1000000000 * x35) + x36);
+ { uint64_t x38 = (uint64_t) (x37 >> 0x24);
+ { uint64_t x39 = ((uint64_t)x37 & 0xfffffffff);
+ { uint128_t x40 = (((uint128_t)0x1000000000 * x38) + x39);
+ { uint64_t x41 = (uint64_t) (x40 >> 0x24);
+ { uint64_t x42 = ((uint64_t)x40 & 0xfffffffff);
+ { uint128_t x43 = (x34 + ((0x3d1 * x41) + ((uint128_t)0x100000000 * x41)));
+ { uint128_t x44 = (x43 >> 0x25);
+ { uint64_t x45 = ((uint64_t)x43 & 0x1fffffffff);
+ { uint128_t x46 = (x44 + x33);
+ { uint128_t x47 = (x46 >> 0x25);
+ { uint64_t x48 = ((uint64_t)x46 & 0x1fffffffff);
+ { uint128_t x49 = (x47 + x32);
+ { uint128_t x50 = (x49 >> 0x24);
+ { uint64_t x51 = ((uint64_t)x49 & 0xfffffffff);
+ { uint128_t x52 = (x50 + x31);
+ { uint128_t x53 = (x52 >> 0x25);
+ { uint64_t x54 = ((uint64_t)x52 & 0x1fffffffff);
+ { uint128_t x55 = (x53 + x30);
+ { uint128_t x56 = (x55 >> 0x24);
+ { uint64_t x57 = ((uint64_t)x55 & 0xfffffffff);
+ { uint128_t x58 = (x56 + x29);
+ { uint128_t x59 = (x58 >> 0x25);
+ { uint64_t x60 = ((uint64_t)x58 & 0x1fffffffff);
+ { uint128_t x61 = (x59 + x42);
+ { uint64_t x62 = (uint64_t) (x61 >> 0x24);
+ { uint64_t x63 = ((uint64_t)x61 & 0xfffffffff);
+ { uint128_t x64 = (x45 + ((0x3d1 * x62) + ((uint128_t)0x100000000 * x62)));
+ { uint64_t x65 = (uint64_t) (x64 >> 0x25);
+ { uint64_t x66 = ((uint64_t)x64 & 0x1fffffffff);
+ { uint64_t x67 = (x66 >> 0x25);
+ { uint64_t x68 = (x66 & 0x1fffffffff);
+ out[0] = x68;
+ out[1] = (x67 + (x65 + x48));
+ out[2] = x51;
+ out[3] = x54;
+ out[4] = x57;
+ out[5] = x60;
+ out[6] = x63;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas64_2e256m2e32m977_7limbs/fesquare.c b/src/Specific/solinas64_2e256m2e32m977_7limbs/fesquare.c
new file mode 100644
index 000000000..933c13201
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977_7limbs/fesquare.c
@@ -0,0 +1,58 @@
+static void fesquare(uint64_t out[7], const uint64_t in1[7]) {
+ { const uint64_t x11 = in1[6];
+ { const uint64_t x12 = in1[5];
+ { const uint64_t x10 = in1[4];
+ { const uint64_t x8 = in1[3];
+ { const uint64_t x6 = in1[2];
+ { const uint64_t x4 = in1[1];
+ { const uint64_t x2 = in1[0];
+ { uint128_t x13 = (((uint128_t)x2 * x11) + (((uint128_t)x4 * x12) + ((0x2 * ((uint128_t)x6 * x10)) + (((uint128_t)x8 * x8) + ((0x2 * ((uint128_t)x10 * x6)) + (((uint128_t)x12 * x4) + ((uint128_t)x11 * x2)))))));
+ { uint128_t x14 = ((((uint128_t)x2 * x12) + ((0x2 * ((uint128_t)x4 * x10)) + ((0x2 * ((uint128_t)x6 * x8)) + ((0x2 * ((uint128_t)x8 * x6)) + ((0x2 * ((uint128_t)x10 * x4)) + ((uint128_t)x12 * x2)))))) + ((0x3d1 * (0x2 * ((uint128_t)x11 * x11))) + (0x100000000 * (0x2 * ((uint128_t)x11 * x11)))));
+ { uint128_t x15 = ((((uint128_t)x2 * x10) + (((uint128_t)x4 * x8) + ((0x2 * ((uint128_t)x6 * x6)) + (((uint128_t)x8 * x4) + ((uint128_t)x10 * x2))))) + ((0x3d1 * (((uint128_t)x12 * x11) + ((uint128_t)x11 * x12))) + (0x100000000 * (((uint128_t)x12 * x11) + ((uint128_t)x11 * x12)))));
+ { uint128_t x16 = ((((uint128_t)x2 * x8) + ((0x2 * ((uint128_t)x4 * x6)) + ((0x2 * ((uint128_t)x6 * x4)) + ((uint128_t)x8 * x2)))) + ((0x3d1 * ((0x2 * ((uint128_t)x10 * x11)) + (((uint128_t)x12 * x12) + (0x2 * ((uint128_t)x11 * x10))))) + (0x100000000 * ((0x2 * ((uint128_t)x10 * x11)) + (((uint128_t)x12 * x12) + (0x2 * ((uint128_t)x11 * x10)))))));
+ { uint128_t x17 = ((((uint128_t)x2 * x6) + (((uint128_t)x4 * x4) + ((uint128_t)x6 * x2))) + ((0x3d1 * (((uint128_t)x8 * x11) + (((uint128_t)x10 * x12) + (((uint128_t)x12 * x10) + ((uint128_t)x11 * x8))))) + (0x100000000 * (((uint128_t)x8 * x11) + (((uint128_t)x10 * x12) + (((uint128_t)x12 * x10) + ((uint128_t)x11 * x8)))))));
+ { uint128_t x18 = ((((uint128_t)x2 * x4) + ((uint128_t)x4 * x2)) + ((0x3d1 * ((0x2 * ((uint128_t)x6 * x11)) + (((uint128_t)x8 * x12) + ((0x2 * ((uint128_t)x10 * x10)) + (((uint128_t)x12 * x8) + (0x2 * ((uint128_t)x11 * x6))))))) + (0x100000000 * ((0x2 * ((uint128_t)x6 * x11)) + (((uint128_t)x8 * x12) + ((0x2 * ((uint128_t)x10 * x10)) + (((uint128_t)x12 * x8) + (0x2 * ((uint128_t)x11 * x6)))))))));
+ { uint128_t x19 = (((uint128_t)x2 * x2) + ((0x3d1 * ((0x2 * ((uint128_t)x4 * x11)) + ((0x2 * ((uint128_t)x6 * x12)) + ((0x2 * ((uint128_t)x8 * x10)) + ((0x2 * ((uint128_t)x10 * x8)) + ((0x2 * ((uint128_t)x12 * x6)) + (0x2 * ((uint128_t)x11 * x4)))))))) + (0x100000000 * ((0x2 * ((uint128_t)x4 * x11)) + ((0x2 * ((uint128_t)x6 * x12)) + ((0x2 * ((uint128_t)x8 * x10)) + ((0x2 * ((uint128_t)x10 * x8)) + ((0x2 * ((uint128_t)x12 * x6)) + (0x2 * ((uint128_t)x11 * x4))))))))));
+ { uint64_t x20 = (uint64_t) (x13 >> 0x24);
+ { uint64_t x21 = ((uint64_t)x13 & 0xfffffffff);
+ { uint128_t x22 = (((uint128_t)0x1000000000 * x20) + x21);
+ { uint64_t x23 = (uint64_t) (x22 >> 0x24);
+ { uint64_t x24 = ((uint64_t)x22 & 0xfffffffff);
+ { uint128_t x25 = (((uint128_t)0x1000000000 * x23) + x24);
+ { uint64_t x26 = (uint64_t) (x25 >> 0x24);
+ { uint64_t x27 = ((uint64_t)x25 & 0xfffffffff);
+ { uint128_t x28 = (x19 + ((0x3d1 * x26) + ((uint128_t)0x100000000 * x26)));
+ { uint128_t x29 = (x28 >> 0x25);
+ { uint64_t x30 = ((uint64_t)x28 & 0x1fffffffff);
+ { uint128_t x31 = (x29 + x18);
+ { uint128_t x32 = (x31 >> 0x25);
+ { uint64_t x33 = ((uint64_t)x31 & 0x1fffffffff);
+ { uint128_t x34 = (x32 + x17);
+ { uint128_t x35 = (x34 >> 0x24);
+ { uint64_t x36 = ((uint64_t)x34 & 0xfffffffff);
+ { uint128_t x37 = (x35 + x16);
+ { uint128_t x38 = (x37 >> 0x25);
+ { uint64_t x39 = ((uint64_t)x37 & 0x1fffffffff);
+ { uint128_t x40 = (x38 + x15);
+ { uint128_t x41 = (x40 >> 0x24);
+ { uint64_t x42 = ((uint64_t)x40 & 0xfffffffff);
+ { uint128_t x43 = (x41 + x14);
+ { uint128_t x44 = (x43 >> 0x25);
+ { uint64_t x45 = ((uint64_t)x43 & 0x1fffffffff);
+ { uint128_t x46 = (x44 + x27);
+ { uint64_t x47 = (uint64_t) (x46 >> 0x24);
+ { uint64_t x48 = ((uint64_t)x46 & 0xfffffffff);
+ { uint128_t x49 = (x30 + ((0x3d1 * x47) + ((uint128_t)0x100000000 * x47)));
+ { uint64_t x50 = (uint64_t) (x49 >> 0x25);
+ { uint64_t x51 = ((uint64_t)x49 & 0x1fffffffff);
+ { uint64_t x52 = (x51 >> 0x25);
+ { uint64_t x53 = (x51 & 0x1fffffffff);
+ out[0] = x53;
+ out[1] = (x52 + (x50 + x33));
+ out[2] = x36;
+ out[3] = x39;
+ out[4] = x42;
+ out[5] = x45;
+ out[6] = x48;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas64_2e256m2e32m977_7limbs/fesub.c b/src/Specific/solinas64_2e256m2e32m977_7limbs/fesub.c
new file mode 100644
index 000000000..3515b57c9
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977_7limbs/fesub.c
@@ -0,0 +1,24 @@
+static void fesub(uint64_t out[7], const uint64_t in1[7], const uint64_t in2[7]) {
+ { const uint64_t x14 = in1[6];
+ { const uint64_t x15 = in1[5];
+ { const uint64_t x13 = in1[4];
+ { const uint64_t x11 = in1[3];
+ { const uint64_t x9 = in1[2];
+ { const uint64_t x7 = in1[1];
+ { const uint64_t x5 = in1[0];
+ { const uint64_t x26 = in2[6];
+ { const uint64_t x27 = in2[5];
+ { const uint64_t x25 = in2[4];
+ { const uint64_t x23 = in2[3];
+ { const uint64_t x21 = in2[2];
+ { const uint64_t x19 = in2[1];
+ { const uint64_t x17 = in2[0];
+ out[0] = ((0x3dfffff85e + x5) - x17);
+ out[1] = ((0x3ffffffffe + x7) - x19);
+ out[2] = ((0x1ffffffffe + x9) - x21);
+ out[3] = ((0x3ffffffffe + x11) - x23);
+ out[4] = ((0x1ffffffffe + x13) - x25);
+ out[5] = ((0x3ffffffffe + x15) - x27);
+ out[6] = ((0x1ffffffffe + x14) - x26);
+ }}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas64_2e256m2e32m977_7limbs/fesubDisplay.log b/src/Specific/solinas64_2e256m2e32m977_7limbs/fesubDisplay.log
index b50eec990..183ce17aa 100644
--- a/src/Specific/solinas64_2e256m2e32m977_7limbs/fesubDisplay.log
+++ b/src/Specific/solinas64_2e256m2e32m977_7limbs/fesubDisplay.log
@@ -2,6 +2,6 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x14, x15, x13, x11, x9, x7, x5, (x26, x27, x25, x23, x21, x19, x17))%core,
- (((Const 137438953470 + x14) - x26), ((0x3ffffffffe + x15) - x27), ((Const 137438953470 + x13) - x25), ((0x3ffffffffe + x11) - x23), ((Const 137438953470 + x9) - x21), ((0x3ffffffffe + x7) - x19), ((Const 266287970398 + x5) - x17)))
+ (((0x1ffffffffe + x14) - x26), ((0x3ffffffffe + x15) - x27), ((0x1ffffffffe + x13) - x25), ((0x3ffffffffe + x11) - x23), ((0x1ffffffffe + x9) - x21), ((0x3ffffffffe + x7) - x19), ((0x3dfffff85e + x5) - x17)))
(x, x0)%core
: word64 * word64 * word64 * word64 * word64 * word64 * word64 → word64 * word64 * word64 * word64 * word64 * word64 * word64 → ReturnType (uint64_t * uint64_t * uint64_t * uint64_t * uint64_t * uint64_t * uint64_t)
diff --git a/src/Specific/solinas64_2e256m2e32m977_7limbs/freeze.c b/src/Specific/solinas64_2e256m2e32m977_7limbs/freeze.c
new file mode 100644
index 000000000..af254b0b7
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977_7limbs/freeze.c
@@ -0,0 +1,39 @@
+static void freeze(uint64_t out[7], const uint64_t in1[7]) {
+ { const uint64_t x11 = in1[6];
+ { const uint64_t x12 = in1[5];
+ { const uint64_t x10 = in1[4];
+ { const uint64_t x8 = in1[3];
+ { const uint64_t x6 = in1[2];
+ { const uint64_t x4 = in1[1];
+ { const uint64_t x2 = in1[0];
+ { uint64_t x14, uint8_t x15 = Op (Syntax.SubWithGetBorrow 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (0x0, Return x2, 0x1efffffc2f);
+ { uint64_t x17, uint8_t x18 = Op (Syntax.SubWithGetBorrow 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x15, Return x4, 0x1fffffffff);
+ { uint64_t x20, uint8_t x21 = Op (Syntax.SubWithGetBorrow 36 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x18, Return x6, 0xfffffffff);
+ { uint64_t x23, uint8_t x24 = Op (Syntax.SubWithGetBorrow 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x21, Return x8, 0x1fffffffff);
+ { uint64_t x26, uint8_t x27 = Op (Syntax.SubWithGetBorrow 36 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x24, Return x10, 0xfffffffff);
+ { uint64_t x29, uint8_t x30 = Op (Syntax.SubWithGetBorrow 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x27, Return x12, 0x1fffffffff);
+ { uint64_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 36 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x30, Return x11, 0xfffffffff);
+ { uint64_t x34 = cmovznz64(x33, 0x0, 0xffffffffffffffffL);
+ { uint64_t x35 = (x34 & 0x1efffffc2f);
+ { uint64_t x37, uint8_t x38 = Op (Syntax.AddWithGetCarry 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (0x0, Return x14, Return x35);
+ { uint64_t x39 = (x34 & 0x1fffffffff);
+ { uint64_t x41, uint8_t x42 = Op (Syntax.AddWithGetCarry 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x38, Return x17, Return x39);
+ { uint64_t x43 = (x34 & 0xfffffffff);
+ { uint64_t x45, uint8_t x46 = Op (Syntax.AddWithGetCarry 36 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x42, Return x20, Return x43);
+ { uint64_t x47 = (x34 & 0x1fffffffff);
+ { uint64_t x49, uint8_t x50 = Op (Syntax.AddWithGetCarry 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x46, Return x23, Return x47);
+ { uint64_t x51 = (x34 & 0xfffffffff);
+ { uint64_t x53, uint8_t x54 = Op (Syntax.AddWithGetCarry 36 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x50, Return x26, Return x51);
+ { uint64_t x55 = (x34 & 0x1fffffffff);
+ { uint64_t x57, uint8_t x58 = Op (Syntax.AddWithGetCarry 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x54, Return x29, Return x55);
+ { uint64_t x59 = (x34 & 0xfffffffff);
+ { uint64_t x61, uint8_t _ = Op (Syntax.AddWithGetCarry 36 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x58, Return x32, Return x59);
+ out[0] = x37;
+ out[1] = x41;
+ out[2] = x45;
+ out[3] = x49;
+ out[4] = x53;
+ out[5] = x57;
+ out[6] = x61;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas64_2e256m2e32m977_7limbs/freezeDisplay.log b/src/Specific/solinas64_2e256m2e32m977_7limbs/freezeDisplay.log
index 446238151..2491fbf74 100644
--- a/src/Specific/solinas64_2e256m2e32m977_7limbs/freezeDisplay.log
+++ b/src/Specific/solinas64_2e256m2e32m977_7limbs/freezeDisplay.log
@@ -2,7 +2,7 @@
Interp-η
(λ var : Syntax.base_type → Type,
λ '(x11, x12, x10, x8, x6, x4, x2)%core,
- uint64_t x14, uint8_t x15 = Op (Syntax.SubWithGetBorrow 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (0x0, Return x2, Const 133143985199);
+ uint64_t x14, uint8_t x15 = Op (Syntax.SubWithGetBorrow 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (0x0, Return x2, 0x1efffffc2f);
uint64_t x17, uint8_t x18 = Op (Syntax.SubWithGetBorrow 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x15, Return x4, 0x1fffffffff);
uint64_t x20, uint8_t x21 = Op (Syntax.SubWithGetBorrow 36 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x18, Return x6, 0xfffffffff);
uint64_t x23, uint8_t x24 = Op (Syntax.SubWithGetBorrow 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x21, Return x8, 0x1fffffffff);
@@ -10,7 +10,7 @@ Interp-η
uint64_t x29, uint8_t x30 = Op (Syntax.SubWithGetBorrow 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x27, Return x12, 0x1fffffffff);
uint64_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 36 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x30, Return x11, 0xfffffffff);
uint64_t x34 = cmovznz64(x33, 0x0, 0xffffffffffffffffL);
- uint64_t x35 = (x34 & Const 133143985199);
+ uint64_t x35 = (x34 & 0x1efffffc2f);
uint64_t x37, uint8_t x38 = Op (Syntax.AddWithGetCarry 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (0x0, Return x14, Return x35);
uint64_t x39 = (x34 & 0x1fffffffff);
uint64_t x41, uint8_t x42 = Op (Syntax.AddWithGetCarry 37 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x38, Return x17, Return x39);
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/feadd.c b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/feadd.c
new file mode 100644
index 000000000..df991e375
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/feadd.c
@@ -0,0 +1,33 @@
+static void feadd(uint64_t out[10], const uint64_t in1[10], const uint64_t in2[10]) {
+ { const uint64_t x20 = in1[9];
+ { const uint64_t x21 = in1[8];
+ { const uint64_t x19 = in1[7];
+ { const uint64_t x17 = in1[6];
+ { const uint64_t x15 = in1[5];
+ { const uint64_t x13 = in1[4];
+ { const uint64_t x11 = in1[3];
+ { const uint64_t x9 = in1[2];
+ { const uint64_t x7 = in1[1];
+ { const uint64_t x5 = in1[0];
+ { const uint64_t x38 = in2[9];
+ { const uint64_t x39 = in2[8];
+ { const uint64_t x37 = in2[7];
+ { const uint64_t x35 = in2[6];
+ { const uint64_t x33 = in2[5];
+ { const uint64_t x31 = in2[4];
+ { const uint64_t x29 = in2[3];
+ { const uint64_t x27 = in2[2];
+ { const uint64_t x25 = in2[1];
+ { const uint64_t x23 = in2[0];
+ out[0] = (x5 + x23);
+ out[1] = (x7 + x25);
+ out[2] = (x9 + x27);
+ out[3] = (x11 + x29);
+ out[4] = (x13 + x31);
+ out[5] = (x15 + x33);
+ out[6] = (x17 + x35);
+ out[7] = (x19 + x37);
+ out[8] = (x21 + x39);
+ out[9] = (x20 + x38);
+ }}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/freeze.c b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/freeze.c
new file mode 100644
index 000000000..59871c5ef
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/freeze.c
@@ -0,0 +1,53 @@
+static void freeze(uint64_t out[10], const uint64_t in1[10]) {
+ { const uint64_t x17 = in1[9];
+ { const uint64_t x18 = in1[8];
+ { const uint64_t x16 = in1[7];
+ { const uint64_t x14 = in1[6];
+ { const uint64_t x12 = in1[5];
+ { const uint64_t x10 = in1[4];
+ { const uint64_t x8 = in1[3];
+ { const uint64_t x6 = in1[2];
+ { const uint64_t x4 = in1[1];
+ { const uint64_t x2 = in1[0];
+ { uint64_t x20, ℤ x21 = Op (Syntax.SubWithGetBorrow 39 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) Syntax.TZ) (0x0, Return x2, 0xffffffff);
+ { uint64_t x23, ℤ x24 = Op (Syntax.SubWithGetBorrow 38 Syntax.TZ (Syntax.TWord 6) (Syntax.TWord 3) (Syntax.TWord 6) Syntax.TZ) (Return x21, Return x4, 0x0);
+ { uint64_t x26, uint8_t x27 = Op (Syntax.SubWithGetBorrow 39 Syntax.TZ (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x24, Return x6, 0x7ffff80000);
+ { uint64_t x29, uint8_t x30 = Op (Syntax.SubWithGetBorrow 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x27, Return x8, 0x3fffffefff);
+ { uint64_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x30, Return x10, 0x3fffffffff);
+ { uint64_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 39 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x33, Return x12, 0x7fffffffff);
+ { uint64_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x36, Return x14, 0x3fffffffff);
+ { uint64_t x41, uint8_t x42 = Op (Syntax.SubWithGetBorrow 39 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x39, Return x16, 0x7fffffffff);
+ { uint64_t x44, uint8_t x45 = Op (Syntax.SubWithGetBorrow 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x42, Return x18, 0x3fffffffff);
+ { uint64_t x47, uint8_t x48 = Op (Syntax.SubWithGetBorrow 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x45, Return x17, 0x3fffffffff);
+ { uint64_t x49 = cmovznz64(x48, 0x0, 0xffffffffffffffffL);
+ { uint64_t x50 = (x49 & 0xffffffff);
+ { uint64_t x52, uint8_t x53 = Op (Syntax.AddWithGetCarry 39 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (0x0, Return x20, Return x50);
+ { uint64_t x55, uint8_t x56 = Op (Syntax.AddWithGetCarry 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x53, Return x23, 0x0);
+ { uint64_t x57 = (x49 & 0x7ffff80000);
+ { uint64_t x59, uint8_t x60 = Op (Syntax.AddWithGetCarry 39 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x56, Return x26, Return x57);
+ { uint64_t x61 = (x49 & 0x3fffffefff);
+ { uint64_t x63, uint8_t x64 = Op (Syntax.AddWithGetCarry 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x60, Return x29, Return x61);
+ { uint64_t x65 = (x49 & 0x3fffffffff);
+ { uint64_t x67, uint8_t x68 = Op (Syntax.AddWithGetCarry 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x64, Return x32, Return x65);
+ { uint64_t x69 = (x49 & 0x7fffffffff);
+ { uint64_t x71, uint8_t x72 = Op (Syntax.AddWithGetCarry 39 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x68, Return x35, Return x69);
+ { uint64_t x73 = (x49 & 0x3fffffffff);
+ { uint64_t x75, uint8_t x76 = Op (Syntax.AddWithGetCarry 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x72, Return x38, Return x73);
+ { uint64_t x77 = (x49 & 0x7fffffffff);
+ { uint64_t x79, uint8_t x80 = Op (Syntax.AddWithGetCarry 39 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x76, Return x41, Return x77);
+ { uint64_t x81 = (x49 & 0x3fffffffff);
+ { uint64_t x83, uint8_t x84 = Op (Syntax.AddWithGetCarry 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x80, Return x44, Return x81);
+ { uint64_t x85 = (x49 & 0x3fffffffff);
+ { uint64_t x87, uint8_t _ = Op (Syntax.AddWithGetCarry 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x84, Return x47, Return x85);
+ out[0] = x52;
+ out[1] = x55;
+ out[2] = x59;
+ out[3] = x63;
+ out[4] = x67;
+ out[5] = x71;
+ out[6] = x75;
+ out[7] = x79;
+ out[8] = x83;
+ out[9] = x87;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/freezeDisplay.log b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/freezeDisplay.log
index ebe39c79d..581a5304a 100644
--- a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/freezeDisplay.log
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_10limbs/freezeDisplay.log
@@ -4,8 +4,8 @@ Interp-η
λ '(x17, x18, x16, x14, x12, x10, x8, x6, x4, x2)%core,
uint64_t x20, ℤ x21 = Op (Syntax.SubWithGetBorrow 39 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) Syntax.TZ) (0x0, Return x2, 0xffffffff);
uint64_t x23, ℤ x24 = Op (Syntax.SubWithGetBorrow 38 Syntax.TZ (Syntax.TWord 6) (Syntax.TWord 3) (Syntax.TWord 6) Syntax.TZ) (Return x21, Return x4, 0x0);
- uint64_t x26, uint8_t x27 = Op (Syntax.SubWithGetBorrow 39 Syntax.TZ (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x24, Return x6, Const 549755289600);
- uint64_t x29, uint8_t x30 = Op (Syntax.SubWithGetBorrow 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x27, Return x8, Const 274877902847);
+ uint64_t x26, uint8_t x27 = Op (Syntax.SubWithGetBorrow 39 Syntax.TZ (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x24, Return x6, 0x7ffff80000);
+ uint64_t x29, uint8_t x30 = Op (Syntax.SubWithGetBorrow 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x27, Return x8, 0x3fffffefff);
uint64_t x32, uint8_t x33 = Op (Syntax.SubWithGetBorrow 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x30, Return x10, 0x3fffffffff);
uint64_t x35, uint8_t x36 = Op (Syntax.SubWithGetBorrow 39 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x33, Return x12, 0x7fffffffff);
uint64_t x38, uint8_t x39 = Op (Syntax.SubWithGetBorrow 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x36, Return x14, 0x3fffffffff);
@@ -16,9 +16,9 @@ Interp-η
uint64_t x50 = (x49 & 0xffffffff);
uint64_t x52, uint8_t x53 = Op (Syntax.AddWithGetCarry 39 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (0x0, Return x20, Return x50);
uint64_t x55, uint8_t x56 = Op (Syntax.AddWithGetCarry 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x53, Return x23, 0x0);
- uint64_t x57 = (x49 & Const 549755289600);
+ uint64_t x57 = (x49 & 0x7ffff80000);
uint64_t x59, uint8_t x60 = Op (Syntax.AddWithGetCarry 39 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x56, Return x26, Return x57);
- uint64_t x61 = (x49 & Const 274877902847);
+ uint64_t x61 = (x49 & 0x3fffffefff);
uint64_t x63, uint8_t x64 = Op (Syntax.AddWithGetCarry 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x60, Return x29, Return x61);
uint64_t x65 = (x49 & 0x3fffffffff);
uint64_t x67, uint8_t x68 = Op (Syntax.AddWithGetCarry 38 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x64, Return x32, Return x65);
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_9limbs/feadd.c b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_9limbs/feadd.c
new file mode 100644
index 000000000..98ab4434c
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_9limbs/feadd.c
@@ -0,0 +1,30 @@
+static void feadd(uint64_t out[9], const uint64_t in1[9], const uint64_t in2[9]) {
+ { const uint64_t x18 = in1[8];
+ { const uint64_t x19 = in1[7];
+ { const uint64_t x17 = in1[6];
+ { const uint64_t x15 = in1[5];
+ { const uint64_t x13 = in1[4];
+ { const uint64_t x11 = in1[3];
+ { const uint64_t x9 = in1[2];
+ { const uint64_t x7 = in1[1];
+ { const uint64_t x5 = in1[0];
+ { const uint64_t x34 = in2[8];
+ { const uint64_t x35 = in2[7];
+ { const uint64_t x33 = in2[6];
+ { const uint64_t x31 = in2[5];
+ { const uint64_t x29 = in2[4];
+ { const uint64_t x27 = in2[3];
+ { const uint64_t x25 = in2[2];
+ { const uint64_t x23 = in2[1];
+ { const uint64_t x21 = in2[0];
+ out[0] = (x5 + x21);
+ out[1] = (x7 + x23);
+ out[2] = (x9 + x25);
+ out[3] = (x11 + x27);
+ out[4] = (x13 + x29);
+ out[5] = (x15 + x31);
+ out[6] = (x17 + x33);
+ out[7] = (x19 + x35);
+ out[8] = (x18 + x34);
+ }}}}}}}}}}}}}}}}}}
+}
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_9limbs/freeze.c b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_9limbs/freeze.c
new file mode 100644
index 000000000..6d2f3856d
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1_9limbs/freeze.c
@@ -0,0 +1,48 @@
+static void freeze(uint64_t out[9], const uint64_t in1[9]) {
+ { const uint64_t x15 = in1[8];
+ { const uint64_t x16 = in1[7];
+ { const uint64_t x14 = in1[6];
+ { const uint64_t x12 = in1[5];
+ { const uint64_t x10 = in1[4];
+ { const uint64_t x8 = in1[3];
+ { const uint64_t x6 = in1[2];
+ { const uint64_t x4 = in1[1];
+ { const uint64_t x2 = in1[0];
+ { uint64_t x18, ℤ x19 = Op (Syntax.SubWithGetBorrow 43 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) Syntax.TZ) (0x0, Return x2, 0xffffffff);
+ { uint64_t x21, ℤ x22 = Op (Syntax.SubWithGetBorrow 43 Syntax.TZ (Syntax.TWord 6) (Syntax.TWord 3) (Syntax.TWord 6) Syntax.TZ) (Return x19, Return x4, 0x0);
+ { uint64_t x24, uint8_t x25 = Op (Syntax.SubWithGetBorrow 42 Syntax.TZ (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x22, Return x6, 0x3fffffffc00);
+ { uint64_t x27, uint8_t x28 = Op (Syntax.SubWithGetBorrow 43 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x25, Return x8, 0x7fffffffffe);
+ { uint64_t x30, uint8_t x31 = Op (Syntax.SubWithGetBorrow 43 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x28, Return x10, 0x7ffffffffff);
+ { uint64_t x33, uint8_t x34 = Op (Syntax.SubWithGetBorrow 42 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x31, Return x12, 0x3ffffffffff);
+ { uint64_t x36, uint8_t x37 = Op (Syntax.SubWithGetBorrow 43 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x34, Return x14, 0x7ffffffffff);
+ { uint64_t x39, uint8_t x40 = Op (Syntax.SubWithGetBorrow 43 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x37, Return x16, 0x7ffffffffff);
+ { uint64_t x42, uint8_t x43 = Op (Syntax.SubWithGetBorrow 42 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x40, Return x15, 0x3ffffffffff);
+ { uint64_t x44 = cmovznz64(x43, 0x0, 0xffffffffffffffffL);
+ { uint64_t x45 = (x44 & 0xffffffff);
+ { uint64_t x47, uint8_t x48 = Op (Syntax.AddWithGetCarry 43 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (0x0, Return x18, Return x45);
+ { uint64_t x50, uint8_t x51 = Op (Syntax.AddWithGetCarry 43 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x48, Return x21, 0x0);
+ { uint64_t x52 = (x44 & 0x3fffffffc00);
+ { uint64_t x54, uint8_t x55 = Op (Syntax.AddWithGetCarry 42 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x51, Return x24, Return x52);
+ { uint64_t x56 = (x44 & 0x7fffffffffe);
+ { uint64_t x58, uint8_t x59 = Op (Syntax.AddWithGetCarry 43 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x55, Return x27, Return x56);
+ { uint64_t x60 = (x44 & 0x7ffffffffff);
+ { uint64_t x62, uint8_t x63 = Op (Syntax.AddWithGetCarry 43 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x59, Return x30, Return x60);
+ { uint64_t x64 = (x44 & 0x3ffffffffff);
+ { uint64_t x66, uint8_t x67 = Op (Syntax.AddWithGetCarry 42 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x63, Return x33, Return x64);
+ { uint64_t x68 = (x44 & 0x7ffffffffff);
+ { uint64_t x70, uint8_t x71 = Op (Syntax.AddWithGetCarry 43 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x67, Return x36, Return x68);
+ { uint64_t x72 = (x44 & 0x7ffffffffff);
+ { uint64_t x74, uint8_t x75 = Op (Syntax.AddWithGetCarry 43 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x71, Return x39, Return x72);
+ { uint64_t x76 = (x44 & 0x3ffffffffff);
+ { uint64_t x78, uint8_t _ = Op (Syntax.AddWithGetCarry 42 (Syntax.TWord 3) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 6) (Syntax.TWord 3)) (Return x75, Return x42, Return x76);
+ out[0] = x47;
+ out[1] = x50;
+ out[2] = x54;
+ out[3] = x58;
+ out[4] = x62;
+ out[5] = x66;
+ out[6] = x70;
+ out[7] = x74;
+ out[8] = x78;
+ }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}