aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2017-10-14 16:01:37 -0400
committerGravatar Jason Gross <jasongross9@gmail.com>2017-10-18 23:01:29 -0400
commit0b03656ba15c354165ee14eda054de4489faeb9c (patch)
tree9c28e78ef48389a350fd8603d49f9eedc8f0c31f
parentd36702195ac82c2636b2f5842ae5fe210b7c415f (diff)
Run remake_curves.py
-rw-r--r--_CoqProject2896
-rw-r--r--src/Specific/montgomery32_2e127m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e127m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e127m1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e127m1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e127m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e127m1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e127m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e127m1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e127m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e127m1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e127m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e127m1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e127m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e129m25/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e129m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e129m25/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e129m25/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e129m25/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e129m25/femul.v14
-rw-r--r--src/Specific/montgomery32_2e129m25/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e129m25/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e129m25/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e129m25/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e129m25/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e129m25/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e129m25/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e130m5/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e130m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e130m5/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e130m5/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e130m5/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e130m5/femul.v14
-rw-r--r--src/Specific/montgomery32_2e130m5/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e130m5/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e130m5/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e130m5/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e130m5/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e130m5/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e130m5/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e137m13/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e137m13/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e137m13/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e137m13/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e137m13/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e137m13/femul.v14
-rw-r--r--src/Specific/montgomery32_2e137m13/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e137m13/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e137m13/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e137m13/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e137m13/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e137m13/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e137m13/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e140m27/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e140m27/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e140m27/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e140m27/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e140m27/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e140m27/femul.v14
-rw-r--r--src/Specific/montgomery32_2e140m27/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e140m27/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e140m27/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e140m27/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e140m27/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e140m27/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e140m27/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e141m9/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e141m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e141m9/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e141m9/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e141m9/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e141m9/femul.v14
-rw-r--r--src/Specific/montgomery32_2e141m9/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e141m9/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e141m9/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e141m9/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e141m9/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e141m9/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e141m9/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e150m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e150m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e150m3/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e150m3/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e150m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e150m3/femul.v14
-rw-r--r--src/Specific/montgomery32_2e150m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e150m3/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e150m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e150m3/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e150m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e150m3/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e150m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e150m5/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e150m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e150m5/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e150m5/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e150m5/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e150m5/femul.v14
-rw-r--r--src/Specific/montgomery32_2e150m5/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e150m5/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e150m5/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e150m5/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e150m5/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e150m5/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e150m5/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e152m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e152m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e152m17/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e152m17/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e152m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e152m17/femul.v14
-rw-r--r--src/Specific/montgomery32_2e152m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e152m17/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e152m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e152m17/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e152m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e152m17/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e152m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e158m15/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e158m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e158m15/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e158m15/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e158m15/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e158m15/femul.v14
-rw-r--r--src/Specific/montgomery32_2e158m15/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e158m15/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e158m15/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e158m15/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e158m15/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e158m15/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e158m15/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e165m25/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e165m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e165m25/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e165m25/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e165m25/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e165m25/femul.v14
-rw-r--r--src/Specific/montgomery32_2e165m25/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e165m25/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e165m25/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e165m25/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e165m25/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e165m25/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e165m25/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e166m5/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e166m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e166m5/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e166m5/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e166m5/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e166m5/femul.v14
-rw-r--r--src/Specific/montgomery32_2e166m5/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e166m5/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e166m5/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e166m5/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e166m5/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e166m5/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e166m5/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e171m19/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e171m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e171m19/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e171m19/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e171m19/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e171m19/femul.v14
-rw-r--r--src/Specific/montgomery32_2e171m19/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e171m19/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e171m19/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e171m19/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e171m19/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e171m19/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e171m19/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e174m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e174m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e174m17/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e174m17/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e174m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e174m17/femul.v14
-rw-r--r--src/Specific/montgomery32_2e174m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e174m17/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e174m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e174m17/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e174m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e174m17/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e174m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e174m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e174m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e174m3/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e174m3/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e174m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e174m3/femul.v14
-rw-r--r--src/Specific/montgomery32_2e174m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e174m3/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e174m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e174m3/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e174m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e174m3/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e174m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e189m25/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e189m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e189m25/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e189m25/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e189m25/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e189m25/femul.v14
-rw-r--r--src/Specific/montgomery32_2e189m25/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e189m25/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e189m25/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e189m25/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e189m25/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e189m25/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e189m25/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e190m11/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e190m11/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e190m11/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e190m11/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e190m11/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e190m11/femul.v14
-rw-r--r--src/Specific/montgomery32_2e190m11/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e190m11/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e190m11/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e190m11/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e190m11/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e190m11/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e190m11/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e191m19/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e191m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e191m19/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e191m19/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e191m19/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e191m19/femul.v14
-rw-r--r--src/Specific/montgomery32_2e191m19/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e191m19/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e191m19/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e191m19/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e191m19/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e191m19/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e191m19/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e192m2e64m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e192m2e64m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e192m2e64m1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e192m2e64m1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e192m2e64m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e192m2e64m1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e192m2e64m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e192m2e64m1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e192m2e64m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e192m2e64m1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e192m2e64m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e192m2e64m1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e192m2e64m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e194m33/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e194m33/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e194m33/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e194m33/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e194m33/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e194m33/femul.v14
-rw-r--r--src/Specific/montgomery32_2e194m33/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e194m33/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e194m33/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e194m33/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e194m33/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e194m33/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e194m33/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e196m15/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e196m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e196m15/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e196m15/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e196m15/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e196m15/femul.v14
-rw-r--r--src/Specific/montgomery32_2e196m15/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e196m15/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e196m15/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e196m15/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e196m15/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e196m15/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e196m15/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e198m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e198m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e198m17/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e198m17/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e198m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e198m17/femul.v14
-rw-r--r--src/Specific/montgomery32_2e198m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e198m17/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e198m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e198m17/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e198m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e198m17/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e198m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e206m5/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e206m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e206m5/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e206m5/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e206m5/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e206m5/femul.v14
-rw-r--r--src/Specific/montgomery32_2e206m5/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e206m5/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e206m5/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e206m5/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e206m5/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e206m5/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e206m5/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e212m29/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e212m29/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e212m29/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e212m29/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e212m29/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e212m29/femul.v14
-rw-r--r--src/Specific/montgomery32_2e212m29/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e212m29/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e212m29/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e212m29/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e212m29/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e212m29/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e212m29/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e213m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e213m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e213m3/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e213m3/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e213m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e213m3/femul.v14
-rw-r--r--src/Specific/montgomery32_2e213m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e213m3/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e213m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e213m3/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e213m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e213m3/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e213m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e216m2e108m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e216m2e108m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e216m2e108m1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e216m2e108m1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e216m2e108m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e216m2e108m1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e216m2e108m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e216m2e108m1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e216m2e108m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e216m2e108m1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e216m2e108m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e216m2e108m1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e216m2e108m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e221m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e221m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e221m3/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e221m3/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e221m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e221m3/femul.v14
-rw-r--r--src/Specific/montgomery32_2e221m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e221m3/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e221m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e221m3/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e221m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e221m3/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e221m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e222m117/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e222m117/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e222m117/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e222m117/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e222m117/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e222m117/femul.v14
-rw-r--r--src/Specific/montgomery32_2e222m117/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e222m117/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e222m117/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e222m117/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e222m117/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e222m117/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e222m117/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e224m2e96p1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e224m2e96p1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e224m2e96p1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e224m2e96p1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e224m2e96p1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e224m2e96p1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e224m2e96p1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e224m2e96p1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e224m2e96p1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e224m2e96p1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e224m2e96p1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e224m2e96p1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e224m2e96p1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e226m5/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e226m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e226m5/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e226m5/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e226m5/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e226m5/femul.v14
-rw-r--r--src/Specific/montgomery32_2e226m5/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e226m5/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e226m5/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e226m5/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e226m5/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e226m5/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e226m5/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e230m27/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e230m27/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e230m27/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e230m27/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e230m27/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e230m27/femul.v14
-rw-r--r--src/Specific/montgomery32_2e230m27/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e230m27/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e230m27/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e230m27/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e230m27/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e230m27/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e230m27/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e235m15/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e235m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e235m15/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e235m15/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e235m15/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e235m15/femul.v14
-rw-r--r--src/Specific/montgomery32_2e235m15/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e235m15/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e235m15/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e235m15/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e235m15/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e235m15/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e235m15/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e243m9/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e243m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e243m9/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e243m9/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e243m9/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e243m9/femul.v14
-rw-r--r--src/Specific/montgomery32_2e243m9/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e243m9/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e243m9/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e243m9/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e243m9/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e243m9/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e243m9/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e251m9/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e251m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e251m9/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e251m9/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e251m9/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e251m9/femul.v14
-rw-r--r--src/Specific/montgomery32_2e251m9/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e251m9/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e251m9/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e251m9/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e251m9/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e251m9/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e251m9/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m19/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e255m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e255m19/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e255m19/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e255m19/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m19/femul.v14
-rw-r--r--src/Specific/montgomery32_2e255m19/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m19/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e255m19/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m19/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e255m19/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m19/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e255m19/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m2e4m2e1m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e255m2e4m2e1m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e255m2e4m2e1m1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e255m2e4m2e1m1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e255m2e4m2e1m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m2e4m2e1m1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e255m2e4m2e1m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m2e4m2e1m1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e255m2e4m2e1m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m2e4m2e1m1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e255m2e4m2e1m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m2e4m2e1m1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e255m2e4m2e1m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m765/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e255m765/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e255m765/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e255m765/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e255m765/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m765/femul.v14
-rw-r--r--src/Specific/montgomery32_2e255m765/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m765/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e255m765/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m765/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e255m765/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e255m765/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e255m765/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m189/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e256m189/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e256m189/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e256m189/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e256m189/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m189/femul.v14
-rw-r--r--src/Specific/montgomery32_2e256m189/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m189/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e256m189/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m189/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e256m189/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m189/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e256m189/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e256m2e224p2e192p2e96m1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m2e32m977/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e256m2e32m977/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e256m2e32m977/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e256m2e32m977/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e256m2e32m977/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m2e32m977/femul.v14
-rw-r--r--src/Specific/montgomery32_2e256m2e32m977/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m2e32m977/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e256m2e32m977/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m2e32m977/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e256m2e32m977/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e256m2e32m977/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e256m2e32m977/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e266m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e266m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e266m3/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e266m3/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e266m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e266m3/femul.v14
-rw-r--r--src/Specific/montgomery32_2e266m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e266m3/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e266m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e266m3/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e266m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e266m3/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e266m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e285m9/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e285m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e285m9/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e285m9/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e285m9/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e285m9/femul.v14
-rw-r--r--src/Specific/montgomery32_2e285m9/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e285m9/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e285m9/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e285m9/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e285m9/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e285m9/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e285m9/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e291m19/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e291m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e291m19/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e291m19/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e291m19/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e291m19/femul.v14
-rw-r--r--src/Specific/montgomery32_2e291m19/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e291m19/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e291m19/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e291m19/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e291m19/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e291m19/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e291m19/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e321m9/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e321m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e321m9/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e321m9/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e321m9/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e321m9/femul.v14
-rw-r--r--src/Specific/montgomery32_2e321m9/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e321m9/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e321m9/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e321m9/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e321m9/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e321m9/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e321m9/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e322m2e161m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e322m2e161m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e322m2e161m1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e322m2e161m1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e322m2e161m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e322m2e161m1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e322m2e161m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e322m2e161m1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e322m2e161m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e322m2e161m1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e322m2e161m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e322m2e161m1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e322m2e161m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e336m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e336m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e336m17/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e336m17/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e336m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e336m17/femul.v14
-rw-r--r--src/Specific/montgomery32_2e336m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e336m17/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e336m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e336m17/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e336m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e336m17/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e336m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e336m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e336m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e336m3/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e336m3/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e336m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e336m3/femul.v14
-rw-r--r--src/Specific/montgomery32_2e336m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e336m3/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e336m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e336m3/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e336m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e336m3/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e336m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e338m15/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e338m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e338m15/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e338m15/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e338m15/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e338m15/femul.v14
-rw-r--r--src/Specific/montgomery32_2e338m15/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e338m15/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e338m15/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e338m15/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e338m15/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e338m15/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e338m15/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e369m25/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e369m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e369m25/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e369m25/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e369m25/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e369m25/femul.v14
-rw-r--r--src/Specific/montgomery32_2e369m25/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e369m25/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e369m25/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e369m25/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e369m25/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e369m25/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e369m25/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e379m19/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e379m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e379m19/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e379m19/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e379m19/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e379m19/femul.v14
-rw-r--r--src/Specific/montgomery32_2e379m19/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e379m19/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e379m19/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e379m19/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e379m19/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e379m19/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e379m19/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e382m105/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e382m105/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e382m105/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e382m105/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e382m105/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e382m105/femul.v14
-rw-r--r--src/Specific/montgomery32_2e382m105/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e382m105/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e382m105/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e382m105/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e382m105/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e382m105/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e382m105/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m187/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e383m187/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e383m187/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e383m187/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e383m187/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m187/femul.v14
-rw-r--r--src/Specific/montgomery32_2e383m187/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m187/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e383m187/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m187/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e383m187/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m187/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e383m187/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m31/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e383m31/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e383m31/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e383m31/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e383m31/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m31/femul.v14
-rw-r--r--src/Specific/montgomery32_2e383m31/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m31/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e383m31/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m31/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e383m31/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m31/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e383m31/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m421/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e383m421/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e383m421/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e383m421/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e383m421/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m421/femul.v14
-rw-r--r--src/Specific/montgomery32_2e383m421/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m421/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e383m421/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m421/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e383m421/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e383m421/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e383m421/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e384m2e128m2e96p2e32m1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e384m317/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e384m317/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e384m317/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e384m317/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e384m317/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e384m317/femul.v14
-rw-r--r--src/Specific/montgomery32_2e384m317/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e384m317/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e384m317/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e384m317/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e384m317/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e384m317/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e384m317/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e389m21/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e389m21/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e389m21/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e389m21/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e389m21/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e389m21/femul.v14
-rw-r--r--src/Specific/montgomery32_2e389m21/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e389m21/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e389m21/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e389m21/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e389m21/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e389m21/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e389m21/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e401m31/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e401m31/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e401m31/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e401m31/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e401m31/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e401m31/femul.v14
-rw-r--r--src/Specific/montgomery32_2e401m31/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e401m31/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e401m31/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e401m31/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e401m31/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e401m31/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e401m31/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e413m21/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e413m21/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e413m21/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e413m21/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e413m21/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e413m21/femul.v14
-rw-r--r--src/Specific/montgomery32_2e413m21/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e413m21/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e413m21/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e413m21/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e413m21/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e413m21/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e413m21/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e414m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e414m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e414m17/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e414m17/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e414m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e414m17/femul.v14
-rw-r--r--src/Specific/montgomery32_2e414m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e414m17/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e414m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e414m17/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e414m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e414m17/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e414m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e416m2e208m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e416m2e208m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e416m2e208m1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e416m2e208m1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e416m2e208m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e416m2e208m1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e416m2e208m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e416m2e208m1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e416m2e208m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e416m2e208m1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e416m2e208m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e416m2e208m1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e416m2e208m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e444m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e444m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e444m17/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e444m17/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e444m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e444m17/femul.v14
-rw-r--r--src/Specific/montgomery32_2e444m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e444m17/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e444m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e444m17/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e444m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e444m17/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e444m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e448m2e224m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e448m2e224m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e448m2e224m1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e448m2e224m1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e448m2e224m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e448m2e224m1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e448m2e224m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e448m2e224m1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e448m2e224m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e448m2e224m1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e448m2e224m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e448m2e224m1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e448m2e224m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e450m2e225m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e450m2e225m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e450m2e225m1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e450m2e225m1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e450m2e225m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e450m2e225m1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e450m2e225m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e450m2e225m1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e450m2e225m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e450m2e225m1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e450m2e225m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e450m2e225m1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e450m2e225m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e452m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e452m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e452m3/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e452m3/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e452m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e452m3/femul.v14
-rw-r--r--src/Specific/montgomery32_2e452m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e452m3/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e452m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e452m3/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e452m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e452m3/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e452m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e468m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e468m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e468m17/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e468m17/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e468m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e468m17/femul.v14
-rw-r--r--src/Specific/montgomery32_2e468m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e468m17/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e468m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e468m17/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e468m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e468m17/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e468m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e480m2e240m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e480m2e240m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e480m2e240m1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e480m2e240m1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e480m2e240m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e480m2e240m1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e480m2e240m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e480m2e240m1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e480m2e240m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e480m2e240m1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e480m2e240m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e480m2e240m1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e480m2e240m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e488m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e488m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e488m17/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e488m17/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e488m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e488m17/femul.v14
-rw-r--r--src/Specific/montgomery32_2e488m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e488m17/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e488m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e488m17/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e488m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e488m17/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e488m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e489m21/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e489m21/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e489m21/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e489m21/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e489m21/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e489m21/femul.v14
-rw-r--r--src/Specific/montgomery32_2e489m21/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e489m21/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e489m21/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e489m21/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e489m21/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e489m21/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e489m21/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e495m31/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e495m31/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e495m31/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e495m31/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e495m31/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e495m31/femul.v14
-rw-r--r--src/Specific/montgomery32_2e495m31/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e495m31/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e495m31/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e495m31/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e495m31/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e495m31/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e495m31/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e511m187/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e511m187/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e511m187/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e511m187/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e511m187/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e511m187/femul.v14
-rw-r--r--src/Specific/montgomery32_2e511m187/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e511m187/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e511m187/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e511m187/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e511m187/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e511m187/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e511m187/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e511m481/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e511m481/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e511m481/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e511m481/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e511m481/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e511m481/femul.v14
-rw-r--r--src/Specific/montgomery32_2e511m481/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e511m481/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e511m481/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e511m481/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e511m481/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e511m481/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e511m481/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e512m569/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e512m569/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e512m569/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e512m569/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e512m569/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e512m569/femul.v14
-rw-r--r--src/Specific/montgomery32_2e512m569/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e512m569/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e512m569/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e512m569/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e512m569/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e512m569/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e512m569/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e521m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery32_2e521m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery32_2e521m1/compiler.sh4
-rw-r--r--src/Specific/montgomery32_2e521m1/feadd.v14
-rw-r--r--src/Specific/montgomery32_2e521m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e521m1/femul.v14
-rw-r--r--src/Specific/montgomery32_2e521m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e521m1/fenz.v16
-rw-r--r--src/Specific/montgomery32_2e521m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e521m1/feopp.v14
-rw-r--r--src/Specific/montgomery32_2e521m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery32_2e521m1/fesub.v14
-rw-r--r--src/Specific/montgomery32_2e521m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e127m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e127m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e127m1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e127m1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e127m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e127m1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e127m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e127m1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e127m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e127m1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e127m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e127m1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e127m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e129m25/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e129m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e129m25/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e129m25/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e129m25/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e129m25/femul.v14
-rw-r--r--src/Specific/montgomery64_2e129m25/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e129m25/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e129m25/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e129m25/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e129m25/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e129m25/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e129m25/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e130m5/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e130m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e130m5/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e130m5/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e130m5/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e130m5/femul.v14
-rw-r--r--src/Specific/montgomery64_2e130m5/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e130m5/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e130m5/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e130m5/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e130m5/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e130m5/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e130m5/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e137m13/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e137m13/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e137m13/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e137m13/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e137m13/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e137m13/femul.v14
-rw-r--r--src/Specific/montgomery64_2e137m13/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e137m13/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e137m13/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e137m13/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e137m13/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e137m13/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e137m13/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e140m27/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e140m27/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e140m27/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e140m27/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e140m27/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e140m27/femul.v14
-rw-r--r--src/Specific/montgomery64_2e140m27/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e140m27/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e140m27/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e140m27/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e140m27/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e140m27/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e140m27/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e141m9/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e141m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e141m9/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e141m9/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e141m9/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e141m9/femul.v14
-rw-r--r--src/Specific/montgomery64_2e141m9/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e141m9/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e141m9/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e141m9/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e141m9/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e141m9/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e141m9/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e150m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e150m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e150m3/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e150m3/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e150m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e150m3/femul.v14
-rw-r--r--src/Specific/montgomery64_2e150m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e150m3/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e150m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e150m3/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e150m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e150m3/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e150m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e150m5/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e150m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e150m5/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e150m5/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e150m5/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e150m5/femul.v14
-rw-r--r--src/Specific/montgomery64_2e150m5/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e150m5/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e150m5/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e150m5/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e150m5/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e150m5/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e150m5/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e152m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e152m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e152m17/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e152m17/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e152m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e152m17/femul.v14
-rw-r--r--src/Specific/montgomery64_2e152m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e152m17/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e152m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e152m17/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e152m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e152m17/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e152m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e158m15/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e158m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e158m15/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e158m15/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e158m15/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e158m15/femul.v14
-rw-r--r--src/Specific/montgomery64_2e158m15/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e158m15/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e158m15/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e158m15/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e158m15/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e158m15/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e158m15/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e165m25/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e165m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e165m25/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e165m25/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e165m25/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e165m25/femul.v14
-rw-r--r--src/Specific/montgomery64_2e165m25/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e165m25/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e165m25/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e165m25/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e165m25/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e165m25/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e165m25/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e166m5/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e166m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e166m5/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e166m5/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e166m5/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e166m5/femul.v14
-rw-r--r--src/Specific/montgomery64_2e166m5/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e166m5/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e166m5/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e166m5/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e166m5/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e166m5/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e166m5/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e171m19/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e171m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e171m19/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e171m19/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e171m19/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e171m19/femul.v14
-rw-r--r--src/Specific/montgomery64_2e171m19/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e171m19/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e171m19/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e171m19/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e171m19/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e171m19/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e171m19/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e174m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e174m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e174m17/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e174m17/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e174m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e174m17/femul.v14
-rw-r--r--src/Specific/montgomery64_2e174m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e174m17/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e174m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e174m17/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e174m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e174m17/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e174m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e174m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e174m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e174m3/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e174m3/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e174m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e174m3/femul.v14
-rw-r--r--src/Specific/montgomery64_2e174m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e174m3/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e174m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e174m3/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e174m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e174m3/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e174m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e189m25/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e189m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e189m25/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e189m25/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e189m25/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e189m25/femul.v14
-rw-r--r--src/Specific/montgomery64_2e189m25/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e189m25/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e189m25/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e189m25/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e189m25/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e189m25/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e189m25/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e190m11/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e190m11/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e190m11/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e190m11/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e190m11/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e190m11/femul.v14
-rw-r--r--src/Specific/montgomery64_2e190m11/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e190m11/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e190m11/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e190m11/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e190m11/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e190m11/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e190m11/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e191m19/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e191m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e191m19/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e191m19/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e191m19/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e191m19/femul.v14
-rw-r--r--src/Specific/montgomery64_2e191m19/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e191m19/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e191m19/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e191m19/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e191m19/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e191m19/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e191m19/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e192m2e64m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e192m2e64m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e192m2e64m1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e192m2e64m1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e192m2e64m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e192m2e64m1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e192m2e64m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e192m2e64m1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e192m2e64m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e192m2e64m1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e192m2e64m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e192m2e64m1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e192m2e64m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e194m33/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e194m33/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e194m33/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e194m33/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e194m33/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e194m33/femul.v14
-rw-r--r--src/Specific/montgomery64_2e194m33/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e194m33/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e194m33/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e194m33/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e194m33/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e194m33/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e194m33/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e196m15/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e196m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e196m15/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e196m15/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e196m15/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e196m15/femul.v14
-rw-r--r--src/Specific/montgomery64_2e196m15/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e196m15/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e196m15/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e196m15/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e196m15/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e196m15/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e196m15/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e198m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e198m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e198m17/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e198m17/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e198m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e198m17/femul.v14
-rw-r--r--src/Specific/montgomery64_2e198m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e198m17/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e198m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e198m17/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e198m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e198m17/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e198m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e206m5/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e206m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e206m5/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e206m5/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e206m5/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e206m5/femul.v14
-rw-r--r--src/Specific/montgomery64_2e206m5/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e206m5/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e206m5/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e206m5/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e206m5/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e206m5/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e206m5/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e212m29/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e212m29/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e212m29/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e212m29/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e212m29/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e212m29/femul.v14
-rw-r--r--src/Specific/montgomery64_2e212m29/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e212m29/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e212m29/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e212m29/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e212m29/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e212m29/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e212m29/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e213m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e213m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e213m3/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e213m3/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e213m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e213m3/femul.v14
-rw-r--r--src/Specific/montgomery64_2e213m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e213m3/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e213m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e213m3/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e213m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e213m3/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e213m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e216m2e108m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e216m2e108m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e216m2e108m1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e216m2e108m1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e216m2e108m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e216m2e108m1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e216m2e108m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e216m2e108m1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e216m2e108m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e216m2e108m1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e216m2e108m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e216m2e108m1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e216m2e108m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e221m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e221m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e221m3/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e221m3/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e221m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e221m3/femul.v14
-rw-r--r--src/Specific/montgomery64_2e221m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e221m3/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e221m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e221m3/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e221m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e221m3/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e221m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e222m117/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e222m117/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e222m117/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e222m117/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e222m117/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e222m117/femul.v14
-rw-r--r--src/Specific/montgomery64_2e222m117/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e222m117/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e222m117/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e222m117/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e222m117/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e222m117/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e222m117/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e224m2e96p1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e224m2e96p1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e224m2e96p1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e224m2e96p1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e224m2e96p1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e224m2e96p1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e224m2e96p1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e224m2e96p1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e224m2e96p1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e224m2e96p1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e224m2e96p1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e224m2e96p1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e224m2e96p1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e226m5/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e226m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e226m5/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e226m5/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e226m5/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e226m5/femul.v14
-rw-r--r--src/Specific/montgomery64_2e226m5/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e226m5/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e226m5/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e226m5/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e226m5/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e226m5/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e226m5/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e230m27/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e230m27/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e230m27/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e230m27/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e230m27/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e230m27/femul.v14
-rw-r--r--src/Specific/montgomery64_2e230m27/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e230m27/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e230m27/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e230m27/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e230m27/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e230m27/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e230m27/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e235m15/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e235m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e235m15/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e235m15/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e235m15/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e235m15/femul.v14
-rw-r--r--src/Specific/montgomery64_2e235m15/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e235m15/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e235m15/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e235m15/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e235m15/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e235m15/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e235m15/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e243m9/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e243m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e243m9/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e243m9/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e243m9/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e243m9/femul.v14
-rw-r--r--src/Specific/montgomery64_2e243m9/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e243m9/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e243m9/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e243m9/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e243m9/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e243m9/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e243m9/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e251m9/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e251m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e251m9/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e251m9/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e251m9/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e251m9/femul.v14
-rw-r--r--src/Specific/montgomery64_2e251m9/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e251m9/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e251m9/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e251m9/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e251m9/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e251m9/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e251m9/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m19/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e255m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e255m19/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e255m19/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e255m19/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m19/femul.v14
-rw-r--r--src/Specific/montgomery64_2e255m19/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m19/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e255m19/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m19/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e255m19/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m19/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e255m19/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m2e4m2e1m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e255m2e4m2e1m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e255m2e4m2e1m1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e255m2e4m2e1m1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e255m2e4m2e1m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m2e4m2e1m1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e255m2e4m2e1m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m2e4m2e1m1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e255m2e4m2e1m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m2e4m2e1m1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e255m2e4m2e1m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m2e4m2e1m1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e255m2e4m2e1m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m765/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e255m765/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e255m765/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e255m765/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e255m765/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m765/femul.v14
-rw-r--r--src/Specific/montgomery64_2e255m765/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m765/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e255m765/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m765/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e255m765/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e255m765/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e255m765/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m189/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e256m189/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e256m189/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e256m189/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e256m189/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m189/femul.v14
-rw-r--r--src/Specific/montgomery64_2e256m189/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m189/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e256m189/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m189/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e256m189/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m189/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e256m189/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e256m2e224p2e192p2e96m1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m2e32m977/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e256m2e32m977/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e256m2e32m977/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e256m2e32m977/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e256m2e32m977/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m2e32m977/femul.v14
-rw-r--r--src/Specific/montgomery64_2e256m2e32m977/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m2e32m977/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e256m2e32m977/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m2e32m977/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e256m2e32m977/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e256m2e32m977/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e256m2e32m977/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e266m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e266m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e266m3/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e266m3/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e266m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e266m3/femul.v14
-rw-r--r--src/Specific/montgomery64_2e266m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e266m3/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e266m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e266m3/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e266m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e266m3/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e266m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e285m9/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e285m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e285m9/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e285m9/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e285m9/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e285m9/femul.v14
-rw-r--r--src/Specific/montgomery64_2e285m9/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e285m9/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e285m9/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e285m9/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e285m9/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e285m9/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e285m9/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e291m19/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e291m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e291m19/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e291m19/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e291m19/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e291m19/femul.v14
-rw-r--r--src/Specific/montgomery64_2e291m19/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e291m19/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e291m19/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e291m19/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e291m19/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e291m19/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e291m19/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e321m9/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e321m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e321m9/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e321m9/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e321m9/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e321m9/femul.v14
-rw-r--r--src/Specific/montgomery64_2e321m9/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e321m9/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e321m9/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e321m9/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e321m9/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e321m9/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e321m9/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e322m2e161m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e322m2e161m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e322m2e161m1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e322m2e161m1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e322m2e161m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e322m2e161m1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e322m2e161m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e322m2e161m1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e322m2e161m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e322m2e161m1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e322m2e161m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e322m2e161m1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e322m2e161m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e336m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e336m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e336m17/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e336m17/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e336m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e336m17/femul.v14
-rw-r--r--src/Specific/montgomery64_2e336m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e336m17/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e336m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e336m17/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e336m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e336m17/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e336m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e336m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e336m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e336m3/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e336m3/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e336m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e336m3/femul.v14
-rw-r--r--src/Specific/montgomery64_2e336m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e336m3/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e336m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e336m3/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e336m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e336m3/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e336m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e338m15/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e338m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e338m15/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e338m15/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e338m15/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e338m15/femul.v14
-rw-r--r--src/Specific/montgomery64_2e338m15/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e338m15/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e338m15/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e338m15/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e338m15/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e338m15/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e338m15/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e369m25/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e369m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e369m25/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e369m25/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e369m25/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e369m25/femul.v14
-rw-r--r--src/Specific/montgomery64_2e369m25/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e369m25/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e369m25/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e369m25/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e369m25/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e369m25/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e369m25/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e379m19/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e379m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e379m19/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e379m19/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e379m19/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e379m19/femul.v14
-rw-r--r--src/Specific/montgomery64_2e379m19/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e379m19/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e379m19/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e379m19/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e379m19/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e379m19/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e379m19/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e382m105/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e382m105/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e382m105/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e382m105/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e382m105/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e382m105/femul.v14
-rw-r--r--src/Specific/montgomery64_2e382m105/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e382m105/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e382m105/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e382m105/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e382m105/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e382m105/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e382m105/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m187/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e383m187/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e383m187/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e383m187/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e383m187/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m187/femul.v14
-rw-r--r--src/Specific/montgomery64_2e383m187/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m187/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e383m187/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m187/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e383m187/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m187/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e383m187/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m31/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e383m31/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e383m31/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e383m31/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e383m31/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m31/femul.v14
-rw-r--r--src/Specific/montgomery64_2e383m31/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m31/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e383m31/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m31/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e383m31/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m31/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e383m31/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m421/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e383m421/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e383m421/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e383m421/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e383m421/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m421/femul.v14
-rw-r--r--src/Specific/montgomery64_2e383m421/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m421/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e383m421/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m421/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e383m421/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e383m421/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e383m421/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e384m2e128m2e96p2e32m1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e384m317/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e384m317/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e384m317/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e384m317/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e384m317/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e384m317/femul.v14
-rw-r--r--src/Specific/montgomery64_2e384m317/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e384m317/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e384m317/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e384m317/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e384m317/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e384m317/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e384m317/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e389m21/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e389m21/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e389m21/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e389m21/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e389m21/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e389m21/femul.v14
-rw-r--r--src/Specific/montgomery64_2e389m21/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e389m21/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e389m21/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e389m21/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e389m21/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e389m21/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e389m21/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e401m31/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e401m31/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e401m31/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e401m31/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e401m31/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e401m31/femul.v14
-rw-r--r--src/Specific/montgomery64_2e401m31/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e401m31/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e401m31/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e401m31/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e401m31/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e401m31/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e401m31/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e413m21/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e413m21/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e413m21/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e413m21/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e413m21/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e413m21/femul.v14
-rw-r--r--src/Specific/montgomery64_2e413m21/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e413m21/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e413m21/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e413m21/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e413m21/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e413m21/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e413m21/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e414m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e414m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e414m17/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e414m17/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e414m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e414m17/femul.v14
-rw-r--r--src/Specific/montgomery64_2e414m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e414m17/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e414m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e414m17/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e414m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e414m17/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e414m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e416m2e208m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e416m2e208m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e416m2e208m1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e416m2e208m1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e416m2e208m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e416m2e208m1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e416m2e208m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e416m2e208m1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e416m2e208m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e416m2e208m1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e416m2e208m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e416m2e208m1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e416m2e208m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e444m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e444m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e444m17/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e444m17/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e444m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e444m17/femul.v14
-rw-r--r--src/Specific/montgomery64_2e444m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e444m17/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e444m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e444m17/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e444m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e444m17/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e444m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e448m2e224m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e448m2e224m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e448m2e224m1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e448m2e224m1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e448m2e224m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e448m2e224m1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e448m2e224m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e448m2e224m1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e448m2e224m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e448m2e224m1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e448m2e224m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e448m2e224m1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e448m2e224m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e450m2e225m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e450m2e225m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e450m2e225m1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e450m2e225m1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e450m2e225m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e450m2e225m1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e450m2e225m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e450m2e225m1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e450m2e225m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e450m2e225m1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e450m2e225m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e450m2e225m1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e450m2e225m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e452m3/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e452m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e452m3/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e452m3/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e452m3/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e452m3/femul.v14
-rw-r--r--src/Specific/montgomery64_2e452m3/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e452m3/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e452m3/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e452m3/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e452m3/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e452m3/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e452m3/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e468m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e468m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e468m17/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e468m17/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e468m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e468m17/femul.v14
-rw-r--r--src/Specific/montgomery64_2e468m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e468m17/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e468m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e468m17/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e468m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e468m17/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e468m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e480m2e240m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e480m2e240m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e480m2e240m1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e480m2e240m1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e480m2e240m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e480m2e240m1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e480m2e240m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e480m2e240m1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e480m2e240m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e480m2e240m1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e480m2e240m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e480m2e240m1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e480m2e240m1/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e488m17/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e488m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e488m17/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e488m17/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e488m17/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e488m17/femul.v14
-rw-r--r--src/Specific/montgomery64_2e488m17/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e488m17/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e488m17/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e488m17/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e488m17/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e488m17/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e488m17/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e489m21/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e489m21/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e489m21/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e489m21/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e489m21/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e489m21/femul.v14
-rw-r--r--src/Specific/montgomery64_2e489m21/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e489m21/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e489m21/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e489m21/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e489m21/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e489m21/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e489m21/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e495m31/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e495m31/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e495m31/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e495m31/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e495m31/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e495m31/femul.v14
-rw-r--r--src/Specific/montgomery64_2e495m31/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e495m31/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e495m31/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e495m31/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e495m31/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e495m31/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e495m31/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e511m187/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e511m187/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e511m187/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e511m187/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e511m187/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e511m187/femul.v14
-rw-r--r--src/Specific/montgomery64_2e511m187/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e511m187/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e511m187/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e511m187/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e511m187/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e511m187/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e511m187/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e511m481/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e511m481/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e511m481/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e511m481/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e511m481/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e511m481/femul.v14
-rw-r--r--src/Specific/montgomery64_2e511m481/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e511m481/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e511m481/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e511m481/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e511m481/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e511m481/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e511m481/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e512m569/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e512m569/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e512m569/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e512m569/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e512m569/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e512m569/femul.v14
-rw-r--r--src/Specific/montgomery64_2e512m569/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e512m569/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e512m569/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e512m569/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e512m569/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e512m569/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e512m569/fesubDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e521m1/CurveParameters.v34
-rw-r--r--src/Specific/montgomery64_2e521m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/montgomery64_2e521m1/compiler.sh4
-rw-r--r--src/Specific/montgomery64_2e521m1/feadd.v14
-rw-r--r--src/Specific/montgomery64_2e521m1/feaddDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e521m1/femul.v14
-rw-r--r--src/Specific/montgomery64_2e521m1/femulDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e521m1/fenz.v16
-rw-r--r--src/Specific/montgomery64_2e521m1/fenzDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e521m1/feopp.v14
-rw-r--r--src/Specific/montgomery64_2e521m1/feoppDisplay.v4
-rw-r--r--src/Specific/montgomery64_2e521m1/fesub.v14
-rw-r--r--src/Specific/montgomery64_2e521m1/fesubDisplay.v4
-rw-r--r--src/Specific/solinas32_2e127m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e127m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e127m1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e127m1/femul.v14
-rw-r--r--src/Specific/solinas32_2e127m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e127m1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e127m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e127m1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e127m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e129m25/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e129m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e129m25/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e129m25/femul.v14
-rw-r--r--src/Specific/solinas32_2e129m25/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e129m25/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e129m25/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e129m25/freeze.v14
-rw-r--r--src/Specific/solinas32_2e129m25/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e130m5/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e130m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e130m5/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e130m5/femul.v14
-rw-r--r--src/Specific/solinas32_2e130m5/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e130m5/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e130m5/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e130m5/freeze.v14
-rw-r--r--src/Specific/solinas32_2e130m5/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e137m13/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e137m13/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e137m13/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e137m13/femul.v14
-rw-r--r--src/Specific/solinas32_2e137m13/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e137m13/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e137m13/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e137m13/freeze.v14
-rw-r--r--src/Specific/solinas32_2e137m13/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e140m27/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e140m27/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e140m27/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e140m27/femul.v14
-rw-r--r--src/Specific/solinas32_2e140m27/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e140m27/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e140m27/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e140m27/freeze.v14
-rw-r--r--src/Specific/solinas32_2e140m27/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e141m9/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e141m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e141m9/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e141m9/femul.v14
-rw-r--r--src/Specific/solinas32_2e141m9/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e141m9/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e141m9/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e141m9/freeze.v14
-rw-r--r--src/Specific/solinas32_2e141m9/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e150m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e150m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e150m3/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e150m3/femul.v14
-rw-r--r--src/Specific/solinas32_2e150m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e150m3/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e150m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e150m3/freeze.v14
-rw-r--r--src/Specific/solinas32_2e150m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e150m5/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e150m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e150m5/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e150m5/femul.v14
-rw-r--r--src/Specific/solinas32_2e150m5/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e150m5/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e150m5/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e150m5/freeze.v14
-rw-r--r--src/Specific/solinas32_2e150m5/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e152m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e152m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e152m17/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e152m17/femul.v14
-rw-r--r--src/Specific/solinas32_2e152m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e152m17/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e152m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e152m17/freeze.v14
-rw-r--r--src/Specific/solinas32_2e152m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e158m15/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e158m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e158m15/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e158m15/femul.v14
-rw-r--r--src/Specific/solinas32_2e158m15/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e158m15/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e158m15/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e158m15/freeze.v14
-rw-r--r--src/Specific/solinas32_2e158m15/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e165m25/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e165m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e165m25/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e165m25/femul.v14
-rw-r--r--src/Specific/solinas32_2e165m25/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e165m25/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e165m25/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e165m25/freeze.v14
-rw-r--r--src/Specific/solinas32_2e165m25/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e166m5/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e166m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e166m5/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e166m5/femul.v14
-rw-r--r--src/Specific/solinas32_2e166m5/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e166m5/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e166m5/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e166m5/freeze.v14
-rw-r--r--src/Specific/solinas32_2e166m5/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e171m19/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e171m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e171m19/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e171m19/femul.v14
-rw-r--r--src/Specific/solinas32_2e171m19/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e171m19/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e171m19/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e171m19/freeze.v14
-rw-r--r--src/Specific/solinas32_2e171m19/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e174m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e174m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e174m17/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e174m17/femul.v14
-rw-r--r--src/Specific/solinas32_2e174m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e174m17/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e174m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e174m17/freeze.v14
-rw-r--r--src/Specific/solinas32_2e174m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e174m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e174m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e174m3/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e174m3/femul.v14
-rw-r--r--src/Specific/solinas32_2e174m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e174m3/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e174m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e174m3/freeze.v14
-rw-r--r--src/Specific/solinas32_2e174m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e189m25/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e189m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e189m25/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e189m25/femul.v14
-rw-r--r--src/Specific/solinas32_2e189m25/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e189m25/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e189m25/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e189m25/freeze.v14
-rw-r--r--src/Specific/solinas32_2e189m25/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e190m11/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e190m11/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e190m11/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e190m11/femul.v14
-rw-r--r--src/Specific/solinas32_2e190m11/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e190m11/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e190m11/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e190m11/freeze.v14
-rw-r--r--src/Specific/solinas32_2e190m11/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e191m19/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e191m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e191m19/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e191m19/femul.v14
-rw-r--r--src/Specific/solinas32_2e191m19/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e191m19/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e191m19/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e191m19/freeze.v14
-rw-r--r--src/Specific/solinas32_2e191m19/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e192m2e64m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e192m2e64m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e192m2e64m1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e192m2e64m1/femul.v14
-rw-r--r--src/Specific/solinas32_2e192m2e64m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e192m2e64m1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e192m2e64m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e192m2e64m1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e192m2e64m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e194m33/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e194m33/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e194m33/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e194m33/femul.v14
-rw-r--r--src/Specific/solinas32_2e194m33/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e194m33/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e194m33/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e194m33/freeze.v14
-rw-r--r--src/Specific/solinas32_2e194m33/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e196m15/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e196m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e196m15/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e196m15/femul.v14
-rw-r--r--src/Specific/solinas32_2e196m15/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e196m15/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e196m15/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e196m15/freeze.v14
-rw-r--r--src/Specific/solinas32_2e196m15/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e198m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e198m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e198m17/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e198m17/femul.v14
-rw-r--r--src/Specific/solinas32_2e198m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e198m17/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e198m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e198m17/freeze.v14
-rw-r--r--src/Specific/solinas32_2e198m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e206m5/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e206m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e206m5/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e206m5/femul.v14
-rw-r--r--src/Specific/solinas32_2e206m5/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e206m5/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e206m5/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e206m5/freeze.v14
-rw-r--r--src/Specific/solinas32_2e206m5/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e212m29/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e212m29/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e212m29/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e212m29/femul.v14
-rw-r--r--src/Specific/solinas32_2e212m29/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e212m29/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e212m29/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e212m29/freeze.v14
-rw-r--r--src/Specific/solinas32_2e212m29/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e213m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e213m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e213m3/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e213m3/femul.v14
-rw-r--r--src/Specific/solinas32_2e213m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e213m3/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e213m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e213m3/freeze.v14
-rw-r--r--src/Specific/solinas32_2e213m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e216m2e108m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e216m2e108m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e216m2e108m1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e216m2e108m1/femul.v14
-rw-r--r--src/Specific/solinas32_2e216m2e108m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e216m2e108m1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e216m2e108m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e216m2e108m1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e216m2e108m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e221m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e221m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e221m3/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e221m3/femul.v14
-rw-r--r--src/Specific/solinas32_2e221m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e221m3/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e221m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e221m3/freeze.v14
-rw-r--r--src/Specific/solinas32_2e221m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e222m117/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e222m117/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e222m117/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e222m117/femul.v14
-rw-r--r--src/Specific/solinas32_2e222m117/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e222m117/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e222m117/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e222m117/freeze.v14
-rw-r--r--src/Specific/solinas32_2e222m117/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e224m2e96p1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e224m2e96p1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e224m2e96p1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e224m2e96p1/femul.v14
-rw-r--r--src/Specific/solinas32_2e224m2e96p1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e224m2e96p1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e224m2e96p1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e224m2e96p1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e224m2e96p1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e226m5/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e226m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e226m5/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e226m5/femul.v14
-rw-r--r--src/Specific/solinas32_2e226m5/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e226m5/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e226m5/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e226m5/freeze.v14
-rw-r--r--src/Specific/solinas32_2e226m5/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e230m27/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e230m27/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e230m27/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e230m27/femul.v14
-rw-r--r--src/Specific/solinas32_2e230m27/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e230m27/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e230m27/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e230m27/freeze.v14
-rw-r--r--src/Specific/solinas32_2e230m27/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e235m15/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e235m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e235m15/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e235m15/femul.v14
-rw-r--r--src/Specific/solinas32_2e235m15/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e235m15/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e235m15/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e235m15/freeze.v14
-rw-r--r--src/Specific/solinas32_2e235m15/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e243m9/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e243m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e243m9/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e243m9/femul.v14
-rw-r--r--src/Specific/solinas32_2e243m9/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e243m9/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e243m9/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e243m9/freeze.v14
-rw-r--r--src/Specific/solinas32_2e243m9/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e251m9/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e251m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e251m9/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e251m9/femul.v14
-rw-r--r--src/Specific/solinas32_2e251m9/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e251m9/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e251m9/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e251m9/freeze.v14
-rw-r--r--src/Specific/solinas32_2e251m9/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e255m19/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e255m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e255m19/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e255m19/femul.v14
-rw-r--r--src/Specific/solinas32_2e255m19/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e255m19/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e255m19/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e255m19/freeze.v14
-rw-r--r--src/Specific/solinas32_2e255m19/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e255m2e4m2e1m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e255m2e4m2e1m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e255m2e4m2e1m1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e255m2e4m2e1m1/femul.v14
-rw-r--r--src/Specific/solinas32_2e255m2e4m2e1m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e255m2e4m2e1m1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e255m2e4m2e1m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e255m2e4m2e1m1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e255m2e4m2e1m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e255m765/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e255m765/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e255m765/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e255m765/femul.v14
-rw-r--r--src/Specific/solinas32_2e255m765/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e255m765/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e255m765/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e255m765/freeze.v14
-rw-r--r--src/Specific/solinas32_2e255m765/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e256m189/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e256m189/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e256m189/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e256m189/femul.v14
-rw-r--r--src/Specific/solinas32_2e256m189/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e256m189/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e256m189/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e256m189/freeze.v14
-rw-r--r--src/Specific/solinas32_2e256m189/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e256m2e224p2e192p2e96m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e256m2e224p2e192p2e96m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e256m2e224p2e192p2e96m1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e256m2e224p2e192p2e96m1/femul.v14
-rw-r--r--src/Specific/solinas32_2e256m2e224p2e192p2e96m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e256m2e224p2e192p2e96m1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e256m2e224p2e192p2e96m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e256m2e224p2e192p2e96m1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e256m2e224p2e192p2e96m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e256m2e32m977/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e256m2e32m977/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e256m2e32m977/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e256m2e32m977/femul.v14
-rw-r--r--src/Specific/solinas32_2e256m2e32m977/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e256m2e32m977/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e256m2e32m977/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e256m2e32m977/freeze.v14
-rw-r--r--src/Specific/solinas32_2e256m2e32m977/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e266m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e266m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e266m3/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e266m3/femul.v14
-rw-r--r--src/Specific/solinas32_2e266m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e266m3/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e266m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e266m3/freeze.v14
-rw-r--r--src/Specific/solinas32_2e266m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e285m9/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e285m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e285m9/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e285m9/femul.v14
-rw-r--r--src/Specific/solinas32_2e285m9/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e285m9/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e285m9/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e285m9/freeze.v14
-rw-r--r--src/Specific/solinas32_2e285m9/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e291m19/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e291m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e291m19/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e291m19/femul.v14
-rw-r--r--src/Specific/solinas32_2e291m19/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e291m19/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e291m19/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e291m19/freeze.v14
-rw-r--r--src/Specific/solinas32_2e291m19/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e321m9/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e321m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e321m9/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e321m9/femul.v14
-rw-r--r--src/Specific/solinas32_2e321m9/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e321m9/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e321m9/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e321m9/freeze.v14
-rw-r--r--src/Specific/solinas32_2e321m9/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e322m2e161m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e322m2e161m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e322m2e161m1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e322m2e161m1/femul.v14
-rw-r--r--src/Specific/solinas32_2e322m2e161m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e322m2e161m1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e322m2e161m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e322m2e161m1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e322m2e161m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e336m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e336m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e336m17/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e336m17/femul.v14
-rw-r--r--src/Specific/solinas32_2e336m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e336m17/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e336m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e336m17/freeze.v14
-rw-r--r--src/Specific/solinas32_2e336m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e336m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e336m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e336m3/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e336m3/femul.v14
-rw-r--r--src/Specific/solinas32_2e336m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e336m3/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e336m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e336m3/freeze.v14
-rw-r--r--src/Specific/solinas32_2e336m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e338m15/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e338m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e338m15/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e338m15/femul.v14
-rw-r--r--src/Specific/solinas32_2e338m15/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e338m15/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e338m15/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e338m15/freeze.v14
-rw-r--r--src/Specific/solinas32_2e338m15/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e369m25/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e369m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e369m25/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e369m25/femul.v14
-rw-r--r--src/Specific/solinas32_2e369m25/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e369m25/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e369m25/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e369m25/freeze.v14
-rw-r--r--src/Specific/solinas32_2e369m25/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e379m19/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e379m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e379m19/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e379m19/femul.v14
-rw-r--r--src/Specific/solinas32_2e379m19/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e379m19/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e379m19/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e379m19/freeze.v14
-rw-r--r--src/Specific/solinas32_2e379m19/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e382m105/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e382m105/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e382m105/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e382m105/femul.v14
-rw-r--r--src/Specific/solinas32_2e382m105/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e382m105/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e382m105/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e382m105/freeze.v14
-rw-r--r--src/Specific/solinas32_2e382m105/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e384m2e128m2e96p2e32m1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1/femul.v14
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e384m2e128m2e96p2e32m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e384m317/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e384m317/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e384m317/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e384m317/femul.v14
-rw-r--r--src/Specific/solinas32_2e384m317/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e384m317/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e384m317/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e384m317/freeze.v14
-rw-r--r--src/Specific/solinas32_2e384m317/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e401m31/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e401m31/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e401m31/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e401m31/femul.v14
-rw-r--r--src/Specific/solinas32_2e401m31/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e401m31/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e401m31/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e401m31/freeze.v14
-rw-r--r--src/Specific/solinas32_2e401m31/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e413m21/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e413m21/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e413m21/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e413m21/femul.v14
-rw-r--r--src/Specific/solinas32_2e413m21/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e413m21/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e413m21/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e413m21/freeze.v14
-rw-r--r--src/Specific/solinas32_2e413m21/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e414m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e414m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e414m17/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e414m17/femul.v14
-rw-r--r--src/Specific/solinas32_2e414m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e414m17/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e414m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e414m17/freeze.v14
-rw-r--r--src/Specific/solinas32_2e414m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e416m2e208m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e416m2e208m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e416m2e208m1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e416m2e208m1/femul.v14
-rw-r--r--src/Specific/solinas32_2e416m2e208m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e416m2e208m1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e416m2e208m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e416m2e208m1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e416m2e208m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e444m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e444m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e444m17/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e444m17/femul.v14
-rw-r--r--src/Specific/solinas32_2e444m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e444m17/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e444m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e444m17/freeze.v14
-rw-r--r--src/Specific/solinas32_2e444m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e448m2e224m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e448m2e224m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e448m2e224m1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e448m2e224m1/femul.v14
-rw-r--r--src/Specific/solinas32_2e448m2e224m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e448m2e224m1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e448m2e224m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e448m2e224m1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e448m2e224m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e450m2e225m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e450m2e225m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e450m2e225m1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e450m2e225m1/femul.v14
-rw-r--r--src/Specific/solinas32_2e450m2e225m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e450m2e225m1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e450m2e225m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e450m2e225m1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e450m2e225m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e452m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e452m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e452m3/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e452m3/femul.v14
-rw-r--r--src/Specific/solinas32_2e452m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e452m3/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e452m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e452m3/freeze.v14
-rw-r--r--src/Specific/solinas32_2e452m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e468m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e468m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e468m17/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e468m17/femul.v14
-rw-r--r--src/Specific/solinas32_2e468m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e468m17/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e468m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e468m17/freeze.v14
-rw-r--r--src/Specific/solinas32_2e468m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e480m2e240m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e480m2e240m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e480m2e240m1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e480m2e240m1/femul.v14
-rw-r--r--src/Specific/solinas32_2e480m2e240m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e480m2e240m1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e480m2e240m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e480m2e240m1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e480m2e240m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e488m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e488m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e488m17/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e488m17/femul.v14
-rw-r--r--src/Specific/solinas32_2e488m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e488m17/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e488m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e488m17/freeze.v14
-rw-r--r--src/Specific/solinas32_2e488m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e489m21/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e489m21/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e489m21/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e489m21/femul.v14
-rw-r--r--src/Specific/solinas32_2e489m21/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e489m21/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e489m21/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e489m21/freeze.v14
-rw-r--r--src/Specific/solinas32_2e489m21/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e495m31/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e495m31/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e495m31/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e495m31/femul.v14
-rw-r--r--src/Specific/solinas32_2e495m31/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e495m31/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e495m31/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e495m31/freeze.v14
-rw-r--r--src/Specific/solinas32_2e495m31/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e511m187/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e511m187/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e511m187/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e511m187/femul.v14
-rw-r--r--src/Specific/solinas32_2e511m187/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e511m187/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e511m187/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e511m187/freeze.v14
-rw-r--r--src/Specific/solinas32_2e511m187/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e511m481/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e511m481/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e511m481/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e511m481/femul.v14
-rw-r--r--src/Specific/solinas32_2e511m481/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e511m481/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e511m481/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e511m481/freeze.v14
-rw-r--r--src/Specific/solinas32_2e511m481/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e512m569/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e512m569/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e512m569/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e512m569/femul.v14
-rw-r--r--src/Specific/solinas32_2e512m569/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e512m569/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e512m569/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e512m569/freeze.v14
-rw-r--r--src/Specific/solinas32_2e512m569/freezeDisplay.v4
-rw-r--r--src/Specific/solinas32_2e521m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas32_2e521m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas32_2e521m1/compiler.sh4
-rw-r--r--src/Specific/solinas32_2e521m1/femul.v14
-rw-r--r--src/Specific/solinas32_2e521m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas32_2e521m1/fesquare.v14
-rw-r--r--src/Specific/solinas32_2e521m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas32_2e521m1/freeze.v14
-rw-r--r--src/Specific/solinas32_2e521m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e127m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e127m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e127m1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e127m1/femul.v14
-rw-r--r--src/Specific/solinas64_2e127m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e127m1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e127m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e127m1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e127m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e129m25/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e129m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e129m25/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e129m25/femul.v14
-rw-r--r--src/Specific/solinas64_2e129m25/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e129m25/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e129m25/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e129m25/freeze.v14
-rw-r--r--src/Specific/solinas64_2e129m25/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e130m5/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e130m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e130m5/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e130m5/femul.v14
-rw-r--r--src/Specific/solinas64_2e130m5/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e130m5/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e130m5/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e130m5/freeze.v14
-rw-r--r--src/Specific/solinas64_2e130m5/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e137m13/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e137m13/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e137m13/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e137m13/femul.v14
-rw-r--r--src/Specific/solinas64_2e137m13/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e137m13/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e137m13/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e137m13/freeze.v14
-rw-r--r--src/Specific/solinas64_2e137m13/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e140m27/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e140m27/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e140m27/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e140m27/femul.v14
-rw-r--r--src/Specific/solinas64_2e140m27/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e140m27/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e140m27/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e140m27/freeze.v14
-rw-r--r--src/Specific/solinas64_2e140m27/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e141m9/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e141m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e141m9/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e141m9/femul.v14
-rw-r--r--src/Specific/solinas64_2e141m9/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e141m9/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e141m9/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e141m9/freeze.v14
-rw-r--r--src/Specific/solinas64_2e141m9/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e150m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e150m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e150m3/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e150m3/femul.v14
-rw-r--r--src/Specific/solinas64_2e150m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e150m3/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e150m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e150m3/freeze.v14
-rw-r--r--src/Specific/solinas64_2e150m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e150m5/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e150m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e150m5/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e150m5/femul.v14
-rw-r--r--src/Specific/solinas64_2e150m5/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e150m5/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e150m5/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e150m5/freeze.v14
-rw-r--r--src/Specific/solinas64_2e150m5/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e152m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e152m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e152m17/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e152m17/femul.v14
-rw-r--r--src/Specific/solinas64_2e152m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e152m17/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e152m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e152m17/freeze.v14
-rw-r--r--src/Specific/solinas64_2e152m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e158m15/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e158m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e158m15/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e158m15/femul.v14
-rw-r--r--src/Specific/solinas64_2e158m15/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e158m15/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e158m15/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e158m15/freeze.v14
-rw-r--r--src/Specific/solinas64_2e158m15/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e165m25/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e165m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e165m25/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e165m25/femul.v14
-rw-r--r--src/Specific/solinas64_2e165m25/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e165m25/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e165m25/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e165m25/freeze.v14
-rw-r--r--src/Specific/solinas64_2e165m25/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e166m5/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e166m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e166m5/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e166m5/femul.v14
-rw-r--r--src/Specific/solinas64_2e166m5/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e166m5/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e166m5/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e166m5/freeze.v14
-rw-r--r--src/Specific/solinas64_2e166m5/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e171m19/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e171m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e171m19/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e171m19/femul.v14
-rw-r--r--src/Specific/solinas64_2e171m19/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e171m19/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e171m19/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e171m19/freeze.v14
-rw-r--r--src/Specific/solinas64_2e171m19/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e174m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e174m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e174m17/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e174m17/femul.v14
-rw-r--r--src/Specific/solinas64_2e174m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e174m17/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e174m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e174m17/freeze.v14
-rw-r--r--src/Specific/solinas64_2e174m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e174m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e174m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e174m3/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e174m3/femul.v14
-rw-r--r--src/Specific/solinas64_2e174m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e174m3/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e174m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e174m3/freeze.v14
-rw-r--r--src/Specific/solinas64_2e174m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e189m25/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e189m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e189m25/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e189m25/femul.v14
-rw-r--r--src/Specific/solinas64_2e189m25/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e189m25/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e189m25/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e189m25/freeze.v14
-rw-r--r--src/Specific/solinas64_2e189m25/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e190m11/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e190m11/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e190m11/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e190m11/femul.v14
-rw-r--r--src/Specific/solinas64_2e190m11/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e190m11/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e190m11/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e190m11/freeze.v14
-rw-r--r--src/Specific/solinas64_2e190m11/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e191m19/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e191m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e191m19/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e191m19/femul.v14
-rw-r--r--src/Specific/solinas64_2e191m19/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e191m19/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e191m19/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e191m19/freeze.v14
-rw-r--r--src/Specific/solinas64_2e191m19/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e192m2e64m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e192m2e64m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e192m2e64m1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e192m2e64m1/femul.v14
-rw-r--r--src/Specific/solinas64_2e192m2e64m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e192m2e64m1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e192m2e64m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e192m2e64m1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e192m2e64m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e194m33/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e194m33/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e194m33/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e194m33/femul.v14
-rw-r--r--src/Specific/solinas64_2e194m33/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e194m33/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e194m33/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e194m33/freeze.v14
-rw-r--r--src/Specific/solinas64_2e194m33/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e196m15/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e196m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e196m15/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e196m15/femul.v14
-rw-r--r--src/Specific/solinas64_2e196m15/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e196m15/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e196m15/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e196m15/freeze.v14
-rw-r--r--src/Specific/solinas64_2e196m15/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e198m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e198m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e198m17/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e198m17/femul.v14
-rw-r--r--src/Specific/solinas64_2e198m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e198m17/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e198m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e198m17/freeze.v14
-rw-r--r--src/Specific/solinas64_2e198m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e206m5/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e206m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e206m5/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e206m5/femul.v14
-rw-r--r--src/Specific/solinas64_2e206m5/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e206m5/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e206m5/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e206m5/freeze.v14
-rw-r--r--src/Specific/solinas64_2e206m5/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e212m29/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e212m29/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e212m29/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e212m29/femul.v14
-rw-r--r--src/Specific/solinas64_2e212m29/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e212m29/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e212m29/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e212m29/freeze.v14
-rw-r--r--src/Specific/solinas64_2e212m29/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e213m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e213m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e213m3/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e213m3/femul.v14
-rw-r--r--src/Specific/solinas64_2e213m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e213m3/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e213m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e213m3/freeze.v14
-rw-r--r--src/Specific/solinas64_2e213m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e216m2e108m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e216m2e108m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e216m2e108m1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e216m2e108m1/femul.v14
-rw-r--r--src/Specific/solinas64_2e216m2e108m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e216m2e108m1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e216m2e108m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e216m2e108m1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e216m2e108m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e221m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e221m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e221m3/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e221m3/femul.v14
-rw-r--r--src/Specific/solinas64_2e221m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e221m3/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e221m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e221m3/freeze.v14
-rw-r--r--src/Specific/solinas64_2e221m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e222m117/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e222m117/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e222m117/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e222m117/femul.v14
-rw-r--r--src/Specific/solinas64_2e222m117/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e222m117/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e222m117/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e222m117/freeze.v14
-rw-r--r--src/Specific/solinas64_2e222m117/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e224m2e96p1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e224m2e96p1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e224m2e96p1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e224m2e96p1/femul.v14
-rw-r--r--src/Specific/solinas64_2e224m2e96p1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e224m2e96p1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e224m2e96p1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e224m2e96p1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e224m2e96p1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e226m5/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e226m5/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e226m5/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e226m5/femul.v14
-rw-r--r--src/Specific/solinas64_2e226m5/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e226m5/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e226m5/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e226m5/freeze.v14
-rw-r--r--src/Specific/solinas64_2e226m5/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e230m27/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e230m27/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e230m27/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e230m27/femul.v14
-rw-r--r--src/Specific/solinas64_2e230m27/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e230m27/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e230m27/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e230m27/freeze.v14
-rw-r--r--src/Specific/solinas64_2e230m27/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e235m15/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e235m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e235m15/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e235m15/femul.v14
-rw-r--r--src/Specific/solinas64_2e235m15/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e235m15/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e235m15/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e235m15/freeze.v14
-rw-r--r--src/Specific/solinas64_2e235m15/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e243m9/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e243m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e243m9/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e243m9/femul.v14
-rw-r--r--src/Specific/solinas64_2e243m9/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e243m9/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e243m9/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e243m9/freeze.v14
-rw-r--r--src/Specific/solinas64_2e243m9/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e251m9/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e251m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e251m9/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e251m9/femul.v14
-rw-r--r--src/Specific/solinas64_2e251m9/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e251m9/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e251m9/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e251m9/freeze.v14
-rw-r--r--src/Specific/solinas64_2e251m9/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e255m19/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e255m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e255m19/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e255m19/femul.v14
-rw-r--r--src/Specific/solinas64_2e255m19/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e255m19/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e255m19/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e255m19/freeze.v14
-rw-r--r--src/Specific/solinas64_2e255m19/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e255m2e4m2e1m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e255m2e4m2e1m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e255m2e4m2e1m1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e255m2e4m2e1m1/femul.v14
-rw-r--r--src/Specific/solinas64_2e255m2e4m2e1m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e255m2e4m2e1m1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e255m2e4m2e1m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e255m2e4m2e1m1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e255m2e4m2e1m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e255m765/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e255m765/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e255m765/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e255m765/femul.v14
-rw-r--r--src/Specific/solinas64_2e255m765/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e255m765/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e255m765/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e255m765/freeze.v14
-rw-r--r--src/Specific/solinas64_2e255m765/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e256m189/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e256m189/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e256m189/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e256m189/femul.v14
-rw-r--r--src/Specific/solinas64_2e256m189/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e256m189/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e256m189/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e256m189/freeze.v14
-rw-r--r--src/Specific/solinas64_2e256m189/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e256m2e224p2e192p2e96m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e256m2e224p2e192p2e96m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e256m2e224p2e192p2e96m1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e256m2e224p2e192p2e96m1/femul.v14
-rw-r--r--src/Specific/solinas64_2e256m2e224p2e192p2e96m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e256m2e224p2e192p2e96m1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e256m2e224p2e192p2e96m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e256m2e224p2e192p2e96m1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e256m2e224p2e192p2e96m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e256m2e32m977/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e256m2e32m977/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e256m2e32m977/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e256m2e32m977/femul.v14
-rw-r--r--src/Specific/solinas64_2e256m2e32m977/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e256m2e32m977/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e256m2e32m977/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e256m2e32m977/freeze.v14
-rw-r--r--src/Specific/solinas64_2e256m2e32m977/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e266m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e266m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e266m3/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e266m3/femul.v14
-rw-r--r--src/Specific/solinas64_2e266m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e266m3/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e266m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e266m3/freeze.v14
-rw-r--r--src/Specific/solinas64_2e266m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e285m9/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e285m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e285m9/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e285m9/femul.v14
-rw-r--r--src/Specific/solinas64_2e285m9/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e285m9/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e285m9/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e285m9/freeze.v14
-rw-r--r--src/Specific/solinas64_2e285m9/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e291m19/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e291m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e291m19/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e291m19/femul.v14
-rw-r--r--src/Specific/solinas64_2e291m19/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e291m19/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e291m19/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e291m19/freeze.v14
-rw-r--r--src/Specific/solinas64_2e291m19/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e321m9/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e321m9/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e321m9/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e321m9/femul.v14
-rw-r--r--src/Specific/solinas64_2e321m9/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e321m9/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e321m9/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e321m9/freeze.v14
-rw-r--r--src/Specific/solinas64_2e321m9/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e322m2e161m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e322m2e161m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e322m2e161m1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e322m2e161m1/femul.v14
-rw-r--r--src/Specific/solinas64_2e322m2e161m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e322m2e161m1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e322m2e161m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e322m2e161m1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e322m2e161m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e336m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e336m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e336m17/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e336m17/femul.v14
-rw-r--r--src/Specific/solinas64_2e336m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e336m17/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e336m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e336m17/freeze.v14
-rw-r--r--src/Specific/solinas64_2e336m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e336m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e336m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e336m3/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e336m3/femul.v14
-rw-r--r--src/Specific/solinas64_2e336m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e336m3/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e336m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e336m3/freeze.v14
-rw-r--r--src/Specific/solinas64_2e336m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e338m15/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e338m15/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e338m15/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e338m15/femul.v14
-rw-r--r--src/Specific/solinas64_2e338m15/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e338m15/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e338m15/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e338m15/freeze.v14
-rw-r--r--src/Specific/solinas64_2e338m15/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e369m25/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e369m25/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e369m25/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e369m25/femul.v14
-rw-r--r--src/Specific/solinas64_2e369m25/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e369m25/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e369m25/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e369m25/freeze.v14
-rw-r--r--src/Specific/solinas64_2e369m25/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e379m19/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e379m19/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e379m19/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e379m19/femul.v14
-rw-r--r--src/Specific/solinas64_2e379m19/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e379m19/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e379m19/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e379m19/freeze.v14
-rw-r--r--src/Specific/solinas64_2e379m19/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e382m105/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e382m105/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e382m105/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e382m105/femul.v14
-rw-r--r--src/Specific/solinas64_2e382m105/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e382m105/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e382m105/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e382m105/freeze.v14
-rw-r--r--src/Specific/solinas64_2e382m105/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e384m2e128m2e96p2e32m1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1/femul.v14
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e384m2e128m2e96p2e32m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e384m317/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e384m317/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e384m317/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e384m317/femul.v14
-rw-r--r--src/Specific/solinas64_2e384m317/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e384m317/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e384m317/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e384m317/freeze.v14
-rw-r--r--src/Specific/solinas64_2e384m317/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e401m31/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e401m31/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e401m31/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e401m31/femul.v14
-rw-r--r--src/Specific/solinas64_2e401m31/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e401m31/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e401m31/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e401m31/freeze.v14
-rw-r--r--src/Specific/solinas64_2e401m31/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e413m21/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e413m21/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e413m21/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e413m21/femul.v14
-rw-r--r--src/Specific/solinas64_2e413m21/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e413m21/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e413m21/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e413m21/freeze.v14
-rw-r--r--src/Specific/solinas64_2e413m21/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e414m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e414m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e414m17/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e414m17/femul.v14
-rw-r--r--src/Specific/solinas64_2e414m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e414m17/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e414m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e414m17/freeze.v14
-rw-r--r--src/Specific/solinas64_2e414m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e416m2e208m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e416m2e208m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e416m2e208m1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e416m2e208m1/femul.v14
-rw-r--r--src/Specific/solinas64_2e416m2e208m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e416m2e208m1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e416m2e208m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e416m2e208m1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e416m2e208m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e444m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e444m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e444m17/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e444m17/femul.v14
-rw-r--r--src/Specific/solinas64_2e444m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e444m17/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e444m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e444m17/freeze.v14
-rw-r--r--src/Specific/solinas64_2e444m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e448m2e224m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e448m2e224m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e448m2e224m1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e448m2e224m1/femul.v14
-rw-r--r--src/Specific/solinas64_2e448m2e224m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e448m2e224m1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e448m2e224m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e448m2e224m1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e448m2e224m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e450m2e225m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e450m2e225m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e450m2e225m1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e450m2e225m1/femul.v14
-rw-r--r--src/Specific/solinas64_2e450m2e225m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e450m2e225m1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e450m2e225m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e450m2e225m1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e450m2e225m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e452m3/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e452m3/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e452m3/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e452m3/femul.v14
-rw-r--r--src/Specific/solinas64_2e452m3/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e452m3/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e452m3/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e452m3/freeze.v14
-rw-r--r--src/Specific/solinas64_2e452m3/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e468m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e468m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e468m17/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e468m17/femul.v14
-rw-r--r--src/Specific/solinas64_2e468m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e468m17/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e468m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e468m17/freeze.v14
-rw-r--r--src/Specific/solinas64_2e468m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e480m2e240m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e480m2e240m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e480m2e240m1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e480m2e240m1/femul.v14
-rw-r--r--src/Specific/solinas64_2e480m2e240m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e480m2e240m1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e480m2e240m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e480m2e240m1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e480m2e240m1/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e488m17/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e488m17/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e488m17/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e488m17/femul.v14
-rw-r--r--src/Specific/solinas64_2e488m17/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e488m17/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e488m17/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e488m17/freeze.v14
-rw-r--r--src/Specific/solinas64_2e488m17/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e489m21/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e489m21/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e489m21/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e489m21/femul.v14
-rw-r--r--src/Specific/solinas64_2e489m21/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e489m21/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e489m21/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e489m21/freeze.v14
-rw-r--r--src/Specific/solinas64_2e489m21/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e495m31/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e495m31/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e495m31/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e495m31/femul.v14
-rw-r--r--src/Specific/solinas64_2e495m31/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e495m31/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e495m31/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e495m31/freeze.v14
-rw-r--r--src/Specific/solinas64_2e495m31/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e511m187/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e511m187/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e511m187/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e511m187/femul.v14
-rw-r--r--src/Specific/solinas64_2e511m187/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e511m187/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e511m187/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e511m187/freeze.v14
-rw-r--r--src/Specific/solinas64_2e511m187/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e511m481/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e511m481/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e511m481/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e511m481/femul.v14
-rw-r--r--src/Specific/solinas64_2e511m481/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e511m481/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e511m481/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e511m481/freeze.v14
-rw-r--r--src/Specific/solinas64_2e511m481/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e512m569/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e512m569/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e512m569/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e512m569/femul.v14
-rw-r--r--src/Specific/solinas64_2e512m569/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e512m569/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e512m569/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e512m569/freeze.v14
-rw-r--r--src/Specific/solinas64_2e512m569/freezeDisplay.v4
-rw-r--r--src/Specific/solinas64_2e521m1/CurveParameters.v34
-rw-r--r--src/Specific/solinas64_2e521m1/Synthesis.v9
-rwxr-xr-xsrc/Specific/solinas64_2e521m1/compiler.sh4
-rw-r--r--src/Specific/solinas64_2e521m1/femul.v14
-rw-r--r--src/Specific/solinas64_2e521m1/femulDisplay.v4
-rw-r--r--src/Specific/solinas64_2e521m1/fesquare.v14
-rw-r--r--src/Specific/solinas64_2e521m1/fesquareDisplay.v4
-rw-r--r--src/Specific/solinas64_2e521m1/freeze.v14
-rw-r--r--src/Specific/solinas64_2e521m1/freezeDisplay.v4
3185 files changed, 37608 insertions, 0 deletions
diff --git a/_CoqProject b/_CoqProject
index 5ca2e0de5..1cb453066 100644
--- a/_CoqProject
+++ b/_CoqProject
@@ -308,6 +308,2902 @@ src/Specific/X2555/C128/CurveParameters.v
src/Specific/X2555/C128/Synthesis.v
src/Specific/X2555/C128/ladderstep.v
src/Specific/X2555/C128/ladderstepDisplay.v
+src/Specific/montgomery32_2e127m1/CurveParameters.v
+src/Specific/montgomery32_2e127m1/Synthesis.v
+src/Specific/montgomery32_2e127m1/feadd.v
+src/Specific/montgomery32_2e127m1/feaddDisplay.v
+src/Specific/montgomery32_2e127m1/femul.v
+src/Specific/montgomery32_2e127m1/femulDisplay.v
+src/Specific/montgomery32_2e127m1/fenz.v
+src/Specific/montgomery32_2e127m1/fenzDisplay.v
+src/Specific/montgomery32_2e127m1/feopp.v
+src/Specific/montgomery32_2e127m1/feoppDisplay.v
+src/Specific/montgomery32_2e127m1/fesub.v
+src/Specific/montgomery32_2e127m1/fesubDisplay.v
+src/Specific/montgomery32_2e129m25/CurveParameters.v
+src/Specific/montgomery32_2e129m25/Synthesis.v
+src/Specific/montgomery32_2e129m25/feadd.v
+src/Specific/montgomery32_2e129m25/feaddDisplay.v
+src/Specific/montgomery32_2e129m25/femul.v
+src/Specific/montgomery32_2e129m25/femulDisplay.v
+src/Specific/montgomery32_2e129m25/fenz.v
+src/Specific/montgomery32_2e129m25/fenzDisplay.v
+src/Specific/montgomery32_2e129m25/feopp.v
+src/Specific/montgomery32_2e129m25/feoppDisplay.v
+src/Specific/montgomery32_2e129m25/fesub.v
+src/Specific/montgomery32_2e129m25/fesubDisplay.v
+src/Specific/montgomery32_2e130m5/CurveParameters.v
+src/Specific/montgomery32_2e130m5/Synthesis.v
+src/Specific/montgomery32_2e130m5/feadd.v
+src/Specific/montgomery32_2e130m5/feaddDisplay.v
+src/Specific/montgomery32_2e130m5/femul.v
+src/Specific/montgomery32_2e130m5/femulDisplay.v
+src/Specific/montgomery32_2e130m5/fenz.v
+src/Specific/montgomery32_2e130m5/fenzDisplay.v
+src/Specific/montgomery32_2e130m5/feopp.v
+src/Specific/montgomery32_2e130m5/feoppDisplay.v
+src/Specific/montgomery32_2e130m5/fesub.v
+src/Specific/montgomery32_2e130m5/fesubDisplay.v
+src/Specific/montgomery32_2e137m13/CurveParameters.v
+src/Specific/montgomery32_2e137m13/Synthesis.v
+src/Specific/montgomery32_2e137m13/feadd.v
+src/Specific/montgomery32_2e137m13/feaddDisplay.v
+src/Specific/montgomery32_2e137m13/femul.v
+src/Specific/montgomery32_2e137m13/femulDisplay.v
+src/Specific/montgomery32_2e137m13/fenz.v
+src/Specific/montgomery32_2e137m13/fenzDisplay.v
+src/Specific/montgomery32_2e137m13/feopp.v
+src/Specific/montgomery32_2e137m13/feoppDisplay.v
+src/Specific/montgomery32_2e137m13/fesub.v
+src/Specific/montgomery32_2e137m13/fesubDisplay.v
+src/Specific/montgomery32_2e140m27/CurveParameters.v
+src/Specific/montgomery32_2e140m27/Synthesis.v
+src/Specific/montgomery32_2e140m27/feadd.v
+src/Specific/montgomery32_2e140m27/feaddDisplay.v
+src/Specific/montgomery32_2e140m27/femul.v
+src/Specific/montgomery32_2e140m27/femulDisplay.v
+src/Specific/montgomery32_2e140m27/fenz.v
+src/Specific/montgomery32_2e140m27/fenzDisplay.v
+src/Specific/montgomery32_2e140m27/feopp.v
+src/Specific/montgomery32_2e140m27/feoppDisplay.v
+src/Specific/montgomery32_2e140m27/fesub.v
+src/Specific/montgomery32_2e140m27/fesubDisplay.v
+src/Specific/montgomery32_2e141m9/CurveParameters.v
+src/Specific/montgomery32_2e141m9/Synthesis.v
+src/Specific/montgomery32_2e141m9/feadd.v
+src/Specific/montgomery32_2e141m9/feaddDisplay.v
+src/Specific/montgomery32_2e141m9/femul.v
+src/Specific/montgomery32_2e141m9/femulDisplay.v
+src/Specific/montgomery32_2e141m9/fenz.v
+src/Specific/montgomery32_2e141m9/fenzDisplay.v
+src/Specific/montgomery32_2e141m9/feopp.v
+src/Specific/montgomery32_2e141m9/feoppDisplay.v
+src/Specific/montgomery32_2e141m9/fesub.v
+src/Specific/montgomery32_2e141m9/fesubDisplay.v
+src/Specific/montgomery32_2e150m3/CurveParameters.v
+src/Specific/montgomery32_2e150m3/Synthesis.v
+src/Specific/montgomery32_2e150m3/feadd.v
+src/Specific/montgomery32_2e150m3/feaddDisplay.v
+src/Specific/montgomery32_2e150m3/femul.v
+src/Specific/montgomery32_2e150m3/femulDisplay.v
+src/Specific/montgomery32_2e150m3/fenz.v
+src/Specific/montgomery32_2e150m3/fenzDisplay.v
+src/Specific/montgomery32_2e150m3/feopp.v
+src/Specific/montgomery32_2e150m3/feoppDisplay.v
+src/Specific/montgomery32_2e150m3/fesub.v
+src/Specific/montgomery32_2e150m3/fesubDisplay.v
+src/Specific/montgomery32_2e150m5/CurveParameters.v
+src/Specific/montgomery32_2e150m5/Synthesis.v
+src/Specific/montgomery32_2e150m5/feadd.v
+src/Specific/montgomery32_2e150m5/feaddDisplay.v
+src/Specific/montgomery32_2e150m5/femul.v
+src/Specific/montgomery32_2e150m5/femulDisplay.v
+src/Specific/montgomery32_2e150m5/fenz.v
+src/Specific/montgomery32_2e150m5/fenzDisplay.v
+src/Specific/montgomery32_2e150m5/feopp.v
+src/Specific/montgomery32_2e150m5/feoppDisplay.v
+src/Specific/montgomery32_2e150m5/fesub.v
+src/Specific/montgomery32_2e150m5/fesubDisplay.v
+src/Specific/montgomery32_2e152m17/CurveParameters.v
+src/Specific/montgomery32_2e152m17/Synthesis.v
+src/Specific/montgomery32_2e152m17/feadd.v
+src/Specific/montgomery32_2e152m17/feaddDisplay.v
+src/Specific/montgomery32_2e152m17/femul.v
+src/Specific/montgomery32_2e152m17/femulDisplay.v
+src/Specific/montgomery32_2e152m17/fenz.v
+src/Specific/montgomery32_2e152m17/fenzDisplay.v
+src/Specific/montgomery32_2e152m17/feopp.v
+src/Specific/montgomery32_2e152m17/feoppDisplay.v
+src/Specific/montgomery32_2e152m17/fesub.v
+src/Specific/montgomery32_2e152m17/fesubDisplay.v
+src/Specific/montgomery32_2e158m15/CurveParameters.v
+src/Specific/montgomery32_2e158m15/Synthesis.v
+src/Specific/montgomery32_2e158m15/feadd.v
+src/Specific/montgomery32_2e158m15/feaddDisplay.v
+src/Specific/montgomery32_2e158m15/femul.v
+src/Specific/montgomery32_2e158m15/femulDisplay.v
+src/Specific/montgomery32_2e158m15/fenz.v
+src/Specific/montgomery32_2e158m15/fenzDisplay.v
+src/Specific/montgomery32_2e158m15/feopp.v
+src/Specific/montgomery32_2e158m15/feoppDisplay.v
+src/Specific/montgomery32_2e158m15/fesub.v
+src/Specific/montgomery32_2e158m15/fesubDisplay.v
+src/Specific/montgomery32_2e165m25/CurveParameters.v
+src/Specific/montgomery32_2e165m25/Synthesis.v
+src/Specific/montgomery32_2e165m25/feadd.v
+src/Specific/montgomery32_2e165m25/feaddDisplay.v
+src/Specific/montgomery32_2e165m25/femul.v
+src/Specific/montgomery32_2e165m25/femulDisplay.v
+src/Specific/montgomery32_2e165m25/fenz.v
+src/Specific/montgomery32_2e165m25/fenzDisplay.v
+src/Specific/montgomery32_2e165m25/feopp.v
+src/Specific/montgomery32_2e165m25/feoppDisplay.v
+src/Specific/montgomery32_2e165m25/fesub.v
+src/Specific/montgomery32_2e165m25/fesubDisplay.v
+src/Specific/montgomery32_2e166m5/CurveParameters.v
+src/Specific/montgomery32_2e166m5/Synthesis.v
+src/Specific/montgomery32_2e166m5/feadd.v
+src/Specific/montgomery32_2e166m5/feaddDisplay.v
+src/Specific/montgomery32_2e166m5/femul.v
+src/Specific/montgomery32_2e166m5/femulDisplay.v
+src/Specific/montgomery32_2e166m5/fenz.v
+src/Specific/montgomery32_2e166m5/fenzDisplay.v
+src/Specific/montgomery32_2e166m5/feopp.v
+src/Specific/montgomery32_2e166m5/feoppDisplay.v
+src/Specific/montgomery32_2e166m5/fesub.v
+src/Specific/montgomery32_2e166m5/fesubDisplay.v
+src/Specific/montgomery32_2e171m19/CurveParameters.v
+src/Specific/montgomery32_2e171m19/Synthesis.v
+src/Specific/montgomery32_2e171m19/feadd.v
+src/Specific/montgomery32_2e171m19/feaddDisplay.v
+src/Specific/montgomery32_2e171m19/femul.v
+src/Specific/montgomery32_2e171m19/femulDisplay.v
+src/Specific/montgomery32_2e171m19/fenz.v
+src/Specific/montgomery32_2e171m19/fenzDisplay.v
+src/Specific/montgomery32_2e171m19/feopp.v
+src/Specific/montgomery32_2e171m19/feoppDisplay.v
+src/Specific/montgomery32_2e171m19/fesub.v
+src/Specific/montgomery32_2e171m19/fesubDisplay.v
+src/Specific/montgomery32_2e174m17/CurveParameters.v
+src/Specific/montgomery32_2e174m17/Synthesis.v
+src/Specific/montgomery32_2e174m17/feadd.v
+src/Specific/montgomery32_2e174m17/feaddDisplay.v
+src/Specific/montgomery32_2e174m17/femul.v
+src/Specific/montgomery32_2e174m17/femulDisplay.v
+src/Specific/montgomery32_2e174m17/fenz.v
+src/Specific/montgomery32_2e174m17/fenzDisplay.v
+src/Specific/montgomery32_2e174m17/feopp.v
+src/Specific/montgomery32_2e174m17/feoppDisplay.v
+src/Specific/montgomery32_2e174m17/fesub.v
+src/Specific/montgomery32_2e174m17/fesubDisplay.v
+src/Specific/montgomery32_2e174m3/CurveParameters.v
+src/Specific/montgomery32_2e174m3/Synthesis.v
+src/Specific/montgomery32_2e174m3/feadd.v
+src/Specific/montgomery32_2e174m3/feaddDisplay.v
+src/Specific/montgomery32_2e174m3/femul.v
+src/Specific/montgomery32_2e174m3/femulDisplay.v
+src/Specific/montgomery32_2e174m3/fenz.v
+src/Specific/montgomery32_2e174m3/fenzDisplay.v
+src/Specific/montgomery32_2e174m3/feopp.v
+src/Specific/montgomery32_2e174m3/feoppDisplay.v
+src/Specific/montgomery32_2e174m3/fesub.v
+src/Specific/montgomery32_2e174m3/fesubDisplay.v
+src/Specific/montgomery32_2e189m25/CurveParameters.v
+src/Specific/montgomery32_2e189m25/Synthesis.v
+src/Specific/montgomery32_2e189m25/feadd.v
+src/Specific/montgomery32_2e189m25/feaddDisplay.v
+src/Specific/montgomery32_2e189m25/femul.v
+src/Specific/montgomery32_2e189m25/femulDisplay.v
+src/Specific/montgomery32_2e189m25/fenz.v
+src/Specific/montgomery32_2e189m25/fenzDisplay.v
+src/Specific/montgomery32_2e189m25/feopp.v
+src/Specific/montgomery32_2e189m25/feoppDisplay.v
+src/Specific/montgomery32_2e189m25/fesub.v
+src/Specific/montgomery32_2e189m25/fesubDisplay.v
+src/Specific/montgomery32_2e190m11/CurveParameters.v
+src/Specific/montgomery32_2e190m11/Synthesis.v
+src/Specific/montgomery32_2e190m11/feadd.v
+src/Specific/montgomery32_2e190m11/feaddDisplay.v
+src/Specific/montgomery32_2e190m11/femul.v
+src/Specific/montgomery32_2e190m11/femulDisplay.v
+src/Specific/montgomery32_2e190m11/fenz.v
+src/Specific/montgomery32_2e190m11/fenzDisplay.v
+src/Specific/montgomery32_2e190m11/feopp.v
+src/Specific/montgomery32_2e190m11/feoppDisplay.v
+src/Specific/montgomery32_2e190m11/fesub.v
+src/Specific/montgomery32_2e190m11/fesubDisplay.v
+src/Specific/montgomery32_2e191m19/CurveParameters.v
+src/Specific/montgomery32_2e191m19/Synthesis.v
+src/Specific/montgomery32_2e191m19/feadd.v
+src/Specific/montgomery32_2e191m19/feaddDisplay.v
+src/Specific/montgomery32_2e191m19/femul.v
+src/Specific/montgomery32_2e191m19/femulDisplay.v
+src/Specific/montgomery32_2e191m19/fenz.v
+src/Specific/montgomery32_2e191m19/fenzDisplay.v
+src/Specific/montgomery32_2e191m19/feopp.v
+src/Specific/montgomery32_2e191m19/feoppDisplay.v
+src/Specific/montgomery32_2e191m19/fesub.v
+src/Specific/montgomery32_2e191m19/fesubDisplay.v
+src/Specific/montgomery32_2e192m2e64m1/CurveParameters.v
+src/Specific/montgomery32_2e192m2e64m1/Synthesis.v
+src/Specific/montgomery32_2e192m2e64m1/feadd.v
+src/Specific/montgomery32_2e192m2e64m1/feaddDisplay.v
+src/Specific/montgomery32_2e192m2e64m1/femul.v
+src/Specific/montgomery32_2e192m2e64m1/femulDisplay.v
+src/Specific/montgomery32_2e192m2e64m1/fenz.v
+src/Specific/montgomery32_2e192m2e64m1/fenzDisplay.v
+src/Specific/montgomery32_2e192m2e64m1/feopp.v
+src/Specific/montgomery32_2e192m2e64m1/feoppDisplay.v
+src/Specific/montgomery32_2e192m2e64m1/fesub.v
+src/Specific/montgomery32_2e192m2e64m1/fesubDisplay.v
+src/Specific/montgomery32_2e194m33/CurveParameters.v
+src/Specific/montgomery32_2e194m33/Synthesis.v
+src/Specific/montgomery32_2e194m33/feadd.v
+src/Specific/montgomery32_2e194m33/feaddDisplay.v
+src/Specific/montgomery32_2e194m33/femul.v
+src/Specific/montgomery32_2e194m33/femulDisplay.v
+src/Specific/montgomery32_2e194m33/fenz.v
+src/Specific/montgomery32_2e194m33/fenzDisplay.v
+src/Specific/montgomery32_2e194m33/feopp.v
+src/Specific/montgomery32_2e194m33/feoppDisplay.v
+src/Specific/montgomery32_2e194m33/fesub.v
+src/Specific/montgomery32_2e194m33/fesubDisplay.v
+src/Specific/montgomery32_2e196m15/CurveParameters.v
+src/Specific/montgomery32_2e196m15/Synthesis.v
+src/Specific/montgomery32_2e196m15/feadd.v
+src/Specific/montgomery32_2e196m15/feaddDisplay.v
+src/Specific/montgomery32_2e196m15/femul.v
+src/Specific/montgomery32_2e196m15/femulDisplay.v
+src/Specific/montgomery32_2e196m15/fenz.v
+src/Specific/montgomery32_2e196m15/fenzDisplay.v
+src/Specific/montgomery32_2e196m15/feopp.v
+src/Specific/montgomery32_2e196m15/feoppDisplay.v
+src/Specific/montgomery32_2e196m15/fesub.v
+src/Specific/montgomery32_2e196m15/fesubDisplay.v
+src/Specific/montgomery32_2e198m17/CurveParameters.v
+src/Specific/montgomery32_2e198m17/Synthesis.v
+src/Specific/montgomery32_2e198m17/feadd.v
+src/Specific/montgomery32_2e198m17/feaddDisplay.v
+src/Specific/montgomery32_2e198m17/femul.v
+src/Specific/montgomery32_2e198m17/femulDisplay.v
+src/Specific/montgomery32_2e198m17/fenz.v
+src/Specific/montgomery32_2e198m17/fenzDisplay.v
+src/Specific/montgomery32_2e198m17/feopp.v
+src/Specific/montgomery32_2e198m17/feoppDisplay.v
+src/Specific/montgomery32_2e198m17/fesub.v
+src/Specific/montgomery32_2e198m17/fesubDisplay.v
+src/Specific/montgomery32_2e206m5/CurveParameters.v
+src/Specific/montgomery32_2e206m5/Synthesis.v
+src/Specific/montgomery32_2e206m5/feadd.v
+src/Specific/montgomery32_2e206m5/feaddDisplay.v
+src/Specific/montgomery32_2e206m5/femul.v
+src/Specific/montgomery32_2e206m5/femulDisplay.v
+src/Specific/montgomery32_2e206m5/fenz.v
+src/Specific/montgomery32_2e206m5/fenzDisplay.v
+src/Specific/montgomery32_2e206m5/feopp.v
+src/Specific/montgomery32_2e206m5/feoppDisplay.v
+src/Specific/montgomery32_2e206m5/fesub.v
+src/Specific/montgomery32_2e206m5/fesubDisplay.v
+src/Specific/montgomery32_2e212m29/CurveParameters.v
+src/Specific/montgomery32_2e212m29/Synthesis.v
+src/Specific/montgomery32_2e212m29/feadd.v
+src/Specific/montgomery32_2e212m29/feaddDisplay.v
+src/Specific/montgomery32_2e212m29/femul.v
+src/Specific/montgomery32_2e212m29/femulDisplay.v
+src/Specific/montgomery32_2e212m29/fenz.v
+src/Specific/montgomery32_2e212m29/fenzDisplay.v
+src/Specific/montgomery32_2e212m29/feopp.v
+src/Specific/montgomery32_2e212m29/feoppDisplay.v
+src/Specific/montgomery32_2e212m29/fesub.v
+src/Specific/montgomery32_2e212m29/fesubDisplay.v
+src/Specific/montgomery32_2e213m3/CurveParameters.v
+src/Specific/montgomery32_2e213m3/Synthesis.v
+src/Specific/montgomery32_2e213m3/feadd.v
+src/Specific/montgomery32_2e213m3/feaddDisplay.v
+src/Specific/montgomery32_2e213m3/femul.v
+src/Specific/montgomery32_2e213m3/femulDisplay.v
+src/Specific/montgomery32_2e213m3/fenz.v
+src/Specific/montgomery32_2e213m3/fenzDisplay.v
+src/Specific/montgomery32_2e213m3/feopp.v
+src/Specific/montgomery32_2e213m3/feoppDisplay.v
+src/Specific/montgomery32_2e213m3/fesub.v
+src/Specific/montgomery32_2e213m3/fesubDisplay.v
+src/Specific/montgomery32_2e216m2e108m1/CurveParameters.v
+src/Specific/montgomery32_2e216m2e108m1/Synthesis.v
+src/Specific/montgomery32_2e216m2e108m1/feadd.v
+src/Specific/montgomery32_2e216m2e108m1/feaddDisplay.v
+src/Specific/montgomery32_2e216m2e108m1/femul.v
+src/Specific/montgomery32_2e216m2e108m1/femulDisplay.v
+src/Specific/montgomery32_2e216m2e108m1/fenz.v
+src/Specific/montgomery32_2e216m2e108m1/fenzDisplay.v
+src/Specific/montgomery32_2e216m2e108m1/feopp.v
+src/Specific/montgomery32_2e216m2e108m1/feoppDisplay.v
+src/Specific/montgomery32_2e216m2e108m1/fesub.v
+src/Specific/montgomery32_2e216m2e108m1/fesubDisplay.v
+src/Specific/montgomery32_2e221m3/CurveParameters.v
+src/Specific/montgomery32_2e221m3/Synthesis.v
+src/Specific/montgomery32_2e221m3/feadd.v
+src/Specific/montgomery32_2e221m3/feaddDisplay.v
+src/Specific/montgomery32_2e221m3/femul.v
+src/Specific/montgomery32_2e221m3/femulDisplay.v
+src/Specific/montgomery32_2e221m3/fenz.v
+src/Specific/montgomery32_2e221m3/fenzDisplay.v
+src/Specific/montgomery32_2e221m3/feopp.v
+src/Specific/montgomery32_2e221m3/feoppDisplay.v
+src/Specific/montgomery32_2e221m3/fesub.v
+src/Specific/montgomery32_2e221m3/fesubDisplay.v
+src/Specific/montgomery32_2e222m117/CurveParameters.v
+src/Specific/montgomery32_2e222m117/Synthesis.v
+src/Specific/montgomery32_2e222m117/feadd.v
+src/Specific/montgomery32_2e222m117/feaddDisplay.v
+src/Specific/montgomery32_2e222m117/femul.v
+src/Specific/montgomery32_2e222m117/femulDisplay.v
+src/Specific/montgomery32_2e222m117/fenz.v
+src/Specific/montgomery32_2e222m117/fenzDisplay.v
+src/Specific/montgomery32_2e222m117/feopp.v
+src/Specific/montgomery32_2e222m117/feoppDisplay.v
+src/Specific/montgomery32_2e222m117/fesub.v
+src/Specific/montgomery32_2e222m117/fesubDisplay.v
+src/Specific/montgomery32_2e224m2e96p1/CurveParameters.v
+src/Specific/montgomery32_2e224m2e96p1/Synthesis.v
+src/Specific/montgomery32_2e224m2e96p1/feadd.v
+src/Specific/montgomery32_2e224m2e96p1/feaddDisplay.v
+src/Specific/montgomery32_2e224m2e96p1/femul.v
+src/Specific/montgomery32_2e224m2e96p1/femulDisplay.v
+src/Specific/montgomery32_2e224m2e96p1/fenz.v
+src/Specific/montgomery32_2e224m2e96p1/fenzDisplay.v
+src/Specific/montgomery32_2e224m2e96p1/feopp.v
+src/Specific/montgomery32_2e224m2e96p1/feoppDisplay.v
+src/Specific/montgomery32_2e224m2e96p1/fesub.v
+src/Specific/montgomery32_2e224m2e96p1/fesubDisplay.v
+src/Specific/montgomery32_2e226m5/CurveParameters.v
+src/Specific/montgomery32_2e226m5/Synthesis.v
+src/Specific/montgomery32_2e226m5/feadd.v
+src/Specific/montgomery32_2e226m5/feaddDisplay.v
+src/Specific/montgomery32_2e226m5/femul.v
+src/Specific/montgomery32_2e226m5/femulDisplay.v
+src/Specific/montgomery32_2e226m5/fenz.v
+src/Specific/montgomery32_2e226m5/fenzDisplay.v
+src/Specific/montgomery32_2e226m5/feopp.v
+src/Specific/montgomery32_2e226m5/feoppDisplay.v
+src/Specific/montgomery32_2e226m5/fesub.v
+src/Specific/montgomery32_2e226m5/fesubDisplay.v
+src/Specific/montgomery32_2e230m27/CurveParameters.v
+src/Specific/montgomery32_2e230m27/Synthesis.v
+src/Specific/montgomery32_2e230m27/feadd.v
+src/Specific/montgomery32_2e230m27/feaddDisplay.v
+src/Specific/montgomery32_2e230m27/femul.v
+src/Specific/montgomery32_2e230m27/femulDisplay.v
+src/Specific/montgomery32_2e230m27/fenz.v
+src/Specific/montgomery32_2e230m27/fenzDisplay.v
+src/Specific/montgomery32_2e230m27/feopp.v
+src/Specific/montgomery32_2e230m27/feoppDisplay.v
+src/Specific/montgomery32_2e230m27/fesub.v
+src/Specific/montgomery32_2e230m27/fesubDisplay.v
+src/Specific/montgomery32_2e235m15/CurveParameters.v
+src/Specific/montgomery32_2e235m15/Synthesis.v
+src/Specific/montgomery32_2e235m15/feadd.v
+src/Specific/montgomery32_2e235m15/feaddDisplay.v
+src/Specific/montgomery32_2e235m15/femul.v
+src/Specific/montgomery32_2e235m15/femulDisplay.v
+src/Specific/montgomery32_2e235m15/fenz.v
+src/Specific/montgomery32_2e235m15/fenzDisplay.v
+src/Specific/montgomery32_2e235m15/feopp.v
+src/Specific/montgomery32_2e235m15/feoppDisplay.v
+src/Specific/montgomery32_2e235m15/fesub.v
+src/Specific/montgomery32_2e235m15/fesubDisplay.v
+src/Specific/montgomery32_2e243m9/CurveParameters.v
+src/Specific/montgomery32_2e243m9/Synthesis.v
+src/Specific/montgomery32_2e243m9/feadd.v
+src/Specific/montgomery32_2e243m9/feaddDisplay.v
+src/Specific/montgomery32_2e243m9/femul.v
+src/Specific/montgomery32_2e243m9/femulDisplay.v
+src/Specific/montgomery32_2e243m9/fenz.v
+src/Specific/montgomery32_2e243m9/fenzDisplay.v
+src/Specific/montgomery32_2e243m9/feopp.v
+src/Specific/montgomery32_2e243m9/feoppDisplay.v
+src/Specific/montgomery32_2e243m9/fesub.v
+src/Specific/montgomery32_2e243m9/fesubDisplay.v
+src/Specific/montgomery32_2e251m9/CurveParameters.v
+src/Specific/montgomery32_2e251m9/Synthesis.v
+src/Specific/montgomery32_2e251m9/feadd.v
+src/Specific/montgomery32_2e251m9/feaddDisplay.v
+src/Specific/montgomery32_2e251m9/femul.v
+src/Specific/montgomery32_2e251m9/femulDisplay.v
+src/Specific/montgomery32_2e251m9/fenz.v
+src/Specific/montgomery32_2e251m9/fenzDisplay.v
+src/Specific/montgomery32_2e251m9/feopp.v
+src/Specific/montgomery32_2e251m9/feoppDisplay.v
+src/Specific/montgomery32_2e251m9/fesub.v
+src/Specific/montgomery32_2e251m9/fesubDisplay.v
+src/Specific/montgomery32_2e255m19/CurveParameters.v
+src/Specific/montgomery32_2e255m19/Synthesis.v
+src/Specific/montgomery32_2e255m19/feadd.v
+src/Specific/montgomery32_2e255m19/feaddDisplay.v
+src/Specific/montgomery32_2e255m19/femul.v
+src/Specific/montgomery32_2e255m19/femulDisplay.v
+src/Specific/montgomery32_2e255m19/fenz.v
+src/Specific/montgomery32_2e255m19/fenzDisplay.v
+src/Specific/montgomery32_2e255m19/feopp.v
+src/Specific/montgomery32_2e255m19/feoppDisplay.v
+src/Specific/montgomery32_2e255m19/fesub.v
+src/Specific/montgomery32_2e255m19/fesubDisplay.v
+src/Specific/montgomery32_2e255m2e4m2e1m1/CurveParameters.v
+src/Specific/montgomery32_2e255m2e4m2e1m1/Synthesis.v
+src/Specific/montgomery32_2e255m2e4m2e1m1/feadd.v
+src/Specific/montgomery32_2e255m2e4m2e1m1/feaddDisplay.v
+src/Specific/montgomery32_2e255m2e4m2e1m1/femul.v
+src/Specific/montgomery32_2e255m2e4m2e1m1/femulDisplay.v
+src/Specific/montgomery32_2e255m2e4m2e1m1/fenz.v
+src/Specific/montgomery32_2e255m2e4m2e1m1/fenzDisplay.v
+src/Specific/montgomery32_2e255m2e4m2e1m1/feopp.v
+src/Specific/montgomery32_2e255m2e4m2e1m1/feoppDisplay.v
+src/Specific/montgomery32_2e255m2e4m2e1m1/fesub.v
+src/Specific/montgomery32_2e255m2e4m2e1m1/fesubDisplay.v
+src/Specific/montgomery32_2e255m765/CurveParameters.v
+src/Specific/montgomery32_2e255m765/Synthesis.v
+src/Specific/montgomery32_2e255m765/feadd.v
+src/Specific/montgomery32_2e255m765/feaddDisplay.v
+src/Specific/montgomery32_2e255m765/femul.v
+src/Specific/montgomery32_2e255m765/femulDisplay.v
+src/Specific/montgomery32_2e255m765/fenz.v
+src/Specific/montgomery32_2e255m765/fenzDisplay.v
+src/Specific/montgomery32_2e255m765/feopp.v
+src/Specific/montgomery32_2e255m765/feoppDisplay.v
+src/Specific/montgomery32_2e255m765/fesub.v
+src/Specific/montgomery32_2e255m765/fesubDisplay.v
+src/Specific/montgomery32_2e256m189/CurveParameters.v
+src/Specific/montgomery32_2e256m189/Synthesis.v
+src/Specific/montgomery32_2e256m189/feadd.v
+src/Specific/montgomery32_2e256m189/feaddDisplay.v
+src/Specific/montgomery32_2e256m189/femul.v
+src/Specific/montgomery32_2e256m189/femulDisplay.v
+src/Specific/montgomery32_2e256m189/fenz.v
+src/Specific/montgomery32_2e256m189/fenzDisplay.v
+src/Specific/montgomery32_2e256m189/feopp.v
+src/Specific/montgomery32_2e256m189/feoppDisplay.v
+src/Specific/montgomery32_2e256m189/fesub.v
+src/Specific/montgomery32_2e256m189/fesubDisplay.v
+src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/CurveParameters.v
+src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/Synthesis.v
+src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feadd.v
+src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feaddDisplay.v
+src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/femul.v
+src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/femulDisplay.v
+src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fenz.v
+src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fenzDisplay.v
+src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feopp.v
+src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feoppDisplay.v
+src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fesub.v
+src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fesubDisplay.v
+src/Specific/montgomery32_2e256m2e32m977/CurveParameters.v
+src/Specific/montgomery32_2e256m2e32m977/Synthesis.v
+src/Specific/montgomery32_2e256m2e32m977/feadd.v
+src/Specific/montgomery32_2e256m2e32m977/feaddDisplay.v
+src/Specific/montgomery32_2e256m2e32m977/femul.v
+src/Specific/montgomery32_2e256m2e32m977/femulDisplay.v
+src/Specific/montgomery32_2e256m2e32m977/fenz.v
+src/Specific/montgomery32_2e256m2e32m977/fenzDisplay.v
+src/Specific/montgomery32_2e256m2e32m977/feopp.v
+src/Specific/montgomery32_2e256m2e32m977/feoppDisplay.v
+src/Specific/montgomery32_2e256m2e32m977/fesub.v
+src/Specific/montgomery32_2e256m2e32m977/fesubDisplay.v
+src/Specific/montgomery32_2e266m3/CurveParameters.v
+src/Specific/montgomery32_2e266m3/Synthesis.v
+src/Specific/montgomery32_2e266m3/feadd.v
+src/Specific/montgomery32_2e266m3/feaddDisplay.v
+src/Specific/montgomery32_2e266m3/femul.v
+src/Specific/montgomery32_2e266m3/femulDisplay.v
+src/Specific/montgomery32_2e266m3/fenz.v
+src/Specific/montgomery32_2e266m3/fenzDisplay.v
+src/Specific/montgomery32_2e266m3/feopp.v
+src/Specific/montgomery32_2e266m3/feoppDisplay.v
+src/Specific/montgomery32_2e266m3/fesub.v
+src/Specific/montgomery32_2e266m3/fesubDisplay.v
+src/Specific/montgomery32_2e285m9/CurveParameters.v
+src/Specific/montgomery32_2e285m9/Synthesis.v
+src/Specific/montgomery32_2e285m9/feadd.v
+src/Specific/montgomery32_2e285m9/feaddDisplay.v
+src/Specific/montgomery32_2e285m9/femul.v
+src/Specific/montgomery32_2e285m9/femulDisplay.v
+src/Specific/montgomery32_2e285m9/fenz.v
+src/Specific/montgomery32_2e285m9/fenzDisplay.v
+src/Specific/montgomery32_2e285m9/feopp.v
+src/Specific/montgomery32_2e285m9/feoppDisplay.v
+src/Specific/montgomery32_2e285m9/fesub.v
+src/Specific/montgomery32_2e285m9/fesubDisplay.v
+src/Specific/montgomery32_2e291m19/CurveParameters.v
+src/Specific/montgomery32_2e291m19/Synthesis.v
+src/Specific/montgomery32_2e291m19/feadd.v
+src/Specific/montgomery32_2e291m19/feaddDisplay.v
+src/Specific/montgomery32_2e291m19/femul.v
+src/Specific/montgomery32_2e291m19/femulDisplay.v
+src/Specific/montgomery32_2e291m19/fenz.v
+src/Specific/montgomery32_2e291m19/fenzDisplay.v
+src/Specific/montgomery32_2e291m19/feopp.v
+src/Specific/montgomery32_2e291m19/feoppDisplay.v
+src/Specific/montgomery32_2e291m19/fesub.v
+src/Specific/montgomery32_2e291m19/fesubDisplay.v
+src/Specific/montgomery32_2e321m9/CurveParameters.v
+src/Specific/montgomery32_2e321m9/Synthesis.v
+src/Specific/montgomery32_2e321m9/feadd.v
+src/Specific/montgomery32_2e321m9/feaddDisplay.v
+src/Specific/montgomery32_2e321m9/femul.v
+src/Specific/montgomery32_2e321m9/femulDisplay.v
+src/Specific/montgomery32_2e321m9/fenz.v
+src/Specific/montgomery32_2e321m9/fenzDisplay.v
+src/Specific/montgomery32_2e321m9/feopp.v
+src/Specific/montgomery32_2e321m9/feoppDisplay.v
+src/Specific/montgomery32_2e321m9/fesub.v
+src/Specific/montgomery32_2e321m9/fesubDisplay.v
+src/Specific/montgomery32_2e322m2e161m1/CurveParameters.v
+src/Specific/montgomery32_2e322m2e161m1/Synthesis.v
+src/Specific/montgomery32_2e322m2e161m1/feadd.v
+src/Specific/montgomery32_2e322m2e161m1/feaddDisplay.v
+src/Specific/montgomery32_2e322m2e161m1/femul.v
+src/Specific/montgomery32_2e322m2e161m1/femulDisplay.v
+src/Specific/montgomery32_2e322m2e161m1/fenz.v
+src/Specific/montgomery32_2e322m2e161m1/fenzDisplay.v
+src/Specific/montgomery32_2e322m2e161m1/feopp.v
+src/Specific/montgomery32_2e322m2e161m1/feoppDisplay.v
+src/Specific/montgomery32_2e322m2e161m1/fesub.v
+src/Specific/montgomery32_2e322m2e161m1/fesubDisplay.v
+src/Specific/montgomery32_2e336m17/CurveParameters.v
+src/Specific/montgomery32_2e336m17/Synthesis.v
+src/Specific/montgomery32_2e336m17/feadd.v
+src/Specific/montgomery32_2e336m17/feaddDisplay.v
+src/Specific/montgomery32_2e336m17/femul.v
+src/Specific/montgomery32_2e336m17/femulDisplay.v
+src/Specific/montgomery32_2e336m17/fenz.v
+src/Specific/montgomery32_2e336m17/fenzDisplay.v
+src/Specific/montgomery32_2e336m17/feopp.v
+src/Specific/montgomery32_2e336m17/feoppDisplay.v
+src/Specific/montgomery32_2e336m17/fesub.v
+src/Specific/montgomery32_2e336m17/fesubDisplay.v
+src/Specific/montgomery32_2e336m3/CurveParameters.v
+src/Specific/montgomery32_2e336m3/Synthesis.v
+src/Specific/montgomery32_2e336m3/feadd.v
+src/Specific/montgomery32_2e336m3/feaddDisplay.v
+src/Specific/montgomery32_2e336m3/femul.v
+src/Specific/montgomery32_2e336m3/femulDisplay.v
+src/Specific/montgomery32_2e336m3/fenz.v
+src/Specific/montgomery32_2e336m3/fenzDisplay.v
+src/Specific/montgomery32_2e336m3/feopp.v
+src/Specific/montgomery32_2e336m3/feoppDisplay.v
+src/Specific/montgomery32_2e336m3/fesub.v
+src/Specific/montgomery32_2e336m3/fesubDisplay.v
+src/Specific/montgomery32_2e338m15/CurveParameters.v
+src/Specific/montgomery32_2e338m15/Synthesis.v
+src/Specific/montgomery32_2e338m15/feadd.v
+src/Specific/montgomery32_2e338m15/feaddDisplay.v
+src/Specific/montgomery32_2e338m15/femul.v
+src/Specific/montgomery32_2e338m15/femulDisplay.v
+src/Specific/montgomery32_2e338m15/fenz.v
+src/Specific/montgomery32_2e338m15/fenzDisplay.v
+src/Specific/montgomery32_2e338m15/feopp.v
+src/Specific/montgomery32_2e338m15/feoppDisplay.v
+src/Specific/montgomery32_2e338m15/fesub.v
+src/Specific/montgomery32_2e338m15/fesubDisplay.v
+src/Specific/montgomery32_2e369m25/CurveParameters.v
+src/Specific/montgomery32_2e369m25/Synthesis.v
+src/Specific/montgomery32_2e369m25/feadd.v
+src/Specific/montgomery32_2e369m25/feaddDisplay.v
+src/Specific/montgomery32_2e369m25/femul.v
+src/Specific/montgomery32_2e369m25/femulDisplay.v
+src/Specific/montgomery32_2e369m25/fenz.v
+src/Specific/montgomery32_2e369m25/fenzDisplay.v
+src/Specific/montgomery32_2e369m25/feopp.v
+src/Specific/montgomery32_2e369m25/feoppDisplay.v
+src/Specific/montgomery32_2e369m25/fesub.v
+src/Specific/montgomery32_2e369m25/fesubDisplay.v
+src/Specific/montgomery32_2e379m19/CurveParameters.v
+src/Specific/montgomery32_2e379m19/Synthesis.v
+src/Specific/montgomery32_2e379m19/feadd.v
+src/Specific/montgomery32_2e379m19/feaddDisplay.v
+src/Specific/montgomery32_2e379m19/femul.v
+src/Specific/montgomery32_2e379m19/femulDisplay.v
+src/Specific/montgomery32_2e379m19/fenz.v
+src/Specific/montgomery32_2e379m19/fenzDisplay.v
+src/Specific/montgomery32_2e379m19/feopp.v
+src/Specific/montgomery32_2e379m19/feoppDisplay.v
+src/Specific/montgomery32_2e379m19/fesub.v
+src/Specific/montgomery32_2e379m19/fesubDisplay.v
+src/Specific/montgomery32_2e382m105/CurveParameters.v
+src/Specific/montgomery32_2e382m105/Synthesis.v
+src/Specific/montgomery32_2e382m105/feadd.v
+src/Specific/montgomery32_2e382m105/feaddDisplay.v
+src/Specific/montgomery32_2e382m105/femul.v
+src/Specific/montgomery32_2e382m105/femulDisplay.v
+src/Specific/montgomery32_2e382m105/fenz.v
+src/Specific/montgomery32_2e382m105/fenzDisplay.v
+src/Specific/montgomery32_2e382m105/feopp.v
+src/Specific/montgomery32_2e382m105/feoppDisplay.v
+src/Specific/montgomery32_2e382m105/fesub.v
+src/Specific/montgomery32_2e382m105/fesubDisplay.v
+src/Specific/montgomery32_2e383m187/CurveParameters.v
+src/Specific/montgomery32_2e383m187/Synthesis.v
+src/Specific/montgomery32_2e383m187/feadd.v
+src/Specific/montgomery32_2e383m187/feaddDisplay.v
+src/Specific/montgomery32_2e383m187/femul.v
+src/Specific/montgomery32_2e383m187/femulDisplay.v
+src/Specific/montgomery32_2e383m187/fenz.v
+src/Specific/montgomery32_2e383m187/fenzDisplay.v
+src/Specific/montgomery32_2e383m187/feopp.v
+src/Specific/montgomery32_2e383m187/feoppDisplay.v
+src/Specific/montgomery32_2e383m187/fesub.v
+src/Specific/montgomery32_2e383m187/fesubDisplay.v
+src/Specific/montgomery32_2e383m31/CurveParameters.v
+src/Specific/montgomery32_2e383m31/Synthesis.v
+src/Specific/montgomery32_2e383m31/feadd.v
+src/Specific/montgomery32_2e383m31/feaddDisplay.v
+src/Specific/montgomery32_2e383m31/femul.v
+src/Specific/montgomery32_2e383m31/femulDisplay.v
+src/Specific/montgomery32_2e383m31/fenz.v
+src/Specific/montgomery32_2e383m31/fenzDisplay.v
+src/Specific/montgomery32_2e383m31/feopp.v
+src/Specific/montgomery32_2e383m31/feoppDisplay.v
+src/Specific/montgomery32_2e383m31/fesub.v
+src/Specific/montgomery32_2e383m31/fesubDisplay.v
+src/Specific/montgomery32_2e383m421/CurveParameters.v
+src/Specific/montgomery32_2e383m421/Synthesis.v
+src/Specific/montgomery32_2e383m421/feadd.v
+src/Specific/montgomery32_2e383m421/feaddDisplay.v
+src/Specific/montgomery32_2e383m421/femul.v
+src/Specific/montgomery32_2e383m421/femulDisplay.v
+src/Specific/montgomery32_2e383m421/fenz.v
+src/Specific/montgomery32_2e383m421/fenzDisplay.v
+src/Specific/montgomery32_2e383m421/feopp.v
+src/Specific/montgomery32_2e383m421/feoppDisplay.v
+src/Specific/montgomery32_2e383m421/fesub.v
+src/Specific/montgomery32_2e383m421/fesubDisplay.v
+src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/CurveParameters.v
+src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/Synthesis.v
+src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feadd.v
+src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feaddDisplay.v
+src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/femul.v
+src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/femulDisplay.v
+src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fenz.v
+src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fenzDisplay.v
+src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feopp.v
+src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feoppDisplay.v
+src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fesub.v
+src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fesubDisplay.v
+src/Specific/montgomery32_2e384m317/CurveParameters.v
+src/Specific/montgomery32_2e384m317/Synthesis.v
+src/Specific/montgomery32_2e384m317/feadd.v
+src/Specific/montgomery32_2e384m317/feaddDisplay.v
+src/Specific/montgomery32_2e384m317/femul.v
+src/Specific/montgomery32_2e384m317/femulDisplay.v
+src/Specific/montgomery32_2e384m317/fenz.v
+src/Specific/montgomery32_2e384m317/fenzDisplay.v
+src/Specific/montgomery32_2e384m317/feopp.v
+src/Specific/montgomery32_2e384m317/feoppDisplay.v
+src/Specific/montgomery32_2e384m317/fesub.v
+src/Specific/montgomery32_2e384m317/fesubDisplay.v
+src/Specific/montgomery32_2e389m21/CurveParameters.v
+src/Specific/montgomery32_2e389m21/Synthesis.v
+src/Specific/montgomery32_2e389m21/feadd.v
+src/Specific/montgomery32_2e389m21/feaddDisplay.v
+src/Specific/montgomery32_2e389m21/femul.v
+src/Specific/montgomery32_2e389m21/femulDisplay.v
+src/Specific/montgomery32_2e389m21/fenz.v
+src/Specific/montgomery32_2e389m21/fenzDisplay.v
+src/Specific/montgomery32_2e389m21/feopp.v
+src/Specific/montgomery32_2e389m21/feoppDisplay.v
+src/Specific/montgomery32_2e389m21/fesub.v
+src/Specific/montgomery32_2e389m21/fesubDisplay.v
+src/Specific/montgomery32_2e401m31/CurveParameters.v
+src/Specific/montgomery32_2e401m31/Synthesis.v
+src/Specific/montgomery32_2e401m31/feadd.v
+src/Specific/montgomery32_2e401m31/feaddDisplay.v
+src/Specific/montgomery32_2e401m31/femul.v
+src/Specific/montgomery32_2e401m31/femulDisplay.v
+src/Specific/montgomery32_2e401m31/fenz.v
+src/Specific/montgomery32_2e401m31/fenzDisplay.v
+src/Specific/montgomery32_2e401m31/feopp.v
+src/Specific/montgomery32_2e401m31/feoppDisplay.v
+src/Specific/montgomery32_2e401m31/fesub.v
+src/Specific/montgomery32_2e401m31/fesubDisplay.v
+src/Specific/montgomery32_2e413m21/CurveParameters.v
+src/Specific/montgomery32_2e413m21/Synthesis.v
+src/Specific/montgomery32_2e413m21/feadd.v
+src/Specific/montgomery32_2e413m21/feaddDisplay.v
+src/Specific/montgomery32_2e413m21/femul.v
+src/Specific/montgomery32_2e413m21/femulDisplay.v
+src/Specific/montgomery32_2e413m21/fenz.v
+src/Specific/montgomery32_2e413m21/fenzDisplay.v
+src/Specific/montgomery32_2e413m21/feopp.v
+src/Specific/montgomery32_2e413m21/feoppDisplay.v
+src/Specific/montgomery32_2e413m21/fesub.v
+src/Specific/montgomery32_2e413m21/fesubDisplay.v
+src/Specific/montgomery32_2e414m17/CurveParameters.v
+src/Specific/montgomery32_2e414m17/Synthesis.v
+src/Specific/montgomery32_2e414m17/feadd.v
+src/Specific/montgomery32_2e414m17/feaddDisplay.v
+src/Specific/montgomery32_2e414m17/femul.v
+src/Specific/montgomery32_2e414m17/femulDisplay.v
+src/Specific/montgomery32_2e414m17/fenz.v
+src/Specific/montgomery32_2e414m17/fenzDisplay.v
+src/Specific/montgomery32_2e414m17/feopp.v
+src/Specific/montgomery32_2e414m17/feoppDisplay.v
+src/Specific/montgomery32_2e414m17/fesub.v
+src/Specific/montgomery32_2e414m17/fesubDisplay.v
+src/Specific/montgomery32_2e416m2e208m1/CurveParameters.v
+src/Specific/montgomery32_2e416m2e208m1/Synthesis.v
+src/Specific/montgomery32_2e416m2e208m1/feadd.v
+src/Specific/montgomery32_2e416m2e208m1/feaddDisplay.v
+src/Specific/montgomery32_2e416m2e208m1/femul.v
+src/Specific/montgomery32_2e416m2e208m1/femulDisplay.v
+src/Specific/montgomery32_2e416m2e208m1/fenz.v
+src/Specific/montgomery32_2e416m2e208m1/fenzDisplay.v
+src/Specific/montgomery32_2e416m2e208m1/feopp.v
+src/Specific/montgomery32_2e416m2e208m1/feoppDisplay.v
+src/Specific/montgomery32_2e416m2e208m1/fesub.v
+src/Specific/montgomery32_2e416m2e208m1/fesubDisplay.v
+src/Specific/montgomery32_2e444m17/CurveParameters.v
+src/Specific/montgomery32_2e444m17/Synthesis.v
+src/Specific/montgomery32_2e444m17/feadd.v
+src/Specific/montgomery32_2e444m17/feaddDisplay.v
+src/Specific/montgomery32_2e444m17/femul.v
+src/Specific/montgomery32_2e444m17/femulDisplay.v
+src/Specific/montgomery32_2e444m17/fenz.v
+src/Specific/montgomery32_2e444m17/fenzDisplay.v
+src/Specific/montgomery32_2e444m17/feopp.v
+src/Specific/montgomery32_2e444m17/feoppDisplay.v
+src/Specific/montgomery32_2e444m17/fesub.v
+src/Specific/montgomery32_2e444m17/fesubDisplay.v
+src/Specific/montgomery32_2e448m2e224m1/CurveParameters.v
+src/Specific/montgomery32_2e448m2e224m1/Synthesis.v
+src/Specific/montgomery32_2e448m2e224m1/feadd.v
+src/Specific/montgomery32_2e448m2e224m1/feaddDisplay.v
+src/Specific/montgomery32_2e448m2e224m1/femul.v
+src/Specific/montgomery32_2e448m2e224m1/femulDisplay.v
+src/Specific/montgomery32_2e448m2e224m1/fenz.v
+src/Specific/montgomery32_2e448m2e224m1/fenzDisplay.v
+src/Specific/montgomery32_2e448m2e224m1/feopp.v
+src/Specific/montgomery32_2e448m2e224m1/feoppDisplay.v
+src/Specific/montgomery32_2e448m2e224m1/fesub.v
+src/Specific/montgomery32_2e448m2e224m1/fesubDisplay.v
+src/Specific/montgomery32_2e450m2e225m1/CurveParameters.v
+src/Specific/montgomery32_2e450m2e225m1/Synthesis.v
+src/Specific/montgomery32_2e450m2e225m1/feadd.v
+src/Specific/montgomery32_2e450m2e225m1/feaddDisplay.v
+src/Specific/montgomery32_2e450m2e225m1/femul.v
+src/Specific/montgomery32_2e450m2e225m1/femulDisplay.v
+src/Specific/montgomery32_2e450m2e225m1/fenz.v
+src/Specific/montgomery32_2e450m2e225m1/fenzDisplay.v
+src/Specific/montgomery32_2e450m2e225m1/feopp.v
+src/Specific/montgomery32_2e450m2e225m1/feoppDisplay.v
+src/Specific/montgomery32_2e450m2e225m1/fesub.v
+src/Specific/montgomery32_2e450m2e225m1/fesubDisplay.v
+src/Specific/montgomery32_2e452m3/CurveParameters.v
+src/Specific/montgomery32_2e452m3/Synthesis.v
+src/Specific/montgomery32_2e452m3/feadd.v
+src/Specific/montgomery32_2e452m3/feaddDisplay.v
+src/Specific/montgomery32_2e452m3/femul.v
+src/Specific/montgomery32_2e452m3/femulDisplay.v
+src/Specific/montgomery32_2e452m3/fenz.v
+src/Specific/montgomery32_2e452m3/fenzDisplay.v
+src/Specific/montgomery32_2e452m3/feopp.v
+src/Specific/montgomery32_2e452m3/feoppDisplay.v
+src/Specific/montgomery32_2e452m3/fesub.v
+src/Specific/montgomery32_2e452m3/fesubDisplay.v
+src/Specific/montgomery32_2e468m17/CurveParameters.v
+src/Specific/montgomery32_2e468m17/Synthesis.v
+src/Specific/montgomery32_2e468m17/feadd.v
+src/Specific/montgomery32_2e468m17/feaddDisplay.v
+src/Specific/montgomery32_2e468m17/femul.v
+src/Specific/montgomery32_2e468m17/femulDisplay.v
+src/Specific/montgomery32_2e468m17/fenz.v
+src/Specific/montgomery32_2e468m17/fenzDisplay.v
+src/Specific/montgomery32_2e468m17/feopp.v
+src/Specific/montgomery32_2e468m17/feoppDisplay.v
+src/Specific/montgomery32_2e468m17/fesub.v
+src/Specific/montgomery32_2e468m17/fesubDisplay.v
+src/Specific/montgomery32_2e480m2e240m1/CurveParameters.v
+src/Specific/montgomery32_2e480m2e240m1/Synthesis.v
+src/Specific/montgomery32_2e480m2e240m1/feadd.v
+src/Specific/montgomery32_2e480m2e240m1/feaddDisplay.v
+src/Specific/montgomery32_2e480m2e240m1/femul.v
+src/Specific/montgomery32_2e480m2e240m1/femulDisplay.v
+src/Specific/montgomery32_2e480m2e240m1/fenz.v
+src/Specific/montgomery32_2e480m2e240m1/fenzDisplay.v
+src/Specific/montgomery32_2e480m2e240m1/feopp.v
+src/Specific/montgomery32_2e480m2e240m1/feoppDisplay.v
+src/Specific/montgomery32_2e480m2e240m1/fesub.v
+src/Specific/montgomery32_2e480m2e240m1/fesubDisplay.v
+src/Specific/montgomery32_2e488m17/CurveParameters.v
+src/Specific/montgomery32_2e488m17/Synthesis.v
+src/Specific/montgomery32_2e488m17/feadd.v
+src/Specific/montgomery32_2e488m17/feaddDisplay.v
+src/Specific/montgomery32_2e488m17/femul.v
+src/Specific/montgomery32_2e488m17/femulDisplay.v
+src/Specific/montgomery32_2e488m17/fenz.v
+src/Specific/montgomery32_2e488m17/fenzDisplay.v
+src/Specific/montgomery32_2e488m17/feopp.v
+src/Specific/montgomery32_2e488m17/feoppDisplay.v
+src/Specific/montgomery32_2e488m17/fesub.v
+src/Specific/montgomery32_2e488m17/fesubDisplay.v
+src/Specific/montgomery32_2e489m21/CurveParameters.v
+src/Specific/montgomery32_2e489m21/Synthesis.v
+src/Specific/montgomery32_2e489m21/feadd.v
+src/Specific/montgomery32_2e489m21/feaddDisplay.v
+src/Specific/montgomery32_2e489m21/femul.v
+src/Specific/montgomery32_2e489m21/femulDisplay.v
+src/Specific/montgomery32_2e489m21/fenz.v
+src/Specific/montgomery32_2e489m21/fenzDisplay.v
+src/Specific/montgomery32_2e489m21/feopp.v
+src/Specific/montgomery32_2e489m21/feoppDisplay.v
+src/Specific/montgomery32_2e489m21/fesub.v
+src/Specific/montgomery32_2e489m21/fesubDisplay.v
+src/Specific/montgomery32_2e495m31/CurveParameters.v
+src/Specific/montgomery32_2e495m31/Synthesis.v
+src/Specific/montgomery32_2e495m31/feadd.v
+src/Specific/montgomery32_2e495m31/feaddDisplay.v
+src/Specific/montgomery32_2e495m31/femul.v
+src/Specific/montgomery32_2e495m31/femulDisplay.v
+src/Specific/montgomery32_2e495m31/fenz.v
+src/Specific/montgomery32_2e495m31/fenzDisplay.v
+src/Specific/montgomery32_2e495m31/feopp.v
+src/Specific/montgomery32_2e495m31/feoppDisplay.v
+src/Specific/montgomery32_2e495m31/fesub.v
+src/Specific/montgomery32_2e495m31/fesubDisplay.v
+src/Specific/montgomery32_2e511m187/CurveParameters.v
+src/Specific/montgomery32_2e511m187/Synthesis.v
+src/Specific/montgomery32_2e511m187/feadd.v
+src/Specific/montgomery32_2e511m187/feaddDisplay.v
+src/Specific/montgomery32_2e511m187/femul.v
+src/Specific/montgomery32_2e511m187/femulDisplay.v
+src/Specific/montgomery32_2e511m187/fenz.v
+src/Specific/montgomery32_2e511m187/fenzDisplay.v
+src/Specific/montgomery32_2e511m187/feopp.v
+src/Specific/montgomery32_2e511m187/feoppDisplay.v
+src/Specific/montgomery32_2e511m187/fesub.v
+src/Specific/montgomery32_2e511m187/fesubDisplay.v
+src/Specific/montgomery32_2e511m481/CurveParameters.v
+src/Specific/montgomery32_2e511m481/Synthesis.v
+src/Specific/montgomery32_2e511m481/feadd.v
+src/Specific/montgomery32_2e511m481/feaddDisplay.v
+src/Specific/montgomery32_2e511m481/femul.v
+src/Specific/montgomery32_2e511m481/femulDisplay.v
+src/Specific/montgomery32_2e511m481/fenz.v
+src/Specific/montgomery32_2e511m481/fenzDisplay.v
+src/Specific/montgomery32_2e511m481/feopp.v
+src/Specific/montgomery32_2e511m481/feoppDisplay.v
+src/Specific/montgomery32_2e511m481/fesub.v
+src/Specific/montgomery32_2e511m481/fesubDisplay.v
+src/Specific/montgomery32_2e512m569/CurveParameters.v
+src/Specific/montgomery32_2e512m569/Synthesis.v
+src/Specific/montgomery32_2e512m569/feadd.v
+src/Specific/montgomery32_2e512m569/feaddDisplay.v
+src/Specific/montgomery32_2e512m569/femul.v
+src/Specific/montgomery32_2e512m569/femulDisplay.v
+src/Specific/montgomery32_2e512m569/fenz.v
+src/Specific/montgomery32_2e512m569/fenzDisplay.v
+src/Specific/montgomery32_2e512m569/feopp.v
+src/Specific/montgomery32_2e512m569/feoppDisplay.v
+src/Specific/montgomery32_2e512m569/fesub.v
+src/Specific/montgomery32_2e512m569/fesubDisplay.v
+src/Specific/montgomery32_2e521m1/CurveParameters.v
+src/Specific/montgomery32_2e521m1/Synthesis.v
+src/Specific/montgomery32_2e521m1/feadd.v
+src/Specific/montgomery32_2e521m1/feaddDisplay.v
+src/Specific/montgomery32_2e521m1/femul.v
+src/Specific/montgomery32_2e521m1/femulDisplay.v
+src/Specific/montgomery32_2e521m1/fenz.v
+src/Specific/montgomery32_2e521m1/fenzDisplay.v
+src/Specific/montgomery32_2e521m1/feopp.v
+src/Specific/montgomery32_2e521m1/feoppDisplay.v
+src/Specific/montgomery32_2e521m1/fesub.v
+src/Specific/montgomery32_2e521m1/fesubDisplay.v
+src/Specific/montgomery64_2e127m1/CurveParameters.v
+src/Specific/montgomery64_2e127m1/Synthesis.v
+src/Specific/montgomery64_2e127m1/feadd.v
+src/Specific/montgomery64_2e127m1/feaddDisplay.v
+src/Specific/montgomery64_2e127m1/femul.v
+src/Specific/montgomery64_2e127m1/femulDisplay.v
+src/Specific/montgomery64_2e127m1/fenz.v
+src/Specific/montgomery64_2e127m1/fenzDisplay.v
+src/Specific/montgomery64_2e127m1/feopp.v
+src/Specific/montgomery64_2e127m1/feoppDisplay.v
+src/Specific/montgomery64_2e127m1/fesub.v
+src/Specific/montgomery64_2e127m1/fesubDisplay.v
+src/Specific/montgomery64_2e129m25/CurveParameters.v
+src/Specific/montgomery64_2e129m25/Synthesis.v
+src/Specific/montgomery64_2e129m25/feadd.v
+src/Specific/montgomery64_2e129m25/feaddDisplay.v
+src/Specific/montgomery64_2e129m25/femul.v
+src/Specific/montgomery64_2e129m25/femulDisplay.v
+src/Specific/montgomery64_2e129m25/fenz.v
+src/Specific/montgomery64_2e129m25/fenzDisplay.v
+src/Specific/montgomery64_2e129m25/feopp.v
+src/Specific/montgomery64_2e129m25/feoppDisplay.v
+src/Specific/montgomery64_2e129m25/fesub.v
+src/Specific/montgomery64_2e129m25/fesubDisplay.v
+src/Specific/montgomery64_2e130m5/CurveParameters.v
+src/Specific/montgomery64_2e130m5/Synthesis.v
+src/Specific/montgomery64_2e130m5/feadd.v
+src/Specific/montgomery64_2e130m5/feaddDisplay.v
+src/Specific/montgomery64_2e130m5/femul.v
+src/Specific/montgomery64_2e130m5/femulDisplay.v
+src/Specific/montgomery64_2e130m5/fenz.v
+src/Specific/montgomery64_2e130m5/fenzDisplay.v
+src/Specific/montgomery64_2e130m5/feopp.v
+src/Specific/montgomery64_2e130m5/feoppDisplay.v
+src/Specific/montgomery64_2e130m5/fesub.v
+src/Specific/montgomery64_2e130m5/fesubDisplay.v
+src/Specific/montgomery64_2e137m13/CurveParameters.v
+src/Specific/montgomery64_2e137m13/Synthesis.v
+src/Specific/montgomery64_2e137m13/feadd.v
+src/Specific/montgomery64_2e137m13/feaddDisplay.v
+src/Specific/montgomery64_2e137m13/femul.v
+src/Specific/montgomery64_2e137m13/femulDisplay.v
+src/Specific/montgomery64_2e137m13/fenz.v
+src/Specific/montgomery64_2e137m13/fenzDisplay.v
+src/Specific/montgomery64_2e137m13/feopp.v
+src/Specific/montgomery64_2e137m13/feoppDisplay.v
+src/Specific/montgomery64_2e137m13/fesub.v
+src/Specific/montgomery64_2e137m13/fesubDisplay.v
+src/Specific/montgomery64_2e140m27/CurveParameters.v
+src/Specific/montgomery64_2e140m27/Synthesis.v
+src/Specific/montgomery64_2e140m27/feadd.v
+src/Specific/montgomery64_2e140m27/feaddDisplay.v
+src/Specific/montgomery64_2e140m27/femul.v
+src/Specific/montgomery64_2e140m27/femulDisplay.v
+src/Specific/montgomery64_2e140m27/fenz.v
+src/Specific/montgomery64_2e140m27/fenzDisplay.v
+src/Specific/montgomery64_2e140m27/feopp.v
+src/Specific/montgomery64_2e140m27/feoppDisplay.v
+src/Specific/montgomery64_2e140m27/fesub.v
+src/Specific/montgomery64_2e140m27/fesubDisplay.v
+src/Specific/montgomery64_2e141m9/CurveParameters.v
+src/Specific/montgomery64_2e141m9/Synthesis.v
+src/Specific/montgomery64_2e141m9/feadd.v
+src/Specific/montgomery64_2e141m9/feaddDisplay.v
+src/Specific/montgomery64_2e141m9/femul.v
+src/Specific/montgomery64_2e141m9/femulDisplay.v
+src/Specific/montgomery64_2e141m9/fenz.v
+src/Specific/montgomery64_2e141m9/fenzDisplay.v
+src/Specific/montgomery64_2e141m9/feopp.v
+src/Specific/montgomery64_2e141m9/feoppDisplay.v
+src/Specific/montgomery64_2e141m9/fesub.v
+src/Specific/montgomery64_2e141m9/fesubDisplay.v
+src/Specific/montgomery64_2e150m3/CurveParameters.v
+src/Specific/montgomery64_2e150m3/Synthesis.v
+src/Specific/montgomery64_2e150m3/feadd.v
+src/Specific/montgomery64_2e150m3/feaddDisplay.v
+src/Specific/montgomery64_2e150m3/femul.v
+src/Specific/montgomery64_2e150m3/femulDisplay.v
+src/Specific/montgomery64_2e150m3/fenz.v
+src/Specific/montgomery64_2e150m3/fenzDisplay.v
+src/Specific/montgomery64_2e150m3/feopp.v
+src/Specific/montgomery64_2e150m3/feoppDisplay.v
+src/Specific/montgomery64_2e150m3/fesub.v
+src/Specific/montgomery64_2e150m3/fesubDisplay.v
+src/Specific/montgomery64_2e150m5/CurveParameters.v
+src/Specific/montgomery64_2e150m5/Synthesis.v
+src/Specific/montgomery64_2e150m5/feadd.v
+src/Specific/montgomery64_2e150m5/feaddDisplay.v
+src/Specific/montgomery64_2e150m5/femul.v
+src/Specific/montgomery64_2e150m5/femulDisplay.v
+src/Specific/montgomery64_2e150m5/fenz.v
+src/Specific/montgomery64_2e150m5/fenzDisplay.v
+src/Specific/montgomery64_2e150m5/feopp.v
+src/Specific/montgomery64_2e150m5/feoppDisplay.v
+src/Specific/montgomery64_2e150m5/fesub.v
+src/Specific/montgomery64_2e150m5/fesubDisplay.v
+src/Specific/montgomery64_2e152m17/CurveParameters.v
+src/Specific/montgomery64_2e152m17/Synthesis.v
+src/Specific/montgomery64_2e152m17/feadd.v
+src/Specific/montgomery64_2e152m17/feaddDisplay.v
+src/Specific/montgomery64_2e152m17/femul.v
+src/Specific/montgomery64_2e152m17/femulDisplay.v
+src/Specific/montgomery64_2e152m17/fenz.v
+src/Specific/montgomery64_2e152m17/fenzDisplay.v
+src/Specific/montgomery64_2e152m17/feopp.v
+src/Specific/montgomery64_2e152m17/feoppDisplay.v
+src/Specific/montgomery64_2e152m17/fesub.v
+src/Specific/montgomery64_2e152m17/fesubDisplay.v
+src/Specific/montgomery64_2e158m15/CurveParameters.v
+src/Specific/montgomery64_2e158m15/Synthesis.v
+src/Specific/montgomery64_2e158m15/feadd.v
+src/Specific/montgomery64_2e158m15/feaddDisplay.v
+src/Specific/montgomery64_2e158m15/femul.v
+src/Specific/montgomery64_2e158m15/femulDisplay.v
+src/Specific/montgomery64_2e158m15/fenz.v
+src/Specific/montgomery64_2e158m15/fenzDisplay.v
+src/Specific/montgomery64_2e158m15/feopp.v
+src/Specific/montgomery64_2e158m15/feoppDisplay.v
+src/Specific/montgomery64_2e158m15/fesub.v
+src/Specific/montgomery64_2e158m15/fesubDisplay.v
+src/Specific/montgomery64_2e165m25/CurveParameters.v
+src/Specific/montgomery64_2e165m25/Synthesis.v
+src/Specific/montgomery64_2e165m25/feadd.v
+src/Specific/montgomery64_2e165m25/feaddDisplay.v
+src/Specific/montgomery64_2e165m25/femul.v
+src/Specific/montgomery64_2e165m25/femulDisplay.v
+src/Specific/montgomery64_2e165m25/fenz.v
+src/Specific/montgomery64_2e165m25/fenzDisplay.v
+src/Specific/montgomery64_2e165m25/feopp.v
+src/Specific/montgomery64_2e165m25/feoppDisplay.v
+src/Specific/montgomery64_2e165m25/fesub.v
+src/Specific/montgomery64_2e165m25/fesubDisplay.v
+src/Specific/montgomery64_2e166m5/CurveParameters.v
+src/Specific/montgomery64_2e166m5/Synthesis.v
+src/Specific/montgomery64_2e166m5/feadd.v
+src/Specific/montgomery64_2e166m5/feaddDisplay.v
+src/Specific/montgomery64_2e166m5/femul.v
+src/Specific/montgomery64_2e166m5/femulDisplay.v
+src/Specific/montgomery64_2e166m5/fenz.v
+src/Specific/montgomery64_2e166m5/fenzDisplay.v
+src/Specific/montgomery64_2e166m5/feopp.v
+src/Specific/montgomery64_2e166m5/feoppDisplay.v
+src/Specific/montgomery64_2e166m5/fesub.v
+src/Specific/montgomery64_2e166m5/fesubDisplay.v
+src/Specific/montgomery64_2e171m19/CurveParameters.v
+src/Specific/montgomery64_2e171m19/Synthesis.v
+src/Specific/montgomery64_2e171m19/feadd.v
+src/Specific/montgomery64_2e171m19/feaddDisplay.v
+src/Specific/montgomery64_2e171m19/femul.v
+src/Specific/montgomery64_2e171m19/femulDisplay.v
+src/Specific/montgomery64_2e171m19/fenz.v
+src/Specific/montgomery64_2e171m19/fenzDisplay.v
+src/Specific/montgomery64_2e171m19/feopp.v
+src/Specific/montgomery64_2e171m19/feoppDisplay.v
+src/Specific/montgomery64_2e171m19/fesub.v
+src/Specific/montgomery64_2e171m19/fesubDisplay.v
+src/Specific/montgomery64_2e174m17/CurveParameters.v
+src/Specific/montgomery64_2e174m17/Synthesis.v
+src/Specific/montgomery64_2e174m17/feadd.v
+src/Specific/montgomery64_2e174m17/feaddDisplay.v
+src/Specific/montgomery64_2e174m17/femul.v
+src/Specific/montgomery64_2e174m17/femulDisplay.v
+src/Specific/montgomery64_2e174m17/fenz.v
+src/Specific/montgomery64_2e174m17/fenzDisplay.v
+src/Specific/montgomery64_2e174m17/feopp.v
+src/Specific/montgomery64_2e174m17/feoppDisplay.v
+src/Specific/montgomery64_2e174m17/fesub.v
+src/Specific/montgomery64_2e174m17/fesubDisplay.v
+src/Specific/montgomery64_2e174m3/CurveParameters.v
+src/Specific/montgomery64_2e174m3/Synthesis.v
+src/Specific/montgomery64_2e174m3/feadd.v
+src/Specific/montgomery64_2e174m3/feaddDisplay.v
+src/Specific/montgomery64_2e174m3/femul.v
+src/Specific/montgomery64_2e174m3/femulDisplay.v
+src/Specific/montgomery64_2e174m3/fenz.v
+src/Specific/montgomery64_2e174m3/fenzDisplay.v
+src/Specific/montgomery64_2e174m3/feopp.v
+src/Specific/montgomery64_2e174m3/feoppDisplay.v
+src/Specific/montgomery64_2e174m3/fesub.v
+src/Specific/montgomery64_2e174m3/fesubDisplay.v
+src/Specific/montgomery64_2e189m25/CurveParameters.v
+src/Specific/montgomery64_2e189m25/Synthesis.v
+src/Specific/montgomery64_2e189m25/feadd.v
+src/Specific/montgomery64_2e189m25/feaddDisplay.v
+src/Specific/montgomery64_2e189m25/femul.v
+src/Specific/montgomery64_2e189m25/femulDisplay.v
+src/Specific/montgomery64_2e189m25/fenz.v
+src/Specific/montgomery64_2e189m25/fenzDisplay.v
+src/Specific/montgomery64_2e189m25/feopp.v
+src/Specific/montgomery64_2e189m25/feoppDisplay.v
+src/Specific/montgomery64_2e189m25/fesub.v
+src/Specific/montgomery64_2e189m25/fesubDisplay.v
+src/Specific/montgomery64_2e190m11/CurveParameters.v
+src/Specific/montgomery64_2e190m11/Synthesis.v
+src/Specific/montgomery64_2e190m11/feadd.v
+src/Specific/montgomery64_2e190m11/feaddDisplay.v
+src/Specific/montgomery64_2e190m11/femul.v
+src/Specific/montgomery64_2e190m11/femulDisplay.v
+src/Specific/montgomery64_2e190m11/fenz.v
+src/Specific/montgomery64_2e190m11/fenzDisplay.v
+src/Specific/montgomery64_2e190m11/feopp.v
+src/Specific/montgomery64_2e190m11/feoppDisplay.v
+src/Specific/montgomery64_2e190m11/fesub.v
+src/Specific/montgomery64_2e190m11/fesubDisplay.v
+src/Specific/montgomery64_2e191m19/CurveParameters.v
+src/Specific/montgomery64_2e191m19/Synthesis.v
+src/Specific/montgomery64_2e191m19/feadd.v
+src/Specific/montgomery64_2e191m19/feaddDisplay.v
+src/Specific/montgomery64_2e191m19/femul.v
+src/Specific/montgomery64_2e191m19/femulDisplay.v
+src/Specific/montgomery64_2e191m19/fenz.v
+src/Specific/montgomery64_2e191m19/fenzDisplay.v
+src/Specific/montgomery64_2e191m19/feopp.v
+src/Specific/montgomery64_2e191m19/feoppDisplay.v
+src/Specific/montgomery64_2e191m19/fesub.v
+src/Specific/montgomery64_2e191m19/fesubDisplay.v
+src/Specific/montgomery64_2e192m2e64m1/CurveParameters.v
+src/Specific/montgomery64_2e192m2e64m1/Synthesis.v
+src/Specific/montgomery64_2e192m2e64m1/feadd.v
+src/Specific/montgomery64_2e192m2e64m1/feaddDisplay.v
+src/Specific/montgomery64_2e192m2e64m1/femul.v
+src/Specific/montgomery64_2e192m2e64m1/femulDisplay.v
+src/Specific/montgomery64_2e192m2e64m1/fenz.v
+src/Specific/montgomery64_2e192m2e64m1/fenzDisplay.v
+src/Specific/montgomery64_2e192m2e64m1/feopp.v
+src/Specific/montgomery64_2e192m2e64m1/feoppDisplay.v
+src/Specific/montgomery64_2e192m2e64m1/fesub.v
+src/Specific/montgomery64_2e192m2e64m1/fesubDisplay.v
+src/Specific/montgomery64_2e194m33/CurveParameters.v
+src/Specific/montgomery64_2e194m33/Synthesis.v
+src/Specific/montgomery64_2e194m33/feadd.v
+src/Specific/montgomery64_2e194m33/feaddDisplay.v
+src/Specific/montgomery64_2e194m33/femul.v
+src/Specific/montgomery64_2e194m33/femulDisplay.v
+src/Specific/montgomery64_2e194m33/fenz.v
+src/Specific/montgomery64_2e194m33/fenzDisplay.v
+src/Specific/montgomery64_2e194m33/feopp.v
+src/Specific/montgomery64_2e194m33/feoppDisplay.v
+src/Specific/montgomery64_2e194m33/fesub.v
+src/Specific/montgomery64_2e194m33/fesubDisplay.v
+src/Specific/montgomery64_2e196m15/CurveParameters.v
+src/Specific/montgomery64_2e196m15/Synthesis.v
+src/Specific/montgomery64_2e196m15/feadd.v
+src/Specific/montgomery64_2e196m15/feaddDisplay.v
+src/Specific/montgomery64_2e196m15/femul.v
+src/Specific/montgomery64_2e196m15/femulDisplay.v
+src/Specific/montgomery64_2e196m15/fenz.v
+src/Specific/montgomery64_2e196m15/fenzDisplay.v
+src/Specific/montgomery64_2e196m15/feopp.v
+src/Specific/montgomery64_2e196m15/feoppDisplay.v
+src/Specific/montgomery64_2e196m15/fesub.v
+src/Specific/montgomery64_2e196m15/fesubDisplay.v
+src/Specific/montgomery64_2e198m17/CurveParameters.v
+src/Specific/montgomery64_2e198m17/Synthesis.v
+src/Specific/montgomery64_2e198m17/feadd.v
+src/Specific/montgomery64_2e198m17/feaddDisplay.v
+src/Specific/montgomery64_2e198m17/femul.v
+src/Specific/montgomery64_2e198m17/femulDisplay.v
+src/Specific/montgomery64_2e198m17/fenz.v
+src/Specific/montgomery64_2e198m17/fenzDisplay.v
+src/Specific/montgomery64_2e198m17/feopp.v
+src/Specific/montgomery64_2e198m17/feoppDisplay.v
+src/Specific/montgomery64_2e198m17/fesub.v
+src/Specific/montgomery64_2e198m17/fesubDisplay.v
+src/Specific/montgomery64_2e206m5/CurveParameters.v
+src/Specific/montgomery64_2e206m5/Synthesis.v
+src/Specific/montgomery64_2e206m5/feadd.v
+src/Specific/montgomery64_2e206m5/feaddDisplay.v
+src/Specific/montgomery64_2e206m5/femul.v
+src/Specific/montgomery64_2e206m5/femulDisplay.v
+src/Specific/montgomery64_2e206m5/fenz.v
+src/Specific/montgomery64_2e206m5/fenzDisplay.v
+src/Specific/montgomery64_2e206m5/feopp.v
+src/Specific/montgomery64_2e206m5/feoppDisplay.v
+src/Specific/montgomery64_2e206m5/fesub.v
+src/Specific/montgomery64_2e206m5/fesubDisplay.v
+src/Specific/montgomery64_2e212m29/CurveParameters.v
+src/Specific/montgomery64_2e212m29/Synthesis.v
+src/Specific/montgomery64_2e212m29/feadd.v
+src/Specific/montgomery64_2e212m29/feaddDisplay.v
+src/Specific/montgomery64_2e212m29/femul.v
+src/Specific/montgomery64_2e212m29/femulDisplay.v
+src/Specific/montgomery64_2e212m29/fenz.v
+src/Specific/montgomery64_2e212m29/fenzDisplay.v
+src/Specific/montgomery64_2e212m29/feopp.v
+src/Specific/montgomery64_2e212m29/feoppDisplay.v
+src/Specific/montgomery64_2e212m29/fesub.v
+src/Specific/montgomery64_2e212m29/fesubDisplay.v
+src/Specific/montgomery64_2e213m3/CurveParameters.v
+src/Specific/montgomery64_2e213m3/Synthesis.v
+src/Specific/montgomery64_2e213m3/feadd.v
+src/Specific/montgomery64_2e213m3/feaddDisplay.v
+src/Specific/montgomery64_2e213m3/femul.v
+src/Specific/montgomery64_2e213m3/femulDisplay.v
+src/Specific/montgomery64_2e213m3/fenz.v
+src/Specific/montgomery64_2e213m3/fenzDisplay.v
+src/Specific/montgomery64_2e213m3/feopp.v
+src/Specific/montgomery64_2e213m3/feoppDisplay.v
+src/Specific/montgomery64_2e213m3/fesub.v
+src/Specific/montgomery64_2e213m3/fesubDisplay.v
+src/Specific/montgomery64_2e216m2e108m1/CurveParameters.v
+src/Specific/montgomery64_2e216m2e108m1/Synthesis.v
+src/Specific/montgomery64_2e216m2e108m1/feadd.v
+src/Specific/montgomery64_2e216m2e108m1/feaddDisplay.v
+src/Specific/montgomery64_2e216m2e108m1/femul.v
+src/Specific/montgomery64_2e216m2e108m1/femulDisplay.v
+src/Specific/montgomery64_2e216m2e108m1/fenz.v
+src/Specific/montgomery64_2e216m2e108m1/fenzDisplay.v
+src/Specific/montgomery64_2e216m2e108m1/feopp.v
+src/Specific/montgomery64_2e216m2e108m1/feoppDisplay.v
+src/Specific/montgomery64_2e216m2e108m1/fesub.v
+src/Specific/montgomery64_2e216m2e108m1/fesubDisplay.v
+src/Specific/montgomery64_2e221m3/CurveParameters.v
+src/Specific/montgomery64_2e221m3/Synthesis.v
+src/Specific/montgomery64_2e221m3/feadd.v
+src/Specific/montgomery64_2e221m3/feaddDisplay.v
+src/Specific/montgomery64_2e221m3/femul.v
+src/Specific/montgomery64_2e221m3/femulDisplay.v
+src/Specific/montgomery64_2e221m3/fenz.v
+src/Specific/montgomery64_2e221m3/fenzDisplay.v
+src/Specific/montgomery64_2e221m3/feopp.v
+src/Specific/montgomery64_2e221m3/feoppDisplay.v
+src/Specific/montgomery64_2e221m3/fesub.v
+src/Specific/montgomery64_2e221m3/fesubDisplay.v
+src/Specific/montgomery64_2e222m117/CurveParameters.v
+src/Specific/montgomery64_2e222m117/Synthesis.v
+src/Specific/montgomery64_2e222m117/feadd.v
+src/Specific/montgomery64_2e222m117/feaddDisplay.v
+src/Specific/montgomery64_2e222m117/femul.v
+src/Specific/montgomery64_2e222m117/femulDisplay.v
+src/Specific/montgomery64_2e222m117/fenz.v
+src/Specific/montgomery64_2e222m117/fenzDisplay.v
+src/Specific/montgomery64_2e222m117/feopp.v
+src/Specific/montgomery64_2e222m117/feoppDisplay.v
+src/Specific/montgomery64_2e222m117/fesub.v
+src/Specific/montgomery64_2e222m117/fesubDisplay.v
+src/Specific/montgomery64_2e224m2e96p1/CurveParameters.v
+src/Specific/montgomery64_2e224m2e96p1/Synthesis.v
+src/Specific/montgomery64_2e224m2e96p1/feadd.v
+src/Specific/montgomery64_2e224m2e96p1/feaddDisplay.v
+src/Specific/montgomery64_2e224m2e96p1/femul.v
+src/Specific/montgomery64_2e224m2e96p1/femulDisplay.v
+src/Specific/montgomery64_2e224m2e96p1/fenz.v
+src/Specific/montgomery64_2e224m2e96p1/fenzDisplay.v
+src/Specific/montgomery64_2e224m2e96p1/feopp.v
+src/Specific/montgomery64_2e224m2e96p1/feoppDisplay.v
+src/Specific/montgomery64_2e224m2e96p1/fesub.v
+src/Specific/montgomery64_2e224m2e96p1/fesubDisplay.v
+src/Specific/montgomery64_2e226m5/CurveParameters.v
+src/Specific/montgomery64_2e226m5/Synthesis.v
+src/Specific/montgomery64_2e226m5/feadd.v
+src/Specific/montgomery64_2e226m5/feaddDisplay.v
+src/Specific/montgomery64_2e226m5/femul.v
+src/Specific/montgomery64_2e226m5/femulDisplay.v
+src/Specific/montgomery64_2e226m5/fenz.v
+src/Specific/montgomery64_2e226m5/fenzDisplay.v
+src/Specific/montgomery64_2e226m5/feopp.v
+src/Specific/montgomery64_2e226m5/feoppDisplay.v
+src/Specific/montgomery64_2e226m5/fesub.v
+src/Specific/montgomery64_2e226m5/fesubDisplay.v
+src/Specific/montgomery64_2e230m27/CurveParameters.v
+src/Specific/montgomery64_2e230m27/Synthesis.v
+src/Specific/montgomery64_2e230m27/feadd.v
+src/Specific/montgomery64_2e230m27/feaddDisplay.v
+src/Specific/montgomery64_2e230m27/femul.v
+src/Specific/montgomery64_2e230m27/femulDisplay.v
+src/Specific/montgomery64_2e230m27/fenz.v
+src/Specific/montgomery64_2e230m27/fenzDisplay.v
+src/Specific/montgomery64_2e230m27/feopp.v
+src/Specific/montgomery64_2e230m27/feoppDisplay.v
+src/Specific/montgomery64_2e230m27/fesub.v
+src/Specific/montgomery64_2e230m27/fesubDisplay.v
+src/Specific/montgomery64_2e235m15/CurveParameters.v
+src/Specific/montgomery64_2e235m15/Synthesis.v
+src/Specific/montgomery64_2e235m15/feadd.v
+src/Specific/montgomery64_2e235m15/feaddDisplay.v
+src/Specific/montgomery64_2e235m15/femul.v
+src/Specific/montgomery64_2e235m15/femulDisplay.v
+src/Specific/montgomery64_2e235m15/fenz.v
+src/Specific/montgomery64_2e235m15/fenzDisplay.v
+src/Specific/montgomery64_2e235m15/feopp.v
+src/Specific/montgomery64_2e235m15/feoppDisplay.v
+src/Specific/montgomery64_2e235m15/fesub.v
+src/Specific/montgomery64_2e235m15/fesubDisplay.v
+src/Specific/montgomery64_2e243m9/CurveParameters.v
+src/Specific/montgomery64_2e243m9/Synthesis.v
+src/Specific/montgomery64_2e243m9/feadd.v
+src/Specific/montgomery64_2e243m9/feaddDisplay.v
+src/Specific/montgomery64_2e243m9/femul.v
+src/Specific/montgomery64_2e243m9/femulDisplay.v
+src/Specific/montgomery64_2e243m9/fenz.v
+src/Specific/montgomery64_2e243m9/fenzDisplay.v
+src/Specific/montgomery64_2e243m9/feopp.v
+src/Specific/montgomery64_2e243m9/feoppDisplay.v
+src/Specific/montgomery64_2e243m9/fesub.v
+src/Specific/montgomery64_2e243m9/fesubDisplay.v
+src/Specific/montgomery64_2e251m9/CurveParameters.v
+src/Specific/montgomery64_2e251m9/Synthesis.v
+src/Specific/montgomery64_2e251m9/feadd.v
+src/Specific/montgomery64_2e251m9/feaddDisplay.v
+src/Specific/montgomery64_2e251m9/femul.v
+src/Specific/montgomery64_2e251m9/femulDisplay.v
+src/Specific/montgomery64_2e251m9/fenz.v
+src/Specific/montgomery64_2e251m9/fenzDisplay.v
+src/Specific/montgomery64_2e251m9/feopp.v
+src/Specific/montgomery64_2e251m9/feoppDisplay.v
+src/Specific/montgomery64_2e251m9/fesub.v
+src/Specific/montgomery64_2e251m9/fesubDisplay.v
+src/Specific/montgomery64_2e255m19/CurveParameters.v
+src/Specific/montgomery64_2e255m19/Synthesis.v
+src/Specific/montgomery64_2e255m19/feadd.v
+src/Specific/montgomery64_2e255m19/feaddDisplay.v
+src/Specific/montgomery64_2e255m19/femul.v
+src/Specific/montgomery64_2e255m19/femulDisplay.v
+src/Specific/montgomery64_2e255m19/fenz.v
+src/Specific/montgomery64_2e255m19/fenzDisplay.v
+src/Specific/montgomery64_2e255m19/feopp.v
+src/Specific/montgomery64_2e255m19/feoppDisplay.v
+src/Specific/montgomery64_2e255m19/fesub.v
+src/Specific/montgomery64_2e255m19/fesubDisplay.v
+src/Specific/montgomery64_2e255m2e4m2e1m1/CurveParameters.v
+src/Specific/montgomery64_2e255m2e4m2e1m1/Synthesis.v
+src/Specific/montgomery64_2e255m2e4m2e1m1/feadd.v
+src/Specific/montgomery64_2e255m2e4m2e1m1/feaddDisplay.v
+src/Specific/montgomery64_2e255m2e4m2e1m1/femul.v
+src/Specific/montgomery64_2e255m2e4m2e1m1/femulDisplay.v
+src/Specific/montgomery64_2e255m2e4m2e1m1/fenz.v
+src/Specific/montgomery64_2e255m2e4m2e1m1/fenzDisplay.v
+src/Specific/montgomery64_2e255m2e4m2e1m1/feopp.v
+src/Specific/montgomery64_2e255m2e4m2e1m1/feoppDisplay.v
+src/Specific/montgomery64_2e255m2e4m2e1m1/fesub.v
+src/Specific/montgomery64_2e255m2e4m2e1m1/fesubDisplay.v
+src/Specific/montgomery64_2e255m765/CurveParameters.v
+src/Specific/montgomery64_2e255m765/Synthesis.v
+src/Specific/montgomery64_2e255m765/feadd.v
+src/Specific/montgomery64_2e255m765/feaddDisplay.v
+src/Specific/montgomery64_2e255m765/femul.v
+src/Specific/montgomery64_2e255m765/femulDisplay.v
+src/Specific/montgomery64_2e255m765/fenz.v
+src/Specific/montgomery64_2e255m765/fenzDisplay.v
+src/Specific/montgomery64_2e255m765/feopp.v
+src/Specific/montgomery64_2e255m765/feoppDisplay.v
+src/Specific/montgomery64_2e255m765/fesub.v
+src/Specific/montgomery64_2e255m765/fesubDisplay.v
+src/Specific/montgomery64_2e256m189/CurveParameters.v
+src/Specific/montgomery64_2e256m189/Synthesis.v
+src/Specific/montgomery64_2e256m189/feadd.v
+src/Specific/montgomery64_2e256m189/feaddDisplay.v
+src/Specific/montgomery64_2e256m189/femul.v
+src/Specific/montgomery64_2e256m189/femulDisplay.v
+src/Specific/montgomery64_2e256m189/fenz.v
+src/Specific/montgomery64_2e256m189/fenzDisplay.v
+src/Specific/montgomery64_2e256m189/feopp.v
+src/Specific/montgomery64_2e256m189/feoppDisplay.v
+src/Specific/montgomery64_2e256m189/fesub.v
+src/Specific/montgomery64_2e256m189/fesubDisplay.v
+src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/CurveParameters.v
+src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/Synthesis.v
+src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feadd.v
+src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feaddDisplay.v
+src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/femul.v
+src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/femulDisplay.v
+src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fenz.v
+src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fenzDisplay.v
+src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feopp.v
+src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feoppDisplay.v
+src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fesub.v
+src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fesubDisplay.v
+src/Specific/montgomery64_2e256m2e32m977/CurveParameters.v
+src/Specific/montgomery64_2e256m2e32m977/Synthesis.v
+src/Specific/montgomery64_2e256m2e32m977/feadd.v
+src/Specific/montgomery64_2e256m2e32m977/feaddDisplay.v
+src/Specific/montgomery64_2e256m2e32m977/femul.v
+src/Specific/montgomery64_2e256m2e32m977/femulDisplay.v
+src/Specific/montgomery64_2e256m2e32m977/fenz.v
+src/Specific/montgomery64_2e256m2e32m977/fenzDisplay.v
+src/Specific/montgomery64_2e256m2e32m977/feopp.v
+src/Specific/montgomery64_2e256m2e32m977/feoppDisplay.v
+src/Specific/montgomery64_2e256m2e32m977/fesub.v
+src/Specific/montgomery64_2e256m2e32m977/fesubDisplay.v
+src/Specific/montgomery64_2e266m3/CurveParameters.v
+src/Specific/montgomery64_2e266m3/Synthesis.v
+src/Specific/montgomery64_2e266m3/feadd.v
+src/Specific/montgomery64_2e266m3/feaddDisplay.v
+src/Specific/montgomery64_2e266m3/femul.v
+src/Specific/montgomery64_2e266m3/femulDisplay.v
+src/Specific/montgomery64_2e266m3/fenz.v
+src/Specific/montgomery64_2e266m3/fenzDisplay.v
+src/Specific/montgomery64_2e266m3/feopp.v
+src/Specific/montgomery64_2e266m3/feoppDisplay.v
+src/Specific/montgomery64_2e266m3/fesub.v
+src/Specific/montgomery64_2e266m3/fesubDisplay.v
+src/Specific/montgomery64_2e285m9/CurveParameters.v
+src/Specific/montgomery64_2e285m9/Synthesis.v
+src/Specific/montgomery64_2e285m9/feadd.v
+src/Specific/montgomery64_2e285m9/feaddDisplay.v
+src/Specific/montgomery64_2e285m9/femul.v
+src/Specific/montgomery64_2e285m9/femulDisplay.v
+src/Specific/montgomery64_2e285m9/fenz.v
+src/Specific/montgomery64_2e285m9/fenzDisplay.v
+src/Specific/montgomery64_2e285m9/feopp.v
+src/Specific/montgomery64_2e285m9/feoppDisplay.v
+src/Specific/montgomery64_2e285m9/fesub.v
+src/Specific/montgomery64_2e285m9/fesubDisplay.v
+src/Specific/montgomery64_2e291m19/CurveParameters.v
+src/Specific/montgomery64_2e291m19/Synthesis.v
+src/Specific/montgomery64_2e291m19/feadd.v
+src/Specific/montgomery64_2e291m19/feaddDisplay.v
+src/Specific/montgomery64_2e291m19/femul.v
+src/Specific/montgomery64_2e291m19/femulDisplay.v
+src/Specific/montgomery64_2e291m19/fenz.v
+src/Specific/montgomery64_2e291m19/fenzDisplay.v
+src/Specific/montgomery64_2e291m19/feopp.v
+src/Specific/montgomery64_2e291m19/feoppDisplay.v
+src/Specific/montgomery64_2e291m19/fesub.v
+src/Specific/montgomery64_2e291m19/fesubDisplay.v
+src/Specific/montgomery64_2e321m9/CurveParameters.v
+src/Specific/montgomery64_2e321m9/Synthesis.v
+src/Specific/montgomery64_2e321m9/feadd.v
+src/Specific/montgomery64_2e321m9/feaddDisplay.v
+src/Specific/montgomery64_2e321m9/femul.v
+src/Specific/montgomery64_2e321m9/femulDisplay.v
+src/Specific/montgomery64_2e321m9/fenz.v
+src/Specific/montgomery64_2e321m9/fenzDisplay.v
+src/Specific/montgomery64_2e321m9/feopp.v
+src/Specific/montgomery64_2e321m9/feoppDisplay.v
+src/Specific/montgomery64_2e321m9/fesub.v
+src/Specific/montgomery64_2e321m9/fesubDisplay.v
+src/Specific/montgomery64_2e322m2e161m1/CurveParameters.v
+src/Specific/montgomery64_2e322m2e161m1/Synthesis.v
+src/Specific/montgomery64_2e322m2e161m1/feadd.v
+src/Specific/montgomery64_2e322m2e161m1/feaddDisplay.v
+src/Specific/montgomery64_2e322m2e161m1/femul.v
+src/Specific/montgomery64_2e322m2e161m1/femulDisplay.v
+src/Specific/montgomery64_2e322m2e161m1/fenz.v
+src/Specific/montgomery64_2e322m2e161m1/fenzDisplay.v
+src/Specific/montgomery64_2e322m2e161m1/feopp.v
+src/Specific/montgomery64_2e322m2e161m1/feoppDisplay.v
+src/Specific/montgomery64_2e322m2e161m1/fesub.v
+src/Specific/montgomery64_2e322m2e161m1/fesubDisplay.v
+src/Specific/montgomery64_2e336m17/CurveParameters.v
+src/Specific/montgomery64_2e336m17/Synthesis.v
+src/Specific/montgomery64_2e336m17/feadd.v
+src/Specific/montgomery64_2e336m17/feaddDisplay.v
+src/Specific/montgomery64_2e336m17/femul.v
+src/Specific/montgomery64_2e336m17/femulDisplay.v
+src/Specific/montgomery64_2e336m17/fenz.v
+src/Specific/montgomery64_2e336m17/fenzDisplay.v
+src/Specific/montgomery64_2e336m17/feopp.v
+src/Specific/montgomery64_2e336m17/feoppDisplay.v
+src/Specific/montgomery64_2e336m17/fesub.v
+src/Specific/montgomery64_2e336m17/fesubDisplay.v
+src/Specific/montgomery64_2e336m3/CurveParameters.v
+src/Specific/montgomery64_2e336m3/Synthesis.v
+src/Specific/montgomery64_2e336m3/feadd.v
+src/Specific/montgomery64_2e336m3/feaddDisplay.v
+src/Specific/montgomery64_2e336m3/femul.v
+src/Specific/montgomery64_2e336m3/femulDisplay.v
+src/Specific/montgomery64_2e336m3/fenz.v
+src/Specific/montgomery64_2e336m3/fenzDisplay.v
+src/Specific/montgomery64_2e336m3/feopp.v
+src/Specific/montgomery64_2e336m3/feoppDisplay.v
+src/Specific/montgomery64_2e336m3/fesub.v
+src/Specific/montgomery64_2e336m3/fesubDisplay.v
+src/Specific/montgomery64_2e338m15/CurveParameters.v
+src/Specific/montgomery64_2e338m15/Synthesis.v
+src/Specific/montgomery64_2e338m15/feadd.v
+src/Specific/montgomery64_2e338m15/feaddDisplay.v
+src/Specific/montgomery64_2e338m15/femul.v
+src/Specific/montgomery64_2e338m15/femulDisplay.v
+src/Specific/montgomery64_2e338m15/fenz.v
+src/Specific/montgomery64_2e338m15/fenzDisplay.v
+src/Specific/montgomery64_2e338m15/feopp.v
+src/Specific/montgomery64_2e338m15/feoppDisplay.v
+src/Specific/montgomery64_2e338m15/fesub.v
+src/Specific/montgomery64_2e338m15/fesubDisplay.v
+src/Specific/montgomery64_2e369m25/CurveParameters.v
+src/Specific/montgomery64_2e369m25/Synthesis.v
+src/Specific/montgomery64_2e369m25/feadd.v
+src/Specific/montgomery64_2e369m25/feaddDisplay.v
+src/Specific/montgomery64_2e369m25/femul.v
+src/Specific/montgomery64_2e369m25/femulDisplay.v
+src/Specific/montgomery64_2e369m25/fenz.v
+src/Specific/montgomery64_2e369m25/fenzDisplay.v
+src/Specific/montgomery64_2e369m25/feopp.v
+src/Specific/montgomery64_2e369m25/feoppDisplay.v
+src/Specific/montgomery64_2e369m25/fesub.v
+src/Specific/montgomery64_2e369m25/fesubDisplay.v
+src/Specific/montgomery64_2e379m19/CurveParameters.v
+src/Specific/montgomery64_2e379m19/Synthesis.v
+src/Specific/montgomery64_2e379m19/feadd.v
+src/Specific/montgomery64_2e379m19/feaddDisplay.v
+src/Specific/montgomery64_2e379m19/femul.v
+src/Specific/montgomery64_2e379m19/femulDisplay.v
+src/Specific/montgomery64_2e379m19/fenz.v
+src/Specific/montgomery64_2e379m19/fenzDisplay.v
+src/Specific/montgomery64_2e379m19/feopp.v
+src/Specific/montgomery64_2e379m19/feoppDisplay.v
+src/Specific/montgomery64_2e379m19/fesub.v
+src/Specific/montgomery64_2e379m19/fesubDisplay.v
+src/Specific/montgomery64_2e382m105/CurveParameters.v
+src/Specific/montgomery64_2e382m105/Synthesis.v
+src/Specific/montgomery64_2e382m105/feadd.v
+src/Specific/montgomery64_2e382m105/feaddDisplay.v
+src/Specific/montgomery64_2e382m105/femul.v
+src/Specific/montgomery64_2e382m105/femulDisplay.v
+src/Specific/montgomery64_2e382m105/fenz.v
+src/Specific/montgomery64_2e382m105/fenzDisplay.v
+src/Specific/montgomery64_2e382m105/feopp.v
+src/Specific/montgomery64_2e382m105/feoppDisplay.v
+src/Specific/montgomery64_2e382m105/fesub.v
+src/Specific/montgomery64_2e382m105/fesubDisplay.v
+src/Specific/montgomery64_2e383m187/CurveParameters.v
+src/Specific/montgomery64_2e383m187/Synthesis.v
+src/Specific/montgomery64_2e383m187/feadd.v
+src/Specific/montgomery64_2e383m187/feaddDisplay.v
+src/Specific/montgomery64_2e383m187/femul.v
+src/Specific/montgomery64_2e383m187/femulDisplay.v
+src/Specific/montgomery64_2e383m187/fenz.v
+src/Specific/montgomery64_2e383m187/fenzDisplay.v
+src/Specific/montgomery64_2e383m187/feopp.v
+src/Specific/montgomery64_2e383m187/feoppDisplay.v
+src/Specific/montgomery64_2e383m187/fesub.v
+src/Specific/montgomery64_2e383m187/fesubDisplay.v
+src/Specific/montgomery64_2e383m31/CurveParameters.v
+src/Specific/montgomery64_2e383m31/Synthesis.v
+src/Specific/montgomery64_2e383m31/feadd.v
+src/Specific/montgomery64_2e383m31/feaddDisplay.v
+src/Specific/montgomery64_2e383m31/femul.v
+src/Specific/montgomery64_2e383m31/femulDisplay.v
+src/Specific/montgomery64_2e383m31/fenz.v
+src/Specific/montgomery64_2e383m31/fenzDisplay.v
+src/Specific/montgomery64_2e383m31/feopp.v
+src/Specific/montgomery64_2e383m31/feoppDisplay.v
+src/Specific/montgomery64_2e383m31/fesub.v
+src/Specific/montgomery64_2e383m31/fesubDisplay.v
+src/Specific/montgomery64_2e383m421/CurveParameters.v
+src/Specific/montgomery64_2e383m421/Synthesis.v
+src/Specific/montgomery64_2e383m421/feadd.v
+src/Specific/montgomery64_2e383m421/feaddDisplay.v
+src/Specific/montgomery64_2e383m421/femul.v
+src/Specific/montgomery64_2e383m421/femulDisplay.v
+src/Specific/montgomery64_2e383m421/fenz.v
+src/Specific/montgomery64_2e383m421/fenzDisplay.v
+src/Specific/montgomery64_2e383m421/feopp.v
+src/Specific/montgomery64_2e383m421/feoppDisplay.v
+src/Specific/montgomery64_2e383m421/fesub.v
+src/Specific/montgomery64_2e383m421/fesubDisplay.v
+src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/CurveParameters.v
+src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/Synthesis.v
+src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feadd.v
+src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feaddDisplay.v
+src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/femul.v
+src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/femulDisplay.v
+src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fenz.v
+src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fenzDisplay.v
+src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feopp.v
+src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feoppDisplay.v
+src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fesub.v
+src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fesubDisplay.v
+src/Specific/montgomery64_2e384m317/CurveParameters.v
+src/Specific/montgomery64_2e384m317/Synthesis.v
+src/Specific/montgomery64_2e384m317/feadd.v
+src/Specific/montgomery64_2e384m317/feaddDisplay.v
+src/Specific/montgomery64_2e384m317/femul.v
+src/Specific/montgomery64_2e384m317/femulDisplay.v
+src/Specific/montgomery64_2e384m317/fenz.v
+src/Specific/montgomery64_2e384m317/fenzDisplay.v
+src/Specific/montgomery64_2e384m317/feopp.v
+src/Specific/montgomery64_2e384m317/feoppDisplay.v
+src/Specific/montgomery64_2e384m317/fesub.v
+src/Specific/montgomery64_2e384m317/fesubDisplay.v
+src/Specific/montgomery64_2e389m21/CurveParameters.v
+src/Specific/montgomery64_2e389m21/Synthesis.v
+src/Specific/montgomery64_2e389m21/feadd.v
+src/Specific/montgomery64_2e389m21/feaddDisplay.v
+src/Specific/montgomery64_2e389m21/femul.v
+src/Specific/montgomery64_2e389m21/femulDisplay.v
+src/Specific/montgomery64_2e389m21/fenz.v
+src/Specific/montgomery64_2e389m21/fenzDisplay.v
+src/Specific/montgomery64_2e389m21/feopp.v
+src/Specific/montgomery64_2e389m21/feoppDisplay.v
+src/Specific/montgomery64_2e389m21/fesub.v
+src/Specific/montgomery64_2e389m21/fesubDisplay.v
+src/Specific/montgomery64_2e401m31/CurveParameters.v
+src/Specific/montgomery64_2e401m31/Synthesis.v
+src/Specific/montgomery64_2e401m31/feadd.v
+src/Specific/montgomery64_2e401m31/feaddDisplay.v
+src/Specific/montgomery64_2e401m31/femul.v
+src/Specific/montgomery64_2e401m31/femulDisplay.v
+src/Specific/montgomery64_2e401m31/fenz.v
+src/Specific/montgomery64_2e401m31/fenzDisplay.v
+src/Specific/montgomery64_2e401m31/feopp.v
+src/Specific/montgomery64_2e401m31/feoppDisplay.v
+src/Specific/montgomery64_2e401m31/fesub.v
+src/Specific/montgomery64_2e401m31/fesubDisplay.v
+src/Specific/montgomery64_2e413m21/CurveParameters.v
+src/Specific/montgomery64_2e413m21/Synthesis.v
+src/Specific/montgomery64_2e413m21/feadd.v
+src/Specific/montgomery64_2e413m21/feaddDisplay.v
+src/Specific/montgomery64_2e413m21/femul.v
+src/Specific/montgomery64_2e413m21/femulDisplay.v
+src/Specific/montgomery64_2e413m21/fenz.v
+src/Specific/montgomery64_2e413m21/fenzDisplay.v
+src/Specific/montgomery64_2e413m21/feopp.v
+src/Specific/montgomery64_2e413m21/feoppDisplay.v
+src/Specific/montgomery64_2e413m21/fesub.v
+src/Specific/montgomery64_2e413m21/fesubDisplay.v
+src/Specific/montgomery64_2e414m17/CurveParameters.v
+src/Specific/montgomery64_2e414m17/Synthesis.v
+src/Specific/montgomery64_2e414m17/feadd.v
+src/Specific/montgomery64_2e414m17/feaddDisplay.v
+src/Specific/montgomery64_2e414m17/femul.v
+src/Specific/montgomery64_2e414m17/femulDisplay.v
+src/Specific/montgomery64_2e414m17/fenz.v
+src/Specific/montgomery64_2e414m17/fenzDisplay.v
+src/Specific/montgomery64_2e414m17/feopp.v
+src/Specific/montgomery64_2e414m17/feoppDisplay.v
+src/Specific/montgomery64_2e414m17/fesub.v
+src/Specific/montgomery64_2e414m17/fesubDisplay.v
+src/Specific/montgomery64_2e416m2e208m1/CurveParameters.v
+src/Specific/montgomery64_2e416m2e208m1/Synthesis.v
+src/Specific/montgomery64_2e416m2e208m1/feadd.v
+src/Specific/montgomery64_2e416m2e208m1/feaddDisplay.v
+src/Specific/montgomery64_2e416m2e208m1/femul.v
+src/Specific/montgomery64_2e416m2e208m1/femulDisplay.v
+src/Specific/montgomery64_2e416m2e208m1/fenz.v
+src/Specific/montgomery64_2e416m2e208m1/fenzDisplay.v
+src/Specific/montgomery64_2e416m2e208m1/feopp.v
+src/Specific/montgomery64_2e416m2e208m1/feoppDisplay.v
+src/Specific/montgomery64_2e416m2e208m1/fesub.v
+src/Specific/montgomery64_2e416m2e208m1/fesubDisplay.v
+src/Specific/montgomery64_2e444m17/CurveParameters.v
+src/Specific/montgomery64_2e444m17/Synthesis.v
+src/Specific/montgomery64_2e444m17/feadd.v
+src/Specific/montgomery64_2e444m17/feaddDisplay.v
+src/Specific/montgomery64_2e444m17/femul.v
+src/Specific/montgomery64_2e444m17/femulDisplay.v
+src/Specific/montgomery64_2e444m17/fenz.v
+src/Specific/montgomery64_2e444m17/fenzDisplay.v
+src/Specific/montgomery64_2e444m17/feopp.v
+src/Specific/montgomery64_2e444m17/feoppDisplay.v
+src/Specific/montgomery64_2e444m17/fesub.v
+src/Specific/montgomery64_2e444m17/fesubDisplay.v
+src/Specific/montgomery64_2e448m2e224m1/CurveParameters.v
+src/Specific/montgomery64_2e448m2e224m1/Synthesis.v
+src/Specific/montgomery64_2e448m2e224m1/feadd.v
+src/Specific/montgomery64_2e448m2e224m1/feaddDisplay.v
+src/Specific/montgomery64_2e448m2e224m1/femul.v
+src/Specific/montgomery64_2e448m2e224m1/femulDisplay.v
+src/Specific/montgomery64_2e448m2e224m1/fenz.v
+src/Specific/montgomery64_2e448m2e224m1/fenzDisplay.v
+src/Specific/montgomery64_2e448m2e224m1/feopp.v
+src/Specific/montgomery64_2e448m2e224m1/feoppDisplay.v
+src/Specific/montgomery64_2e448m2e224m1/fesub.v
+src/Specific/montgomery64_2e448m2e224m1/fesubDisplay.v
+src/Specific/montgomery64_2e450m2e225m1/CurveParameters.v
+src/Specific/montgomery64_2e450m2e225m1/Synthesis.v
+src/Specific/montgomery64_2e450m2e225m1/feadd.v
+src/Specific/montgomery64_2e450m2e225m1/feaddDisplay.v
+src/Specific/montgomery64_2e450m2e225m1/femul.v
+src/Specific/montgomery64_2e450m2e225m1/femulDisplay.v
+src/Specific/montgomery64_2e450m2e225m1/fenz.v
+src/Specific/montgomery64_2e450m2e225m1/fenzDisplay.v
+src/Specific/montgomery64_2e450m2e225m1/feopp.v
+src/Specific/montgomery64_2e450m2e225m1/feoppDisplay.v
+src/Specific/montgomery64_2e450m2e225m1/fesub.v
+src/Specific/montgomery64_2e450m2e225m1/fesubDisplay.v
+src/Specific/montgomery64_2e452m3/CurveParameters.v
+src/Specific/montgomery64_2e452m3/Synthesis.v
+src/Specific/montgomery64_2e452m3/feadd.v
+src/Specific/montgomery64_2e452m3/feaddDisplay.v
+src/Specific/montgomery64_2e452m3/femul.v
+src/Specific/montgomery64_2e452m3/femulDisplay.v
+src/Specific/montgomery64_2e452m3/fenz.v
+src/Specific/montgomery64_2e452m3/fenzDisplay.v
+src/Specific/montgomery64_2e452m3/feopp.v
+src/Specific/montgomery64_2e452m3/feoppDisplay.v
+src/Specific/montgomery64_2e452m3/fesub.v
+src/Specific/montgomery64_2e452m3/fesubDisplay.v
+src/Specific/montgomery64_2e468m17/CurveParameters.v
+src/Specific/montgomery64_2e468m17/Synthesis.v
+src/Specific/montgomery64_2e468m17/feadd.v
+src/Specific/montgomery64_2e468m17/feaddDisplay.v
+src/Specific/montgomery64_2e468m17/femul.v
+src/Specific/montgomery64_2e468m17/femulDisplay.v
+src/Specific/montgomery64_2e468m17/fenz.v
+src/Specific/montgomery64_2e468m17/fenzDisplay.v
+src/Specific/montgomery64_2e468m17/feopp.v
+src/Specific/montgomery64_2e468m17/feoppDisplay.v
+src/Specific/montgomery64_2e468m17/fesub.v
+src/Specific/montgomery64_2e468m17/fesubDisplay.v
+src/Specific/montgomery64_2e480m2e240m1/CurveParameters.v
+src/Specific/montgomery64_2e480m2e240m1/Synthesis.v
+src/Specific/montgomery64_2e480m2e240m1/feadd.v
+src/Specific/montgomery64_2e480m2e240m1/feaddDisplay.v
+src/Specific/montgomery64_2e480m2e240m1/femul.v
+src/Specific/montgomery64_2e480m2e240m1/femulDisplay.v
+src/Specific/montgomery64_2e480m2e240m1/fenz.v
+src/Specific/montgomery64_2e480m2e240m1/fenzDisplay.v
+src/Specific/montgomery64_2e480m2e240m1/feopp.v
+src/Specific/montgomery64_2e480m2e240m1/feoppDisplay.v
+src/Specific/montgomery64_2e480m2e240m1/fesub.v
+src/Specific/montgomery64_2e480m2e240m1/fesubDisplay.v
+src/Specific/montgomery64_2e488m17/CurveParameters.v
+src/Specific/montgomery64_2e488m17/Synthesis.v
+src/Specific/montgomery64_2e488m17/feadd.v
+src/Specific/montgomery64_2e488m17/feaddDisplay.v
+src/Specific/montgomery64_2e488m17/femul.v
+src/Specific/montgomery64_2e488m17/femulDisplay.v
+src/Specific/montgomery64_2e488m17/fenz.v
+src/Specific/montgomery64_2e488m17/fenzDisplay.v
+src/Specific/montgomery64_2e488m17/feopp.v
+src/Specific/montgomery64_2e488m17/feoppDisplay.v
+src/Specific/montgomery64_2e488m17/fesub.v
+src/Specific/montgomery64_2e488m17/fesubDisplay.v
+src/Specific/montgomery64_2e489m21/CurveParameters.v
+src/Specific/montgomery64_2e489m21/Synthesis.v
+src/Specific/montgomery64_2e489m21/feadd.v
+src/Specific/montgomery64_2e489m21/feaddDisplay.v
+src/Specific/montgomery64_2e489m21/femul.v
+src/Specific/montgomery64_2e489m21/femulDisplay.v
+src/Specific/montgomery64_2e489m21/fenz.v
+src/Specific/montgomery64_2e489m21/fenzDisplay.v
+src/Specific/montgomery64_2e489m21/feopp.v
+src/Specific/montgomery64_2e489m21/feoppDisplay.v
+src/Specific/montgomery64_2e489m21/fesub.v
+src/Specific/montgomery64_2e489m21/fesubDisplay.v
+src/Specific/montgomery64_2e495m31/CurveParameters.v
+src/Specific/montgomery64_2e495m31/Synthesis.v
+src/Specific/montgomery64_2e495m31/feadd.v
+src/Specific/montgomery64_2e495m31/feaddDisplay.v
+src/Specific/montgomery64_2e495m31/femul.v
+src/Specific/montgomery64_2e495m31/femulDisplay.v
+src/Specific/montgomery64_2e495m31/fenz.v
+src/Specific/montgomery64_2e495m31/fenzDisplay.v
+src/Specific/montgomery64_2e495m31/feopp.v
+src/Specific/montgomery64_2e495m31/feoppDisplay.v
+src/Specific/montgomery64_2e495m31/fesub.v
+src/Specific/montgomery64_2e495m31/fesubDisplay.v
+src/Specific/montgomery64_2e511m187/CurveParameters.v
+src/Specific/montgomery64_2e511m187/Synthesis.v
+src/Specific/montgomery64_2e511m187/feadd.v
+src/Specific/montgomery64_2e511m187/feaddDisplay.v
+src/Specific/montgomery64_2e511m187/femul.v
+src/Specific/montgomery64_2e511m187/femulDisplay.v
+src/Specific/montgomery64_2e511m187/fenz.v
+src/Specific/montgomery64_2e511m187/fenzDisplay.v
+src/Specific/montgomery64_2e511m187/feopp.v
+src/Specific/montgomery64_2e511m187/feoppDisplay.v
+src/Specific/montgomery64_2e511m187/fesub.v
+src/Specific/montgomery64_2e511m187/fesubDisplay.v
+src/Specific/montgomery64_2e511m481/CurveParameters.v
+src/Specific/montgomery64_2e511m481/Synthesis.v
+src/Specific/montgomery64_2e511m481/feadd.v
+src/Specific/montgomery64_2e511m481/feaddDisplay.v
+src/Specific/montgomery64_2e511m481/femul.v
+src/Specific/montgomery64_2e511m481/femulDisplay.v
+src/Specific/montgomery64_2e511m481/fenz.v
+src/Specific/montgomery64_2e511m481/fenzDisplay.v
+src/Specific/montgomery64_2e511m481/feopp.v
+src/Specific/montgomery64_2e511m481/feoppDisplay.v
+src/Specific/montgomery64_2e511m481/fesub.v
+src/Specific/montgomery64_2e511m481/fesubDisplay.v
+src/Specific/montgomery64_2e512m569/CurveParameters.v
+src/Specific/montgomery64_2e512m569/Synthesis.v
+src/Specific/montgomery64_2e512m569/feadd.v
+src/Specific/montgomery64_2e512m569/feaddDisplay.v
+src/Specific/montgomery64_2e512m569/femul.v
+src/Specific/montgomery64_2e512m569/femulDisplay.v
+src/Specific/montgomery64_2e512m569/fenz.v
+src/Specific/montgomery64_2e512m569/fenzDisplay.v
+src/Specific/montgomery64_2e512m569/feopp.v
+src/Specific/montgomery64_2e512m569/feoppDisplay.v
+src/Specific/montgomery64_2e512m569/fesub.v
+src/Specific/montgomery64_2e512m569/fesubDisplay.v
+src/Specific/montgomery64_2e521m1/CurveParameters.v
+src/Specific/montgomery64_2e521m1/Synthesis.v
+src/Specific/montgomery64_2e521m1/feadd.v
+src/Specific/montgomery64_2e521m1/feaddDisplay.v
+src/Specific/montgomery64_2e521m1/femul.v
+src/Specific/montgomery64_2e521m1/femulDisplay.v
+src/Specific/montgomery64_2e521m1/fenz.v
+src/Specific/montgomery64_2e521m1/fenzDisplay.v
+src/Specific/montgomery64_2e521m1/feopp.v
+src/Specific/montgomery64_2e521m1/feoppDisplay.v
+src/Specific/montgomery64_2e521m1/fesub.v
+src/Specific/montgomery64_2e521m1/fesubDisplay.v
+src/Specific/solinas32_2e127m1/CurveParameters.v
+src/Specific/solinas32_2e127m1/Synthesis.v
+src/Specific/solinas32_2e127m1/femul.v
+src/Specific/solinas32_2e127m1/femulDisplay.v
+src/Specific/solinas32_2e127m1/fesquare.v
+src/Specific/solinas32_2e127m1/fesquareDisplay.v
+src/Specific/solinas32_2e127m1/freeze.v
+src/Specific/solinas32_2e127m1/freezeDisplay.v
+src/Specific/solinas32_2e129m25/CurveParameters.v
+src/Specific/solinas32_2e129m25/Synthesis.v
+src/Specific/solinas32_2e129m25/femul.v
+src/Specific/solinas32_2e129m25/femulDisplay.v
+src/Specific/solinas32_2e129m25/fesquare.v
+src/Specific/solinas32_2e129m25/fesquareDisplay.v
+src/Specific/solinas32_2e129m25/freeze.v
+src/Specific/solinas32_2e129m25/freezeDisplay.v
+src/Specific/solinas32_2e130m5/CurveParameters.v
+src/Specific/solinas32_2e130m5/Synthesis.v
+src/Specific/solinas32_2e130m5/femul.v
+src/Specific/solinas32_2e130m5/femulDisplay.v
+src/Specific/solinas32_2e130m5/fesquare.v
+src/Specific/solinas32_2e130m5/fesquareDisplay.v
+src/Specific/solinas32_2e130m5/freeze.v
+src/Specific/solinas32_2e130m5/freezeDisplay.v
+src/Specific/solinas32_2e137m13/CurveParameters.v
+src/Specific/solinas32_2e137m13/Synthesis.v
+src/Specific/solinas32_2e137m13/femul.v
+src/Specific/solinas32_2e137m13/femulDisplay.v
+src/Specific/solinas32_2e137m13/fesquare.v
+src/Specific/solinas32_2e137m13/fesquareDisplay.v
+src/Specific/solinas32_2e137m13/freeze.v
+src/Specific/solinas32_2e137m13/freezeDisplay.v
+src/Specific/solinas32_2e140m27/CurveParameters.v
+src/Specific/solinas32_2e140m27/Synthesis.v
+src/Specific/solinas32_2e140m27/femul.v
+src/Specific/solinas32_2e140m27/femulDisplay.v
+src/Specific/solinas32_2e140m27/fesquare.v
+src/Specific/solinas32_2e140m27/fesquareDisplay.v
+src/Specific/solinas32_2e140m27/freeze.v
+src/Specific/solinas32_2e140m27/freezeDisplay.v
+src/Specific/solinas32_2e141m9/CurveParameters.v
+src/Specific/solinas32_2e141m9/Synthesis.v
+src/Specific/solinas32_2e141m9/femul.v
+src/Specific/solinas32_2e141m9/femulDisplay.v
+src/Specific/solinas32_2e141m9/fesquare.v
+src/Specific/solinas32_2e141m9/fesquareDisplay.v
+src/Specific/solinas32_2e141m9/freeze.v
+src/Specific/solinas32_2e141m9/freezeDisplay.v
+src/Specific/solinas32_2e150m3/CurveParameters.v
+src/Specific/solinas32_2e150m3/Synthesis.v
+src/Specific/solinas32_2e150m3/femul.v
+src/Specific/solinas32_2e150m3/femulDisplay.v
+src/Specific/solinas32_2e150m3/fesquare.v
+src/Specific/solinas32_2e150m3/fesquareDisplay.v
+src/Specific/solinas32_2e150m3/freeze.v
+src/Specific/solinas32_2e150m3/freezeDisplay.v
+src/Specific/solinas32_2e150m5/CurveParameters.v
+src/Specific/solinas32_2e150m5/Synthesis.v
+src/Specific/solinas32_2e150m5/femul.v
+src/Specific/solinas32_2e150m5/femulDisplay.v
+src/Specific/solinas32_2e150m5/fesquare.v
+src/Specific/solinas32_2e150m5/fesquareDisplay.v
+src/Specific/solinas32_2e150m5/freeze.v
+src/Specific/solinas32_2e150m5/freezeDisplay.v
+src/Specific/solinas32_2e152m17/CurveParameters.v
+src/Specific/solinas32_2e152m17/Synthesis.v
+src/Specific/solinas32_2e152m17/femul.v
+src/Specific/solinas32_2e152m17/femulDisplay.v
+src/Specific/solinas32_2e152m17/fesquare.v
+src/Specific/solinas32_2e152m17/fesquareDisplay.v
+src/Specific/solinas32_2e152m17/freeze.v
+src/Specific/solinas32_2e152m17/freezeDisplay.v
+src/Specific/solinas32_2e158m15/CurveParameters.v
+src/Specific/solinas32_2e158m15/Synthesis.v
+src/Specific/solinas32_2e158m15/femul.v
+src/Specific/solinas32_2e158m15/femulDisplay.v
+src/Specific/solinas32_2e158m15/fesquare.v
+src/Specific/solinas32_2e158m15/fesquareDisplay.v
+src/Specific/solinas32_2e158m15/freeze.v
+src/Specific/solinas32_2e158m15/freezeDisplay.v
+src/Specific/solinas32_2e165m25/CurveParameters.v
+src/Specific/solinas32_2e165m25/Synthesis.v
+src/Specific/solinas32_2e165m25/femul.v
+src/Specific/solinas32_2e165m25/femulDisplay.v
+src/Specific/solinas32_2e165m25/fesquare.v
+src/Specific/solinas32_2e165m25/fesquareDisplay.v
+src/Specific/solinas32_2e165m25/freeze.v
+src/Specific/solinas32_2e165m25/freezeDisplay.v
+src/Specific/solinas32_2e166m5/CurveParameters.v
+src/Specific/solinas32_2e166m5/Synthesis.v
+src/Specific/solinas32_2e166m5/femul.v
+src/Specific/solinas32_2e166m5/femulDisplay.v
+src/Specific/solinas32_2e166m5/fesquare.v
+src/Specific/solinas32_2e166m5/fesquareDisplay.v
+src/Specific/solinas32_2e166m5/freeze.v
+src/Specific/solinas32_2e166m5/freezeDisplay.v
+src/Specific/solinas32_2e171m19/CurveParameters.v
+src/Specific/solinas32_2e171m19/Synthesis.v
+src/Specific/solinas32_2e171m19/femul.v
+src/Specific/solinas32_2e171m19/femulDisplay.v
+src/Specific/solinas32_2e171m19/fesquare.v
+src/Specific/solinas32_2e171m19/fesquareDisplay.v
+src/Specific/solinas32_2e171m19/freeze.v
+src/Specific/solinas32_2e171m19/freezeDisplay.v
+src/Specific/solinas32_2e174m17/CurveParameters.v
+src/Specific/solinas32_2e174m17/Synthesis.v
+src/Specific/solinas32_2e174m17/femul.v
+src/Specific/solinas32_2e174m17/femulDisplay.v
+src/Specific/solinas32_2e174m17/fesquare.v
+src/Specific/solinas32_2e174m17/fesquareDisplay.v
+src/Specific/solinas32_2e174m17/freeze.v
+src/Specific/solinas32_2e174m17/freezeDisplay.v
+src/Specific/solinas32_2e174m3/CurveParameters.v
+src/Specific/solinas32_2e174m3/Synthesis.v
+src/Specific/solinas32_2e174m3/femul.v
+src/Specific/solinas32_2e174m3/femulDisplay.v
+src/Specific/solinas32_2e174m3/fesquare.v
+src/Specific/solinas32_2e174m3/fesquareDisplay.v
+src/Specific/solinas32_2e174m3/freeze.v
+src/Specific/solinas32_2e174m3/freezeDisplay.v
+src/Specific/solinas32_2e189m25/CurveParameters.v
+src/Specific/solinas32_2e189m25/Synthesis.v
+src/Specific/solinas32_2e189m25/femul.v
+src/Specific/solinas32_2e189m25/femulDisplay.v
+src/Specific/solinas32_2e189m25/fesquare.v
+src/Specific/solinas32_2e189m25/fesquareDisplay.v
+src/Specific/solinas32_2e189m25/freeze.v
+src/Specific/solinas32_2e189m25/freezeDisplay.v
+src/Specific/solinas32_2e190m11/CurveParameters.v
+src/Specific/solinas32_2e190m11/Synthesis.v
+src/Specific/solinas32_2e190m11/femul.v
+src/Specific/solinas32_2e190m11/femulDisplay.v
+src/Specific/solinas32_2e190m11/fesquare.v
+src/Specific/solinas32_2e190m11/fesquareDisplay.v
+src/Specific/solinas32_2e190m11/freeze.v
+src/Specific/solinas32_2e190m11/freezeDisplay.v
+src/Specific/solinas32_2e191m19/CurveParameters.v
+src/Specific/solinas32_2e191m19/Synthesis.v
+src/Specific/solinas32_2e191m19/femul.v
+src/Specific/solinas32_2e191m19/femulDisplay.v
+src/Specific/solinas32_2e191m19/fesquare.v
+src/Specific/solinas32_2e191m19/fesquareDisplay.v
+src/Specific/solinas32_2e191m19/freeze.v
+src/Specific/solinas32_2e191m19/freezeDisplay.v
+src/Specific/solinas32_2e192m2e64m1/CurveParameters.v
+src/Specific/solinas32_2e192m2e64m1/Synthesis.v
+src/Specific/solinas32_2e192m2e64m1/femul.v
+src/Specific/solinas32_2e192m2e64m1/femulDisplay.v
+src/Specific/solinas32_2e192m2e64m1/fesquare.v
+src/Specific/solinas32_2e192m2e64m1/fesquareDisplay.v
+src/Specific/solinas32_2e192m2e64m1/freeze.v
+src/Specific/solinas32_2e192m2e64m1/freezeDisplay.v
+src/Specific/solinas32_2e194m33/CurveParameters.v
+src/Specific/solinas32_2e194m33/Synthesis.v
+src/Specific/solinas32_2e194m33/femul.v
+src/Specific/solinas32_2e194m33/femulDisplay.v
+src/Specific/solinas32_2e194m33/fesquare.v
+src/Specific/solinas32_2e194m33/fesquareDisplay.v
+src/Specific/solinas32_2e194m33/freeze.v
+src/Specific/solinas32_2e194m33/freezeDisplay.v
+src/Specific/solinas32_2e196m15/CurveParameters.v
+src/Specific/solinas32_2e196m15/Synthesis.v
+src/Specific/solinas32_2e196m15/femul.v
+src/Specific/solinas32_2e196m15/femulDisplay.v
+src/Specific/solinas32_2e196m15/fesquare.v
+src/Specific/solinas32_2e196m15/fesquareDisplay.v
+src/Specific/solinas32_2e196m15/freeze.v
+src/Specific/solinas32_2e196m15/freezeDisplay.v
+src/Specific/solinas32_2e198m17/CurveParameters.v
+src/Specific/solinas32_2e198m17/Synthesis.v
+src/Specific/solinas32_2e198m17/femul.v
+src/Specific/solinas32_2e198m17/femulDisplay.v
+src/Specific/solinas32_2e198m17/fesquare.v
+src/Specific/solinas32_2e198m17/fesquareDisplay.v
+src/Specific/solinas32_2e198m17/freeze.v
+src/Specific/solinas32_2e198m17/freezeDisplay.v
+src/Specific/solinas32_2e206m5/CurveParameters.v
+src/Specific/solinas32_2e206m5/Synthesis.v
+src/Specific/solinas32_2e206m5/femul.v
+src/Specific/solinas32_2e206m5/femulDisplay.v
+src/Specific/solinas32_2e206m5/fesquare.v
+src/Specific/solinas32_2e206m5/fesquareDisplay.v
+src/Specific/solinas32_2e206m5/freeze.v
+src/Specific/solinas32_2e206m5/freezeDisplay.v
+src/Specific/solinas32_2e212m29/CurveParameters.v
+src/Specific/solinas32_2e212m29/Synthesis.v
+src/Specific/solinas32_2e212m29/femul.v
+src/Specific/solinas32_2e212m29/femulDisplay.v
+src/Specific/solinas32_2e212m29/fesquare.v
+src/Specific/solinas32_2e212m29/fesquareDisplay.v
+src/Specific/solinas32_2e212m29/freeze.v
+src/Specific/solinas32_2e212m29/freezeDisplay.v
+src/Specific/solinas32_2e213m3/CurveParameters.v
+src/Specific/solinas32_2e213m3/Synthesis.v
+src/Specific/solinas32_2e213m3/femul.v
+src/Specific/solinas32_2e213m3/femulDisplay.v
+src/Specific/solinas32_2e213m3/fesquare.v
+src/Specific/solinas32_2e213m3/fesquareDisplay.v
+src/Specific/solinas32_2e213m3/freeze.v
+src/Specific/solinas32_2e213m3/freezeDisplay.v
+src/Specific/solinas32_2e216m2e108m1/CurveParameters.v
+src/Specific/solinas32_2e216m2e108m1/Synthesis.v
+src/Specific/solinas32_2e216m2e108m1/femul.v
+src/Specific/solinas32_2e216m2e108m1/femulDisplay.v
+src/Specific/solinas32_2e216m2e108m1/fesquare.v
+src/Specific/solinas32_2e216m2e108m1/fesquareDisplay.v
+src/Specific/solinas32_2e216m2e108m1/freeze.v
+src/Specific/solinas32_2e216m2e108m1/freezeDisplay.v
+src/Specific/solinas32_2e221m3/CurveParameters.v
+src/Specific/solinas32_2e221m3/Synthesis.v
+src/Specific/solinas32_2e221m3/femul.v
+src/Specific/solinas32_2e221m3/femulDisplay.v
+src/Specific/solinas32_2e221m3/fesquare.v
+src/Specific/solinas32_2e221m3/fesquareDisplay.v
+src/Specific/solinas32_2e221m3/freeze.v
+src/Specific/solinas32_2e221m3/freezeDisplay.v
+src/Specific/solinas32_2e222m117/CurveParameters.v
+src/Specific/solinas32_2e222m117/Synthesis.v
+src/Specific/solinas32_2e222m117/femul.v
+src/Specific/solinas32_2e222m117/femulDisplay.v
+src/Specific/solinas32_2e222m117/fesquare.v
+src/Specific/solinas32_2e222m117/fesquareDisplay.v
+src/Specific/solinas32_2e222m117/freeze.v
+src/Specific/solinas32_2e222m117/freezeDisplay.v
+src/Specific/solinas32_2e224m2e96p1/CurveParameters.v
+src/Specific/solinas32_2e224m2e96p1/Synthesis.v
+src/Specific/solinas32_2e224m2e96p1/femul.v
+src/Specific/solinas32_2e224m2e96p1/femulDisplay.v
+src/Specific/solinas32_2e224m2e96p1/fesquare.v
+src/Specific/solinas32_2e224m2e96p1/fesquareDisplay.v
+src/Specific/solinas32_2e224m2e96p1/freeze.v
+src/Specific/solinas32_2e224m2e96p1/freezeDisplay.v
+src/Specific/solinas32_2e226m5/CurveParameters.v
+src/Specific/solinas32_2e226m5/Synthesis.v
+src/Specific/solinas32_2e226m5/femul.v
+src/Specific/solinas32_2e226m5/femulDisplay.v
+src/Specific/solinas32_2e226m5/fesquare.v
+src/Specific/solinas32_2e226m5/fesquareDisplay.v
+src/Specific/solinas32_2e226m5/freeze.v
+src/Specific/solinas32_2e226m5/freezeDisplay.v
+src/Specific/solinas32_2e230m27/CurveParameters.v
+src/Specific/solinas32_2e230m27/Synthesis.v
+src/Specific/solinas32_2e230m27/femul.v
+src/Specific/solinas32_2e230m27/femulDisplay.v
+src/Specific/solinas32_2e230m27/fesquare.v
+src/Specific/solinas32_2e230m27/fesquareDisplay.v
+src/Specific/solinas32_2e230m27/freeze.v
+src/Specific/solinas32_2e230m27/freezeDisplay.v
+src/Specific/solinas32_2e235m15/CurveParameters.v
+src/Specific/solinas32_2e235m15/Synthesis.v
+src/Specific/solinas32_2e235m15/femul.v
+src/Specific/solinas32_2e235m15/femulDisplay.v
+src/Specific/solinas32_2e235m15/fesquare.v
+src/Specific/solinas32_2e235m15/fesquareDisplay.v
+src/Specific/solinas32_2e235m15/freeze.v
+src/Specific/solinas32_2e235m15/freezeDisplay.v
+src/Specific/solinas32_2e243m9/CurveParameters.v
+src/Specific/solinas32_2e243m9/Synthesis.v
+src/Specific/solinas32_2e243m9/femul.v
+src/Specific/solinas32_2e243m9/femulDisplay.v
+src/Specific/solinas32_2e243m9/fesquare.v
+src/Specific/solinas32_2e243m9/fesquareDisplay.v
+src/Specific/solinas32_2e243m9/freeze.v
+src/Specific/solinas32_2e243m9/freezeDisplay.v
+src/Specific/solinas32_2e251m9/CurveParameters.v
+src/Specific/solinas32_2e251m9/Synthesis.v
+src/Specific/solinas32_2e251m9/femul.v
+src/Specific/solinas32_2e251m9/femulDisplay.v
+src/Specific/solinas32_2e251m9/fesquare.v
+src/Specific/solinas32_2e251m9/fesquareDisplay.v
+src/Specific/solinas32_2e251m9/freeze.v
+src/Specific/solinas32_2e251m9/freezeDisplay.v
+src/Specific/solinas32_2e255m19/CurveParameters.v
+src/Specific/solinas32_2e255m19/Synthesis.v
+src/Specific/solinas32_2e255m19/femul.v
+src/Specific/solinas32_2e255m19/femulDisplay.v
+src/Specific/solinas32_2e255m19/fesquare.v
+src/Specific/solinas32_2e255m19/fesquareDisplay.v
+src/Specific/solinas32_2e255m19/freeze.v
+src/Specific/solinas32_2e255m19/freezeDisplay.v
+src/Specific/solinas32_2e255m2e4m2e1m1/CurveParameters.v
+src/Specific/solinas32_2e255m2e4m2e1m1/Synthesis.v
+src/Specific/solinas32_2e255m2e4m2e1m1/femul.v
+src/Specific/solinas32_2e255m2e4m2e1m1/femulDisplay.v
+src/Specific/solinas32_2e255m2e4m2e1m1/fesquare.v
+src/Specific/solinas32_2e255m2e4m2e1m1/fesquareDisplay.v
+src/Specific/solinas32_2e255m2e4m2e1m1/freeze.v
+src/Specific/solinas32_2e255m2e4m2e1m1/freezeDisplay.v
+src/Specific/solinas32_2e255m765/CurveParameters.v
+src/Specific/solinas32_2e255m765/Synthesis.v
+src/Specific/solinas32_2e255m765/femul.v
+src/Specific/solinas32_2e255m765/femulDisplay.v
+src/Specific/solinas32_2e255m765/fesquare.v
+src/Specific/solinas32_2e255m765/fesquareDisplay.v
+src/Specific/solinas32_2e255m765/freeze.v
+src/Specific/solinas32_2e255m765/freezeDisplay.v
+src/Specific/solinas32_2e256m189/CurveParameters.v
+src/Specific/solinas32_2e256m189/Synthesis.v
+src/Specific/solinas32_2e256m189/femul.v
+src/Specific/solinas32_2e256m189/femulDisplay.v
+src/Specific/solinas32_2e256m189/fesquare.v
+src/Specific/solinas32_2e256m189/fesquareDisplay.v
+src/Specific/solinas32_2e256m189/freeze.v
+src/Specific/solinas32_2e256m189/freezeDisplay.v
+src/Specific/solinas32_2e256m2e224p2e192p2e96m1/CurveParameters.v
+src/Specific/solinas32_2e256m2e224p2e192p2e96m1/Synthesis.v
+src/Specific/solinas32_2e256m2e224p2e192p2e96m1/femul.v
+src/Specific/solinas32_2e256m2e224p2e192p2e96m1/femulDisplay.v
+src/Specific/solinas32_2e256m2e224p2e192p2e96m1/fesquare.v
+src/Specific/solinas32_2e256m2e224p2e192p2e96m1/fesquareDisplay.v
+src/Specific/solinas32_2e256m2e224p2e192p2e96m1/freeze.v
+src/Specific/solinas32_2e256m2e224p2e192p2e96m1/freezeDisplay.v
+src/Specific/solinas32_2e256m2e32m977/CurveParameters.v
+src/Specific/solinas32_2e256m2e32m977/Synthesis.v
+src/Specific/solinas32_2e256m2e32m977/femul.v
+src/Specific/solinas32_2e256m2e32m977/femulDisplay.v
+src/Specific/solinas32_2e256m2e32m977/fesquare.v
+src/Specific/solinas32_2e256m2e32m977/fesquareDisplay.v
+src/Specific/solinas32_2e256m2e32m977/freeze.v
+src/Specific/solinas32_2e256m2e32m977/freezeDisplay.v
+src/Specific/solinas32_2e266m3/CurveParameters.v
+src/Specific/solinas32_2e266m3/Synthesis.v
+src/Specific/solinas32_2e266m3/femul.v
+src/Specific/solinas32_2e266m3/femulDisplay.v
+src/Specific/solinas32_2e266m3/fesquare.v
+src/Specific/solinas32_2e266m3/fesquareDisplay.v
+src/Specific/solinas32_2e266m3/freeze.v
+src/Specific/solinas32_2e266m3/freezeDisplay.v
+src/Specific/solinas32_2e285m9/CurveParameters.v
+src/Specific/solinas32_2e285m9/Synthesis.v
+src/Specific/solinas32_2e285m9/femul.v
+src/Specific/solinas32_2e285m9/femulDisplay.v
+src/Specific/solinas32_2e285m9/fesquare.v
+src/Specific/solinas32_2e285m9/fesquareDisplay.v
+src/Specific/solinas32_2e285m9/freeze.v
+src/Specific/solinas32_2e285m9/freezeDisplay.v
+src/Specific/solinas32_2e291m19/CurveParameters.v
+src/Specific/solinas32_2e291m19/Synthesis.v
+src/Specific/solinas32_2e291m19/femul.v
+src/Specific/solinas32_2e291m19/femulDisplay.v
+src/Specific/solinas32_2e291m19/fesquare.v
+src/Specific/solinas32_2e291m19/fesquareDisplay.v
+src/Specific/solinas32_2e291m19/freeze.v
+src/Specific/solinas32_2e291m19/freezeDisplay.v
+src/Specific/solinas32_2e321m9/CurveParameters.v
+src/Specific/solinas32_2e321m9/Synthesis.v
+src/Specific/solinas32_2e321m9/femul.v
+src/Specific/solinas32_2e321m9/femulDisplay.v
+src/Specific/solinas32_2e321m9/fesquare.v
+src/Specific/solinas32_2e321m9/fesquareDisplay.v
+src/Specific/solinas32_2e321m9/freeze.v
+src/Specific/solinas32_2e321m9/freezeDisplay.v
+src/Specific/solinas32_2e322m2e161m1/CurveParameters.v
+src/Specific/solinas32_2e322m2e161m1/Synthesis.v
+src/Specific/solinas32_2e322m2e161m1/femul.v
+src/Specific/solinas32_2e322m2e161m1/femulDisplay.v
+src/Specific/solinas32_2e322m2e161m1/fesquare.v
+src/Specific/solinas32_2e322m2e161m1/fesquareDisplay.v
+src/Specific/solinas32_2e322m2e161m1/freeze.v
+src/Specific/solinas32_2e322m2e161m1/freezeDisplay.v
+src/Specific/solinas32_2e336m17/CurveParameters.v
+src/Specific/solinas32_2e336m17/Synthesis.v
+src/Specific/solinas32_2e336m17/femul.v
+src/Specific/solinas32_2e336m17/femulDisplay.v
+src/Specific/solinas32_2e336m17/fesquare.v
+src/Specific/solinas32_2e336m17/fesquareDisplay.v
+src/Specific/solinas32_2e336m17/freeze.v
+src/Specific/solinas32_2e336m17/freezeDisplay.v
+src/Specific/solinas32_2e336m3/CurveParameters.v
+src/Specific/solinas32_2e336m3/Synthesis.v
+src/Specific/solinas32_2e336m3/femul.v
+src/Specific/solinas32_2e336m3/femulDisplay.v
+src/Specific/solinas32_2e336m3/fesquare.v
+src/Specific/solinas32_2e336m3/fesquareDisplay.v
+src/Specific/solinas32_2e336m3/freeze.v
+src/Specific/solinas32_2e336m3/freezeDisplay.v
+src/Specific/solinas32_2e338m15/CurveParameters.v
+src/Specific/solinas32_2e338m15/Synthesis.v
+src/Specific/solinas32_2e338m15/femul.v
+src/Specific/solinas32_2e338m15/femulDisplay.v
+src/Specific/solinas32_2e338m15/fesquare.v
+src/Specific/solinas32_2e338m15/fesquareDisplay.v
+src/Specific/solinas32_2e338m15/freeze.v
+src/Specific/solinas32_2e338m15/freezeDisplay.v
+src/Specific/solinas32_2e369m25/CurveParameters.v
+src/Specific/solinas32_2e369m25/Synthesis.v
+src/Specific/solinas32_2e369m25/femul.v
+src/Specific/solinas32_2e369m25/femulDisplay.v
+src/Specific/solinas32_2e369m25/fesquare.v
+src/Specific/solinas32_2e369m25/fesquareDisplay.v
+src/Specific/solinas32_2e369m25/freeze.v
+src/Specific/solinas32_2e369m25/freezeDisplay.v
+src/Specific/solinas32_2e379m19/CurveParameters.v
+src/Specific/solinas32_2e379m19/Synthesis.v
+src/Specific/solinas32_2e379m19/femul.v
+src/Specific/solinas32_2e379m19/femulDisplay.v
+src/Specific/solinas32_2e379m19/fesquare.v
+src/Specific/solinas32_2e379m19/fesquareDisplay.v
+src/Specific/solinas32_2e379m19/freeze.v
+src/Specific/solinas32_2e379m19/freezeDisplay.v
+src/Specific/solinas32_2e382m105/CurveParameters.v
+src/Specific/solinas32_2e382m105/Synthesis.v
+src/Specific/solinas32_2e382m105/femul.v
+src/Specific/solinas32_2e382m105/femulDisplay.v
+src/Specific/solinas32_2e382m105/fesquare.v
+src/Specific/solinas32_2e382m105/fesquareDisplay.v
+src/Specific/solinas32_2e382m105/freeze.v
+src/Specific/solinas32_2e382m105/freezeDisplay.v
+src/Specific/solinas32_2e384m2e128m2e96p2e32m1/CurveParameters.v
+src/Specific/solinas32_2e384m2e128m2e96p2e32m1/Synthesis.v
+src/Specific/solinas32_2e384m2e128m2e96p2e32m1/femul.v
+src/Specific/solinas32_2e384m2e128m2e96p2e32m1/femulDisplay.v
+src/Specific/solinas32_2e384m2e128m2e96p2e32m1/fesquare.v
+src/Specific/solinas32_2e384m2e128m2e96p2e32m1/fesquareDisplay.v
+src/Specific/solinas32_2e384m2e128m2e96p2e32m1/freeze.v
+src/Specific/solinas32_2e384m2e128m2e96p2e32m1/freezeDisplay.v
+src/Specific/solinas32_2e384m317/CurveParameters.v
+src/Specific/solinas32_2e384m317/Synthesis.v
+src/Specific/solinas32_2e384m317/femul.v
+src/Specific/solinas32_2e384m317/femulDisplay.v
+src/Specific/solinas32_2e384m317/fesquare.v
+src/Specific/solinas32_2e384m317/fesquareDisplay.v
+src/Specific/solinas32_2e384m317/freeze.v
+src/Specific/solinas32_2e384m317/freezeDisplay.v
+src/Specific/solinas32_2e401m31/CurveParameters.v
+src/Specific/solinas32_2e401m31/Synthesis.v
+src/Specific/solinas32_2e401m31/femul.v
+src/Specific/solinas32_2e401m31/femulDisplay.v
+src/Specific/solinas32_2e401m31/fesquare.v
+src/Specific/solinas32_2e401m31/fesquareDisplay.v
+src/Specific/solinas32_2e401m31/freeze.v
+src/Specific/solinas32_2e401m31/freezeDisplay.v
+src/Specific/solinas32_2e413m21/CurveParameters.v
+src/Specific/solinas32_2e413m21/Synthesis.v
+src/Specific/solinas32_2e413m21/femul.v
+src/Specific/solinas32_2e413m21/femulDisplay.v
+src/Specific/solinas32_2e413m21/fesquare.v
+src/Specific/solinas32_2e413m21/fesquareDisplay.v
+src/Specific/solinas32_2e413m21/freeze.v
+src/Specific/solinas32_2e413m21/freezeDisplay.v
+src/Specific/solinas32_2e414m17/CurveParameters.v
+src/Specific/solinas32_2e414m17/Synthesis.v
+src/Specific/solinas32_2e414m17/femul.v
+src/Specific/solinas32_2e414m17/femulDisplay.v
+src/Specific/solinas32_2e414m17/fesquare.v
+src/Specific/solinas32_2e414m17/fesquareDisplay.v
+src/Specific/solinas32_2e414m17/freeze.v
+src/Specific/solinas32_2e414m17/freezeDisplay.v
+src/Specific/solinas32_2e416m2e208m1/CurveParameters.v
+src/Specific/solinas32_2e416m2e208m1/Synthesis.v
+src/Specific/solinas32_2e416m2e208m1/femul.v
+src/Specific/solinas32_2e416m2e208m1/femulDisplay.v
+src/Specific/solinas32_2e416m2e208m1/fesquare.v
+src/Specific/solinas32_2e416m2e208m1/fesquareDisplay.v
+src/Specific/solinas32_2e416m2e208m1/freeze.v
+src/Specific/solinas32_2e416m2e208m1/freezeDisplay.v
+src/Specific/solinas32_2e444m17/CurveParameters.v
+src/Specific/solinas32_2e444m17/Synthesis.v
+src/Specific/solinas32_2e444m17/femul.v
+src/Specific/solinas32_2e444m17/femulDisplay.v
+src/Specific/solinas32_2e444m17/fesquare.v
+src/Specific/solinas32_2e444m17/fesquareDisplay.v
+src/Specific/solinas32_2e444m17/freeze.v
+src/Specific/solinas32_2e444m17/freezeDisplay.v
+src/Specific/solinas32_2e448m2e224m1/CurveParameters.v
+src/Specific/solinas32_2e448m2e224m1/Synthesis.v
+src/Specific/solinas32_2e448m2e224m1/femul.v
+src/Specific/solinas32_2e448m2e224m1/femulDisplay.v
+src/Specific/solinas32_2e448m2e224m1/fesquare.v
+src/Specific/solinas32_2e448m2e224m1/fesquareDisplay.v
+src/Specific/solinas32_2e448m2e224m1/freeze.v
+src/Specific/solinas32_2e448m2e224m1/freezeDisplay.v
+src/Specific/solinas32_2e450m2e225m1/CurveParameters.v
+src/Specific/solinas32_2e450m2e225m1/Synthesis.v
+src/Specific/solinas32_2e450m2e225m1/femul.v
+src/Specific/solinas32_2e450m2e225m1/femulDisplay.v
+src/Specific/solinas32_2e450m2e225m1/fesquare.v
+src/Specific/solinas32_2e450m2e225m1/fesquareDisplay.v
+src/Specific/solinas32_2e450m2e225m1/freeze.v
+src/Specific/solinas32_2e450m2e225m1/freezeDisplay.v
+src/Specific/solinas32_2e452m3/CurveParameters.v
+src/Specific/solinas32_2e452m3/Synthesis.v
+src/Specific/solinas32_2e452m3/femul.v
+src/Specific/solinas32_2e452m3/femulDisplay.v
+src/Specific/solinas32_2e452m3/fesquare.v
+src/Specific/solinas32_2e452m3/fesquareDisplay.v
+src/Specific/solinas32_2e452m3/freeze.v
+src/Specific/solinas32_2e452m3/freezeDisplay.v
+src/Specific/solinas32_2e468m17/CurveParameters.v
+src/Specific/solinas32_2e468m17/Synthesis.v
+src/Specific/solinas32_2e468m17/femul.v
+src/Specific/solinas32_2e468m17/femulDisplay.v
+src/Specific/solinas32_2e468m17/fesquare.v
+src/Specific/solinas32_2e468m17/fesquareDisplay.v
+src/Specific/solinas32_2e468m17/freeze.v
+src/Specific/solinas32_2e468m17/freezeDisplay.v
+src/Specific/solinas32_2e480m2e240m1/CurveParameters.v
+src/Specific/solinas32_2e480m2e240m1/Synthesis.v
+src/Specific/solinas32_2e480m2e240m1/femul.v
+src/Specific/solinas32_2e480m2e240m1/femulDisplay.v
+src/Specific/solinas32_2e480m2e240m1/fesquare.v
+src/Specific/solinas32_2e480m2e240m1/fesquareDisplay.v
+src/Specific/solinas32_2e480m2e240m1/freeze.v
+src/Specific/solinas32_2e480m2e240m1/freezeDisplay.v
+src/Specific/solinas32_2e488m17/CurveParameters.v
+src/Specific/solinas32_2e488m17/Synthesis.v
+src/Specific/solinas32_2e488m17/femul.v
+src/Specific/solinas32_2e488m17/femulDisplay.v
+src/Specific/solinas32_2e488m17/fesquare.v
+src/Specific/solinas32_2e488m17/fesquareDisplay.v
+src/Specific/solinas32_2e488m17/freeze.v
+src/Specific/solinas32_2e488m17/freezeDisplay.v
+src/Specific/solinas32_2e489m21/CurveParameters.v
+src/Specific/solinas32_2e489m21/Synthesis.v
+src/Specific/solinas32_2e489m21/femul.v
+src/Specific/solinas32_2e489m21/femulDisplay.v
+src/Specific/solinas32_2e489m21/fesquare.v
+src/Specific/solinas32_2e489m21/fesquareDisplay.v
+src/Specific/solinas32_2e489m21/freeze.v
+src/Specific/solinas32_2e489m21/freezeDisplay.v
+src/Specific/solinas32_2e495m31/CurveParameters.v
+src/Specific/solinas32_2e495m31/Synthesis.v
+src/Specific/solinas32_2e495m31/femul.v
+src/Specific/solinas32_2e495m31/femulDisplay.v
+src/Specific/solinas32_2e495m31/fesquare.v
+src/Specific/solinas32_2e495m31/fesquareDisplay.v
+src/Specific/solinas32_2e495m31/freeze.v
+src/Specific/solinas32_2e495m31/freezeDisplay.v
+src/Specific/solinas32_2e511m187/CurveParameters.v
+src/Specific/solinas32_2e511m187/Synthesis.v
+src/Specific/solinas32_2e511m187/femul.v
+src/Specific/solinas32_2e511m187/femulDisplay.v
+src/Specific/solinas32_2e511m187/fesquare.v
+src/Specific/solinas32_2e511m187/fesquareDisplay.v
+src/Specific/solinas32_2e511m187/freeze.v
+src/Specific/solinas32_2e511m187/freezeDisplay.v
+src/Specific/solinas32_2e511m481/CurveParameters.v
+src/Specific/solinas32_2e511m481/Synthesis.v
+src/Specific/solinas32_2e511m481/femul.v
+src/Specific/solinas32_2e511m481/femulDisplay.v
+src/Specific/solinas32_2e511m481/fesquare.v
+src/Specific/solinas32_2e511m481/fesquareDisplay.v
+src/Specific/solinas32_2e511m481/freeze.v
+src/Specific/solinas32_2e511m481/freezeDisplay.v
+src/Specific/solinas32_2e512m569/CurveParameters.v
+src/Specific/solinas32_2e512m569/Synthesis.v
+src/Specific/solinas32_2e512m569/femul.v
+src/Specific/solinas32_2e512m569/femulDisplay.v
+src/Specific/solinas32_2e512m569/fesquare.v
+src/Specific/solinas32_2e512m569/fesquareDisplay.v
+src/Specific/solinas32_2e512m569/freeze.v
+src/Specific/solinas32_2e512m569/freezeDisplay.v
+src/Specific/solinas32_2e521m1/CurveParameters.v
+src/Specific/solinas32_2e521m1/Synthesis.v
+src/Specific/solinas32_2e521m1/femul.v
+src/Specific/solinas32_2e521m1/femulDisplay.v
+src/Specific/solinas32_2e521m1/fesquare.v
+src/Specific/solinas32_2e521m1/fesquareDisplay.v
+src/Specific/solinas32_2e521m1/freeze.v
+src/Specific/solinas32_2e521m1/freezeDisplay.v
+src/Specific/solinas64_2e127m1/CurveParameters.v
+src/Specific/solinas64_2e127m1/Synthesis.v
+src/Specific/solinas64_2e127m1/femul.v
+src/Specific/solinas64_2e127m1/femulDisplay.v
+src/Specific/solinas64_2e127m1/fesquare.v
+src/Specific/solinas64_2e127m1/fesquareDisplay.v
+src/Specific/solinas64_2e127m1/freeze.v
+src/Specific/solinas64_2e127m1/freezeDisplay.v
+src/Specific/solinas64_2e129m25/CurveParameters.v
+src/Specific/solinas64_2e129m25/Synthesis.v
+src/Specific/solinas64_2e129m25/femul.v
+src/Specific/solinas64_2e129m25/femulDisplay.v
+src/Specific/solinas64_2e129m25/fesquare.v
+src/Specific/solinas64_2e129m25/fesquareDisplay.v
+src/Specific/solinas64_2e129m25/freeze.v
+src/Specific/solinas64_2e129m25/freezeDisplay.v
+src/Specific/solinas64_2e130m5/CurveParameters.v
+src/Specific/solinas64_2e130m5/Synthesis.v
+src/Specific/solinas64_2e130m5/femul.v
+src/Specific/solinas64_2e130m5/femulDisplay.v
+src/Specific/solinas64_2e130m5/fesquare.v
+src/Specific/solinas64_2e130m5/fesquareDisplay.v
+src/Specific/solinas64_2e130m5/freeze.v
+src/Specific/solinas64_2e130m5/freezeDisplay.v
+src/Specific/solinas64_2e137m13/CurveParameters.v
+src/Specific/solinas64_2e137m13/Synthesis.v
+src/Specific/solinas64_2e137m13/femul.v
+src/Specific/solinas64_2e137m13/femulDisplay.v
+src/Specific/solinas64_2e137m13/fesquare.v
+src/Specific/solinas64_2e137m13/fesquareDisplay.v
+src/Specific/solinas64_2e137m13/freeze.v
+src/Specific/solinas64_2e137m13/freezeDisplay.v
+src/Specific/solinas64_2e140m27/CurveParameters.v
+src/Specific/solinas64_2e140m27/Synthesis.v
+src/Specific/solinas64_2e140m27/femul.v
+src/Specific/solinas64_2e140m27/femulDisplay.v
+src/Specific/solinas64_2e140m27/fesquare.v
+src/Specific/solinas64_2e140m27/fesquareDisplay.v
+src/Specific/solinas64_2e140m27/freeze.v
+src/Specific/solinas64_2e140m27/freezeDisplay.v
+src/Specific/solinas64_2e141m9/CurveParameters.v
+src/Specific/solinas64_2e141m9/Synthesis.v
+src/Specific/solinas64_2e141m9/femul.v
+src/Specific/solinas64_2e141m9/femulDisplay.v
+src/Specific/solinas64_2e141m9/fesquare.v
+src/Specific/solinas64_2e141m9/fesquareDisplay.v
+src/Specific/solinas64_2e141m9/freeze.v
+src/Specific/solinas64_2e141m9/freezeDisplay.v
+src/Specific/solinas64_2e150m3/CurveParameters.v
+src/Specific/solinas64_2e150m3/Synthesis.v
+src/Specific/solinas64_2e150m3/femul.v
+src/Specific/solinas64_2e150m3/femulDisplay.v
+src/Specific/solinas64_2e150m3/fesquare.v
+src/Specific/solinas64_2e150m3/fesquareDisplay.v
+src/Specific/solinas64_2e150m3/freeze.v
+src/Specific/solinas64_2e150m3/freezeDisplay.v
+src/Specific/solinas64_2e150m5/CurveParameters.v
+src/Specific/solinas64_2e150m5/Synthesis.v
+src/Specific/solinas64_2e150m5/femul.v
+src/Specific/solinas64_2e150m5/femulDisplay.v
+src/Specific/solinas64_2e150m5/fesquare.v
+src/Specific/solinas64_2e150m5/fesquareDisplay.v
+src/Specific/solinas64_2e150m5/freeze.v
+src/Specific/solinas64_2e150m5/freezeDisplay.v
+src/Specific/solinas64_2e152m17/CurveParameters.v
+src/Specific/solinas64_2e152m17/Synthesis.v
+src/Specific/solinas64_2e152m17/femul.v
+src/Specific/solinas64_2e152m17/femulDisplay.v
+src/Specific/solinas64_2e152m17/fesquare.v
+src/Specific/solinas64_2e152m17/fesquareDisplay.v
+src/Specific/solinas64_2e152m17/freeze.v
+src/Specific/solinas64_2e152m17/freezeDisplay.v
+src/Specific/solinas64_2e158m15/CurveParameters.v
+src/Specific/solinas64_2e158m15/Synthesis.v
+src/Specific/solinas64_2e158m15/femul.v
+src/Specific/solinas64_2e158m15/femulDisplay.v
+src/Specific/solinas64_2e158m15/fesquare.v
+src/Specific/solinas64_2e158m15/fesquareDisplay.v
+src/Specific/solinas64_2e158m15/freeze.v
+src/Specific/solinas64_2e158m15/freezeDisplay.v
+src/Specific/solinas64_2e165m25/CurveParameters.v
+src/Specific/solinas64_2e165m25/Synthesis.v
+src/Specific/solinas64_2e165m25/femul.v
+src/Specific/solinas64_2e165m25/femulDisplay.v
+src/Specific/solinas64_2e165m25/fesquare.v
+src/Specific/solinas64_2e165m25/fesquareDisplay.v
+src/Specific/solinas64_2e165m25/freeze.v
+src/Specific/solinas64_2e165m25/freezeDisplay.v
+src/Specific/solinas64_2e166m5/CurveParameters.v
+src/Specific/solinas64_2e166m5/Synthesis.v
+src/Specific/solinas64_2e166m5/femul.v
+src/Specific/solinas64_2e166m5/femulDisplay.v
+src/Specific/solinas64_2e166m5/fesquare.v
+src/Specific/solinas64_2e166m5/fesquareDisplay.v
+src/Specific/solinas64_2e166m5/freeze.v
+src/Specific/solinas64_2e166m5/freezeDisplay.v
+src/Specific/solinas64_2e171m19/CurveParameters.v
+src/Specific/solinas64_2e171m19/Synthesis.v
+src/Specific/solinas64_2e171m19/femul.v
+src/Specific/solinas64_2e171m19/femulDisplay.v
+src/Specific/solinas64_2e171m19/fesquare.v
+src/Specific/solinas64_2e171m19/fesquareDisplay.v
+src/Specific/solinas64_2e171m19/freeze.v
+src/Specific/solinas64_2e171m19/freezeDisplay.v
+src/Specific/solinas64_2e174m17/CurveParameters.v
+src/Specific/solinas64_2e174m17/Synthesis.v
+src/Specific/solinas64_2e174m17/femul.v
+src/Specific/solinas64_2e174m17/femulDisplay.v
+src/Specific/solinas64_2e174m17/fesquare.v
+src/Specific/solinas64_2e174m17/fesquareDisplay.v
+src/Specific/solinas64_2e174m17/freeze.v
+src/Specific/solinas64_2e174m17/freezeDisplay.v
+src/Specific/solinas64_2e174m3/CurveParameters.v
+src/Specific/solinas64_2e174m3/Synthesis.v
+src/Specific/solinas64_2e174m3/femul.v
+src/Specific/solinas64_2e174m3/femulDisplay.v
+src/Specific/solinas64_2e174m3/fesquare.v
+src/Specific/solinas64_2e174m3/fesquareDisplay.v
+src/Specific/solinas64_2e174m3/freeze.v
+src/Specific/solinas64_2e174m3/freezeDisplay.v
+src/Specific/solinas64_2e189m25/CurveParameters.v
+src/Specific/solinas64_2e189m25/Synthesis.v
+src/Specific/solinas64_2e189m25/femul.v
+src/Specific/solinas64_2e189m25/femulDisplay.v
+src/Specific/solinas64_2e189m25/fesquare.v
+src/Specific/solinas64_2e189m25/fesquareDisplay.v
+src/Specific/solinas64_2e189m25/freeze.v
+src/Specific/solinas64_2e189m25/freezeDisplay.v
+src/Specific/solinas64_2e190m11/CurveParameters.v
+src/Specific/solinas64_2e190m11/Synthesis.v
+src/Specific/solinas64_2e190m11/femul.v
+src/Specific/solinas64_2e190m11/femulDisplay.v
+src/Specific/solinas64_2e190m11/fesquare.v
+src/Specific/solinas64_2e190m11/fesquareDisplay.v
+src/Specific/solinas64_2e190m11/freeze.v
+src/Specific/solinas64_2e190m11/freezeDisplay.v
+src/Specific/solinas64_2e191m19/CurveParameters.v
+src/Specific/solinas64_2e191m19/Synthesis.v
+src/Specific/solinas64_2e191m19/femul.v
+src/Specific/solinas64_2e191m19/femulDisplay.v
+src/Specific/solinas64_2e191m19/fesquare.v
+src/Specific/solinas64_2e191m19/fesquareDisplay.v
+src/Specific/solinas64_2e191m19/freeze.v
+src/Specific/solinas64_2e191m19/freezeDisplay.v
+src/Specific/solinas64_2e192m2e64m1/CurveParameters.v
+src/Specific/solinas64_2e192m2e64m1/Synthesis.v
+src/Specific/solinas64_2e192m2e64m1/femul.v
+src/Specific/solinas64_2e192m2e64m1/femulDisplay.v
+src/Specific/solinas64_2e192m2e64m1/fesquare.v
+src/Specific/solinas64_2e192m2e64m1/fesquareDisplay.v
+src/Specific/solinas64_2e192m2e64m1/freeze.v
+src/Specific/solinas64_2e192m2e64m1/freezeDisplay.v
+src/Specific/solinas64_2e194m33/CurveParameters.v
+src/Specific/solinas64_2e194m33/Synthesis.v
+src/Specific/solinas64_2e194m33/femul.v
+src/Specific/solinas64_2e194m33/femulDisplay.v
+src/Specific/solinas64_2e194m33/fesquare.v
+src/Specific/solinas64_2e194m33/fesquareDisplay.v
+src/Specific/solinas64_2e194m33/freeze.v
+src/Specific/solinas64_2e194m33/freezeDisplay.v
+src/Specific/solinas64_2e196m15/CurveParameters.v
+src/Specific/solinas64_2e196m15/Synthesis.v
+src/Specific/solinas64_2e196m15/femul.v
+src/Specific/solinas64_2e196m15/femulDisplay.v
+src/Specific/solinas64_2e196m15/fesquare.v
+src/Specific/solinas64_2e196m15/fesquareDisplay.v
+src/Specific/solinas64_2e196m15/freeze.v
+src/Specific/solinas64_2e196m15/freezeDisplay.v
+src/Specific/solinas64_2e198m17/CurveParameters.v
+src/Specific/solinas64_2e198m17/Synthesis.v
+src/Specific/solinas64_2e198m17/femul.v
+src/Specific/solinas64_2e198m17/femulDisplay.v
+src/Specific/solinas64_2e198m17/fesquare.v
+src/Specific/solinas64_2e198m17/fesquareDisplay.v
+src/Specific/solinas64_2e198m17/freeze.v
+src/Specific/solinas64_2e198m17/freezeDisplay.v
+src/Specific/solinas64_2e206m5/CurveParameters.v
+src/Specific/solinas64_2e206m5/Synthesis.v
+src/Specific/solinas64_2e206m5/femul.v
+src/Specific/solinas64_2e206m5/femulDisplay.v
+src/Specific/solinas64_2e206m5/fesquare.v
+src/Specific/solinas64_2e206m5/fesquareDisplay.v
+src/Specific/solinas64_2e206m5/freeze.v
+src/Specific/solinas64_2e206m5/freezeDisplay.v
+src/Specific/solinas64_2e212m29/CurveParameters.v
+src/Specific/solinas64_2e212m29/Synthesis.v
+src/Specific/solinas64_2e212m29/femul.v
+src/Specific/solinas64_2e212m29/femulDisplay.v
+src/Specific/solinas64_2e212m29/fesquare.v
+src/Specific/solinas64_2e212m29/fesquareDisplay.v
+src/Specific/solinas64_2e212m29/freeze.v
+src/Specific/solinas64_2e212m29/freezeDisplay.v
+src/Specific/solinas64_2e213m3/CurveParameters.v
+src/Specific/solinas64_2e213m3/Synthesis.v
+src/Specific/solinas64_2e213m3/femul.v
+src/Specific/solinas64_2e213m3/femulDisplay.v
+src/Specific/solinas64_2e213m3/fesquare.v
+src/Specific/solinas64_2e213m3/fesquareDisplay.v
+src/Specific/solinas64_2e213m3/freeze.v
+src/Specific/solinas64_2e213m3/freezeDisplay.v
+src/Specific/solinas64_2e216m2e108m1/CurveParameters.v
+src/Specific/solinas64_2e216m2e108m1/Synthesis.v
+src/Specific/solinas64_2e216m2e108m1/femul.v
+src/Specific/solinas64_2e216m2e108m1/femulDisplay.v
+src/Specific/solinas64_2e216m2e108m1/fesquare.v
+src/Specific/solinas64_2e216m2e108m1/fesquareDisplay.v
+src/Specific/solinas64_2e216m2e108m1/freeze.v
+src/Specific/solinas64_2e216m2e108m1/freezeDisplay.v
+src/Specific/solinas64_2e221m3/CurveParameters.v
+src/Specific/solinas64_2e221m3/Synthesis.v
+src/Specific/solinas64_2e221m3/femul.v
+src/Specific/solinas64_2e221m3/femulDisplay.v
+src/Specific/solinas64_2e221m3/fesquare.v
+src/Specific/solinas64_2e221m3/fesquareDisplay.v
+src/Specific/solinas64_2e221m3/freeze.v
+src/Specific/solinas64_2e221m3/freezeDisplay.v
+src/Specific/solinas64_2e222m117/CurveParameters.v
+src/Specific/solinas64_2e222m117/Synthesis.v
+src/Specific/solinas64_2e222m117/femul.v
+src/Specific/solinas64_2e222m117/femulDisplay.v
+src/Specific/solinas64_2e222m117/fesquare.v
+src/Specific/solinas64_2e222m117/fesquareDisplay.v
+src/Specific/solinas64_2e222m117/freeze.v
+src/Specific/solinas64_2e222m117/freezeDisplay.v
+src/Specific/solinas64_2e224m2e96p1/CurveParameters.v
+src/Specific/solinas64_2e224m2e96p1/Synthesis.v
+src/Specific/solinas64_2e224m2e96p1/femul.v
+src/Specific/solinas64_2e224m2e96p1/femulDisplay.v
+src/Specific/solinas64_2e224m2e96p1/fesquare.v
+src/Specific/solinas64_2e224m2e96p1/fesquareDisplay.v
+src/Specific/solinas64_2e224m2e96p1/freeze.v
+src/Specific/solinas64_2e224m2e96p1/freezeDisplay.v
+src/Specific/solinas64_2e226m5/CurveParameters.v
+src/Specific/solinas64_2e226m5/Synthesis.v
+src/Specific/solinas64_2e226m5/femul.v
+src/Specific/solinas64_2e226m5/femulDisplay.v
+src/Specific/solinas64_2e226m5/fesquare.v
+src/Specific/solinas64_2e226m5/fesquareDisplay.v
+src/Specific/solinas64_2e226m5/freeze.v
+src/Specific/solinas64_2e226m5/freezeDisplay.v
+src/Specific/solinas64_2e230m27/CurveParameters.v
+src/Specific/solinas64_2e230m27/Synthesis.v
+src/Specific/solinas64_2e230m27/femul.v
+src/Specific/solinas64_2e230m27/femulDisplay.v
+src/Specific/solinas64_2e230m27/fesquare.v
+src/Specific/solinas64_2e230m27/fesquareDisplay.v
+src/Specific/solinas64_2e230m27/freeze.v
+src/Specific/solinas64_2e230m27/freezeDisplay.v
+src/Specific/solinas64_2e235m15/CurveParameters.v
+src/Specific/solinas64_2e235m15/Synthesis.v
+src/Specific/solinas64_2e235m15/femul.v
+src/Specific/solinas64_2e235m15/femulDisplay.v
+src/Specific/solinas64_2e235m15/fesquare.v
+src/Specific/solinas64_2e235m15/fesquareDisplay.v
+src/Specific/solinas64_2e235m15/freeze.v
+src/Specific/solinas64_2e235m15/freezeDisplay.v
+src/Specific/solinas64_2e243m9/CurveParameters.v
+src/Specific/solinas64_2e243m9/Synthesis.v
+src/Specific/solinas64_2e243m9/femul.v
+src/Specific/solinas64_2e243m9/femulDisplay.v
+src/Specific/solinas64_2e243m9/fesquare.v
+src/Specific/solinas64_2e243m9/fesquareDisplay.v
+src/Specific/solinas64_2e243m9/freeze.v
+src/Specific/solinas64_2e243m9/freezeDisplay.v
+src/Specific/solinas64_2e251m9/CurveParameters.v
+src/Specific/solinas64_2e251m9/Synthesis.v
+src/Specific/solinas64_2e251m9/femul.v
+src/Specific/solinas64_2e251m9/femulDisplay.v
+src/Specific/solinas64_2e251m9/fesquare.v
+src/Specific/solinas64_2e251m9/fesquareDisplay.v
+src/Specific/solinas64_2e251m9/freeze.v
+src/Specific/solinas64_2e251m9/freezeDisplay.v
+src/Specific/solinas64_2e255m19/CurveParameters.v
+src/Specific/solinas64_2e255m19/Synthesis.v
+src/Specific/solinas64_2e255m19/femul.v
+src/Specific/solinas64_2e255m19/femulDisplay.v
+src/Specific/solinas64_2e255m19/fesquare.v
+src/Specific/solinas64_2e255m19/fesquareDisplay.v
+src/Specific/solinas64_2e255m19/freeze.v
+src/Specific/solinas64_2e255m19/freezeDisplay.v
+src/Specific/solinas64_2e255m2e4m2e1m1/CurveParameters.v
+src/Specific/solinas64_2e255m2e4m2e1m1/Synthesis.v
+src/Specific/solinas64_2e255m2e4m2e1m1/femul.v
+src/Specific/solinas64_2e255m2e4m2e1m1/femulDisplay.v
+src/Specific/solinas64_2e255m2e4m2e1m1/fesquare.v
+src/Specific/solinas64_2e255m2e4m2e1m1/fesquareDisplay.v
+src/Specific/solinas64_2e255m2e4m2e1m1/freeze.v
+src/Specific/solinas64_2e255m2e4m2e1m1/freezeDisplay.v
+src/Specific/solinas64_2e255m765/CurveParameters.v
+src/Specific/solinas64_2e255m765/Synthesis.v
+src/Specific/solinas64_2e255m765/femul.v
+src/Specific/solinas64_2e255m765/femulDisplay.v
+src/Specific/solinas64_2e255m765/fesquare.v
+src/Specific/solinas64_2e255m765/fesquareDisplay.v
+src/Specific/solinas64_2e255m765/freeze.v
+src/Specific/solinas64_2e255m765/freezeDisplay.v
+src/Specific/solinas64_2e256m189/CurveParameters.v
+src/Specific/solinas64_2e256m189/Synthesis.v
+src/Specific/solinas64_2e256m189/femul.v
+src/Specific/solinas64_2e256m189/femulDisplay.v
+src/Specific/solinas64_2e256m189/fesquare.v
+src/Specific/solinas64_2e256m189/fesquareDisplay.v
+src/Specific/solinas64_2e256m189/freeze.v
+src/Specific/solinas64_2e256m189/freezeDisplay.v
+src/Specific/solinas64_2e256m2e224p2e192p2e96m1/CurveParameters.v
+src/Specific/solinas64_2e256m2e224p2e192p2e96m1/Synthesis.v
+src/Specific/solinas64_2e256m2e224p2e192p2e96m1/femul.v
+src/Specific/solinas64_2e256m2e224p2e192p2e96m1/femulDisplay.v
+src/Specific/solinas64_2e256m2e224p2e192p2e96m1/fesquare.v
+src/Specific/solinas64_2e256m2e224p2e192p2e96m1/fesquareDisplay.v
+src/Specific/solinas64_2e256m2e224p2e192p2e96m1/freeze.v
+src/Specific/solinas64_2e256m2e224p2e192p2e96m1/freezeDisplay.v
+src/Specific/solinas64_2e256m2e32m977/CurveParameters.v
+src/Specific/solinas64_2e256m2e32m977/Synthesis.v
+src/Specific/solinas64_2e256m2e32m977/femul.v
+src/Specific/solinas64_2e256m2e32m977/femulDisplay.v
+src/Specific/solinas64_2e256m2e32m977/fesquare.v
+src/Specific/solinas64_2e256m2e32m977/fesquareDisplay.v
+src/Specific/solinas64_2e256m2e32m977/freeze.v
+src/Specific/solinas64_2e256m2e32m977/freezeDisplay.v
+src/Specific/solinas64_2e266m3/CurveParameters.v
+src/Specific/solinas64_2e266m3/Synthesis.v
+src/Specific/solinas64_2e266m3/femul.v
+src/Specific/solinas64_2e266m3/femulDisplay.v
+src/Specific/solinas64_2e266m3/fesquare.v
+src/Specific/solinas64_2e266m3/fesquareDisplay.v
+src/Specific/solinas64_2e266m3/freeze.v
+src/Specific/solinas64_2e266m3/freezeDisplay.v
+src/Specific/solinas64_2e285m9/CurveParameters.v
+src/Specific/solinas64_2e285m9/Synthesis.v
+src/Specific/solinas64_2e285m9/femul.v
+src/Specific/solinas64_2e285m9/femulDisplay.v
+src/Specific/solinas64_2e285m9/fesquare.v
+src/Specific/solinas64_2e285m9/fesquareDisplay.v
+src/Specific/solinas64_2e285m9/freeze.v
+src/Specific/solinas64_2e285m9/freezeDisplay.v
+src/Specific/solinas64_2e291m19/CurveParameters.v
+src/Specific/solinas64_2e291m19/Synthesis.v
+src/Specific/solinas64_2e291m19/femul.v
+src/Specific/solinas64_2e291m19/femulDisplay.v
+src/Specific/solinas64_2e291m19/fesquare.v
+src/Specific/solinas64_2e291m19/fesquareDisplay.v
+src/Specific/solinas64_2e291m19/freeze.v
+src/Specific/solinas64_2e291m19/freezeDisplay.v
+src/Specific/solinas64_2e321m9/CurveParameters.v
+src/Specific/solinas64_2e321m9/Synthesis.v
+src/Specific/solinas64_2e321m9/femul.v
+src/Specific/solinas64_2e321m9/femulDisplay.v
+src/Specific/solinas64_2e321m9/fesquare.v
+src/Specific/solinas64_2e321m9/fesquareDisplay.v
+src/Specific/solinas64_2e321m9/freeze.v
+src/Specific/solinas64_2e321m9/freezeDisplay.v
+src/Specific/solinas64_2e322m2e161m1/CurveParameters.v
+src/Specific/solinas64_2e322m2e161m1/Synthesis.v
+src/Specific/solinas64_2e322m2e161m1/femul.v
+src/Specific/solinas64_2e322m2e161m1/femulDisplay.v
+src/Specific/solinas64_2e322m2e161m1/fesquare.v
+src/Specific/solinas64_2e322m2e161m1/fesquareDisplay.v
+src/Specific/solinas64_2e322m2e161m1/freeze.v
+src/Specific/solinas64_2e322m2e161m1/freezeDisplay.v
+src/Specific/solinas64_2e336m17/CurveParameters.v
+src/Specific/solinas64_2e336m17/Synthesis.v
+src/Specific/solinas64_2e336m17/femul.v
+src/Specific/solinas64_2e336m17/femulDisplay.v
+src/Specific/solinas64_2e336m17/fesquare.v
+src/Specific/solinas64_2e336m17/fesquareDisplay.v
+src/Specific/solinas64_2e336m17/freeze.v
+src/Specific/solinas64_2e336m17/freezeDisplay.v
+src/Specific/solinas64_2e336m3/CurveParameters.v
+src/Specific/solinas64_2e336m3/Synthesis.v
+src/Specific/solinas64_2e336m3/femul.v
+src/Specific/solinas64_2e336m3/femulDisplay.v
+src/Specific/solinas64_2e336m3/fesquare.v
+src/Specific/solinas64_2e336m3/fesquareDisplay.v
+src/Specific/solinas64_2e336m3/freeze.v
+src/Specific/solinas64_2e336m3/freezeDisplay.v
+src/Specific/solinas64_2e338m15/CurveParameters.v
+src/Specific/solinas64_2e338m15/Synthesis.v
+src/Specific/solinas64_2e338m15/femul.v
+src/Specific/solinas64_2e338m15/femulDisplay.v
+src/Specific/solinas64_2e338m15/fesquare.v
+src/Specific/solinas64_2e338m15/fesquareDisplay.v
+src/Specific/solinas64_2e338m15/freeze.v
+src/Specific/solinas64_2e338m15/freezeDisplay.v
+src/Specific/solinas64_2e369m25/CurveParameters.v
+src/Specific/solinas64_2e369m25/Synthesis.v
+src/Specific/solinas64_2e369m25/femul.v
+src/Specific/solinas64_2e369m25/femulDisplay.v
+src/Specific/solinas64_2e369m25/fesquare.v
+src/Specific/solinas64_2e369m25/fesquareDisplay.v
+src/Specific/solinas64_2e369m25/freeze.v
+src/Specific/solinas64_2e369m25/freezeDisplay.v
+src/Specific/solinas64_2e379m19/CurveParameters.v
+src/Specific/solinas64_2e379m19/Synthesis.v
+src/Specific/solinas64_2e379m19/femul.v
+src/Specific/solinas64_2e379m19/femulDisplay.v
+src/Specific/solinas64_2e379m19/fesquare.v
+src/Specific/solinas64_2e379m19/fesquareDisplay.v
+src/Specific/solinas64_2e379m19/freeze.v
+src/Specific/solinas64_2e379m19/freezeDisplay.v
+src/Specific/solinas64_2e382m105/CurveParameters.v
+src/Specific/solinas64_2e382m105/Synthesis.v
+src/Specific/solinas64_2e382m105/femul.v
+src/Specific/solinas64_2e382m105/femulDisplay.v
+src/Specific/solinas64_2e382m105/fesquare.v
+src/Specific/solinas64_2e382m105/fesquareDisplay.v
+src/Specific/solinas64_2e382m105/freeze.v
+src/Specific/solinas64_2e382m105/freezeDisplay.v
+src/Specific/solinas64_2e384m2e128m2e96p2e32m1/CurveParameters.v
+src/Specific/solinas64_2e384m2e128m2e96p2e32m1/Synthesis.v
+src/Specific/solinas64_2e384m2e128m2e96p2e32m1/femul.v
+src/Specific/solinas64_2e384m2e128m2e96p2e32m1/femulDisplay.v
+src/Specific/solinas64_2e384m2e128m2e96p2e32m1/fesquare.v
+src/Specific/solinas64_2e384m2e128m2e96p2e32m1/fesquareDisplay.v
+src/Specific/solinas64_2e384m2e128m2e96p2e32m1/freeze.v
+src/Specific/solinas64_2e384m2e128m2e96p2e32m1/freezeDisplay.v
+src/Specific/solinas64_2e384m317/CurveParameters.v
+src/Specific/solinas64_2e384m317/Synthesis.v
+src/Specific/solinas64_2e384m317/femul.v
+src/Specific/solinas64_2e384m317/femulDisplay.v
+src/Specific/solinas64_2e384m317/fesquare.v
+src/Specific/solinas64_2e384m317/fesquareDisplay.v
+src/Specific/solinas64_2e384m317/freeze.v
+src/Specific/solinas64_2e384m317/freezeDisplay.v
+src/Specific/solinas64_2e401m31/CurveParameters.v
+src/Specific/solinas64_2e401m31/Synthesis.v
+src/Specific/solinas64_2e401m31/femul.v
+src/Specific/solinas64_2e401m31/femulDisplay.v
+src/Specific/solinas64_2e401m31/fesquare.v
+src/Specific/solinas64_2e401m31/fesquareDisplay.v
+src/Specific/solinas64_2e401m31/freeze.v
+src/Specific/solinas64_2e401m31/freezeDisplay.v
+src/Specific/solinas64_2e413m21/CurveParameters.v
+src/Specific/solinas64_2e413m21/Synthesis.v
+src/Specific/solinas64_2e413m21/femul.v
+src/Specific/solinas64_2e413m21/femulDisplay.v
+src/Specific/solinas64_2e413m21/fesquare.v
+src/Specific/solinas64_2e413m21/fesquareDisplay.v
+src/Specific/solinas64_2e413m21/freeze.v
+src/Specific/solinas64_2e413m21/freezeDisplay.v
+src/Specific/solinas64_2e414m17/CurveParameters.v
+src/Specific/solinas64_2e414m17/Synthesis.v
+src/Specific/solinas64_2e414m17/femul.v
+src/Specific/solinas64_2e414m17/femulDisplay.v
+src/Specific/solinas64_2e414m17/fesquare.v
+src/Specific/solinas64_2e414m17/fesquareDisplay.v
+src/Specific/solinas64_2e414m17/freeze.v
+src/Specific/solinas64_2e414m17/freezeDisplay.v
+src/Specific/solinas64_2e416m2e208m1/CurveParameters.v
+src/Specific/solinas64_2e416m2e208m1/Synthesis.v
+src/Specific/solinas64_2e416m2e208m1/femul.v
+src/Specific/solinas64_2e416m2e208m1/femulDisplay.v
+src/Specific/solinas64_2e416m2e208m1/fesquare.v
+src/Specific/solinas64_2e416m2e208m1/fesquareDisplay.v
+src/Specific/solinas64_2e416m2e208m1/freeze.v
+src/Specific/solinas64_2e416m2e208m1/freezeDisplay.v
+src/Specific/solinas64_2e444m17/CurveParameters.v
+src/Specific/solinas64_2e444m17/Synthesis.v
+src/Specific/solinas64_2e444m17/femul.v
+src/Specific/solinas64_2e444m17/femulDisplay.v
+src/Specific/solinas64_2e444m17/fesquare.v
+src/Specific/solinas64_2e444m17/fesquareDisplay.v
+src/Specific/solinas64_2e444m17/freeze.v
+src/Specific/solinas64_2e444m17/freezeDisplay.v
+src/Specific/solinas64_2e448m2e224m1/CurveParameters.v
+src/Specific/solinas64_2e448m2e224m1/Synthesis.v
+src/Specific/solinas64_2e448m2e224m1/femul.v
+src/Specific/solinas64_2e448m2e224m1/femulDisplay.v
+src/Specific/solinas64_2e448m2e224m1/fesquare.v
+src/Specific/solinas64_2e448m2e224m1/fesquareDisplay.v
+src/Specific/solinas64_2e448m2e224m1/freeze.v
+src/Specific/solinas64_2e448m2e224m1/freezeDisplay.v
+src/Specific/solinas64_2e450m2e225m1/CurveParameters.v
+src/Specific/solinas64_2e450m2e225m1/Synthesis.v
+src/Specific/solinas64_2e450m2e225m1/femul.v
+src/Specific/solinas64_2e450m2e225m1/femulDisplay.v
+src/Specific/solinas64_2e450m2e225m1/fesquare.v
+src/Specific/solinas64_2e450m2e225m1/fesquareDisplay.v
+src/Specific/solinas64_2e450m2e225m1/freeze.v
+src/Specific/solinas64_2e450m2e225m1/freezeDisplay.v
+src/Specific/solinas64_2e452m3/CurveParameters.v
+src/Specific/solinas64_2e452m3/Synthesis.v
+src/Specific/solinas64_2e452m3/femul.v
+src/Specific/solinas64_2e452m3/femulDisplay.v
+src/Specific/solinas64_2e452m3/fesquare.v
+src/Specific/solinas64_2e452m3/fesquareDisplay.v
+src/Specific/solinas64_2e452m3/freeze.v
+src/Specific/solinas64_2e452m3/freezeDisplay.v
+src/Specific/solinas64_2e468m17/CurveParameters.v
+src/Specific/solinas64_2e468m17/Synthesis.v
+src/Specific/solinas64_2e468m17/femul.v
+src/Specific/solinas64_2e468m17/femulDisplay.v
+src/Specific/solinas64_2e468m17/fesquare.v
+src/Specific/solinas64_2e468m17/fesquareDisplay.v
+src/Specific/solinas64_2e468m17/freeze.v
+src/Specific/solinas64_2e468m17/freezeDisplay.v
+src/Specific/solinas64_2e480m2e240m1/CurveParameters.v
+src/Specific/solinas64_2e480m2e240m1/Synthesis.v
+src/Specific/solinas64_2e480m2e240m1/femul.v
+src/Specific/solinas64_2e480m2e240m1/femulDisplay.v
+src/Specific/solinas64_2e480m2e240m1/fesquare.v
+src/Specific/solinas64_2e480m2e240m1/fesquareDisplay.v
+src/Specific/solinas64_2e480m2e240m1/freeze.v
+src/Specific/solinas64_2e480m2e240m1/freezeDisplay.v
+src/Specific/solinas64_2e488m17/CurveParameters.v
+src/Specific/solinas64_2e488m17/Synthesis.v
+src/Specific/solinas64_2e488m17/femul.v
+src/Specific/solinas64_2e488m17/femulDisplay.v
+src/Specific/solinas64_2e488m17/fesquare.v
+src/Specific/solinas64_2e488m17/fesquareDisplay.v
+src/Specific/solinas64_2e488m17/freeze.v
+src/Specific/solinas64_2e488m17/freezeDisplay.v
+src/Specific/solinas64_2e489m21/CurveParameters.v
+src/Specific/solinas64_2e489m21/Synthesis.v
+src/Specific/solinas64_2e489m21/femul.v
+src/Specific/solinas64_2e489m21/femulDisplay.v
+src/Specific/solinas64_2e489m21/fesquare.v
+src/Specific/solinas64_2e489m21/fesquareDisplay.v
+src/Specific/solinas64_2e489m21/freeze.v
+src/Specific/solinas64_2e489m21/freezeDisplay.v
+src/Specific/solinas64_2e495m31/CurveParameters.v
+src/Specific/solinas64_2e495m31/Synthesis.v
+src/Specific/solinas64_2e495m31/femul.v
+src/Specific/solinas64_2e495m31/femulDisplay.v
+src/Specific/solinas64_2e495m31/fesquare.v
+src/Specific/solinas64_2e495m31/fesquareDisplay.v
+src/Specific/solinas64_2e495m31/freeze.v
+src/Specific/solinas64_2e495m31/freezeDisplay.v
+src/Specific/solinas64_2e511m187/CurveParameters.v
+src/Specific/solinas64_2e511m187/Synthesis.v
+src/Specific/solinas64_2e511m187/femul.v
+src/Specific/solinas64_2e511m187/femulDisplay.v
+src/Specific/solinas64_2e511m187/fesquare.v
+src/Specific/solinas64_2e511m187/fesquareDisplay.v
+src/Specific/solinas64_2e511m187/freeze.v
+src/Specific/solinas64_2e511m187/freezeDisplay.v
+src/Specific/solinas64_2e511m481/CurveParameters.v
+src/Specific/solinas64_2e511m481/Synthesis.v
+src/Specific/solinas64_2e511m481/femul.v
+src/Specific/solinas64_2e511m481/femulDisplay.v
+src/Specific/solinas64_2e511m481/fesquare.v
+src/Specific/solinas64_2e511m481/fesquareDisplay.v
+src/Specific/solinas64_2e511m481/freeze.v
+src/Specific/solinas64_2e511m481/freezeDisplay.v
+src/Specific/solinas64_2e512m569/CurveParameters.v
+src/Specific/solinas64_2e512m569/Synthesis.v
+src/Specific/solinas64_2e512m569/femul.v
+src/Specific/solinas64_2e512m569/femulDisplay.v
+src/Specific/solinas64_2e512m569/fesquare.v
+src/Specific/solinas64_2e512m569/fesquareDisplay.v
+src/Specific/solinas64_2e512m569/freeze.v
+src/Specific/solinas64_2e512m569/freezeDisplay.v
+src/Specific/solinas64_2e521m1/CurveParameters.v
+src/Specific/solinas64_2e521m1/Synthesis.v
+src/Specific/solinas64_2e521m1/femul.v
+src/Specific/solinas64_2e521m1/femulDisplay.v
+src/Specific/solinas64_2e521m1/fesquare.v
+src/Specific/solinas64_2e521m1/fesquareDisplay.v
+src/Specific/solinas64_2e521m1/freeze.v
+src/Specific/solinas64_2e521m1/freezeDisplay.v
src/Util/AdditionChainExponentiation.v
src/Util/AutoRewrite.v
src/Util/Bool.v
diff --git a/src/Specific/montgomery32_2e127m1/CurveParameters.v b/src/Specific/montgomery32_2e127m1/CurveParameters.v
new file mode 100644
index 000000000..7271e7450
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^127 - 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 32;
+ s := 2^127;
+ c := [(1, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e127m1/Synthesis.v b/src/Specific/montgomery32_2e127m1/Synthesis.v
new file mode 100644
index 000000000..e038b9dcb
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e127m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e127m1/compiler.sh b/src/Specific/montgomery32_2e127m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e127m1/feadd.v b/src/Specific/montgomery32_2e127m1/feadd.v
new file mode 100644
index 000000000..8995236e7
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e127m1/feaddDisplay.v b/src/Specific/montgomery32_2e127m1/feaddDisplay.v
new file mode 100644
index 000000000..742233291
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e127m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e127m1/femul.v b/src/Specific/montgomery32_2e127m1/femul.v
new file mode 100644
index 000000000..96457ad8a
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e127m1/femulDisplay.v b/src/Specific/montgomery32_2e127m1/femulDisplay.v
new file mode 100644
index 000000000..af70cdbdd
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e127m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e127m1/fenz.v b/src/Specific/montgomery32_2e127m1/fenz.v
new file mode 100644
index 000000000..1fc33d28f
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e127m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e127m1/fenzDisplay.v b/src/Specific/montgomery32_2e127m1/fenzDisplay.v
new file mode 100644
index 000000000..62b2f7376
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e127m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e127m1/feopp.v b/src/Specific/montgomery32_2e127m1/feopp.v
new file mode 100644
index 000000000..fff731deb
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e127m1/feoppDisplay.v b/src/Specific/montgomery32_2e127m1/feoppDisplay.v
new file mode 100644
index 000000000..6feb683db
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e127m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e127m1/fesub.v b/src/Specific/montgomery32_2e127m1/fesub.v
new file mode 100644
index 000000000..1f3ad36da
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e127m1/fesubDisplay.v b/src/Specific/montgomery32_2e127m1/fesubDisplay.v
new file mode 100644
index 000000000..a7fd040d4
--- /dev/null
+++ b/src/Specific/montgomery32_2e127m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e127m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e129m25/CurveParameters.v b/src/Specific/montgomery32_2e129m25/CurveParameters.v
new file mode 100644
index 000000000..f2b9c9a3a
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^129 - 25
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 32;
+ s := 2^129;
+ c := [(1, 25)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e129m25/Synthesis.v b/src/Specific/montgomery32_2e129m25/Synthesis.v
new file mode 100644
index 000000000..2efa8853a
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e129m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e129m25/compiler.sh b/src/Specific/montgomery32_2e129m25/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e129m25/feadd.v b/src/Specific/montgomery32_2e129m25/feadd.v
new file mode 100644
index 000000000..72aab82ea
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e129m25/feaddDisplay.v b/src/Specific/montgomery32_2e129m25/feaddDisplay.v
new file mode 100644
index 000000000..877bb5b09
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e129m25.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e129m25/femul.v b/src/Specific/montgomery32_2e129m25/femul.v
new file mode 100644
index 000000000..c0c293317
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e129m25/femulDisplay.v b/src/Specific/montgomery32_2e129m25/femulDisplay.v
new file mode 100644
index 000000000..b0449802e
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e129m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e129m25/fenz.v b/src/Specific/montgomery32_2e129m25/fenz.v
new file mode 100644
index 000000000..ddc172137
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e129m25.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e129m25/fenzDisplay.v b/src/Specific/montgomery32_2e129m25/fenzDisplay.v
new file mode 100644
index 000000000..09c7ec793
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e129m25.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e129m25/feopp.v b/src/Specific/montgomery32_2e129m25/feopp.v
new file mode 100644
index 000000000..3e7cf47f8
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e129m25/feoppDisplay.v b/src/Specific/montgomery32_2e129m25/feoppDisplay.v
new file mode 100644
index 000000000..87b5178c5
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e129m25.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e129m25/fesub.v b/src/Specific/montgomery32_2e129m25/fesub.v
new file mode 100644
index 000000000..1bc92ecab
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e129m25/fesubDisplay.v b/src/Specific/montgomery32_2e129m25/fesubDisplay.v
new file mode 100644
index 000000000..baf922404
--- /dev/null
+++ b/src/Specific/montgomery32_2e129m25/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e129m25.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e130m5/CurveParameters.v b/src/Specific/montgomery32_2e130m5/CurveParameters.v
new file mode 100644
index 000000000..ed897050d
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^130 - 5
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 32;
+ s := 2^130;
+ c := [(1, 5)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e130m5/Synthesis.v b/src/Specific/montgomery32_2e130m5/Synthesis.v
new file mode 100644
index 000000000..fa82fbfdf
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e130m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e130m5/compiler.sh b/src/Specific/montgomery32_2e130m5/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e130m5/feadd.v b/src/Specific/montgomery32_2e130m5/feadd.v
new file mode 100644
index 000000000..a414ba9f6
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e130m5/feaddDisplay.v b/src/Specific/montgomery32_2e130m5/feaddDisplay.v
new file mode 100644
index 000000000..c5ba5ed41
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e130m5.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e130m5/femul.v b/src/Specific/montgomery32_2e130m5/femul.v
new file mode 100644
index 000000000..fda2af144
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e130m5/femulDisplay.v b/src/Specific/montgomery32_2e130m5/femulDisplay.v
new file mode 100644
index 000000000..aab805e5f
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e130m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e130m5/fenz.v b/src/Specific/montgomery32_2e130m5/fenz.v
new file mode 100644
index 000000000..c32c5716f
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e130m5.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e130m5/fenzDisplay.v b/src/Specific/montgomery32_2e130m5/fenzDisplay.v
new file mode 100644
index 000000000..fd8bbe621
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e130m5.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e130m5/feopp.v b/src/Specific/montgomery32_2e130m5/feopp.v
new file mode 100644
index 000000000..03b9e12c7
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e130m5/feoppDisplay.v b/src/Specific/montgomery32_2e130m5/feoppDisplay.v
new file mode 100644
index 000000000..994ca0371
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e130m5.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e130m5/fesub.v b/src/Specific/montgomery32_2e130m5/fesub.v
new file mode 100644
index 000000000..50b9f082b
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e130m5/fesubDisplay.v b/src/Specific/montgomery32_2e130m5/fesubDisplay.v
new file mode 100644
index 000000000..c85637ff1
--- /dev/null
+++ b/src/Specific/montgomery32_2e130m5/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e130m5.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e137m13/CurveParameters.v b/src/Specific/montgomery32_2e137m13/CurveParameters.v
new file mode 100644
index 000000000..c62b2000a
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^137 - 13
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 32;
+ s := 2^137;
+ c := [(1, 13)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e137m13/Synthesis.v b/src/Specific/montgomery32_2e137m13/Synthesis.v
new file mode 100644
index 000000000..e8d2084e9
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e137m13.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e137m13/compiler.sh b/src/Specific/montgomery32_2e137m13/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e137m13/feadd.v b/src/Specific/montgomery32_2e137m13/feadd.v
new file mode 100644
index 000000000..d6a3852c7
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e137m13/feaddDisplay.v b/src/Specific/montgomery32_2e137m13/feaddDisplay.v
new file mode 100644
index 000000000..ad387e156
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e137m13.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e137m13/femul.v b/src/Specific/montgomery32_2e137m13/femul.v
new file mode 100644
index 000000000..590ba8c18
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e137m13/femulDisplay.v b/src/Specific/montgomery32_2e137m13/femulDisplay.v
new file mode 100644
index 000000000..43ddf0442
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e137m13.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e137m13/fenz.v b/src/Specific/montgomery32_2e137m13/fenz.v
new file mode 100644
index 000000000..48f681ce5
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e137m13.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e137m13/fenzDisplay.v b/src/Specific/montgomery32_2e137m13/fenzDisplay.v
new file mode 100644
index 000000000..7f4704f1e
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e137m13.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e137m13/feopp.v b/src/Specific/montgomery32_2e137m13/feopp.v
new file mode 100644
index 000000000..594d26f84
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e137m13/feoppDisplay.v b/src/Specific/montgomery32_2e137m13/feoppDisplay.v
new file mode 100644
index 000000000..df95457ea
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e137m13.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e137m13/fesub.v b/src/Specific/montgomery32_2e137m13/fesub.v
new file mode 100644
index 000000000..8f73ba4da
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e137m13/fesubDisplay.v b/src/Specific/montgomery32_2e137m13/fesubDisplay.v
new file mode 100644
index 000000000..992b1a675
--- /dev/null
+++ b/src/Specific/montgomery32_2e137m13/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e137m13.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e140m27/CurveParameters.v b/src/Specific/montgomery32_2e140m27/CurveParameters.v
new file mode 100644
index 000000000..1d68c4a9d
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^140 - 27
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 32;
+ s := 2^140;
+ c := [(1, 27)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e140m27/Synthesis.v b/src/Specific/montgomery32_2e140m27/Synthesis.v
new file mode 100644
index 000000000..214f41a1f
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e140m27.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e140m27/compiler.sh b/src/Specific/montgomery32_2e140m27/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e140m27/feadd.v b/src/Specific/montgomery32_2e140m27/feadd.v
new file mode 100644
index 000000000..b556d34e8
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e140m27/feaddDisplay.v b/src/Specific/montgomery32_2e140m27/feaddDisplay.v
new file mode 100644
index 000000000..8ad4cfb37
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e140m27.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e140m27/femul.v b/src/Specific/montgomery32_2e140m27/femul.v
new file mode 100644
index 000000000..dce04c0e4
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e140m27/femulDisplay.v b/src/Specific/montgomery32_2e140m27/femulDisplay.v
new file mode 100644
index 000000000..3c2568258
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e140m27.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e140m27/fenz.v b/src/Specific/montgomery32_2e140m27/fenz.v
new file mode 100644
index 000000000..8fe31c295
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e140m27.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e140m27/fenzDisplay.v b/src/Specific/montgomery32_2e140m27/fenzDisplay.v
new file mode 100644
index 000000000..3e74fef0c
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e140m27.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e140m27/feopp.v b/src/Specific/montgomery32_2e140m27/feopp.v
new file mode 100644
index 000000000..e206046e5
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e140m27/feoppDisplay.v b/src/Specific/montgomery32_2e140m27/feoppDisplay.v
new file mode 100644
index 000000000..c9ccccb74
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e140m27.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e140m27/fesub.v b/src/Specific/montgomery32_2e140m27/fesub.v
new file mode 100644
index 000000000..dc4b9af91
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e140m27/fesubDisplay.v b/src/Specific/montgomery32_2e140m27/fesubDisplay.v
new file mode 100644
index 000000000..4764c3f86
--- /dev/null
+++ b/src/Specific/montgomery32_2e140m27/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e140m27.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e141m9/CurveParameters.v b/src/Specific/montgomery32_2e141m9/CurveParameters.v
new file mode 100644
index 000000000..fc7caae4a
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^141 - 9
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 32;
+ s := 2^141;
+ c := [(1, 9)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e141m9/Synthesis.v b/src/Specific/montgomery32_2e141m9/Synthesis.v
new file mode 100644
index 000000000..6ffc2eb40
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e141m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e141m9/compiler.sh b/src/Specific/montgomery32_2e141m9/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e141m9/feadd.v b/src/Specific/montgomery32_2e141m9/feadd.v
new file mode 100644
index 000000000..3815b725c
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e141m9/feaddDisplay.v b/src/Specific/montgomery32_2e141m9/feaddDisplay.v
new file mode 100644
index 000000000..c86b4a613
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e141m9.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e141m9/femul.v b/src/Specific/montgomery32_2e141m9/femul.v
new file mode 100644
index 000000000..bea319f3e
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e141m9/femulDisplay.v b/src/Specific/montgomery32_2e141m9/femulDisplay.v
new file mode 100644
index 000000000..3aeb76d98
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e141m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e141m9/fenz.v b/src/Specific/montgomery32_2e141m9/fenz.v
new file mode 100644
index 000000000..709cfcde5
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e141m9.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e141m9/fenzDisplay.v b/src/Specific/montgomery32_2e141m9/fenzDisplay.v
new file mode 100644
index 000000000..b9bc2e325
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e141m9.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e141m9/feopp.v b/src/Specific/montgomery32_2e141m9/feopp.v
new file mode 100644
index 000000000..8eb1810f6
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e141m9/feoppDisplay.v b/src/Specific/montgomery32_2e141m9/feoppDisplay.v
new file mode 100644
index 000000000..e5bf6e3a9
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e141m9.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e141m9/fesub.v b/src/Specific/montgomery32_2e141m9/fesub.v
new file mode 100644
index 000000000..ceb1b92c3
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e141m9/fesubDisplay.v b/src/Specific/montgomery32_2e141m9/fesubDisplay.v
new file mode 100644
index 000000000..6c3f299da
--- /dev/null
+++ b/src/Specific/montgomery32_2e141m9/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e141m9.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e150m3/CurveParameters.v b/src/Specific/montgomery32_2e150m3/CurveParameters.v
new file mode 100644
index 000000000..451ede6b0
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^150 - 3
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 32;
+ s := 2^150;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e150m3/Synthesis.v b/src/Specific/montgomery32_2e150m3/Synthesis.v
new file mode 100644
index 000000000..3ed8f95bd
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e150m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e150m3/compiler.sh b/src/Specific/montgomery32_2e150m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e150m3/feadd.v b/src/Specific/montgomery32_2e150m3/feadd.v
new file mode 100644
index 000000000..6e5f21892
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e150m3/feaddDisplay.v b/src/Specific/montgomery32_2e150m3/feaddDisplay.v
new file mode 100644
index 000000000..ae4edea8f
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e150m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e150m3/femul.v b/src/Specific/montgomery32_2e150m3/femul.v
new file mode 100644
index 000000000..2630ebbc2
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e150m3/femulDisplay.v b/src/Specific/montgomery32_2e150m3/femulDisplay.v
new file mode 100644
index 000000000..bf7b16acc
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e150m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e150m3/fenz.v b/src/Specific/montgomery32_2e150m3/fenz.v
new file mode 100644
index 000000000..2a76fb424
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e150m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e150m3/fenzDisplay.v b/src/Specific/montgomery32_2e150m3/fenzDisplay.v
new file mode 100644
index 000000000..bb79afed9
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e150m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e150m3/feopp.v b/src/Specific/montgomery32_2e150m3/feopp.v
new file mode 100644
index 000000000..e9ac2150e
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e150m3/feoppDisplay.v b/src/Specific/montgomery32_2e150m3/feoppDisplay.v
new file mode 100644
index 000000000..7982036cd
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e150m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e150m3/fesub.v b/src/Specific/montgomery32_2e150m3/fesub.v
new file mode 100644
index 000000000..ae1e7acb7
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e150m3/fesubDisplay.v b/src/Specific/montgomery32_2e150m3/fesubDisplay.v
new file mode 100644
index 000000000..1be1a9da5
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e150m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e150m5/CurveParameters.v b/src/Specific/montgomery32_2e150m5/CurveParameters.v
new file mode 100644
index 000000000..769ffc313
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^150 - 5
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 32;
+ s := 2^150;
+ c := [(1, 5)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e150m5/Synthesis.v b/src/Specific/montgomery32_2e150m5/Synthesis.v
new file mode 100644
index 000000000..db992a500
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e150m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e150m5/compiler.sh b/src/Specific/montgomery32_2e150m5/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e150m5/feadd.v b/src/Specific/montgomery32_2e150m5/feadd.v
new file mode 100644
index 000000000..43bb2d4c6
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e150m5/feaddDisplay.v b/src/Specific/montgomery32_2e150m5/feaddDisplay.v
new file mode 100644
index 000000000..9dc093043
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e150m5.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e150m5/femul.v b/src/Specific/montgomery32_2e150m5/femul.v
new file mode 100644
index 000000000..9f74ccd35
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e150m5/femulDisplay.v b/src/Specific/montgomery32_2e150m5/femulDisplay.v
new file mode 100644
index 000000000..bd3639c32
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e150m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e150m5/fenz.v b/src/Specific/montgomery32_2e150m5/fenz.v
new file mode 100644
index 000000000..4c76daf9e
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e150m5.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e150m5/fenzDisplay.v b/src/Specific/montgomery32_2e150m5/fenzDisplay.v
new file mode 100644
index 000000000..2fbbc4cf2
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e150m5.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e150m5/feopp.v b/src/Specific/montgomery32_2e150m5/feopp.v
new file mode 100644
index 000000000..5c7bf1d74
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e150m5/feoppDisplay.v b/src/Specific/montgomery32_2e150m5/feoppDisplay.v
new file mode 100644
index 000000000..9e8ee1a1b
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e150m5.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e150m5/fesub.v b/src/Specific/montgomery32_2e150m5/fesub.v
new file mode 100644
index 000000000..3efa571b7
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e150m5/fesubDisplay.v b/src/Specific/montgomery32_2e150m5/fesubDisplay.v
new file mode 100644
index 000000000..7c312b0c0
--- /dev/null
+++ b/src/Specific/montgomery32_2e150m5/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e150m5.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e152m17/CurveParameters.v b/src/Specific/montgomery32_2e152m17/CurveParameters.v
new file mode 100644
index 000000000..181ebf561
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^152 - 17
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 32;
+ s := 2^152;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e152m17/Synthesis.v b/src/Specific/montgomery32_2e152m17/Synthesis.v
new file mode 100644
index 000000000..131f2eea6
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e152m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e152m17/compiler.sh b/src/Specific/montgomery32_2e152m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e152m17/feadd.v b/src/Specific/montgomery32_2e152m17/feadd.v
new file mode 100644
index 000000000..54eb1805e
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e152m17/feaddDisplay.v b/src/Specific/montgomery32_2e152m17/feaddDisplay.v
new file mode 100644
index 000000000..d105f1de5
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e152m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e152m17/femul.v b/src/Specific/montgomery32_2e152m17/femul.v
new file mode 100644
index 000000000..8a1d50827
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e152m17/femulDisplay.v b/src/Specific/montgomery32_2e152m17/femulDisplay.v
new file mode 100644
index 000000000..09b817d68
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e152m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e152m17/fenz.v b/src/Specific/montgomery32_2e152m17/fenz.v
new file mode 100644
index 000000000..c5aa26bff
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e152m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e152m17/fenzDisplay.v b/src/Specific/montgomery32_2e152m17/fenzDisplay.v
new file mode 100644
index 000000000..77b77f1a8
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e152m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e152m17/feopp.v b/src/Specific/montgomery32_2e152m17/feopp.v
new file mode 100644
index 000000000..bb4018ddb
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e152m17/feoppDisplay.v b/src/Specific/montgomery32_2e152m17/feoppDisplay.v
new file mode 100644
index 000000000..5cec5298f
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e152m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e152m17/fesub.v b/src/Specific/montgomery32_2e152m17/fesub.v
new file mode 100644
index 000000000..df898f6ae
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e152m17/fesubDisplay.v b/src/Specific/montgomery32_2e152m17/fesubDisplay.v
new file mode 100644
index 000000000..22f29e493
--- /dev/null
+++ b/src/Specific/montgomery32_2e152m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e152m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e158m15/CurveParameters.v b/src/Specific/montgomery32_2e158m15/CurveParameters.v
new file mode 100644
index 000000000..fdae2b541
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^158 - 15
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 32;
+ s := 2^158;
+ c := [(1, 15)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e158m15/Synthesis.v b/src/Specific/montgomery32_2e158m15/Synthesis.v
new file mode 100644
index 000000000..4fc53a610
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e158m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e158m15/compiler.sh b/src/Specific/montgomery32_2e158m15/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e158m15/feadd.v b/src/Specific/montgomery32_2e158m15/feadd.v
new file mode 100644
index 000000000..7652ecd64
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e158m15/feaddDisplay.v b/src/Specific/montgomery32_2e158m15/feaddDisplay.v
new file mode 100644
index 000000000..ce30ed078
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e158m15.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e158m15/femul.v b/src/Specific/montgomery32_2e158m15/femul.v
new file mode 100644
index 000000000..31a5e0d29
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e158m15/femulDisplay.v b/src/Specific/montgomery32_2e158m15/femulDisplay.v
new file mode 100644
index 000000000..b476b8ee0
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e158m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e158m15/fenz.v b/src/Specific/montgomery32_2e158m15/fenz.v
new file mode 100644
index 000000000..0ad9df431
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e158m15.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e158m15/fenzDisplay.v b/src/Specific/montgomery32_2e158m15/fenzDisplay.v
new file mode 100644
index 000000000..b773211c7
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e158m15.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e158m15/feopp.v b/src/Specific/montgomery32_2e158m15/feopp.v
new file mode 100644
index 000000000..607bceb69
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e158m15/feoppDisplay.v b/src/Specific/montgomery32_2e158m15/feoppDisplay.v
new file mode 100644
index 000000000..e69d0cf88
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e158m15.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e158m15/fesub.v b/src/Specific/montgomery32_2e158m15/fesub.v
new file mode 100644
index 000000000..cfa43a346
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e158m15/fesubDisplay.v b/src/Specific/montgomery32_2e158m15/fesubDisplay.v
new file mode 100644
index 000000000..1e89857c8
--- /dev/null
+++ b/src/Specific/montgomery32_2e158m15/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e158m15.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e165m25/CurveParameters.v b/src/Specific/montgomery32_2e165m25/CurveParameters.v
new file mode 100644
index 000000000..bee8e76a5
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^165 - 25
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 32;
+ s := 2^165;
+ c := [(1, 25)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e165m25/Synthesis.v b/src/Specific/montgomery32_2e165m25/Synthesis.v
new file mode 100644
index 000000000..8beac47a1
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e165m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e165m25/compiler.sh b/src/Specific/montgomery32_2e165m25/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e165m25/feadd.v b/src/Specific/montgomery32_2e165m25/feadd.v
new file mode 100644
index 000000000..7f7384058
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e165m25/feaddDisplay.v b/src/Specific/montgomery32_2e165m25/feaddDisplay.v
new file mode 100644
index 000000000..ad74f6bc5
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e165m25.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e165m25/femul.v b/src/Specific/montgomery32_2e165m25/femul.v
new file mode 100644
index 000000000..b80572dfc
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e165m25/femulDisplay.v b/src/Specific/montgomery32_2e165m25/femulDisplay.v
new file mode 100644
index 000000000..14f016226
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e165m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e165m25/fenz.v b/src/Specific/montgomery32_2e165m25/fenz.v
new file mode 100644
index 000000000..3af08d6c0
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e165m25.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e165m25/fenzDisplay.v b/src/Specific/montgomery32_2e165m25/fenzDisplay.v
new file mode 100644
index 000000000..81b2a02c3
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e165m25.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e165m25/feopp.v b/src/Specific/montgomery32_2e165m25/feopp.v
new file mode 100644
index 000000000..28bf36f9b
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e165m25/feoppDisplay.v b/src/Specific/montgomery32_2e165m25/feoppDisplay.v
new file mode 100644
index 000000000..105d0ceaa
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e165m25.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e165m25/fesub.v b/src/Specific/montgomery32_2e165m25/fesub.v
new file mode 100644
index 000000000..37a38cf13
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e165m25/fesubDisplay.v b/src/Specific/montgomery32_2e165m25/fesubDisplay.v
new file mode 100644
index 000000000..1bb58c507
--- /dev/null
+++ b/src/Specific/montgomery32_2e165m25/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e165m25.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e166m5/CurveParameters.v b/src/Specific/montgomery32_2e166m5/CurveParameters.v
new file mode 100644
index 000000000..8b47d73a3
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^166 - 5
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 32;
+ s := 2^166;
+ c := [(1, 5)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e166m5/Synthesis.v b/src/Specific/montgomery32_2e166m5/Synthesis.v
new file mode 100644
index 000000000..a86a94588
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e166m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e166m5/compiler.sh b/src/Specific/montgomery32_2e166m5/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e166m5/feadd.v b/src/Specific/montgomery32_2e166m5/feadd.v
new file mode 100644
index 000000000..45c2d917c
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e166m5/feaddDisplay.v b/src/Specific/montgomery32_2e166m5/feaddDisplay.v
new file mode 100644
index 000000000..8f924bda5
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e166m5.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e166m5/femul.v b/src/Specific/montgomery32_2e166m5/femul.v
new file mode 100644
index 000000000..40b4d1adb
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e166m5/femulDisplay.v b/src/Specific/montgomery32_2e166m5/femulDisplay.v
new file mode 100644
index 000000000..b8abe9973
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e166m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e166m5/fenz.v b/src/Specific/montgomery32_2e166m5/fenz.v
new file mode 100644
index 000000000..b4e9ef573
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e166m5.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e166m5/fenzDisplay.v b/src/Specific/montgomery32_2e166m5/fenzDisplay.v
new file mode 100644
index 000000000..9c050db08
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e166m5.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e166m5/feopp.v b/src/Specific/montgomery32_2e166m5/feopp.v
new file mode 100644
index 000000000..d1091c7b2
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e166m5/feoppDisplay.v b/src/Specific/montgomery32_2e166m5/feoppDisplay.v
new file mode 100644
index 000000000..d1f7a8a08
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e166m5.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e166m5/fesub.v b/src/Specific/montgomery32_2e166m5/fesub.v
new file mode 100644
index 000000000..81da62ba4
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e166m5/fesubDisplay.v b/src/Specific/montgomery32_2e166m5/fesubDisplay.v
new file mode 100644
index 000000000..d0ad9d58b
--- /dev/null
+++ b/src/Specific/montgomery32_2e166m5/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e166m5.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e171m19/CurveParameters.v b/src/Specific/montgomery32_2e171m19/CurveParameters.v
new file mode 100644
index 000000000..cb63b57ec
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^171 - 19
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 32;
+ s := 2^171;
+ c := [(1, 19)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e171m19/Synthesis.v b/src/Specific/montgomery32_2e171m19/Synthesis.v
new file mode 100644
index 000000000..8a40d938e
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e171m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e171m19/compiler.sh b/src/Specific/montgomery32_2e171m19/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e171m19/feadd.v b/src/Specific/montgomery32_2e171m19/feadd.v
new file mode 100644
index 000000000..5e2a1897e
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e171m19/feaddDisplay.v b/src/Specific/montgomery32_2e171m19/feaddDisplay.v
new file mode 100644
index 000000000..85efdf32a
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e171m19.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e171m19/femul.v b/src/Specific/montgomery32_2e171m19/femul.v
new file mode 100644
index 000000000..ceae1f3e2
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e171m19/femulDisplay.v b/src/Specific/montgomery32_2e171m19/femulDisplay.v
new file mode 100644
index 000000000..6939ec696
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e171m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e171m19/fenz.v b/src/Specific/montgomery32_2e171m19/fenz.v
new file mode 100644
index 000000000..d146235dc
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e171m19.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e171m19/fenzDisplay.v b/src/Specific/montgomery32_2e171m19/fenzDisplay.v
new file mode 100644
index 000000000..499a92be1
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e171m19.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e171m19/feopp.v b/src/Specific/montgomery32_2e171m19/feopp.v
new file mode 100644
index 000000000..dd8b1d547
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e171m19/feoppDisplay.v b/src/Specific/montgomery32_2e171m19/feoppDisplay.v
new file mode 100644
index 000000000..ca5910e4b
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e171m19.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e171m19/fesub.v b/src/Specific/montgomery32_2e171m19/fesub.v
new file mode 100644
index 000000000..6af933378
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e171m19/fesubDisplay.v b/src/Specific/montgomery32_2e171m19/fesubDisplay.v
new file mode 100644
index 000000000..12f893b6c
--- /dev/null
+++ b/src/Specific/montgomery32_2e171m19/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e171m19.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e174m17/CurveParameters.v b/src/Specific/montgomery32_2e174m17/CurveParameters.v
new file mode 100644
index 000000000..8f3460538
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^174 - 17
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 32;
+ s := 2^174;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e174m17/Synthesis.v b/src/Specific/montgomery32_2e174m17/Synthesis.v
new file mode 100644
index 000000000..816dcffd4
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e174m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e174m17/compiler.sh b/src/Specific/montgomery32_2e174m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e174m17/feadd.v b/src/Specific/montgomery32_2e174m17/feadd.v
new file mode 100644
index 000000000..9bc9dffd7
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e174m17/feaddDisplay.v b/src/Specific/montgomery32_2e174m17/feaddDisplay.v
new file mode 100644
index 000000000..582e2a81b
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e174m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e174m17/femul.v b/src/Specific/montgomery32_2e174m17/femul.v
new file mode 100644
index 000000000..514ae2119
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e174m17/femulDisplay.v b/src/Specific/montgomery32_2e174m17/femulDisplay.v
new file mode 100644
index 000000000..673b1116a
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e174m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e174m17/fenz.v b/src/Specific/montgomery32_2e174m17/fenz.v
new file mode 100644
index 000000000..cce48df8d
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e174m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e174m17/fenzDisplay.v b/src/Specific/montgomery32_2e174m17/fenzDisplay.v
new file mode 100644
index 000000000..91476fa22
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e174m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e174m17/feopp.v b/src/Specific/montgomery32_2e174m17/feopp.v
new file mode 100644
index 000000000..eb80562c5
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e174m17/feoppDisplay.v b/src/Specific/montgomery32_2e174m17/feoppDisplay.v
new file mode 100644
index 000000000..9742d8ebd
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e174m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e174m17/fesub.v b/src/Specific/montgomery32_2e174m17/fesub.v
new file mode 100644
index 000000000..2e3dc26bb
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e174m17/fesubDisplay.v b/src/Specific/montgomery32_2e174m17/fesubDisplay.v
new file mode 100644
index 000000000..7491b4c21
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e174m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e174m3/CurveParameters.v b/src/Specific/montgomery32_2e174m3/CurveParameters.v
new file mode 100644
index 000000000..9a29393f4
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^174 - 3
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 32;
+ s := 2^174;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e174m3/Synthesis.v b/src/Specific/montgomery32_2e174m3/Synthesis.v
new file mode 100644
index 000000000..bd48969cc
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e174m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e174m3/compiler.sh b/src/Specific/montgomery32_2e174m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e174m3/feadd.v b/src/Specific/montgomery32_2e174m3/feadd.v
new file mode 100644
index 000000000..de69f673b
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e174m3/feaddDisplay.v b/src/Specific/montgomery32_2e174m3/feaddDisplay.v
new file mode 100644
index 000000000..af03ecfd6
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e174m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e174m3/femul.v b/src/Specific/montgomery32_2e174m3/femul.v
new file mode 100644
index 000000000..1fa11320a
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e174m3/femulDisplay.v b/src/Specific/montgomery32_2e174m3/femulDisplay.v
new file mode 100644
index 000000000..76c4f50d1
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e174m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e174m3/fenz.v b/src/Specific/montgomery32_2e174m3/fenz.v
new file mode 100644
index 000000000..030752b51
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e174m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e174m3/fenzDisplay.v b/src/Specific/montgomery32_2e174m3/fenzDisplay.v
new file mode 100644
index 000000000..d3911c248
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e174m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e174m3/feopp.v b/src/Specific/montgomery32_2e174m3/feopp.v
new file mode 100644
index 000000000..cbcf36876
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e174m3/feoppDisplay.v b/src/Specific/montgomery32_2e174m3/feoppDisplay.v
new file mode 100644
index 000000000..ca787582d
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e174m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e174m3/fesub.v b/src/Specific/montgomery32_2e174m3/fesub.v
new file mode 100644
index 000000000..3e32b8128
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e174m3/fesubDisplay.v b/src/Specific/montgomery32_2e174m3/fesubDisplay.v
new file mode 100644
index 000000000..4b95e7505
--- /dev/null
+++ b/src/Specific/montgomery32_2e174m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e174m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e189m25/CurveParameters.v b/src/Specific/montgomery32_2e189m25/CurveParameters.v
new file mode 100644
index 000000000..6c6ebcbbe
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^189 - 25
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 32;
+ s := 2^189;
+ c := [(1, 25)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e189m25/Synthesis.v b/src/Specific/montgomery32_2e189m25/Synthesis.v
new file mode 100644
index 000000000..69627182e
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e189m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e189m25/compiler.sh b/src/Specific/montgomery32_2e189m25/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e189m25/feadd.v b/src/Specific/montgomery32_2e189m25/feadd.v
new file mode 100644
index 000000000..e0abed055
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e189m25/feaddDisplay.v b/src/Specific/montgomery32_2e189m25/feaddDisplay.v
new file mode 100644
index 000000000..307d3eea8
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e189m25.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e189m25/femul.v b/src/Specific/montgomery32_2e189m25/femul.v
new file mode 100644
index 000000000..67c6ec616
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e189m25/femulDisplay.v b/src/Specific/montgomery32_2e189m25/femulDisplay.v
new file mode 100644
index 000000000..5f4e9d31e
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e189m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e189m25/fenz.v b/src/Specific/montgomery32_2e189m25/fenz.v
new file mode 100644
index 000000000..c02a95339
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e189m25.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e189m25/fenzDisplay.v b/src/Specific/montgomery32_2e189m25/fenzDisplay.v
new file mode 100644
index 000000000..b3f4c9256
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e189m25.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e189m25/feopp.v b/src/Specific/montgomery32_2e189m25/feopp.v
new file mode 100644
index 000000000..6aaa3b9fe
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e189m25/feoppDisplay.v b/src/Specific/montgomery32_2e189m25/feoppDisplay.v
new file mode 100644
index 000000000..7dcadea73
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e189m25.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e189m25/fesub.v b/src/Specific/montgomery32_2e189m25/fesub.v
new file mode 100644
index 000000000..aea8b71d5
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e189m25/fesubDisplay.v b/src/Specific/montgomery32_2e189m25/fesubDisplay.v
new file mode 100644
index 000000000..f69d562fc
--- /dev/null
+++ b/src/Specific/montgomery32_2e189m25/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e189m25.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e190m11/CurveParameters.v b/src/Specific/montgomery32_2e190m11/CurveParameters.v
new file mode 100644
index 000000000..1ef83cdcf
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^190 - 11
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 32;
+ s := 2^190;
+ c := [(1, 11)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e190m11/Synthesis.v b/src/Specific/montgomery32_2e190m11/Synthesis.v
new file mode 100644
index 000000000..c74345f7c
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e190m11.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e190m11/compiler.sh b/src/Specific/montgomery32_2e190m11/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e190m11/feadd.v b/src/Specific/montgomery32_2e190m11/feadd.v
new file mode 100644
index 000000000..f4ab60845
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e190m11/feaddDisplay.v b/src/Specific/montgomery32_2e190m11/feaddDisplay.v
new file mode 100644
index 000000000..6c47c3515
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e190m11.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e190m11/femul.v b/src/Specific/montgomery32_2e190m11/femul.v
new file mode 100644
index 000000000..21976c333
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e190m11/femulDisplay.v b/src/Specific/montgomery32_2e190m11/femulDisplay.v
new file mode 100644
index 000000000..349e5ceb8
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e190m11.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e190m11/fenz.v b/src/Specific/montgomery32_2e190m11/fenz.v
new file mode 100644
index 000000000..ac0479c7a
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e190m11.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e190m11/fenzDisplay.v b/src/Specific/montgomery32_2e190m11/fenzDisplay.v
new file mode 100644
index 000000000..2e3c92d83
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e190m11.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e190m11/feopp.v b/src/Specific/montgomery32_2e190m11/feopp.v
new file mode 100644
index 000000000..70a8e3f0d
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e190m11/feoppDisplay.v b/src/Specific/montgomery32_2e190m11/feoppDisplay.v
new file mode 100644
index 000000000..4008af959
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e190m11.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e190m11/fesub.v b/src/Specific/montgomery32_2e190m11/fesub.v
new file mode 100644
index 000000000..4756e6914
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e190m11/fesubDisplay.v b/src/Specific/montgomery32_2e190m11/fesubDisplay.v
new file mode 100644
index 000000000..18c413664
--- /dev/null
+++ b/src/Specific/montgomery32_2e190m11/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e190m11.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e191m19/CurveParameters.v b/src/Specific/montgomery32_2e191m19/CurveParameters.v
new file mode 100644
index 000000000..ff8992522
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^191 - 19
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 32;
+ s := 2^191;
+ c := [(1, 19)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e191m19/Synthesis.v b/src/Specific/montgomery32_2e191m19/Synthesis.v
new file mode 100644
index 000000000..21cb4c6ee
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e191m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e191m19/compiler.sh b/src/Specific/montgomery32_2e191m19/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e191m19/feadd.v b/src/Specific/montgomery32_2e191m19/feadd.v
new file mode 100644
index 000000000..bd81c9cb8
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e191m19/feaddDisplay.v b/src/Specific/montgomery32_2e191m19/feaddDisplay.v
new file mode 100644
index 000000000..7bcabe444
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e191m19.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e191m19/femul.v b/src/Specific/montgomery32_2e191m19/femul.v
new file mode 100644
index 000000000..7d59f24f4
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e191m19/femulDisplay.v b/src/Specific/montgomery32_2e191m19/femulDisplay.v
new file mode 100644
index 000000000..6986a374e
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e191m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e191m19/fenz.v b/src/Specific/montgomery32_2e191m19/fenz.v
new file mode 100644
index 000000000..a318b9d97
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e191m19.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e191m19/fenzDisplay.v b/src/Specific/montgomery32_2e191m19/fenzDisplay.v
new file mode 100644
index 000000000..787fdcf7e
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e191m19.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e191m19/feopp.v b/src/Specific/montgomery32_2e191m19/feopp.v
new file mode 100644
index 000000000..d13666038
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e191m19/feoppDisplay.v b/src/Specific/montgomery32_2e191m19/feoppDisplay.v
new file mode 100644
index 000000000..c7b681f99
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e191m19.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e191m19/fesub.v b/src/Specific/montgomery32_2e191m19/fesub.v
new file mode 100644
index 000000000..609b83007
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e191m19/fesubDisplay.v b/src/Specific/montgomery32_2e191m19/fesubDisplay.v
new file mode 100644
index 000000000..28d7306c6
--- /dev/null
+++ b/src/Specific/montgomery32_2e191m19/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e191m19.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e192m2e64m1/CurveParameters.v b/src/Specific/montgomery32_2e192m2e64m1/CurveParameters.v
new file mode 100644
index 000000000..5d6da4b0d
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^192 - 2^64 - 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^192;
+ c := [(1, 1); (2^64, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e192m2e64m1/Synthesis.v b/src/Specific/montgomery32_2e192m2e64m1/Synthesis.v
new file mode 100644
index 000000000..6899e4b9b
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e192m2e64m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e192m2e64m1/compiler.sh b/src/Specific/montgomery32_2e192m2e64m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e192m2e64m1/feadd.v b/src/Specific/montgomery32_2e192m2e64m1/feadd.v
new file mode 100644
index 000000000..1296e27d7
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e192m2e64m1/feaddDisplay.v b/src/Specific/montgomery32_2e192m2e64m1/feaddDisplay.v
new file mode 100644
index 000000000..5d8dfe65f
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e192m2e64m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e192m2e64m1/femul.v b/src/Specific/montgomery32_2e192m2e64m1/femul.v
new file mode 100644
index 000000000..738b4317d
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e192m2e64m1/femulDisplay.v b/src/Specific/montgomery32_2e192m2e64m1/femulDisplay.v
new file mode 100644
index 000000000..3d74cc167
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e192m2e64m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e192m2e64m1/fenz.v b/src/Specific/montgomery32_2e192m2e64m1/fenz.v
new file mode 100644
index 000000000..49ce0cfd8
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e192m2e64m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e192m2e64m1/fenzDisplay.v b/src/Specific/montgomery32_2e192m2e64m1/fenzDisplay.v
new file mode 100644
index 000000000..2192b6df7
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e192m2e64m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e192m2e64m1/feopp.v b/src/Specific/montgomery32_2e192m2e64m1/feopp.v
new file mode 100644
index 000000000..c277bf9bb
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e192m2e64m1/feoppDisplay.v b/src/Specific/montgomery32_2e192m2e64m1/feoppDisplay.v
new file mode 100644
index 000000000..33bcbe8c5
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e192m2e64m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e192m2e64m1/fesub.v b/src/Specific/montgomery32_2e192m2e64m1/fesub.v
new file mode 100644
index 000000000..05329eaee
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e192m2e64m1/fesubDisplay.v b/src/Specific/montgomery32_2e192m2e64m1/fesubDisplay.v
new file mode 100644
index 000000000..a71620480
--- /dev/null
+++ b/src/Specific/montgomery32_2e192m2e64m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e192m2e64m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e194m33/CurveParameters.v b/src/Specific/montgomery32_2e194m33/CurveParameters.v
new file mode 100644
index 000000000..6a108e7ef
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^194 - 33
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^194;
+ c := [(1, 33)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e194m33/Synthesis.v b/src/Specific/montgomery32_2e194m33/Synthesis.v
new file mode 100644
index 000000000..dfd857211
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e194m33.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e194m33/compiler.sh b/src/Specific/montgomery32_2e194m33/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e194m33/feadd.v b/src/Specific/montgomery32_2e194m33/feadd.v
new file mode 100644
index 000000000..e511b6dbd
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e194m33/feaddDisplay.v b/src/Specific/montgomery32_2e194m33/feaddDisplay.v
new file mode 100644
index 000000000..b9055d15c
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e194m33.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e194m33/femul.v b/src/Specific/montgomery32_2e194m33/femul.v
new file mode 100644
index 000000000..cf1e4db6a
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e194m33/femulDisplay.v b/src/Specific/montgomery32_2e194m33/femulDisplay.v
new file mode 100644
index 000000000..dcf8c2692
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e194m33.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e194m33/fenz.v b/src/Specific/montgomery32_2e194m33/fenz.v
new file mode 100644
index 000000000..f95260086
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e194m33.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e194m33/fenzDisplay.v b/src/Specific/montgomery32_2e194m33/fenzDisplay.v
new file mode 100644
index 000000000..34bfac84c
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e194m33.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e194m33/feopp.v b/src/Specific/montgomery32_2e194m33/feopp.v
new file mode 100644
index 000000000..2ae52b8d2
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e194m33/feoppDisplay.v b/src/Specific/montgomery32_2e194m33/feoppDisplay.v
new file mode 100644
index 000000000..23308d632
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e194m33.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e194m33/fesub.v b/src/Specific/montgomery32_2e194m33/fesub.v
new file mode 100644
index 000000000..176c4bfb6
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e194m33/fesubDisplay.v b/src/Specific/montgomery32_2e194m33/fesubDisplay.v
new file mode 100644
index 000000000..12e4ada2d
--- /dev/null
+++ b/src/Specific/montgomery32_2e194m33/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e194m33.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e196m15/CurveParameters.v b/src/Specific/montgomery32_2e196m15/CurveParameters.v
new file mode 100644
index 000000000..60ec23119
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^196 - 15
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^196;
+ c := [(1, 15)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e196m15/Synthesis.v b/src/Specific/montgomery32_2e196m15/Synthesis.v
new file mode 100644
index 000000000..28493d4d3
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e196m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e196m15/compiler.sh b/src/Specific/montgomery32_2e196m15/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e196m15/feadd.v b/src/Specific/montgomery32_2e196m15/feadd.v
new file mode 100644
index 000000000..687c287ae
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e196m15/feaddDisplay.v b/src/Specific/montgomery32_2e196m15/feaddDisplay.v
new file mode 100644
index 000000000..3d6801f1a
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e196m15.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e196m15/femul.v b/src/Specific/montgomery32_2e196m15/femul.v
new file mode 100644
index 000000000..691ddd7d9
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e196m15/femulDisplay.v b/src/Specific/montgomery32_2e196m15/femulDisplay.v
new file mode 100644
index 000000000..06e79eca5
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e196m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e196m15/fenz.v b/src/Specific/montgomery32_2e196m15/fenz.v
new file mode 100644
index 000000000..b60cde1ca
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e196m15.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e196m15/fenzDisplay.v b/src/Specific/montgomery32_2e196m15/fenzDisplay.v
new file mode 100644
index 000000000..eb7d4342e
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e196m15.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e196m15/feopp.v b/src/Specific/montgomery32_2e196m15/feopp.v
new file mode 100644
index 000000000..f8281a810
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e196m15/feoppDisplay.v b/src/Specific/montgomery32_2e196m15/feoppDisplay.v
new file mode 100644
index 000000000..c5e923839
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e196m15.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e196m15/fesub.v b/src/Specific/montgomery32_2e196m15/fesub.v
new file mode 100644
index 000000000..071449152
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e196m15/fesubDisplay.v b/src/Specific/montgomery32_2e196m15/fesubDisplay.v
new file mode 100644
index 000000000..4845d82f2
--- /dev/null
+++ b/src/Specific/montgomery32_2e196m15/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e196m15.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e198m17/CurveParameters.v b/src/Specific/montgomery32_2e198m17/CurveParameters.v
new file mode 100644
index 000000000..585f66369
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^198 - 17
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^198;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e198m17/Synthesis.v b/src/Specific/montgomery32_2e198m17/Synthesis.v
new file mode 100644
index 000000000..ba18c96f4
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e198m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e198m17/compiler.sh b/src/Specific/montgomery32_2e198m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e198m17/feadd.v b/src/Specific/montgomery32_2e198m17/feadd.v
new file mode 100644
index 000000000..c95d11ed8
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e198m17/feaddDisplay.v b/src/Specific/montgomery32_2e198m17/feaddDisplay.v
new file mode 100644
index 000000000..08d61ce2d
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e198m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e198m17/femul.v b/src/Specific/montgomery32_2e198m17/femul.v
new file mode 100644
index 000000000..fd1ba2f0d
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e198m17/femulDisplay.v b/src/Specific/montgomery32_2e198m17/femulDisplay.v
new file mode 100644
index 000000000..bff99aa19
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e198m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e198m17/fenz.v b/src/Specific/montgomery32_2e198m17/fenz.v
new file mode 100644
index 000000000..b729372aa
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e198m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e198m17/fenzDisplay.v b/src/Specific/montgomery32_2e198m17/fenzDisplay.v
new file mode 100644
index 000000000..65a94c686
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e198m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e198m17/feopp.v b/src/Specific/montgomery32_2e198m17/feopp.v
new file mode 100644
index 000000000..6fecd7de8
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e198m17/feoppDisplay.v b/src/Specific/montgomery32_2e198m17/feoppDisplay.v
new file mode 100644
index 000000000..ca60ae061
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e198m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e198m17/fesub.v b/src/Specific/montgomery32_2e198m17/fesub.v
new file mode 100644
index 000000000..97b88ef38
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e198m17/fesubDisplay.v b/src/Specific/montgomery32_2e198m17/fesubDisplay.v
new file mode 100644
index 000000000..78e810233
--- /dev/null
+++ b/src/Specific/montgomery32_2e198m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e198m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e206m5/CurveParameters.v b/src/Specific/montgomery32_2e206m5/CurveParameters.v
new file mode 100644
index 000000000..5cc00a290
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^206 - 5
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^206;
+ c := [(1, 5)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e206m5/Synthesis.v b/src/Specific/montgomery32_2e206m5/Synthesis.v
new file mode 100644
index 000000000..4648fe5cd
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e206m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e206m5/compiler.sh b/src/Specific/montgomery32_2e206m5/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e206m5/feadd.v b/src/Specific/montgomery32_2e206m5/feadd.v
new file mode 100644
index 000000000..98d61d0cd
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e206m5/feaddDisplay.v b/src/Specific/montgomery32_2e206m5/feaddDisplay.v
new file mode 100644
index 000000000..d141f29d2
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e206m5.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e206m5/femul.v b/src/Specific/montgomery32_2e206m5/femul.v
new file mode 100644
index 000000000..129e60db8
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e206m5/femulDisplay.v b/src/Specific/montgomery32_2e206m5/femulDisplay.v
new file mode 100644
index 000000000..275637fb7
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e206m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e206m5/fenz.v b/src/Specific/montgomery32_2e206m5/fenz.v
new file mode 100644
index 000000000..2420a3e9c
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e206m5.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e206m5/fenzDisplay.v b/src/Specific/montgomery32_2e206m5/fenzDisplay.v
new file mode 100644
index 000000000..ed141e85e
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e206m5.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e206m5/feopp.v b/src/Specific/montgomery32_2e206m5/feopp.v
new file mode 100644
index 000000000..216329856
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e206m5/feoppDisplay.v b/src/Specific/montgomery32_2e206m5/feoppDisplay.v
new file mode 100644
index 000000000..c9d1d23b4
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e206m5.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e206m5/fesub.v b/src/Specific/montgomery32_2e206m5/fesub.v
new file mode 100644
index 000000000..a27136a5c
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e206m5/fesubDisplay.v b/src/Specific/montgomery32_2e206m5/fesubDisplay.v
new file mode 100644
index 000000000..d05995cd1
--- /dev/null
+++ b/src/Specific/montgomery32_2e206m5/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e206m5.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e212m29/CurveParameters.v b/src/Specific/montgomery32_2e212m29/CurveParameters.v
new file mode 100644
index 000000000..8e339a959
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^212 - 29
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^212;
+ c := [(1, 29)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e212m29/Synthesis.v b/src/Specific/montgomery32_2e212m29/Synthesis.v
new file mode 100644
index 000000000..8f1fa665c
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e212m29.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e212m29/compiler.sh b/src/Specific/montgomery32_2e212m29/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e212m29/feadd.v b/src/Specific/montgomery32_2e212m29/feadd.v
new file mode 100644
index 000000000..1c37eb6e6
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e212m29/feaddDisplay.v b/src/Specific/montgomery32_2e212m29/feaddDisplay.v
new file mode 100644
index 000000000..5e53e4b35
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e212m29.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e212m29/femul.v b/src/Specific/montgomery32_2e212m29/femul.v
new file mode 100644
index 000000000..973c62a7d
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e212m29/femulDisplay.v b/src/Specific/montgomery32_2e212m29/femulDisplay.v
new file mode 100644
index 000000000..df7dc64c1
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e212m29.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e212m29/fenz.v b/src/Specific/montgomery32_2e212m29/fenz.v
new file mode 100644
index 000000000..387eff9a2
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e212m29.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e212m29/fenzDisplay.v b/src/Specific/montgomery32_2e212m29/fenzDisplay.v
new file mode 100644
index 000000000..327bc2088
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e212m29.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e212m29/feopp.v b/src/Specific/montgomery32_2e212m29/feopp.v
new file mode 100644
index 000000000..bc00a4b6e
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e212m29/feoppDisplay.v b/src/Specific/montgomery32_2e212m29/feoppDisplay.v
new file mode 100644
index 000000000..11fd2c17e
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e212m29.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e212m29/fesub.v b/src/Specific/montgomery32_2e212m29/fesub.v
new file mode 100644
index 000000000..fd45cae3d
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e212m29/fesubDisplay.v b/src/Specific/montgomery32_2e212m29/fesubDisplay.v
new file mode 100644
index 000000000..940328e6b
--- /dev/null
+++ b/src/Specific/montgomery32_2e212m29/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e212m29.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e213m3/CurveParameters.v b/src/Specific/montgomery32_2e213m3/CurveParameters.v
new file mode 100644
index 000000000..5523cd0df
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^213 - 3
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^213;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e213m3/Synthesis.v b/src/Specific/montgomery32_2e213m3/Synthesis.v
new file mode 100644
index 000000000..776cddaa6
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e213m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e213m3/compiler.sh b/src/Specific/montgomery32_2e213m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e213m3/feadd.v b/src/Specific/montgomery32_2e213m3/feadd.v
new file mode 100644
index 000000000..2cc525e0f
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e213m3/feaddDisplay.v b/src/Specific/montgomery32_2e213m3/feaddDisplay.v
new file mode 100644
index 000000000..486682872
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e213m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e213m3/femul.v b/src/Specific/montgomery32_2e213m3/femul.v
new file mode 100644
index 000000000..3a7f9d95d
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e213m3/femulDisplay.v b/src/Specific/montgomery32_2e213m3/femulDisplay.v
new file mode 100644
index 000000000..dab554f56
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e213m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e213m3/fenz.v b/src/Specific/montgomery32_2e213m3/fenz.v
new file mode 100644
index 000000000..ecb80ca36
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e213m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e213m3/fenzDisplay.v b/src/Specific/montgomery32_2e213m3/fenzDisplay.v
new file mode 100644
index 000000000..558a3e400
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e213m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e213m3/feopp.v b/src/Specific/montgomery32_2e213m3/feopp.v
new file mode 100644
index 000000000..f9194d55f
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e213m3/feoppDisplay.v b/src/Specific/montgomery32_2e213m3/feoppDisplay.v
new file mode 100644
index 000000000..62aa8f218
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e213m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e213m3/fesub.v b/src/Specific/montgomery32_2e213m3/fesub.v
new file mode 100644
index 000000000..99c7fc676
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e213m3/fesubDisplay.v b/src/Specific/montgomery32_2e213m3/fesubDisplay.v
new file mode 100644
index 000000000..f4e649d11
--- /dev/null
+++ b/src/Specific/montgomery32_2e213m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e213m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e216m2e108m1/CurveParameters.v b/src/Specific/montgomery32_2e216m2e108m1/CurveParameters.v
new file mode 100644
index 000000000..cd5b5032c
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^216 - 2^108 - 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^216;
+ c := [(1, 1); (2^108, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some true;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e216m2e108m1/Synthesis.v b/src/Specific/montgomery32_2e216m2e108m1/Synthesis.v
new file mode 100644
index 000000000..27d931578
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e216m2e108m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e216m2e108m1/compiler.sh b/src/Specific/montgomery32_2e216m2e108m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e216m2e108m1/feadd.v b/src/Specific/montgomery32_2e216m2e108m1/feadd.v
new file mode 100644
index 000000000..5b6264943
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e216m2e108m1/feaddDisplay.v b/src/Specific/montgomery32_2e216m2e108m1/feaddDisplay.v
new file mode 100644
index 000000000..e69b5149c
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e216m2e108m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e216m2e108m1/femul.v b/src/Specific/montgomery32_2e216m2e108m1/femul.v
new file mode 100644
index 000000000..077f95520
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e216m2e108m1/femulDisplay.v b/src/Specific/montgomery32_2e216m2e108m1/femulDisplay.v
new file mode 100644
index 000000000..1c4da24b4
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e216m2e108m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e216m2e108m1/fenz.v b/src/Specific/montgomery32_2e216m2e108m1/fenz.v
new file mode 100644
index 000000000..181876896
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e216m2e108m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e216m2e108m1/fenzDisplay.v b/src/Specific/montgomery32_2e216m2e108m1/fenzDisplay.v
new file mode 100644
index 000000000..66d7cd840
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e216m2e108m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e216m2e108m1/feopp.v b/src/Specific/montgomery32_2e216m2e108m1/feopp.v
new file mode 100644
index 000000000..e3def1f89
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e216m2e108m1/feoppDisplay.v b/src/Specific/montgomery32_2e216m2e108m1/feoppDisplay.v
new file mode 100644
index 000000000..f05ce80e8
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e216m2e108m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e216m2e108m1/fesub.v b/src/Specific/montgomery32_2e216m2e108m1/fesub.v
new file mode 100644
index 000000000..21133b9f0
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e216m2e108m1/fesubDisplay.v b/src/Specific/montgomery32_2e216m2e108m1/fesubDisplay.v
new file mode 100644
index 000000000..9d63e986e
--- /dev/null
+++ b/src/Specific/montgomery32_2e216m2e108m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e216m2e108m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e221m3/CurveParameters.v b/src/Specific/montgomery32_2e221m3/CurveParameters.v
new file mode 100644
index 000000000..d215fbf7b
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^221 - 3
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^221;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e221m3/Synthesis.v b/src/Specific/montgomery32_2e221m3/Synthesis.v
new file mode 100644
index 000000000..46a920665
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e221m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e221m3/compiler.sh b/src/Specific/montgomery32_2e221m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e221m3/feadd.v b/src/Specific/montgomery32_2e221m3/feadd.v
new file mode 100644
index 000000000..1b985c746
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e221m3/feaddDisplay.v b/src/Specific/montgomery32_2e221m3/feaddDisplay.v
new file mode 100644
index 000000000..517380f78
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e221m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e221m3/femul.v b/src/Specific/montgomery32_2e221m3/femul.v
new file mode 100644
index 000000000..577d36d7b
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e221m3/femulDisplay.v b/src/Specific/montgomery32_2e221m3/femulDisplay.v
new file mode 100644
index 000000000..4c726b756
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e221m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e221m3/fenz.v b/src/Specific/montgomery32_2e221m3/fenz.v
new file mode 100644
index 000000000..1da993d93
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e221m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e221m3/fenzDisplay.v b/src/Specific/montgomery32_2e221m3/fenzDisplay.v
new file mode 100644
index 000000000..921ecc570
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e221m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e221m3/feopp.v b/src/Specific/montgomery32_2e221m3/feopp.v
new file mode 100644
index 000000000..4c6f2ee37
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e221m3/feoppDisplay.v b/src/Specific/montgomery32_2e221m3/feoppDisplay.v
new file mode 100644
index 000000000..be91f12d7
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e221m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e221m3/fesub.v b/src/Specific/montgomery32_2e221m3/fesub.v
new file mode 100644
index 000000000..bacb611a6
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e221m3/fesubDisplay.v b/src/Specific/montgomery32_2e221m3/fesubDisplay.v
new file mode 100644
index 000000000..7f96e40cd
--- /dev/null
+++ b/src/Specific/montgomery32_2e221m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e221m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e222m117/CurveParameters.v b/src/Specific/montgomery32_2e222m117/CurveParameters.v
new file mode 100644
index 000000000..428082e5b
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^222 - 117
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^222;
+ c := [(1, 117)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e222m117/Synthesis.v b/src/Specific/montgomery32_2e222m117/Synthesis.v
new file mode 100644
index 000000000..2d6ad4c5c
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e222m117.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e222m117/compiler.sh b/src/Specific/montgomery32_2e222m117/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e222m117/feadd.v b/src/Specific/montgomery32_2e222m117/feadd.v
new file mode 100644
index 000000000..bf658295e
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e222m117/feaddDisplay.v b/src/Specific/montgomery32_2e222m117/feaddDisplay.v
new file mode 100644
index 000000000..23f3cba7d
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e222m117.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e222m117/femul.v b/src/Specific/montgomery32_2e222m117/femul.v
new file mode 100644
index 000000000..0f32b9992
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e222m117/femulDisplay.v b/src/Specific/montgomery32_2e222m117/femulDisplay.v
new file mode 100644
index 000000000..0732b56ee
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e222m117.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e222m117/fenz.v b/src/Specific/montgomery32_2e222m117/fenz.v
new file mode 100644
index 000000000..90c21b432
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e222m117.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e222m117/fenzDisplay.v b/src/Specific/montgomery32_2e222m117/fenzDisplay.v
new file mode 100644
index 000000000..5e8e28e48
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e222m117.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e222m117/feopp.v b/src/Specific/montgomery32_2e222m117/feopp.v
new file mode 100644
index 000000000..204c42c79
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e222m117/feoppDisplay.v b/src/Specific/montgomery32_2e222m117/feoppDisplay.v
new file mode 100644
index 000000000..ed6eab5de
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e222m117.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e222m117/fesub.v b/src/Specific/montgomery32_2e222m117/fesub.v
new file mode 100644
index 000000000..f428f98c7
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e222m117/fesubDisplay.v b/src/Specific/montgomery32_2e222m117/fesubDisplay.v
new file mode 100644
index 000000000..00d21fea5
--- /dev/null
+++ b/src/Specific/montgomery32_2e222m117/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e222m117.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e224m2e96p1/CurveParameters.v b/src/Specific/montgomery32_2e224m2e96p1/CurveParameters.v
new file mode 100644
index 000000000..5c45f02a0
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^224 - 2^96 + 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 32;
+ s := 2^224;
+ c := [(1, -1); (2^96, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e224m2e96p1/Synthesis.v b/src/Specific/montgomery32_2e224m2e96p1/Synthesis.v
new file mode 100644
index 000000000..0d4c31a39
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e224m2e96p1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e224m2e96p1/compiler.sh b/src/Specific/montgomery32_2e224m2e96p1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e224m2e96p1/feadd.v b/src/Specific/montgomery32_2e224m2e96p1/feadd.v
new file mode 100644
index 000000000..d77b74e67
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e224m2e96p1/feaddDisplay.v b/src/Specific/montgomery32_2e224m2e96p1/feaddDisplay.v
new file mode 100644
index 000000000..12d5e6ca0
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e224m2e96p1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e224m2e96p1/femul.v b/src/Specific/montgomery32_2e224m2e96p1/femul.v
new file mode 100644
index 000000000..aa0c28d49
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e224m2e96p1/femulDisplay.v b/src/Specific/montgomery32_2e224m2e96p1/femulDisplay.v
new file mode 100644
index 000000000..51fbf54b2
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e224m2e96p1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e224m2e96p1/fenz.v b/src/Specific/montgomery32_2e224m2e96p1/fenz.v
new file mode 100644
index 000000000..73ff192f2
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e224m2e96p1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e224m2e96p1/fenzDisplay.v b/src/Specific/montgomery32_2e224m2e96p1/fenzDisplay.v
new file mode 100644
index 000000000..8c5fcf668
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e224m2e96p1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e224m2e96p1/feopp.v b/src/Specific/montgomery32_2e224m2e96p1/feopp.v
new file mode 100644
index 000000000..2419700c0
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e224m2e96p1/feoppDisplay.v b/src/Specific/montgomery32_2e224m2e96p1/feoppDisplay.v
new file mode 100644
index 000000000..0a35a107e
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e224m2e96p1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e224m2e96p1/fesub.v b/src/Specific/montgomery32_2e224m2e96p1/fesub.v
new file mode 100644
index 000000000..e57d95573
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e224m2e96p1/fesubDisplay.v b/src/Specific/montgomery32_2e224m2e96p1/fesubDisplay.v
new file mode 100644
index 000000000..2a151e111
--- /dev/null
+++ b/src/Specific/montgomery32_2e224m2e96p1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e224m2e96p1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e226m5/CurveParameters.v b/src/Specific/montgomery32_2e226m5/CurveParameters.v
new file mode 100644
index 000000000..ceabbead1
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^226 - 5
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 32;
+ s := 2^226;
+ c := [(1, 5)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e226m5/Synthesis.v b/src/Specific/montgomery32_2e226m5/Synthesis.v
new file mode 100644
index 000000000..4084c5dce
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e226m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e226m5/compiler.sh b/src/Specific/montgomery32_2e226m5/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e226m5/feadd.v b/src/Specific/montgomery32_2e226m5/feadd.v
new file mode 100644
index 000000000..6330f1d57
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e226m5/feaddDisplay.v b/src/Specific/montgomery32_2e226m5/feaddDisplay.v
new file mode 100644
index 000000000..cbdb5957f
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e226m5.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e226m5/femul.v b/src/Specific/montgomery32_2e226m5/femul.v
new file mode 100644
index 000000000..eaaf83e0b
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e226m5/femulDisplay.v b/src/Specific/montgomery32_2e226m5/femulDisplay.v
new file mode 100644
index 000000000..b33e1133d
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e226m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e226m5/fenz.v b/src/Specific/montgomery32_2e226m5/fenz.v
new file mode 100644
index 000000000..4d09ec7d9
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e226m5.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e226m5/fenzDisplay.v b/src/Specific/montgomery32_2e226m5/fenzDisplay.v
new file mode 100644
index 000000000..6bcdc5cea
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e226m5.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e226m5/feopp.v b/src/Specific/montgomery32_2e226m5/feopp.v
new file mode 100644
index 000000000..1632d23f8
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e226m5/feoppDisplay.v b/src/Specific/montgomery32_2e226m5/feoppDisplay.v
new file mode 100644
index 000000000..d28af23c6
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e226m5.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e226m5/fesub.v b/src/Specific/montgomery32_2e226m5/fesub.v
new file mode 100644
index 000000000..1d63f9742
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e226m5/fesubDisplay.v b/src/Specific/montgomery32_2e226m5/fesubDisplay.v
new file mode 100644
index 000000000..ec7daa604
--- /dev/null
+++ b/src/Specific/montgomery32_2e226m5/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e226m5.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e230m27/CurveParameters.v b/src/Specific/montgomery32_2e230m27/CurveParameters.v
new file mode 100644
index 000000000..a04d83038
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^230 - 27
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 32;
+ s := 2^230;
+ c := [(1, 27)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e230m27/Synthesis.v b/src/Specific/montgomery32_2e230m27/Synthesis.v
new file mode 100644
index 000000000..9e6ea2ff2
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e230m27.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e230m27/compiler.sh b/src/Specific/montgomery32_2e230m27/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e230m27/feadd.v b/src/Specific/montgomery32_2e230m27/feadd.v
new file mode 100644
index 000000000..bf4deeada
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e230m27/feaddDisplay.v b/src/Specific/montgomery32_2e230m27/feaddDisplay.v
new file mode 100644
index 000000000..15d265afd
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e230m27.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e230m27/femul.v b/src/Specific/montgomery32_2e230m27/femul.v
new file mode 100644
index 000000000..11eedfb78
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e230m27/femulDisplay.v b/src/Specific/montgomery32_2e230m27/femulDisplay.v
new file mode 100644
index 000000000..f908c40ee
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e230m27.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e230m27/fenz.v b/src/Specific/montgomery32_2e230m27/fenz.v
new file mode 100644
index 000000000..5706ba74f
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e230m27.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e230m27/fenzDisplay.v b/src/Specific/montgomery32_2e230m27/fenzDisplay.v
new file mode 100644
index 000000000..aa5424b57
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e230m27.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e230m27/feopp.v b/src/Specific/montgomery32_2e230m27/feopp.v
new file mode 100644
index 000000000..8527ad54e
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e230m27/feoppDisplay.v b/src/Specific/montgomery32_2e230m27/feoppDisplay.v
new file mode 100644
index 000000000..446fe4344
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e230m27.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e230m27/fesub.v b/src/Specific/montgomery32_2e230m27/fesub.v
new file mode 100644
index 000000000..43f62d28a
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e230m27/fesubDisplay.v b/src/Specific/montgomery32_2e230m27/fesubDisplay.v
new file mode 100644
index 000000000..f20137afb
--- /dev/null
+++ b/src/Specific/montgomery32_2e230m27/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e230m27.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e235m15/CurveParameters.v b/src/Specific/montgomery32_2e235m15/CurveParameters.v
new file mode 100644
index 000000000..2edc8e3d0
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^235 - 15
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 32;
+ s := 2^235;
+ c := [(1, 15)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e235m15/Synthesis.v b/src/Specific/montgomery32_2e235m15/Synthesis.v
new file mode 100644
index 000000000..59cee7597
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e235m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e235m15/compiler.sh b/src/Specific/montgomery32_2e235m15/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e235m15/feadd.v b/src/Specific/montgomery32_2e235m15/feadd.v
new file mode 100644
index 000000000..f4c309440
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e235m15/feaddDisplay.v b/src/Specific/montgomery32_2e235m15/feaddDisplay.v
new file mode 100644
index 000000000..aaa230343
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e235m15.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e235m15/femul.v b/src/Specific/montgomery32_2e235m15/femul.v
new file mode 100644
index 000000000..b3e5dd916
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e235m15/femulDisplay.v b/src/Specific/montgomery32_2e235m15/femulDisplay.v
new file mode 100644
index 000000000..c9c02c9ae
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e235m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e235m15/fenz.v b/src/Specific/montgomery32_2e235m15/fenz.v
new file mode 100644
index 000000000..5d774021e
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e235m15.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e235m15/fenzDisplay.v b/src/Specific/montgomery32_2e235m15/fenzDisplay.v
new file mode 100644
index 000000000..919b87377
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e235m15.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e235m15/feopp.v b/src/Specific/montgomery32_2e235m15/feopp.v
new file mode 100644
index 000000000..ba8950851
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e235m15/feoppDisplay.v b/src/Specific/montgomery32_2e235m15/feoppDisplay.v
new file mode 100644
index 000000000..cd684c3df
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e235m15.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e235m15/fesub.v b/src/Specific/montgomery32_2e235m15/fesub.v
new file mode 100644
index 000000000..84d86da04
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e235m15/fesubDisplay.v b/src/Specific/montgomery32_2e235m15/fesubDisplay.v
new file mode 100644
index 000000000..8dfe77ccb
--- /dev/null
+++ b/src/Specific/montgomery32_2e235m15/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e235m15.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e243m9/CurveParameters.v b/src/Specific/montgomery32_2e243m9/CurveParameters.v
new file mode 100644
index 000000000..5da1e367e
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^243 - 9
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 32;
+ s := 2^243;
+ c := [(1, 9)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e243m9/Synthesis.v b/src/Specific/montgomery32_2e243m9/Synthesis.v
new file mode 100644
index 000000000..43f1d4556
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e243m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e243m9/compiler.sh b/src/Specific/montgomery32_2e243m9/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e243m9/feadd.v b/src/Specific/montgomery32_2e243m9/feadd.v
new file mode 100644
index 000000000..20746ff9c
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e243m9/feaddDisplay.v b/src/Specific/montgomery32_2e243m9/feaddDisplay.v
new file mode 100644
index 000000000..43e7a7d14
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e243m9.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e243m9/femul.v b/src/Specific/montgomery32_2e243m9/femul.v
new file mode 100644
index 000000000..f30ad7729
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e243m9/femulDisplay.v b/src/Specific/montgomery32_2e243m9/femulDisplay.v
new file mode 100644
index 000000000..29725d07c
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e243m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e243m9/fenz.v b/src/Specific/montgomery32_2e243m9/fenz.v
new file mode 100644
index 000000000..bf4f984a9
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e243m9.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e243m9/fenzDisplay.v b/src/Specific/montgomery32_2e243m9/fenzDisplay.v
new file mode 100644
index 000000000..16f90e7ed
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e243m9.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e243m9/feopp.v b/src/Specific/montgomery32_2e243m9/feopp.v
new file mode 100644
index 000000000..72de6e22e
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e243m9/feoppDisplay.v b/src/Specific/montgomery32_2e243m9/feoppDisplay.v
new file mode 100644
index 000000000..0bf7d46c8
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e243m9.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e243m9/fesub.v b/src/Specific/montgomery32_2e243m9/fesub.v
new file mode 100644
index 000000000..61220e4f5
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e243m9/fesubDisplay.v b/src/Specific/montgomery32_2e243m9/fesubDisplay.v
new file mode 100644
index 000000000..088a4a800
--- /dev/null
+++ b/src/Specific/montgomery32_2e243m9/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e243m9.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e251m9/CurveParameters.v b/src/Specific/montgomery32_2e251m9/CurveParameters.v
new file mode 100644
index 000000000..98df66c25
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^251 - 9
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 32;
+ s := 2^251;
+ c := [(1, 9)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e251m9/Synthesis.v b/src/Specific/montgomery32_2e251m9/Synthesis.v
new file mode 100644
index 000000000..e1b899d2e
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e251m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e251m9/compiler.sh b/src/Specific/montgomery32_2e251m9/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e251m9/feadd.v b/src/Specific/montgomery32_2e251m9/feadd.v
new file mode 100644
index 000000000..2823de273
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e251m9/feaddDisplay.v b/src/Specific/montgomery32_2e251m9/feaddDisplay.v
new file mode 100644
index 000000000..94391352f
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e251m9.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e251m9/femul.v b/src/Specific/montgomery32_2e251m9/femul.v
new file mode 100644
index 000000000..2be647a08
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e251m9/femulDisplay.v b/src/Specific/montgomery32_2e251m9/femulDisplay.v
new file mode 100644
index 000000000..899747c74
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e251m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e251m9/fenz.v b/src/Specific/montgomery32_2e251m9/fenz.v
new file mode 100644
index 000000000..b80d24f6f
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e251m9.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e251m9/fenzDisplay.v b/src/Specific/montgomery32_2e251m9/fenzDisplay.v
new file mode 100644
index 000000000..6500009d8
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e251m9.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e251m9/feopp.v b/src/Specific/montgomery32_2e251m9/feopp.v
new file mode 100644
index 000000000..507520b38
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e251m9/feoppDisplay.v b/src/Specific/montgomery32_2e251m9/feoppDisplay.v
new file mode 100644
index 000000000..463bafb45
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e251m9.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e251m9/fesub.v b/src/Specific/montgomery32_2e251m9/fesub.v
new file mode 100644
index 000000000..4e241e5a3
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e251m9/fesubDisplay.v b/src/Specific/montgomery32_2e251m9/fesubDisplay.v
new file mode 100644
index 000000000..287eecaf8
--- /dev/null
+++ b/src/Specific/montgomery32_2e251m9/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e251m9.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e255m19/CurveParameters.v b/src/Specific/montgomery32_2e255m19/CurveParameters.v
new file mode 100644
index 000000000..3a1b97c23
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^255 - 19
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 32;
+ s := 2^255;
+ c := [(1, 19)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e255m19/Synthesis.v b/src/Specific/montgomery32_2e255m19/Synthesis.v
new file mode 100644
index 000000000..d5864d0bb
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e255m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e255m19/compiler.sh b/src/Specific/montgomery32_2e255m19/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e255m19/feadd.v b/src/Specific/montgomery32_2e255m19/feadd.v
new file mode 100644
index 000000000..b518ae60c
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e255m19/feaddDisplay.v b/src/Specific/montgomery32_2e255m19/feaddDisplay.v
new file mode 100644
index 000000000..73bda3cae
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m19.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e255m19/femul.v b/src/Specific/montgomery32_2e255m19/femul.v
new file mode 100644
index 000000000..08420b6f0
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e255m19/femulDisplay.v b/src/Specific/montgomery32_2e255m19/femulDisplay.v
new file mode 100644
index 000000000..9b28e7751
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e255m19/fenz.v b/src/Specific/montgomery32_2e255m19/fenz.v
new file mode 100644
index 000000000..c6d0d914a
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m19.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e255m19/fenzDisplay.v b/src/Specific/montgomery32_2e255m19/fenzDisplay.v
new file mode 100644
index 000000000..1268d7119
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m19.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e255m19/feopp.v b/src/Specific/montgomery32_2e255m19/feopp.v
new file mode 100644
index 000000000..806184889
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e255m19/feoppDisplay.v b/src/Specific/montgomery32_2e255m19/feoppDisplay.v
new file mode 100644
index 000000000..7df596f87
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m19.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e255m19/fesub.v b/src/Specific/montgomery32_2e255m19/fesub.v
new file mode 100644
index 000000000..7428e6805
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e255m19/fesubDisplay.v b/src/Specific/montgomery32_2e255m19/fesubDisplay.v
new file mode 100644
index 000000000..81e9dbb46
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m19/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m19.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/CurveParameters.v b/src/Specific/montgomery32_2e255m2e4m2e1m1/CurveParameters.v
new file mode 100644
index 000000000..94f04957c
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^255 - 2^4 - 2^1 - 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 32;
+ s := 2^255;
+ c := [(1, 1); (2^1, 1); (2^4, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/Synthesis.v b/src/Specific/montgomery32_2e255m2e4m2e1m1/Synthesis.v
new file mode 100644
index 000000000..13926de34
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e255m2e4m2e1m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/compiler.sh b/src/Specific/montgomery32_2e255m2e4m2e1m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/feadd.v b/src/Specific/montgomery32_2e255m2e4m2e1m1/feadd.v
new file mode 100644
index 000000000..8873eadca
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/feaddDisplay.v b/src/Specific/montgomery32_2e255m2e4m2e1m1/feaddDisplay.v
new file mode 100644
index 000000000..5c338d7ab
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m2e4m2e1m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/femul.v b/src/Specific/montgomery32_2e255m2e4m2e1m1/femul.v
new file mode 100644
index 000000000..da975ac39
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/femulDisplay.v b/src/Specific/montgomery32_2e255m2e4m2e1m1/femulDisplay.v
new file mode 100644
index 000000000..42e395e20
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m2e4m2e1m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/fenz.v b/src/Specific/montgomery32_2e255m2e4m2e1m1/fenz.v
new file mode 100644
index 000000000..ee6c9ff43
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m2e4m2e1m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/fenzDisplay.v b/src/Specific/montgomery32_2e255m2e4m2e1m1/fenzDisplay.v
new file mode 100644
index 000000000..2855a7516
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m2e4m2e1m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/feopp.v b/src/Specific/montgomery32_2e255m2e4m2e1m1/feopp.v
new file mode 100644
index 000000000..55d70f3b6
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/feoppDisplay.v b/src/Specific/montgomery32_2e255m2e4m2e1m1/feoppDisplay.v
new file mode 100644
index 000000000..55afbb891
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m2e4m2e1m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/fesub.v b/src/Specific/montgomery32_2e255m2e4m2e1m1/fesub.v
new file mode 100644
index 000000000..f3fc2936e
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e255m2e4m2e1m1/fesubDisplay.v b/src/Specific/montgomery32_2e255m2e4m2e1m1/fesubDisplay.v
new file mode 100644
index 000000000..daba7df58
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m2e4m2e1m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m2e4m2e1m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e255m765/CurveParameters.v b/src/Specific/montgomery32_2e255m765/CurveParameters.v
new file mode 100644
index 000000000..f48cc3b27
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^255 - 765
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 32;
+ s := 2^255;
+ c := [(1, 765)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e255m765/Synthesis.v b/src/Specific/montgomery32_2e255m765/Synthesis.v
new file mode 100644
index 000000000..08e2b569e
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e255m765.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e255m765/compiler.sh b/src/Specific/montgomery32_2e255m765/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e255m765/feadd.v b/src/Specific/montgomery32_2e255m765/feadd.v
new file mode 100644
index 000000000..af6507e44
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e255m765/feaddDisplay.v b/src/Specific/montgomery32_2e255m765/feaddDisplay.v
new file mode 100644
index 000000000..bd5ab9e1a
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m765.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e255m765/femul.v b/src/Specific/montgomery32_2e255m765/femul.v
new file mode 100644
index 000000000..b61d14022
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e255m765/femulDisplay.v b/src/Specific/montgomery32_2e255m765/femulDisplay.v
new file mode 100644
index 000000000..3371b7cf2
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m765.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e255m765/fenz.v b/src/Specific/montgomery32_2e255m765/fenz.v
new file mode 100644
index 000000000..e28836e0d
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m765.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e255m765/fenzDisplay.v b/src/Specific/montgomery32_2e255m765/fenzDisplay.v
new file mode 100644
index 000000000..b6487e70c
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m765.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e255m765/feopp.v b/src/Specific/montgomery32_2e255m765/feopp.v
new file mode 100644
index 000000000..f197ce321
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e255m765/feoppDisplay.v b/src/Specific/montgomery32_2e255m765/feoppDisplay.v
new file mode 100644
index 000000000..d72c697d8
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m765.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e255m765/fesub.v b/src/Specific/montgomery32_2e255m765/fesub.v
new file mode 100644
index 000000000..12fbd1192
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e255m765/fesubDisplay.v b/src/Specific/montgomery32_2e255m765/fesubDisplay.v
new file mode 100644
index 000000000..3dfe2119b
--- /dev/null
+++ b/src/Specific/montgomery32_2e255m765/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e255m765.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e256m189/CurveParameters.v b/src/Specific/montgomery32_2e256m189/CurveParameters.v
new file mode 100644
index 000000000..6b09dfc0a
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^256 - 189
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 32;
+ s := 2^256;
+ c := [(1, 189)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e256m189/Synthesis.v b/src/Specific/montgomery32_2e256m189/Synthesis.v
new file mode 100644
index 000000000..18e895dea
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e256m189.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e256m189/compiler.sh b/src/Specific/montgomery32_2e256m189/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e256m189/feadd.v b/src/Specific/montgomery32_2e256m189/feadd.v
new file mode 100644
index 000000000..b27389b55
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e256m189/feaddDisplay.v b/src/Specific/montgomery32_2e256m189/feaddDisplay.v
new file mode 100644
index 000000000..76cb74158
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m189.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e256m189/femul.v b/src/Specific/montgomery32_2e256m189/femul.v
new file mode 100644
index 000000000..612e67dd4
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e256m189/femulDisplay.v b/src/Specific/montgomery32_2e256m189/femulDisplay.v
new file mode 100644
index 000000000..6df1ebb2e
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m189.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e256m189/fenz.v b/src/Specific/montgomery32_2e256m189/fenz.v
new file mode 100644
index 000000000..f85d3081d
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m189.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e256m189/fenzDisplay.v b/src/Specific/montgomery32_2e256m189/fenzDisplay.v
new file mode 100644
index 000000000..40080b177
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m189.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e256m189/feopp.v b/src/Specific/montgomery32_2e256m189/feopp.v
new file mode 100644
index 000000000..c483d3de0
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e256m189/feoppDisplay.v b/src/Specific/montgomery32_2e256m189/feoppDisplay.v
new file mode 100644
index 000000000..cb9a7b160
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m189.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e256m189/fesub.v b/src/Specific/montgomery32_2e256m189/fesub.v
new file mode 100644
index 000000000..7d0b571d8
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e256m189/fesubDisplay.v b/src/Specific/montgomery32_2e256m189/fesubDisplay.v
new file mode 100644
index 000000000..28ed53cf4
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m189/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m189.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/CurveParameters.v b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/CurveParameters.v
new file mode 100644
index 000000000..b4890ac5d
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^256 - 2^224 + 2^192 + 2^96 - 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 32;
+ s := 2^256;
+ c := [(1, 1); (2^96, -1); (2^192, -1); (2^224, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/Synthesis.v b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/Synthesis.v
new file mode 100644
index 000000000..e7e6042c3
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e256m2e224p2e192p2e96m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/compiler.sh b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feadd.v b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feadd.v
new file mode 100644
index 000000000..f0a6dd67a
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feaddDisplay.v b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feaddDisplay.v
new file mode 100644
index 000000000..74b049fbe
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m2e224p2e192p2e96m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/femul.v b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/femul.v
new file mode 100644
index 000000000..f7368588b
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/femulDisplay.v b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/femulDisplay.v
new file mode 100644
index 000000000..6b8b9371a
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m2e224p2e192p2e96m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fenz.v b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fenz.v
new file mode 100644
index 000000000..ab51f7e74
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m2e224p2e192p2e96m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fenzDisplay.v b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fenzDisplay.v
new file mode 100644
index 000000000..0c3fe3956
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m2e224p2e192p2e96m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feopp.v b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feopp.v
new file mode 100644
index 000000000..85eed4deb
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feoppDisplay.v b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feoppDisplay.v
new file mode 100644
index 000000000..e19e211ee
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m2e224p2e192p2e96m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fesub.v b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fesub.v
new file mode 100644
index 000000000..1eb8356d9
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fesubDisplay.v b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fesubDisplay.v
new file mode 100644
index 000000000..b37b2d62d
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e224p2e192p2e96m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m2e224p2e192p2e96m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e256m2e32m977/CurveParameters.v b/src/Specific/montgomery32_2e256m2e32m977/CurveParameters.v
new file mode 100644
index 000000000..ab9b0aa47
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^256 - 2^32 - 977
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 32;
+ s := 2^256;
+ c := [(1, 977); (2^32, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e256m2e32m977/Synthesis.v b/src/Specific/montgomery32_2e256m2e32m977/Synthesis.v
new file mode 100644
index 000000000..7bf74518b
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e256m2e32m977.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e256m2e32m977/compiler.sh b/src/Specific/montgomery32_2e256m2e32m977/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e256m2e32m977/feadd.v b/src/Specific/montgomery32_2e256m2e32m977/feadd.v
new file mode 100644
index 000000000..ba8bb2c4a
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e256m2e32m977/feaddDisplay.v b/src/Specific/montgomery32_2e256m2e32m977/feaddDisplay.v
new file mode 100644
index 000000000..2be99ff23
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m2e32m977.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e256m2e32m977/femul.v b/src/Specific/montgomery32_2e256m2e32m977/femul.v
new file mode 100644
index 000000000..79506b2a9
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e256m2e32m977/femulDisplay.v b/src/Specific/montgomery32_2e256m2e32m977/femulDisplay.v
new file mode 100644
index 000000000..81ff4569e
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m2e32m977.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e256m2e32m977/fenz.v b/src/Specific/montgomery32_2e256m2e32m977/fenz.v
new file mode 100644
index 000000000..8ff1fd074
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m2e32m977.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e256m2e32m977/fenzDisplay.v b/src/Specific/montgomery32_2e256m2e32m977/fenzDisplay.v
new file mode 100644
index 000000000..6c6a85304
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m2e32m977.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e256m2e32m977/feopp.v b/src/Specific/montgomery32_2e256m2e32m977/feopp.v
new file mode 100644
index 000000000..e4f804560
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e256m2e32m977/feoppDisplay.v b/src/Specific/montgomery32_2e256m2e32m977/feoppDisplay.v
new file mode 100644
index 000000000..f1c874b72
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m2e32m977.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e256m2e32m977/fesub.v b/src/Specific/montgomery32_2e256m2e32m977/fesub.v
new file mode 100644
index 000000000..19c5fd432
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e256m2e32m977/fesubDisplay.v b/src/Specific/montgomery32_2e256m2e32m977/fesubDisplay.v
new file mode 100644
index 000000000..2db5b966e
--- /dev/null
+++ b/src/Specific/montgomery32_2e256m2e32m977/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e256m2e32m977.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e266m3/CurveParameters.v b/src/Specific/montgomery32_2e266m3/CurveParameters.v
new file mode 100644
index 000000000..711290679
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^266 - 3
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 32;
+ s := 2^266;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e266m3/Synthesis.v b/src/Specific/montgomery32_2e266m3/Synthesis.v
new file mode 100644
index 000000000..2c7bf6f1d
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e266m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e266m3/compiler.sh b/src/Specific/montgomery32_2e266m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e266m3/feadd.v b/src/Specific/montgomery32_2e266m3/feadd.v
new file mode 100644
index 000000000..ec4bef004
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e266m3/feaddDisplay.v b/src/Specific/montgomery32_2e266m3/feaddDisplay.v
new file mode 100644
index 000000000..8dafbc9d4
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e266m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e266m3/femul.v b/src/Specific/montgomery32_2e266m3/femul.v
new file mode 100644
index 000000000..98ece7dd2
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e266m3/femulDisplay.v b/src/Specific/montgomery32_2e266m3/femulDisplay.v
new file mode 100644
index 000000000..47c4028dd
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e266m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e266m3/fenz.v b/src/Specific/montgomery32_2e266m3/fenz.v
new file mode 100644
index 000000000..bc1557d70
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e266m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e266m3/fenzDisplay.v b/src/Specific/montgomery32_2e266m3/fenzDisplay.v
new file mode 100644
index 000000000..30a53c833
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e266m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e266m3/feopp.v b/src/Specific/montgomery32_2e266m3/feopp.v
new file mode 100644
index 000000000..67da56808
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e266m3/feoppDisplay.v b/src/Specific/montgomery32_2e266m3/feoppDisplay.v
new file mode 100644
index 000000000..a880db426
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e266m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e266m3/fesub.v b/src/Specific/montgomery32_2e266m3/fesub.v
new file mode 100644
index 000000000..14a21d4c9
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e266m3/fesubDisplay.v b/src/Specific/montgomery32_2e266m3/fesubDisplay.v
new file mode 100644
index 000000000..1faaa63fc
--- /dev/null
+++ b/src/Specific/montgomery32_2e266m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e266m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e285m9/CurveParameters.v b/src/Specific/montgomery32_2e285m9/CurveParameters.v
new file mode 100644
index 000000000..8cef52c40
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^285 - 9
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 32;
+ s := 2^285;
+ c := [(1, 9)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e285m9/Synthesis.v b/src/Specific/montgomery32_2e285m9/Synthesis.v
new file mode 100644
index 000000000..1013beb49
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e285m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e285m9/compiler.sh b/src/Specific/montgomery32_2e285m9/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e285m9/feadd.v b/src/Specific/montgomery32_2e285m9/feadd.v
new file mode 100644
index 000000000..fad110e7a
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e285m9/feaddDisplay.v b/src/Specific/montgomery32_2e285m9/feaddDisplay.v
new file mode 100644
index 000000000..57ef37fe9
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e285m9.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e285m9/femul.v b/src/Specific/montgomery32_2e285m9/femul.v
new file mode 100644
index 000000000..5fb7307f5
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e285m9/femulDisplay.v b/src/Specific/montgomery32_2e285m9/femulDisplay.v
new file mode 100644
index 000000000..b4c065c27
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e285m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e285m9/fenz.v b/src/Specific/montgomery32_2e285m9/fenz.v
new file mode 100644
index 000000000..040f0a6cf
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e285m9.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e285m9/fenzDisplay.v b/src/Specific/montgomery32_2e285m9/fenzDisplay.v
new file mode 100644
index 000000000..38574680a
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e285m9.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e285m9/feopp.v b/src/Specific/montgomery32_2e285m9/feopp.v
new file mode 100644
index 000000000..e05e6e6ca
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e285m9/feoppDisplay.v b/src/Specific/montgomery32_2e285m9/feoppDisplay.v
new file mode 100644
index 000000000..914cc653f
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e285m9.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e285m9/fesub.v b/src/Specific/montgomery32_2e285m9/fesub.v
new file mode 100644
index 000000000..0b4b66543
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e285m9/fesubDisplay.v b/src/Specific/montgomery32_2e285m9/fesubDisplay.v
new file mode 100644
index 000000000..6b5c989d5
--- /dev/null
+++ b/src/Specific/montgomery32_2e285m9/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e285m9.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e291m19/CurveParameters.v b/src/Specific/montgomery32_2e291m19/CurveParameters.v
new file mode 100644
index 000000000..a1915ad1f
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^291 - 19
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 32;
+ s := 2^291;
+ c := [(1, 19)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e291m19/Synthesis.v b/src/Specific/montgomery32_2e291m19/Synthesis.v
new file mode 100644
index 000000000..be8a30fac
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e291m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e291m19/compiler.sh b/src/Specific/montgomery32_2e291m19/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e291m19/feadd.v b/src/Specific/montgomery32_2e291m19/feadd.v
new file mode 100644
index 000000000..75b7e73a2
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e291m19/feaddDisplay.v b/src/Specific/montgomery32_2e291m19/feaddDisplay.v
new file mode 100644
index 000000000..b6fe2c641
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e291m19.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e291m19/femul.v b/src/Specific/montgomery32_2e291m19/femul.v
new file mode 100644
index 000000000..cbeca275e
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e291m19/femulDisplay.v b/src/Specific/montgomery32_2e291m19/femulDisplay.v
new file mode 100644
index 000000000..655fd9809
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e291m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e291m19/fenz.v b/src/Specific/montgomery32_2e291m19/fenz.v
new file mode 100644
index 000000000..783d6cbad
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e291m19.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e291m19/fenzDisplay.v b/src/Specific/montgomery32_2e291m19/fenzDisplay.v
new file mode 100644
index 000000000..5ba9f5687
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e291m19.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e291m19/feopp.v b/src/Specific/montgomery32_2e291m19/feopp.v
new file mode 100644
index 000000000..57e4b6d8f
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e291m19/feoppDisplay.v b/src/Specific/montgomery32_2e291m19/feoppDisplay.v
new file mode 100644
index 000000000..e1c7d61f8
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e291m19.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e291m19/fesub.v b/src/Specific/montgomery32_2e291m19/fesub.v
new file mode 100644
index 000000000..8087652b1
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e291m19/fesubDisplay.v b/src/Specific/montgomery32_2e291m19/fesubDisplay.v
new file mode 100644
index 000000000..76a938225
--- /dev/null
+++ b/src/Specific/montgomery32_2e291m19/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e291m19.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e321m9/CurveParameters.v b/src/Specific/montgomery32_2e321m9/CurveParameters.v
new file mode 100644
index 000000000..ca875b403
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^321 - 9
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^321;
+ c := [(1, 9)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e321m9/Synthesis.v b/src/Specific/montgomery32_2e321m9/Synthesis.v
new file mode 100644
index 000000000..7dcdf7dd7
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e321m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e321m9/compiler.sh b/src/Specific/montgomery32_2e321m9/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e321m9/feadd.v b/src/Specific/montgomery32_2e321m9/feadd.v
new file mode 100644
index 000000000..e1edfb929
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e321m9/feaddDisplay.v b/src/Specific/montgomery32_2e321m9/feaddDisplay.v
new file mode 100644
index 000000000..5142c79fd
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e321m9.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e321m9/femul.v b/src/Specific/montgomery32_2e321m9/femul.v
new file mode 100644
index 000000000..615f7b78a
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e321m9/femulDisplay.v b/src/Specific/montgomery32_2e321m9/femulDisplay.v
new file mode 100644
index 000000000..12ff0137b
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e321m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e321m9/fenz.v b/src/Specific/montgomery32_2e321m9/fenz.v
new file mode 100644
index 000000000..78df9ab90
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e321m9.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e321m9/fenzDisplay.v b/src/Specific/montgomery32_2e321m9/fenzDisplay.v
new file mode 100644
index 000000000..7558bd9a8
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e321m9.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e321m9/feopp.v b/src/Specific/montgomery32_2e321m9/feopp.v
new file mode 100644
index 000000000..36800a52f
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e321m9/feoppDisplay.v b/src/Specific/montgomery32_2e321m9/feoppDisplay.v
new file mode 100644
index 000000000..878fa1e14
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e321m9.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e321m9/fesub.v b/src/Specific/montgomery32_2e321m9/fesub.v
new file mode 100644
index 000000000..41f482e91
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e321m9/fesubDisplay.v b/src/Specific/montgomery32_2e321m9/fesubDisplay.v
new file mode 100644
index 000000000..4b0d73efa
--- /dev/null
+++ b/src/Specific/montgomery32_2e321m9/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e321m9.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e322m2e161m1/CurveParameters.v b/src/Specific/montgomery32_2e322m2e161m1/CurveParameters.v
new file mode 100644
index 000000000..de1c8a49d
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^322 - 2^161 - 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^322;
+ c := [(1, 1); (2^161, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some true;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e322m2e161m1/Synthesis.v b/src/Specific/montgomery32_2e322m2e161m1/Synthesis.v
new file mode 100644
index 000000000..fbf6f7ce2
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e322m2e161m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e322m2e161m1/compiler.sh b/src/Specific/montgomery32_2e322m2e161m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e322m2e161m1/feadd.v b/src/Specific/montgomery32_2e322m2e161m1/feadd.v
new file mode 100644
index 000000000..7e41dc312
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e322m2e161m1/feaddDisplay.v b/src/Specific/montgomery32_2e322m2e161m1/feaddDisplay.v
new file mode 100644
index 000000000..af81392ae
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e322m2e161m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e322m2e161m1/femul.v b/src/Specific/montgomery32_2e322m2e161m1/femul.v
new file mode 100644
index 000000000..407218f30
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e322m2e161m1/femulDisplay.v b/src/Specific/montgomery32_2e322m2e161m1/femulDisplay.v
new file mode 100644
index 000000000..3a77f1993
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e322m2e161m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e322m2e161m1/fenz.v b/src/Specific/montgomery32_2e322m2e161m1/fenz.v
new file mode 100644
index 000000000..4c9aca085
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e322m2e161m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e322m2e161m1/fenzDisplay.v b/src/Specific/montgomery32_2e322m2e161m1/fenzDisplay.v
new file mode 100644
index 000000000..9b17c60af
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e322m2e161m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e322m2e161m1/feopp.v b/src/Specific/montgomery32_2e322m2e161m1/feopp.v
new file mode 100644
index 000000000..97ce630af
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e322m2e161m1/feoppDisplay.v b/src/Specific/montgomery32_2e322m2e161m1/feoppDisplay.v
new file mode 100644
index 000000000..34a18fb1e
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e322m2e161m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e322m2e161m1/fesub.v b/src/Specific/montgomery32_2e322m2e161m1/fesub.v
new file mode 100644
index 000000000..71ec4d309
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e322m2e161m1/fesubDisplay.v b/src/Specific/montgomery32_2e322m2e161m1/fesubDisplay.v
new file mode 100644
index 000000000..27c91b867
--- /dev/null
+++ b/src/Specific/montgomery32_2e322m2e161m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e322m2e161m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e336m17/CurveParameters.v b/src/Specific/montgomery32_2e336m17/CurveParameters.v
new file mode 100644
index 000000000..7bfffe26a
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^336 - 17
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^336;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e336m17/Synthesis.v b/src/Specific/montgomery32_2e336m17/Synthesis.v
new file mode 100644
index 000000000..b1bf8cddb
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e336m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e336m17/compiler.sh b/src/Specific/montgomery32_2e336m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e336m17/feadd.v b/src/Specific/montgomery32_2e336m17/feadd.v
new file mode 100644
index 000000000..7fb35907c
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e336m17/feaddDisplay.v b/src/Specific/montgomery32_2e336m17/feaddDisplay.v
new file mode 100644
index 000000000..7744b5416
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e336m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e336m17/femul.v b/src/Specific/montgomery32_2e336m17/femul.v
new file mode 100644
index 000000000..3d209b0b8
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e336m17/femulDisplay.v b/src/Specific/montgomery32_2e336m17/femulDisplay.v
new file mode 100644
index 000000000..5b535e213
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e336m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e336m17/fenz.v b/src/Specific/montgomery32_2e336m17/fenz.v
new file mode 100644
index 000000000..1b657a65c
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e336m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e336m17/fenzDisplay.v b/src/Specific/montgomery32_2e336m17/fenzDisplay.v
new file mode 100644
index 000000000..d877eb5cd
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e336m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e336m17/feopp.v b/src/Specific/montgomery32_2e336m17/feopp.v
new file mode 100644
index 000000000..0ed9ae7cc
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e336m17/feoppDisplay.v b/src/Specific/montgomery32_2e336m17/feoppDisplay.v
new file mode 100644
index 000000000..b3ab401be
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e336m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e336m17/fesub.v b/src/Specific/montgomery32_2e336m17/fesub.v
new file mode 100644
index 000000000..2b8a65897
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e336m17/fesubDisplay.v b/src/Specific/montgomery32_2e336m17/fesubDisplay.v
new file mode 100644
index 000000000..cc84b5c17
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e336m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e336m3/CurveParameters.v b/src/Specific/montgomery32_2e336m3/CurveParameters.v
new file mode 100644
index 000000000..088bad85f
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^336 - 3
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^336;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e336m3/Synthesis.v b/src/Specific/montgomery32_2e336m3/Synthesis.v
new file mode 100644
index 000000000..b3abf409c
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e336m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e336m3/compiler.sh b/src/Specific/montgomery32_2e336m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e336m3/feadd.v b/src/Specific/montgomery32_2e336m3/feadd.v
new file mode 100644
index 000000000..6959c27e3
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e336m3/feaddDisplay.v b/src/Specific/montgomery32_2e336m3/feaddDisplay.v
new file mode 100644
index 000000000..9323ec879
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e336m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e336m3/femul.v b/src/Specific/montgomery32_2e336m3/femul.v
new file mode 100644
index 000000000..6277e6358
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e336m3/femulDisplay.v b/src/Specific/montgomery32_2e336m3/femulDisplay.v
new file mode 100644
index 000000000..ad5e2a8ed
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e336m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e336m3/fenz.v b/src/Specific/montgomery32_2e336m3/fenz.v
new file mode 100644
index 000000000..49ead5d86
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e336m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e336m3/fenzDisplay.v b/src/Specific/montgomery32_2e336m3/fenzDisplay.v
new file mode 100644
index 000000000..1554ecae2
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e336m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e336m3/feopp.v b/src/Specific/montgomery32_2e336m3/feopp.v
new file mode 100644
index 000000000..e26b34e6f
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e336m3/feoppDisplay.v b/src/Specific/montgomery32_2e336m3/feoppDisplay.v
new file mode 100644
index 000000000..a02d6cba5
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e336m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e336m3/fesub.v b/src/Specific/montgomery32_2e336m3/fesub.v
new file mode 100644
index 000000000..7c050fa5d
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e336m3/fesubDisplay.v b/src/Specific/montgomery32_2e336m3/fesubDisplay.v
new file mode 100644
index 000000000..93fb59b3b
--- /dev/null
+++ b/src/Specific/montgomery32_2e336m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e336m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e338m15/CurveParameters.v b/src/Specific/montgomery32_2e338m15/CurveParameters.v
new file mode 100644
index 000000000..bce7f19d1
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^338 - 15
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^338;
+ c := [(1, 15)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e338m15/Synthesis.v b/src/Specific/montgomery32_2e338m15/Synthesis.v
new file mode 100644
index 000000000..e673be2c7
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e338m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e338m15/compiler.sh b/src/Specific/montgomery32_2e338m15/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e338m15/feadd.v b/src/Specific/montgomery32_2e338m15/feadd.v
new file mode 100644
index 000000000..3ce8fc588
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e338m15/feaddDisplay.v b/src/Specific/montgomery32_2e338m15/feaddDisplay.v
new file mode 100644
index 000000000..2e1fd0ad3
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e338m15.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e338m15/femul.v b/src/Specific/montgomery32_2e338m15/femul.v
new file mode 100644
index 000000000..554a19d03
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e338m15/femulDisplay.v b/src/Specific/montgomery32_2e338m15/femulDisplay.v
new file mode 100644
index 000000000..75c868014
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e338m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e338m15/fenz.v b/src/Specific/montgomery32_2e338m15/fenz.v
new file mode 100644
index 000000000..9e6703cd3
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e338m15.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e338m15/fenzDisplay.v b/src/Specific/montgomery32_2e338m15/fenzDisplay.v
new file mode 100644
index 000000000..20f32db85
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e338m15.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e338m15/feopp.v b/src/Specific/montgomery32_2e338m15/feopp.v
new file mode 100644
index 000000000..fdc40fa36
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e338m15/feoppDisplay.v b/src/Specific/montgomery32_2e338m15/feoppDisplay.v
new file mode 100644
index 000000000..6c28b4f9a
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e338m15.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e338m15/fesub.v b/src/Specific/montgomery32_2e338m15/fesub.v
new file mode 100644
index 000000000..bcd63f737
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e338m15/fesubDisplay.v b/src/Specific/montgomery32_2e338m15/fesubDisplay.v
new file mode 100644
index 000000000..37e783527
--- /dev/null
+++ b/src/Specific/montgomery32_2e338m15/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e338m15.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e369m25/CurveParameters.v b/src/Specific/montgomery32_2e369m25/CurveParameters.v
new file mode 100644
index 000000000..79800d48d
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^369 - 25
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 11%nat;
+ bitwidth := 32;
+ s := 2^369;
+ c := [(1, 25)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e369m25/Synthesis.v b/src/Specific/montgomery32_2e369m25/Synthesis.v
new file mode 100644
index 000000000..7a679c31c
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e369m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e369m25/compiler.sh b/src/Specific/montgomery32_2e369m25/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e369m25/feadd.v b/src/Specific/montgomery32_2e369m25/feadd.v
new file mode 100644
index 000000000..db2e0c7fa
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e369m25/feaddDisplay.v b/src/Specific/montgomery32_2e369m25/feaddDisplay.v
new file mode 100644
index 000000000..1d16ed2d0
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e369m25.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e369m25/femul.v b/src/Specific/montgomery32_2e369m25/femul.v
new file mode 100644
index 000000000..98a160ac6
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e369m25/femulDisplay.v b/src/Specific/montgomery32_2e369m25/femulDisplay.v
new file mode 100644
index 000000000..9967b3866
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e369m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e369m25/fenz.v b/src/Specific/montgomery32_2e369m25/fenz.v
new file mode 100644
index 000000000..43dadd465
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e369m25.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e369m25/fenzDisplay.v b/src/Specific/montgomery32_2e369m25/fenzDisplay.v
new file mode 100644
index 000000000..97d4fe6a2
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e369m25.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e369m25/feopp.v b/src/Specific/montgomery32_2e369m25/feopp.v
new file mode 100644
index 000000000..8eca48455
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e369m25/feoppDisplay.v b/src/Specific/montgomery32_2e369m25/feoppDisplay.v
new file mode 100644
index 000000000..c956b81ec
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e369m25.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e369m25/fesub.v b/src/Specific/montgomery32_2e369m25/fesub.v
new file mode 100644
index 000000000..bcd0fcbf1
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e369m25/fesubDisplay.v b/src/Specific/montgomery32_2e369m25/fesubDisplay.v
new file mode 100644
index 000000000..73d3a8209
--- /dev/null
+++ b/src/Specific/montgomery32_2e369m25/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e369m25.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e379m19/CurveParameters.v b/src/Specific/montgomery32_2e379m19/CurveParameters.v
new file mode 100644
index 000000000..9d34f2833
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^379 - 19
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 11%nat;
+ bitwidth := 32;
+ s := 2^379;
+ c := [(1, 19)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e379m19/Synthesis.v b/src/Specific/montgomery32_2e379m19/Synthesis.v
new file mode 100644
index 000000000..ff4c0ab0d
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e379m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e379m19/compiler.sh b/src/Specific/montgomery32_2e379m19/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e379m19/feadd.v b/src/Specific/montgomery32_2e379m19/feadd.v
new file mode 100644
index 000000000..fce07e881
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e379m19/feaddDisplay.v b/src/Specific/montgomery32_2e379m19/feaddDisplay.v
new file mode 100644
index 000000000..f155bbd3b
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e379m19.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e379m19/femul.v b/src/Specific/montgomery32_2e379m19/femul.v
new file mode 100644
index 000000000..5250070b4
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e379m19/femulDisplay.v b/src/Specific/montgomery32_2e379m19/femulDisplay.v
new file mode 100644
index 000000000..7dd66d529
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e379m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e379m19/fenz.v b/src/Specific/montgomery32_2e379m19/fenz.v
new file mode 100644
index 000000000..b1c7de788
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e379m19.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e379m19/fenzDisplay.v b/src/Specific/montgomery32_2e379m19/fenzDisplay.v
new file mode 100644
index 000000000..9f617fb9a
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e379m19.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e379m19/feopp.v b/src/Specific/montgomery32_2e379m19/feopp.v
new file mode 100644
index 000000000..7eaaf6e31
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e379m19/feoppDisplay.v b/src/Specific/montgomery32_2e379m19/feoppDisplay.v
new file mode 100644
index 000000000..dc2becb42
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e379m19.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e379m19/fesub.v b/src/Specific/montgomery32_2e379m19/fesub.v
new file mode 100644
index 000000000..a303354e4
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e379m19/fesubDisplay.v b/src/Specific/montgomery32_2e379m19/fesubDisplay.v
new file mode 100644
index 000000000..895c4ab34
--- /dev/null
+++ b/src/Specific/montgomery32_2e379m19/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e379m19.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e382m105/CurveParameters.v b/src/Specific/montgomery32_2e382m105/CurveParameters.v
new file mode 100644
index 000000000..5327d1bb5
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^382 - 105
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 11%nat;
+ bitwidth := 32;
+ s := 2^382;
+ c := [(1, 105)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e382m105/Synthesis.v b/src/Specific/montgomery32_2e382m105/Synthesis.v
new file mode 100644
index 000000000..02d359b31
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e382m105.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e382m105/compiler.sh b/src/Specific/montgomery32_2e382m105/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e382m105/feadd.v b/src/Specific/montgomery32_2e382m105/feadd.v
new file mode 100644
index 000000000..7a1150097
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e382m105/feaddDisplay.v b/src/Specific/montgomery32_2e382m105/feaddDisplay.v
new file mode 100644
index 000000000..a9ed636f9
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e382m105.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e382m105/femul.v b/src/Specific/montgomery32_2e382m105/femul.v
new file mode 100644
index 000000000..9cf1abf5c
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e382m105/femulDisplay.v b/src/Specific/montgomery32_2e382m105/femulDisplay.v
new file mode 100644
index 000000000..05b454c13
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e382m105.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e382m105/fenz.v b/src/Specific/montgomery32_2e382m105/fenz.v
new file mode 100644
index 000000000..361b3677c
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e382m105.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e382m105/fenzDisplay.v b/src/Specific/montgomery32_2e382m105/fenzDisplay.v
new file mode 100644
index 000000000..75c2dc7fc
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e382m105.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e382m105/feopp.v b/src/Specific/montgomery32_2e382m105/feopp.v
new file mode 100644
index 000000000..918e19792
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e382m105/feoppDisplay.v b/src/Specific/montgomery32_2e382m105/feoppDisplay.v
new file mode 100644
index 000000000..e507430bf
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e382m105.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e382m105/fesub.v b/src/Specific/montgomery32_2e382m105/fesub.v
new file mode 100644
index 000000000..44cc23e2b
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e382m105/fesubDisplay.v b/src/Specific/montgomery32_2e382m105/fesubDisplay.v
new file mode 100644
index 000000000..9d7a3131a
--- /dev/null
+++ b/src/Specific/montgomery32_2e382m105/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e382m105.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e383m187/CurveParameters.v b/src/Specific/montgomery32_2e383m187/CurveParameters.v
new file mode 100644
index 000000000..bfc4359ce
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^383 - 187
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 11%nat;
+ bitwidth := 32;
+ s := 2^383;
+ c := [(1, 187)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e383m187/Synthesis.v b/src/Specific/montgomery32_2e383m187/Synthesis.v
new file mode 100644
index 000000000..1344e458f
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e383m187.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e383m187/compiler.sh b/src/Specific/montgomery32_2e383m187/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e383m187/feadd.v b/src/Specific/montgomery32_2e383m187/feadd.v
new file mode 100644
index 000000000..1ac70c727
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e383m187/feaddDisplay.v b/src/Specific/montgomery32_2e383m187/feaddDisplay.v
new file mode 100644
index 000000000..350dd3300
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m187.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e383m187/femul.v b/src/Specific/montgomery32_2e383m187/femul.v
new file mode 100644
index 000000000..986edf365
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e383m187/femulDisplay.v b/src/Specific/montgomery32_2e383m187/femulDisplay.v
new file mode 100644
index 000000000..98744b4d6
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m187.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e383m187/fenz.v b/src/Specific/montgomery32_2e383m187/fenz.v
new file mode 100644
index 000000000..a54bc7b5d
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m187.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e383m187/fenzDisplay.v b/src/Specific/montgomery32_2e383m187/fenzDisplay.v
new file mode 100644
index 000000000..7c5fb6dcb
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m187.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e383m187/feopp.v b/src/Specific/montgomery32_2e383m187/feopp.v
new file mode 100644
index 000000000..461225d44
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e383m187/feoppDisplay.v b/src/Specific/montgomery32_2e383m187/feoppDisplay.v
new file mode 100644
index 000000000..981f5c0e2
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m187.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e383m187/fesub.v b/src/Specific/montgomery32_2e383m187/fesub.v
new file mode 100644
index 000000000..619b76884
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e383m187/fesubDisplay.v b/src/Specific/montgomery32_2e383m187/fesubDisplay.v
new file mode 100644
index 000000000..9ab191020
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m187/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m187.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e383m31/CurveParameters.v b/src/Specific/montgomery32_2e383m31/CurveParameters.v
new file mode 100644
index 000000000..ed045577e
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^383 - 31
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 11%nat;
+ bitwidth := 32;
+ s := 2^383;
+ c := [(1, 31)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e383m31/Synthesis.v b/src/Specific/montgomery32_2e383m31/Synthesis.v
new file mode 100644
index 000000000..fbc56b476
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e383m31.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e383m31/compiler.sh b/src/Specific/montgomery32_2e383m31/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e383m31/feadd.v b/src/Specific/montgomery32_2e383m31/feadd.v
new file mode 100644
index 000000000..d88df79e8
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e383m31/feaddDisplay.v b/src/Specific/montgomery32_2e383m31/feaddDisplay.v
new file mode 100644
index 000000000..a69d724db
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m31.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e383m31/femul.v b/src/Specific/montgomery32_2e383m31/femul.v
new file mode 100644
index 000000000..0004daf95
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e383m31/femulDisplay.v b/src/Specific/montgomery32_2e383m31/femulDisplay.v
new file mode 100644
index 000000000..9a2c4f826
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m31.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e383m31/fenz.v b/src/Specific/montgomery32_2e383m31/fenz.v
new file mode 100644
index 000000000..e9ee3c35d
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m31.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e383m31/fenzDisplay.v b/src/Specific/montgomery32_2e383m31/fenzDisplay.v
new file mode 100644
index 000000000..9823ad3b3
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m31.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e383m31/feopp.v b/src/Specific/montgomery32_2e383m31/feopp.v
new file mode 100644
index 000000000..5aca6fbf8
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e383m31/feoppDisplay.v b/src/Specific/montgomery32_2e383m31/feoppDisplay.v
new file mode 100644
index 000000000..3137e3384
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m31.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e383m31/fesub.v b/src/Specific/montgomery32_2e383m31/fesub.v
new file mode 100644
index 000000000..df021ab85
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e383m31/fesubDisplay.v b/src/Specific/montgomery32_2e383m31/fesubDisplay.v
new file mode 100644
index 000000000..5ddd0118d
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m31/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m31.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e383m421/CurveParameters.v b/src/Specific/montgomery32_2e383m421/CurveParameters.v
new file mode 100644
index 000000000..0de06aac7
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^383 - 421
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 11%nat;
+ bitwidth := 32;
+ s := 2^383;
+ c := [(1, 421)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e383m421/Synthesis.v b/src/Specific/montgomery32_2e383m421/Synthesis.v
new file mode 100644
index 000000000..4e9bddf95
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e383m421.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e383m421/compiler.sh b/src/Specific/montgomery32_2e383m421/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e383m421/feadd.v b/src/Specific/montgomery32_2e383m421/feadd.v
new file mode 100644
index 000000000..7b1ca69f8
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m421.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e383m421/feaddDisplay.v b/src/Specific/montgomery32_2e383m421/feaddDisplay.v
new file mode 100644
index 000000000..0bea7ed00
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m421.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e383m421/femul.v b/src/Specific/montgomery32_2e383m421/femul.v
new file mode 100644
index 000000000..9c76e7eb1
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m421.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e383m421/femulDisplay.v b/src/Specific/montgomery32_2e383m421/femulDisplay.v
new file mode 100644
index 000000000..c57f4a0de
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m421.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e383m421/fenz.v b/src/Specific/montgomery32_2e383m421/fenz.v
new file mode 100644
index 000000000..412998565
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m421.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e383m421/fenzDisplay.v b/src/Specific/montgomery32_2e383m421/fenzDisplay.v
new file mode 100644
index 000000000..aba620917
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m421.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e383m421/feopp.v b/src/Specific/montgomery32_2e383m421/feopp.v
new file mode 100644
index 000000000..bd6feaa3d
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m421.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e383m421/feoppDisplay.v b/src/Specific/montgomery32_2e383m421/feoppDisplay.v
new file mode 100644
index 000000000..828128718
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m421.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e383m421/fesub.v b/src/Specific/montgomery32_2e383m421/fesub.v
new file mode 100644
index 000000000..919a1365b
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e383m421.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e383m421/fesubDisplay.v b/src/Specific/montgomery32_2e383m421/fesubDisplay.v
new file mode 100644
index 000000000..01b541900
--- /dev/null
+++ b/src/Specific/montgomery32_2e383m421/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e383m421.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/CurveParameters.v b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/CurveParameters.v
new file mode 100644
index 000000000..c32d23e79
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^384 - 2^128 - 2^96 + 2^32 - 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^384;
+ c := [(1, 1); (2^32, -1); (2^96, 1); (2^128, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/Synthesis.v b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/Synthesis.v
new file mode 100644
index 000000000..ec5e6e490
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e384m2e128m2e96p2e32m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/compiler.sh b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feadd.v b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feadd.v
new file mode 100644
index 000000000..4256764fe
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feaddDisplay.v b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feaddDisplay.v
new file mode 100644
index 000000000..169685831
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e384m2e128m2e96p2e32m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/femul.v b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/femul.v
new file mode 100644
index 000000000..f2b43cf99
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/femulDisplay.v b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/femulDisplay.v
new file mode 100644
index 000000000..573141754
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e384m2e128m2e96p2e32m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fenz.v b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fenz.v
new file mode 100644
index 000000000..d2d187a9b
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e384m2e128m2e96p2e32m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fenzDisplay.v b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fenzDisplay.v
new file mode 100644
index 000000000..207e7ff04
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e384m2e128m2e96p2e32m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feopp.v b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feopp.v
new file mode 100644
index 000000000..243efefec
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feoppDisplay.v b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feoppDisplay.v
new file mode 100644
index 000000000..9878f453e
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e384m2e128m2e96p2e32m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fesub.v b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fesub.v
new file mode 100644
index 000000000..e4c92a279
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fesubDisplay.v b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fesubDisplay.v
new file mode 100644
index 000000000..40fb09f3a
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m2e128m2e96p2e32m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e384m2e128m2e96p2e32m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e384m317/CurveParameters.v b/src/Specific/montgomery32_2e384m317/CurveParameters.v
new file mode 100644
index 000000000..d4acdd325
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^384 - 317
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^384;
+ c := [(1, 317)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e384m317/Synthesis.v b/src/Specific/montgomery32_2e384m317/Synthesis.v
new file mode 100644
index 000000000..61812a5e7
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e384m317.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e384m317/compiler.sh b/src/Specific/montgomery32_2e384m317/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e384m317/feadd.v b/src/Specific/montgomery32_2e384m317/feadd.v
new file mode 100644
index 000000000..2a624b3d2
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e384m317/feaddDisplay.v b/src/Specific/montgomery32_2e384m317/feaddDisplay.v
new file mode 100644
index 000000000..bb3f937d2
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e384m317.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e384m317/femul.v b/src/Specific/montgomery32_2e384m317/femul.v
new file mode 100644
index 000000000..77b41c364
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e384m317/femulDisplay.v b/src/Specific/montgomery32_2e384m317/femulDisplay.v
new file mode 100644
index 000000000..ad26cebcc
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e384m317.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e384m317/fenz.v b/src/Specific/montgomery32_2e384m317/fenz.v
new file mode 100644
index 000000000..65be70832
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e384m317.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e384m317/fenzDisplay.v b/src/Specific/montgomery32_2e384m317/fenzDisplay.v
new file mode 100644
index 000000000..9520d7ad6
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e384m317.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e384m317/feopp.v b/src/Specific/montgomery32_2e384m317/feopp.v
new file mode 100644
index 000000000..2681c862d
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e384m317/feoppDisplay.v b/src/Specific/montgomery32_2e384m317/feoppDisplay.v
new file mode 100644
index 000000000..8fe903a93
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e384m317.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e384m317/fesub.v b/src/Specific/montgomery32_2e384m317/fesub.v
new file mode 100644
index 000000000..59ef9e5c7
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e384m317/fesubDisplay.v b/src/Specific/montgomery32_2e384m317/fesubDisplay.v
new file mode 100644
index 000000000..049ff5bb3
--- /dev/null
+++ b/src/Specific/montgomery32_2e384m317/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e384m317.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e389m21/CurveParameters.v b/src/Specific/montgomery32_2e389m21/CurveParameters.v
new file mode 100644
index 000000000..a88b76ebe
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^389 - 21
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^389;
+ c := [(1, 21)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e389m21/Synthesis.v b/src/Specific/montgomery32_2e389m21/Synthesis.v
new file mode 100644
index 000000000..41d942c9b
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e389m21.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e389m21/compiler.sh b/src/Specific/montgomery32_2e389m21/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e389m21/feadd.v b/src/Specific/montgomery32_2e389m21/feadd.v
new file mode 100644
index 000000000..c1511e634
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e389m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e389m21/feaddDisplay.v b/src/Specific/montgomery32_2e389m21/feaddDisplay.v
new file mode 100644
index 000000000..f8aa2ae75
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e389m21.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e389m21/femul.v b/src/Specific/montgomery32_2e389m21/femul.v
new file mode 100644
index 000000000..dab7929a8
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e389m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e389m21/femulDisplay.v b/src/Specific/montgomery32_2e389m21/femulDisplay.v
new file mode 100644
index 000000000..aaaf9a879
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e389m21.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e389m21/fenz.v b/src/Specific/montgomery32_2e389m21/fenz.v
new file mode 100644
index 000000000..551fe3e6e
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e389m21.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e389m21/fenzDisplay.v b/src/Specific/montgomery32_2e389m21/fenzDisplay.v
new file mode 100644
index 000000000..cbe31386c
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e389m21.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e389m21/feopp.v b/src/Specific/montgomery32_2e389m21/feopp.v
new file mode 100644
index 000000000..d0d8a7651
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e389m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e389m21/feoppDisplay.v b/src/Specific/montgomery32_2e389m21/feoppDisplay.v
new file mode 100644
index 000000000..05d0dc041
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e389m21.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e389m21/fesub.v b/src/Specific/montgomery32_2e389m21/fesub.v
new file mode 100644
index 000000000..72df79d04
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e389m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e389m21/fesubDisplay.v b/src/Specific/montgomery32_2e389m21/fesubDisplay.v
new file mode 100644
index 000000000..f3772ce6e
--- /dev/null
+++ b/src/Specific/montgomery32_2e389m21/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e389m21.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e401m31/CurveParameters.v b/src/Specific/montgomery32_2e401m31/CurveParameters.v
new file mode 100644
index 000000000..5e093ad31
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^401 - 31
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^401;
+ c := [(1, 31)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e401m31/Synthesis.v b/src/Specific/montgomery32_2e401m31/Synthesis.v
new file mode 100644
index 000000000..7d86eee4e
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e401m31.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e401m31/compiler.sh b/src/Specific/montgomery32_2e401m31/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e401m31/feadd.v b/src/Specific/montgomery32_2e401m31/feadd.v
new file mode 100644
index 000000000..feb250ee0
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e401m31/feaddDisplay.v b/src/Specific/montgomery32_2e401m31/feaddDisplay.v
new file mode 100644
index 000000000..07bf23fdf
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e401m31.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e401m31/femul.v b/src/Specific/montgomery32_2e401m31/femul.v
new file mode 100644
index 000000000..08a0eb673
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e401m31/femulDisplay.v b/src/Specific/montgomery32_2e401m31/femulDisplay.v
new file mode 100644
index 000000000..02c9719be
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e401m31.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e401m31/fenz.v b/src/Specific/montgomery32_2e401m31/fenz.v
new file mode 100644
index 000000000..b62a84cad
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e401m31.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e401m31/fenzDisplay.v b/src/Specific/montgomery32_2e401m31/fenzDisplay.v
new file mode 100644
index 000000000..3a28a365e
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e401m31.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e401m31/feopp.v b/src/Specific/montgomery32_2e401m31/feopp.v
new file mode 100644
index 000000000..ec6399383
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e401m31/feoppDisplay.v b/src/Specific/montgomery32_2e401m31/feoppDisplay.v
new file mode 100644
index 000000000..d4d5a87ec
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e401m31.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e401m31/fesub.v b/src/Specific/montgomery32_2e401m31/fesub.v
new file mode 100644
index 000000000..14e04bfe7
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e401m31/fesubDisplay.v b/src/Specific/montgomery32_2e401m31/fesubDisplay.v
new file mode 100644
index 000000000..4ef34ac4f
--- /dev/null
+++ b/src/Specific/montgomery32_2e401m31/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e401m31.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e413m21/CurveParameters.v b/src/Specific/montgomery32_2e413m21/CurveParameters.v
new file mode 100644
index 000000000..13fb130c8
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^413 - 21
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^413;
+ c := [(1, 21)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e413m21/Synthesis.v b/src/Specific/montgomery32_2e413m21/Synthesis.v
new file mode 100644
index 000000000..fdf19b999
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e413m21.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e413m21/compiler.sh b/src/Specific/montgomery32_2e413m21/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e413m21/feadd.v b/src/Specific/montgomery32_2e413m21/feadd.v
new file mode 100644
index 000000000..6b7433663
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e413m21/feaddDisplay.v b/src/Specific/montgomery32_2e413m21/feaddDisplay.v
new file mode 100644
index 000000000..21c075609
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e413m21.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e413m21/femul.v b/src/Specific/montgomery32_2e413m21/femul.v
new file mode 100644
index 000000000..de87c3583
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e413m21/femulDisplay.v b/src/Specific/montgomery32_2e413m21/femulDisplay.v
new file mode 100644
index 000000000..e040e4be5
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e413m21.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e413m21/fenz.v b/src/Specific/montgomery32_2e413m21/fenz.v
new file mode 100644
index 000000000..a1bf6615d
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e413m21.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e413m21/fenzDisplay.v b/src/Specific/montgomery32_2e413m21/fenzDisplay.v
new file mode 100644
index 000000000..d248b55c3
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e413m21.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e413m21/feopp.v b/src/Specific/montgomery32_2e413m21/feopp.v
new file mode 100644
index 000000000..38ff66898
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e413m21/feoppDisplay.v b/src/Specific/montgomery32_2e413m21/feoppDisplay.v
new file mode 100644
index 000000000..b931dcfb1
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e413m21.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e413m21/fesub.v b/src/Specific/montgomery32_2e413m21/fesub.v
new file mode 100644
index 000000000..8069f4ec0
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e413m21/fesubDisplay.v b/src/Specific/montgomery32_2e413m21/fesubDisplay.v
new file mode 100644
index 000000000..587ef1c26
--- /dev/null
+++ b/src/Specific/montgomery32_2e413m21/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e413m21.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e414m17/CurveParameters.v b/src/Specific/montgomery32_2e414m17/CurveParameters.v
new file mode 100644
index 000000000..4b26d0d91
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^414 - 17
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^414;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e414m17/Synthesis.v b/src/Specific/montgomery32_2e414m17/Synthesis.v
new file mode 100644
index 000000000..afb5128b1
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e414m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e414m17/compiler.sh b/src/Specific/montgomery32_2e414m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e414m17/feadd.v b/src/Specific/montgomery32_2e414m17/feadd.v
new file mode 100644
index 000000000..285674e48
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e414m17/feaddDisplay.v b/src/Specific/montgomery32_2e414m17/feaddDisplay.v
new file mode 100644
index 000000000..cfe7bf9e0
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e414m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e414m17/femul.v b/src/Specific/montgomery32_2e414m17/femul.v
new file mode 100644
index 000000000..a39473c7e
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e414m17/femulDisplay.v b/src/Specific/montgomery32_2e414m17/femulDisplay.v
new file mode 100644
index 000000000..df736e616
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e414m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e414m17/fenz.v b/src/Specific/montgomery32_2e414m17/fenz.v
new file mode 100644
index 000000000..3188e2d46
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e414m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e414m17/fenzDisplay.v b/src/Specific/montgomery32_2e414m17/fenzDisplay.v
new file mode 100644
index 000000000..6ba0cf03b
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e414m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e414m17/feopp.v b/src/Specific/montgomery32_2e414m17/feopp.v
new file mode 100644
index 000000000..aa036d4e5
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e414m17/feoppDisplay.v b/src/Specific/montgomery32_2e414m17/feoppDisplay.v
new file mode 100644
index 000000000..8a8ae6ad0
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e414m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e414m17/fesub.v b/src/Specific/montgomery32_2e414m17/fesub.v
new file mode 100644
index 000000000..142786f7e
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e414m17/fesubDisplay.v b/src/Specific/montgomery32_2e414m17/fesubDisplay.v
new file mode 100644
index 000000000..07381b1e8
--- /dev/null
+++ b/src/Specific/montgomery32_2e414m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e414m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e416m2e208m1/CurveParameters.v b/src/Specific/montgomery32_2e416m2e208m1/CurveParameters.v
new file mode 100644
index 000000000..d5b057244
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^416 - 2^208 - 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 13%nat;
+ bitwidth := 32;
+ s := 2^416;
+ c := [(1, 1); (2^208, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some true;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e416m2e208m1/Synthesis.v b/src/Specific/montgomery32_2e416m2e208m1/Synthesis.v
new file mode 100644
index 000000000..aca1d48a2
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e416m2e208m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e416m2e208m1/compiler.sh b/src/Specific/montgomery32_2e416m2e208m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e416m2e208m1/feadd.v b/src/Specific/montgomery32_2e416m2e208m1/feadd.v
new file mode 100644
index 000000000..021f66ac8
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e416m2e208m1/feaddDisplay.v b/src/Specific/montgomery32_2e416m2e208m1/feaddDisplay.v
new file mode 100644
index 000000000..5afbaf9b4
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e416m2e208m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e416m2e208m1/femul.v b/src/Specific/montgomery32_2e416m2e208m1/femul.v
new file mode 100644
index 000000000..db4e771f3
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e416m2e208m1/femulDisplay.v b/src/Specific/montgomery32_2e416m2e208m1/femulDisplay.v
new file mode 100644
index 000000000..2ccd8d416
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e416m2e208m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e416m2e208m1/fenz.v b/src/Specific/montgomery32_2e416m2e208m1/fenz.v
new file mode 100644
index 000000000..11ecf2d41
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e416m2e208m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e416m2e208m1/fenzDisplay.v b/src/Specific/montgomery32_2e416m2e208m1/fenzDisplay.v
new file mode 100644
index 000000000..2c914e765
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e416m2e208m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e416m2e208m1/feopp.v b/src/Specific/montgomery32_2e416m2e208m1/feopp.v
new file mode 100644
index 000000000..e432b0249
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e416m2e208m1/feoppDisplay.v b/src/Specific/montgomery32_2e416m2e208m1/feoppDisplay.v
new file mode 100644
index 000000000..5206bd13b
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e416m2e208m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e416m2e208m1/fesub.v b/src/Specific/montgomery32_2e416m2e208m1/fesub.v
new file mode 100644
index 000000000..159e87eb3
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e416m2e208m1/fesubDisplay.v b/src/Specific/montgomery32_2e416m2e208m1/fesubDisplay.v
new file mode 100644
index 000000000..c85bd15f8
--- /dev/null
+++ b/src/Specific/montgomery32_2e416m2e208m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e416m2e208m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e444m17/CurveParameters.v b/src/Specific/montgomery32_2e444m17/CurveParameters.v
new file mode 100644
index 000000000..95e6cc326
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^444 - 17
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 13%nat;
+ bitwidth := 32;
+ s := 2^444;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e444m17/Synthesis.v b/src/Specific/montgomery32_2e444m17/Synthesis.v
new file mode 100644
index 000000000..d846b3939
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e444m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e444m17/compiler.sh b/src/Specific/montgomery32_2e444m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e444m17/feadd.v b/src/Specific/montgomery32_2e444m17/feadd.v
new file mode 100644
index 000000000..047a2a8dd
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e444m17/feaddDisplay.v b/src/Specific/montgomery32_2e444m17/feaddDisplay.v
new file mode 100644
index 000000000..ff644e874
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e444m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e444m17/femul.v b/src/Specific/montgomery32_2e444m17/femul.v
new file mode 100644
index 000000000..7d4771573
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e444m17/femulDisplay.v b/src/Specific/montgomery32_2e444m17/femulDisplay.v
new file mode 100644
index 000000000..89197fc94
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e444m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e444m17/fenz.v b/src/Specific/montgomery32_2e444m17/fenz.v
new file mode 100644
index 000000000..17ec2c7ff
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e444m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e444m17/fenzDisplay.v b/src/Specific/montgomery32_2e444m17/fenzDisplay.v
new file mode 100644
index 000000000..1c9012b1f
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e444m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e444m17/feopp.v b/src/Specific/montgomery32_2e444m17/feopp.v
new file mode 100644
index 000000000..ab509d4e5
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e444m17/feoppDisplay.v b/src/Specific/montgomery32_2e444m17/feoppDisplay.v
new file mode 100644
index 000000000..51aa8e4fa
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e444m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e444m17/fesub.v b/src/Specific/montgomery32_2e444m17/fesub.v
new file mode 100644
index 000000000..46af0c83f
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e444m17/fesubDisplay.v b/src/Specific/montgomery32_2e444m17/fesubDisplay.v
new file mode 100644
index 000000000..eb810ebe4
--- /dev/null
+++ b/src/Specific/montgomery32_2e444m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e444m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e448m2e224m1/CurveParameters.v b/src/Specific/montgomery32_2e448m2e224m1/CurveParameters.v
new file mode 100644
index 000000000..879dbb487
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^448 - 2^224 - 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 14%nat;
+ bitwidth := 32;
+ s := 2^448;
+ c := [(1, 1); (2^224, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some true;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e448m2e224m1/Synthesis.v b/src/Specific/montgomery32_2e448m2e224m1/Synthesis.v
new file mode 100644
index 000000000..252880836
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e448m2e224m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e448m2e224m1/compiler.sh b/src/Specific/montgomery32_2e448m2e224m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e448m2e224m1/feadd.v b/src/Specific/montgomery32_2e448m2e224m1/feadd.v
new file mode 100644
index 000000000..6d652b861
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e448m2e224m1/feaddDisplay.v b/src/Specific/montgomery32_2e448m2e224m1/feaddDisplay.v
new file mode 100644
index 000000000..0269a95df
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e448m2e224m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e448m2e224m1/femul.v b/src/Specific/montgomery32_2e448m2e224m1/femul.v
new file mode 100644
index 000000000..c778c4a69
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e448m2e224m1/femulDisplay.v b/src/Specific/montgomery32_2e448m2e224m1/femulDisplay.v
new file mode 100644
index 000000000..2320978bd
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e448m2e224m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e448m2e224m1/fenz.v b/src/Specific/montgomery32_2e448m2e224m1/fenz.v
new file mode 100644
index 000000000..9752fba73
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e448m2e224m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e448m2e224m1/fenzDisplay.v b/src/Specific/montgomery32_2e448m2e224m1/fenzDisplay.v
new file mode 100644
index 000000000..1042b4537
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e448m2e224m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e448m2e224m1/feopp.v b/src/Specific/montgomery32_2e448m2e224m1/feopp.v
new file mode 100644
index 000000000..8d50b78a3
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e448m2e224m1/feoppDisplay.v b/src/Specific/montgomery32_2e448m2e224m1/feoppDisplay.v
new file mode 100644
index 000000000..11d4f739c
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e448m2e224m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e448m2e224m1/fesub.v b/src/Specific/montgomery32_2e448m2e224m1/fesub.v
new file mode 100644
index 000000000..df871a121
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e448m2e224m1/fesubDisplay.v b/src/Specific/montgomery32_2e448m2e224m1/fesubDisplay.v
new file mode 100644
index 000000000..1925f15f3
--- /dev/null
+++ b/src/Specific/montgomery32_2e448m2e224m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e448m2e224m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e450m2e225m1/CurveParameters.v b/src/Specific/montgomery32_2e450m2e225m1/CurveParameters.v
new file mode 100644
index 000000000..8b74751e6
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^450 - 2^225 - 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 14%nat;
+ bitwidth := 32;
+ s := 2^450;
+ c := [(1, 1); (2^225, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some true;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e450m2e225m1/Synthesis.v b/src/Specific/montgomery32_2e450m2e225m1/Synthesis.v
new file mode 100644
index 000000000..1bf26730a
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e450m2e225m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e450m2e225m1/compiler.sh b/src/Specific/montgomery32_2e450m2e225m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e450m2e225m1/feadd.v b/src/Specific/montgomery32_2e450m2e225m1/feadd.v
new file mode 100644
index 000000000..50e823537
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e450m2e225m1/feaddDisplay.v b/src/Specific/montgomery32_2e450m2e225m1/feaddDisplay.v
new file mode 100644
index 000000000..77b855cb9
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e450m2e225m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e450m2e225m1/femul.v b/src/Specific/montgomery32_2e450m2e225m1/femul.v
new file mode 100644
index 000000000..e9f718053
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e450m2e225m1/femulDisplay.v b/src/Specific/montgomery32_2e450m2e225m1/femulDisplay.v
new file mode 100644
index 000000000..8a758cc76
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e450m2e225m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e450m2e225m1/fenz.v b/src/Specific/montgomery32_2e450m2e225m1/fenz.v
new file mode 100644
index 000000000..b0a559e31
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e450m2e225m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e450m2e225m1/fenzDisplay.v b/src/Specific/montgomery32_2e450m2e225m1/fenzDisplay.v
new file mode 100644
index 000000000..f62f6283f
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e450m2e225m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e450m2e225m1/feopp.v b/src/Specific/montgomery32_2e450m2e225m1/feopp.v
new file mode 100644
index 000000000..454ce89fe
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e450m2e225m1/feoppDisplay.v b/src/Specific/montgomery32_2e450m2e225m1/feoppDisplay.v
new file mode 100644
index 000000000..1abe48357
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e450m2e225m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e450m2e225m1/fesub.v b/src/Specific/montgomery32_2e450m2e225m1/fesub.v
new file mode 100644
index 000000000..6fa99a4fe
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e450m2e225m1/fesubDisplay.v b/src/Specific/montgomery32_2e450m2e225m1/fesubDisplay.v
new file mode 100644
index 000000000..d782d2629
--- /dev/null
+++ b/src/Specific/montgomery32_2e450m2e225m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e450m2e225m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e452m3/CurveParameters.v b/src/Specific/montgomery32_2e452m3/CurveParameters.v
new file mode 100644
index 000000000..47e836c87
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^452 - 3
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 14%nat;
+ bitwidth := 32;
+ s := 2^452;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e452m3/Synthesis.v b/src/Specific/montgomery32_2e452m3/Synthesis.v
new file mode 100644
index 000000000..ae776a81f
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e452m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e452m3/compiler.sh b/src/Specific/montgomery32_2e452m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e452m3/feadd.v b/src/Specific/montgomery32_2e452m3/feadd.v
new file mode 100644
index 000000000..99541e07d
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e452m3/feaddDisplay.v b/src/Specific/montgomery32_2e452m3/feaddDisplay.v
new file mode 100644
index 000000000..4bd30850e
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e452m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e452m3/femul.v b/src/Specific/montgomery32_2e452m3/femul.v
new file mode 100644
index 000000000..141598227
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e452m3/femulDisplay.v b/src/Specific/montgomery32_2e452m3/femulDisplay.v
new file mode 100644
index 000000000..cd8e6e76d
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e452m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e452m3/fenz.v b/src/Specific/montgomery32_2e452m3/fenz.v
new file mode 100644
index 000000000..25266bfb0
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e452m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e452m3/fenzDisplay.v b/src/Specific/montgomery32_2e452m3/fenzDisplay.v
new file mode 100644
index 000000000..8c76b4b54
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e452m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e452m3/feopp.v b/src/Specific/montgomery32_2e452m3/feopp.v
new file mode 100644
index 000000000..b2d2acb15
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e452m3/feoppDisplay.v b/src/Specific/montgomery32_2e452m3/feoppDisplay.v
new file mode 100644
index 000000000..5976f7170
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e452m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e452m3/fesub.v b/src/Specific/montgomery32_2e452m3/fesub.v
new file mode 100644
index 000000000..0a6405286
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e452m3/fesubDisplay.v b/src/Specific/montgomery32_2e452m3/fesubDisplay.v
new file mode 100644
index 000000000..deab5054b
--- /dev/null
+++ b/src/Specific/montgomery32_2e452m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e452m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e468m17/CurveParameters.v b/src/Specific/montgomery32_2e468m17/CurveParameters.v
new file mode 100644
index 000000000..6a0bd617f
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^468 - 17
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 14%nat;
+ bitwidth := 32;
+ s := 2^468;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e468m17/Synthesis.v b/src/Specific/montgomery32_2e468m17/Synthesis.v
new file mode 100644
index 000000000..9f7912188
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e468m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e468m17/compiler.sh b/src/Specific/montgomery32_2e468m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e468m17/feadd.v b/src/Specific/montgomery32_2e468m17/feadd.v
new file mode 100644
index 000000000..01398183e
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e468m17/feaddDisplay.v b/src/Specific/montgomery32_2e468m17/feaddDisplay.v
new file mode 100644
index 000000000..077fb11fd
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e468m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e468m17/femul.v b/src/Specific/montgomery32_2e468m17/femul.v
new file mode 100644
index 000000000..8ac55be3d
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e468m17/femulDisplay.v b/src/Specific/montgomery32_2e468m17/femulDisplay.v
new file mode 100644
index 000000000..8d901984e
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e468m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e468m17/fenz.v b/src/Specific/montgomery32_2e468m17/fenz.v
new file mode 100644
index 000000000..1e4646eb4
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e468m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e468m17/fenzDisplay.v b/src/Specific/montgomery32_2e468m17/fenzDisplay.v
new file mode 100644
index 000000000..50b68b2fa
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e468m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e468m17/feopp.v b/src/Specific/montgomery32_2e468m17/feopp.v
new file mode 100644
index 000000000..4a98eaa7d
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e468m17/feoppDisplay.v b/src/Specific/montgomery32_2e468m17/feoppDisplay.v
new file mode 100644
index 000000000..d33c3fff1
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e468m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e468m17/fesub.v b/src/Specific/montgomery32_2e468m17/fesub.v
new file mode 100644
index 000000000..de9340180
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e468m17/fesubDisplay.v b/src/Specific/montgomery32_2e468m17/fesubDisplay.v
new file mode 100644
index 000000000..cc38561fd
--- /dev/null
+++ b/src/Specific/montgomery32_2e468m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e468m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e480m2e240m1/CurveParameters.v b/src/Specific/montgomery32_2e480m2e240m1/CurveParameters.v
new file mode 100644
index 000000000..19d73fb20
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^480 - 2^240 - 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 15%nat;
+ bitwidth := 32;
+ s := 2^480;
+ c := [(1, 1); (2^240, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some true;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e480m2e240m1/Synthesis.v b/src/Specific/montgomery32_2e480m2e240m1/Synthesis.v
new file mode 100644
index 000000000..2a8ca0dc1
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e480m2e240m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e480m2e240m1/compiler.sh b/src/Specific/montgomery32_2e480m2e240m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e480m2e240m1/feadd.v b/src/Specific/montgomery32_2e480m2e240m1/feadd.v
new file mode 100644
index 000000000..b73a0301b
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e480m2e240m1/feaddDisplay.v b/src/Specific/montgomery32_2e480m2e240m1/feaddDisplay.v
new file mode 100644
index 000000000..ca377a31d
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e480m2e240m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e480m2e240m1/femul.v b/src/Specific/montgomery32_2e480m2e240m1/femul.v
new file mode 100644
index 000000000..62716a3e2
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e480m2e240m1/femulDisplay.v b/src/Specific/montgomery32_2e480m2e240m1/femulDisplay.v
new file mode 100644
index 000000000..8472705b9
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e480m2e240m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e480m2e240m1/fenz.v b/src/Specific/montgomery32_2e480m2e240m1/fenz.v
new file mode 100644
index 000000000..541727df2
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e480m2e240m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e480m2e240m1/fenzDisplay.v b/src/Specific/montgomery32_2e480m2e240m1/fenzDisplay.v
new file mode 100644
index 000000000..857f199f8
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e480m2e240m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e480m2e240m1/feopp.v b/src/Specific/montgomery32_2e480m2e240m1/feopp.v
new file mode 100644
index 000000000..400e8c5bb
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e480m2e240m1/feoppDisplay.v b/src/Specific/montgomery32_2e480m2e240m1/feoppDisplay.v
new file mode 100644
index 000000000..13d895d15
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e480m2e240m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e480m2e240m1/fesub.v b/src/Specific/montgomery32_2e480m2e240m1/fesub.v
new file mode 100644
index 000000000..eb810aceb
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e480m2e240m1/fesubDisplay.v b/src/Specific/montgomery32_2e480m2e240m1/fesubDisplay.v
new file mode 100644
index 000000000..b8d3b31cc
--- /dev/null
+++ b/src/Specific/montgomery32_2e480m2e240m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e480m2e240m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e488m17/CurveParameters.v b/src/Specific/montgomery32_2e488m17/CurveParameters.v
new file mode 100644
index 000000000..614698a5d
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^488 - 17
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 15%nat;
+ bitwidth := 32;
+ s := 2^488;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e488m17/Synthesis.v b/src/Specific/montgomery32_2e488m17/Synthesis.v
new file mode 100644
index 000000000..aeee987b9
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e488m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e488m17/compiler.sh b/src/Specific/montgomery32_2e488m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e488m17/feadd.v b/src/Specific/montgomery32_2e488m17/feadd.v
new file mode 100644
index 000000000..47e9ad243
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e488m17/feaddDisplay.v b/src/Specific/montgomery32_2e488m17/feaddDisplay.v
new file mode 100644
index 000000000..d35c3fb2c
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e488m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e488m17/femul.v b/src/Specific/montgomery32_2e488m17/femul.v
new file mode 100644
index 000000000..6c5cebfbc
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e488m17/femulDisplay.v b/src/Specific/montgomery32_2e488m17/femulDisplay.v
new file mode 100644
index 000000000..679152151
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e488m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e488m17/fenz.v b/src/Specific/montgomery32_2e488m17/fenz.v
new file mode 100644
index 000000000..346c25fdb
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e488m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e488m17/fenzDisplay.v b/src/Specific/montgomery32_2e488m17/fenzDisplay.v
new file mode 100644
index 000000000..00ffdd058
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e488m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e488m17/feopp.v b/src/Specific/montgomery32_2e488m17/feopp.v
new file mode 100644
index 000000000..01ce9155f
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e488m17/feoppDisplay.v b/src/Specific/montgomery32_2e488m17/feoppDisplay.v
new file mode 100644
index 000000000..31d02340c
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e488m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e488m17/fesub.v b/src/Specific/montgomery32_2e488m17/fesub.v
new file mode 100644
index 000000000..dee39c3df
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e488m17/fesubDisplay.v b/src/Specific/montgomery32_2e488m17/fesubDisplay.v
new file mode 100644
index 000000000..b2c350eec
--- /dev/null
+++ b/src/Specific/montgomery32_2e488m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e488m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e489m21/CurveParameters.v b/src/Specific/montgomery32_2e489m21/CurveParameters.v
new file mode 100644
index 000000000..01ba9b36b
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^489 - 21
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 15%nat;
+ bitwidth := 32;
+ s := 2^489;
+ c := [(1, 21)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e489m21/Synthesis.v b/src/Specific/montgomery32_2e489m21/Synthesis.v
new file mode 100644
index 000000000..34180a9dc
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e489m21.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e489m21/compiler.sh b/src/Specific/montgomery32_2e489m21/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e489m21/feadd.v b/src/Specific/montgomery32_2e489m21/feadd.v
new file mode 100644
index 000000000..e32769081
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e489m21/feaddDisplay.v b/src/Specific/montgomery32_2e489m21/feaddDisplay.v
new file mode 100644
index 000000000..5f2d94a18
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e489m21.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e489m21/femul.v b/src/Specific/montgomery32_2e489m21/femul.v
new file mode 100644
index 000000000..e133994e6
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e489m21/femulDisplay.v b/src/Specific/montgomery32_2e489m21/femulDisplay.v
new file mode 100644
index 000000000..840c83d47
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e489m21.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e489m21/fenz.v b/src/Specific/montgomery32_2e489m21/fenz.v
new file mode 100644
index 000000000..156d03ffb
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e489m21.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e489m21/fenzDisplay.v b/src/Specific/montgomery32_2e489m21/fenzDisplay.v
new file mode 100644
index 000000000..cf2ca3854
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e489m21.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e489m21/feopp.v b/src/Specific/montgomery32_2e489m21/feopp.v
new file mode 100644
index 000000000..749c5c3e7
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e489m21/feoppDisplay.v b/src/Specific/montgomery32_2e489m21/feoppDisplay.v
new file mode 100644
index 000000000..bd00abbd8
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e489m21.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e489m21/fesub.v b/src/Specific/montgomery32_2e489m21/fesub.v
new file mode 100644
index 000000000..066c54c32
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e489m21/fesubDisplay.v b/src/Specific/montgomery32_2e489m21/fesubDisplay.v
new file mode 100644
index 000000000..bd621f39d
--- /dev/null
+++ b/src/Specific/montgomery32_2e489m21/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e489m21.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e495m31/CurveParameters.v b/src/Specific/montgomery32_2e495m31/CurveParameters.v
new file mode 100644
index 000000000..fd3ae4973
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^495 - 31
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 15%nat;
+ bitwidth := 32;
+ s := 2^495;
+ c := [(1, 31)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e495m31/Synthesis.v b/src/Specific/montgomery32_2e495m31/Synthesis.v
new file mode 100644
index 000000000..17bd0f90b
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e495m31.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e495m31/compiler.sh b/src/Specific/montgomery32_2e495m31/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e495m31/feadd.v b/src/Specific/montgomery32_2e495m31/feadd.v
new file mode 100644
index 000000000..984d531e9
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e495m31/feaddDisplay.v b/src/Specific/montgomery32_2e495m31/feaddDisplay.v
new file mode 100644
index 000000000..57d826fd6
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e495m31.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e495m31/femul.v b/src/Specific/montgomery32_2e495m31/femul.v
new file mode 100644
index 000000000..8d44e2d3f
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e495m31/femulDisplay.v b/src/Specific/montgomery32_2e495m31/femulDisplay.v
new file mode 100644
index 000000000..b8955bb92
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e495m31.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e495m31/fenz.v b/src/Specific/montgomery32_2e495m31/fenz.v
new file mode 100644
index 000000000..454608881
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e495m31.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e495m31/fenzDisplay.v b/src/Specific/montgomery32_2e495m31/fenzDisplay.v
new file mode 100644
index 000000000..476ac1626
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e495m31.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e495m31/feopp.v b/src/Specific/montgomery32_2e495m31/feopp.v
new file mode 100644
index 000000000..8a7dc34fd
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e495m31/feoppDisplay.v b/src/Specific/montgomery32_2e495m31/feoppDisplay.v
new file mode 100644
index 000000000..a87d38765
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e495m31.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e495m31/fesub.v b/src/Specific/montgomery32_2e495m31/fesub.v
new file mode 100644
index 000000000..0d808ba95
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e495m31/fesubDisplay.v b/src/Specific/montgomery32_2e495m31/fesubDisplay.v
new file mode 100644
index 000000000..9c8f0d90b
--- /dev/null
+++ b/src/Specific/montgomery32_2e495m31/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e495m31.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e511m187/CurveParameters.v b/src/Specific/montgomery32_2e511m187/CurveParameters.v
new file mode 100644
index 000000000..5d2d59011
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^511 - 187
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 15%nat;
+ bitwidth := 32;
+ s := 2^511;
+ c := [(1, 187)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e511m187/Synthesis.v b/src/Specific/montgomery32_2e511m187/Synthesis.v
new file mode 100644
index 000000000..0bcc9a7e6
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e511m187.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e511m187/compiler.sh b/src/Specific/montgomery32_2e511m187/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e511m187/feadd.v b/src/Specific/montgomery32_2e511m187/feadd.v
new file mode 100644
index 000000000..1d73655ca
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e511m187/feaddDisplay.v b/src/Specific/montgomery32_2e511m187/feaddDisplay.v
new file mode 100644
index 000000000..7c51bba97
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e511m187.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e511m187/femul.v b/src/Specific/montgomery32_2e511m187/femul.v
new file mode 100644
index 000000000..5f1a4222a
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e511m187/femulDisplay.v b/src/Specific/montgomery32_2e511m187/femulDisplay.v
new file mode 100644
index 000000000..8fc5b60ed
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e511m187.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e511m187/fenz.v b/src/Specific/montgomery32_2e511m187/fenz.v
new file mode 100644
index 000000000..ebaabd8bd
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e511m187.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e511m187/fenzDisplay.v b/src/Specific/montgomery32_2e511m187/fenzDisplay.v
new file mode 100644
index 000000000..c0c7c9fc8
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e511m187.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e511m187/feopp.v b/src/Specific/montgomery32_2e511m187/feopp.v
new file mode 100644
index 000000000..a14f433dc
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e511m187/feoppDisplay.v b/src/Specific/montgomery32_2e511m187/feoppDisplay.v
new file mode 100644
index 000000000..f6571ae91
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e511m187.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e511m187/fesub.v b/src/Specific/montgomery32_2e511m187/fesub.v
new file mode 100644
index 000000000..7b6ae97a2
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e511m187/fesubDisplay.v b/src/Specific/montgomery32_2e511m187/fesubDisplay.v
new file mode 100644
index 000000000..098943474
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m187/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e511m187.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e511m481/CurveParameters.v b/src/Specific/montgomery32_2e511m481/CurveParameters.v
new file mode 100644
index 000000000..a2a0ac8c6
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^511 - 481
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 15%nat;
+ bitwidth := 32;
+ s := 2^511;
+ c := [(1, 481)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e511m481/Synthesis.v b/src/Specific/montgomery32_2e511m481/Synthesis.v
new file mode 100644
index 000000000..ca7145687
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e511m481.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e511m481/compiler.sh b/src/Specific/montgomery32_2e511m481/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e511m481/feadd.v b/src/Specific/montgomery32_2e511m481/feadd.v
new file mode 100644
index 000000000..bf4b7ba95
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e511m481/feaddDisplay.v b/src/Specific/montgomery32_2e511m481/feaddDisplay.v
new file mode 100644
index 000000000..828a208c3
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e511m481.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e511m481/femul.v b/src/Specific/montgomery32_2e511m481/femul.v
new file mode 100644
index 000000000..4542f9b09
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e511m481/femulDisplay.v b/src/Specific/montgomery32_2e511m481/femulDisplay.v
new file mode 100644
index 000000000..c62a584d8
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e511m481.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e511m481/fenz.v b/src/Specific/montgomery32_2e511m481/fenz.v
new file mode 100644
index 000000000..593cbf1e2
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e511m481.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e511m481/fenzDisplay.v b/src/Specific/montgomery32_2e511m481/fenzDisplay.v
new file mode 100644
index 000000000..1e073b2b7
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e511m481.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e511m481/feopp.v b/src/Specific/montgomery32_2e511m481/feopp.v
new file mode 100644
index 000000000..77dc601ee
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e511m481/feoppDisplay.v b/src/Specific/montgomery32_2e511m481/feoppDisplay.v
new file mode 100644
index 000000000..c3496716b
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e511m481.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e511m481/fesub.v b/src/Specific/montgomery32_2e511m481/fesub.v
new file mode 100644
index 000000000..1cabe1448
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e511m481/fesubDisplay.v b/src/Specific/montgomery32_2e511m481/fesubDisplay.v
new file mode 100644
index 000000000..24a3b4c50
--- /dev/null
+++ b/src/Specific/montgomery32_2e511m481/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e511m481.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e512m569/CurveParameters.v b/src/Specific/montgomery32_2e512m569/CurveParameters.v
new file mode 100644
index 000000000..e3b227d14
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^512 - 569
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 16%nat;
+ bitwidth := 32;
+ s := 2^512;
+ c := [(1, 569)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e512m569/Synthesis.v b/src/Specific/montgomery32_2e512m569/Synthesis.v
new file mode 100644
index 000000000..50e41dd18
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e512m569.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e512m569/compiler.sh b/src/Specific/montgomery32_2e512m569/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e512m569/feadd.v b/src/Specific/montgomery32_2e512m569/feadd.v
new file mode 100644
index 000000000..3ca719726
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e512m569/feaddDisplay.v b/src/Specific/montgomery32_2e512m569/feaddDisplay.v
new file mode 100644
index 000000000..8f526d153
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e512m569.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e512m569/femul.v b/src/Specific/montgomery32_2e512m569/femul.v
new file mode 100644
index 000000000..15dcd0aba
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e512m569/femulDisplay.v b/src/Specific/montgomery32_2e512m569/femulDisplay.v
new file mode 100644
index 000000000..4bf78dd7d
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e512m569.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e512m569/fenz.v b/src/Specific/montgomery32_2e512m569/fenz.v
new file mode 100644
index 000000000..3729a8422
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e512m569.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e512m569/fenzDisplay.v b/src/Specific/montgomery32_2e512m569/fenzDisplay.v
new file mode 100644
index 000000000..63ac1673f
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e512m569.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e512m569/feopp.v b/src/Specific/montgomery32_2e512m569/feopp.v
new file mode 100644
index 000000000..89e5d72a7
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e512m569/feoppDisplay.v b/src/Specific/montgomery32_2e512m569/feoppDisplay.v
new file mode 100644
index 000000000..cdf786e6b
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e512m569.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e512m569/fesub.v b/src/Specific/montgomery32_2e512m569/fesub.v
new file mode 100644
index 000000000..c8093c6a5
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e512m569/fesubDisplay.v b/src/Specific/montgomery32_2e512m569/fesubDisplay.v
new file mode 100644
index 000000000..52dab80c0
--- /dev/null
+++ b/src/Specific/montgomery32_2e512m569/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e512m569.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery32_2e521m1/CurveParameters.v b/src/Specific/montgomery32_2e521m1/CurveParameters.v
new file mode 100644
index 000000000..89dd148d5
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^521 - 1
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 16%nat;
+ bitwidth := 32;
+ s := 2^521;
+ c := [(1, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery32_2e521m1/Synthesis.v b/src/Specific/montgomery32_2e521m1/Synthesis.v
new file mode 100644
index 000000000..b939ed2a9
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery32_2e521m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery32_2e521m1/compiler.sh b/src/Specific/montgomery32_2e521m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery32_2e521m1/feadd.v b/src/Specific/montgomery32_2e521m1/feadd.v
new file mode 100644
index 000000000..6b3a090a1
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery32_2e521m1/feaddDisplay.v b/src/Specific/montgomery32_2e521m1/feaddDisplay.v
new file mode 100644
index 000000000..d09e417ef
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e521m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery32_2e521m1/femul.v b/src/Specific/montgomery32_2e521m1/femul.v
new file mode 100644
index 000000000..055322ece
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery32_2e521m1/femulDisplay.v b/src/Specific/montgomery32_2e521m1/femulDisplay.v
new file mode 100644
index 000000000..1b2465ed5
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e521m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery32_2e521m1/fenz.v b/src/Specific/montgomery32_2e521m1/fenz.v
new file mode 100644
index 000000000..4207e6e9b
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e521m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery32_2e521m1/fenzDisplay.v b/src/Specific/montgomery32_2e521m1/fenzDisplay.v
new file mode 100644
index 000000000..6342d51b8
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e521m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery32_2e521m1/feopp.v b/src/Specific/montgomery32_2e521m1/feopp.v
new file mode 100644
index 000000000..411f75090
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery32_2e521m1/feoppDisplay.v b/src/Specific/montgomery32_2e521m1/feoppDisplay.v
new file mode 100644
index 000000000..901e5025a
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e521m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery32_2e521m1/fesub.v b/src/Specific/montgomery32_2e521m1/fesub.v
new file mode 100644
index 000000000..3740e3aaa
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery32_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery32_2e521m1/fesubDisplay.v b/src/Specific/montgomery32_2e521m1/fesubDisplay.v
new file mode 100644
index 000000000..f47e1c492
--- /dev/null
+++ b/src/Specific/montgomery32_2e521m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery32_2e521m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e127m1/CurveParameters.v b/src/Specific/montgomery64_2e127m1/CurveParameters.v
new file mode 100644
index 000000000..47370182c
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^127 - 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 1%nat;
+ bitwidth := 64;
+ s := 2^127;
+ c := [(1, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e127m1/Synthesis.v b/src/Specific/montgomery64_2e127m1/Synthesis.v
new file mode 100644
index 000000000..19135e306
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e127m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e127m1/compiler.sh b/src/Specific/montgomery64_2e127m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e127m1/feadd.v b/src/Specific/montgomery64_2e127m1/feadd.v
new file mode 100644
index 000000000..c01f323bd
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e127m1/feaddDisplay.v b/src/Specific/montgomery64_2e127m1/feaddDisplay.v
new file mode 100644
index 000000000..acc8bea07
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e127m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e127m1/femul.v b/src/Specific/montgomery64_2e127m1/femul.v
new file mode 100644
index 000000000..db33b1ad3
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e127m1/femulDisplay.v b/src/Specific/montgomery64_2e127m1/femulDisplay.v
new file mode 100644
index 000000000..000d6ced6
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e127m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e127m1/fenz.v b/src/Specific/montgomery64_2e127m1/fenz.v
new file mode 100644
index 000000000..74a25c2db
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e127m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e127m1/fenzDisplay.v b/src/Specific/montgomery64_2e127m1/fenzDisplay.v
new file mode 100644
index 000000000..3645a8a57
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e127m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e127m1/feopp.v b/src/Specific/montgomery64_2e127m1/feopp.v
new file mode 100644
index 000000000..8c13a7efb
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e127m1/feoppDisplay.v b/src/Specific/montgomery64_2e127m1/feoppDisplay.v
new file mode 100644
index 000000000..752ff2ec7
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e127m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e127m1/fesub.v b/src/Specific/montgomery64_2e127m1/fesub.v
new file mode 100644
index 000000000..09945c747
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e127m1/fesubDisplay.v b/src/Specific/montgomery64_2e127m1/fesubDisplay.v
new file mode 100644
index 000000000..91308f964
--- /dev/null
+++ b/src/Specific/montgomery64_2e127m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e127m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e129m25/CurveParameters.v b/src/Specific/montgomery64_2e129m25/CurveParameters.v
new file mode 100644
index 000000000..c46f63358
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^129 - 25
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^129;
+ c := [(1, 25)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e129m25/Synthesis.v b/src/Specific/montgomery64_2e129m25/Synthesis.v
new file mode 100644
index 000000000..c338ad463
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e129m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e129m25/compiler.sh b/src/Specific/montgomery64_2e129m25/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e129m25/feadd.v b/src/Specific/montgomery64_2e129m25/feadd.v
new file mode 100644
index 000000000..6b32bddc3
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e129m25/feaddDisplay.v b/src/Specific/montgomery64_2e129m25/feaddDisplay.v
new file mode 100644
index 000000000..02bda4fee
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e129m25.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e129m25/femul.v b/src/Specific/montgomery64_2e129m25/femul.v
new file mode 100644
index 000000000..eab7fac6b
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e129m25/femulDisplay.v b/src/Specific/montgomery64_2e129m25/femulDisplay.v
new file mode 100644
index 000000000..896be4b0a
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e129m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e129m25/fenz.v b/src/Specific/montgomery64_2e129m25/fenz.v
new file mode 100644
index 000000000..d3189fa44
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e129m25.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e129m25/fenzDisplay.v b/src/Specific/montgomery64_2e129m25/fenzDisplay.v
new file mode 100644
index 000000000..aed660dc1
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e129m25.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e129m25/feopp.v b/src/Specific/montgomery64_2e129m25/feopp.v
new file mode 100644
index 000000000..c1edb5a73
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e129m25/feoppDisplay.v b/src/Specific/montgomery64_2e129m25/feoppDisplay.v
new file mode 100644
index 000000000..05eb47a47
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e129m25.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e129m25/fesub.v b/src/Specific/montgomery64_2e129m25/fesub.v
new file mode 100644
index 000000000..a33567f7e
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e129m25/fesubDisplay.v b/src/Specific/montgomery64_2e129m25/fesubDisplay.v
new file mode 100644
index 000000000..1f1d9a82a
--- /dev/null
+++ b/src/Specific/montgomery64_2e129m25/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e129m25.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e130m5/CurveParameters.v b/src/Specific/montgomery64_2e130m5/CurveParameters.v
new file mode 100644
index 000000000..74d880860
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^130 - 5
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^130;
+ c := [(1, 5)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e130m5/Synthesis.v b/src/Specific/montgomery64_2e130m5/Synthesis.v
new file mode 100644
index 000000000..97bad6c4f
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e130m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e130m5/compiler.sh b/src/Specific/montgomery64_2e130m5/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e130m5/feadd.v b/src/Specific/montgomery64_2e130m5/feadd.v
new file mode 100644
index 000000000..822117e02
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e130m5/feaddDisplay.v b/src/Specific/montgomery64_2e130m5/feaddDisplay.v
new file mode 100644
index 000000000..8de32a252
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e130m5.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e130m5/femul.v b/src/Specific/montgomery64_2e130m5/femul.v
new file mode 100644
index 000000000..2952fa88f
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e130m5/femulDisplay.v b/src/Specific/montgomery64_2e130m5/femulDisplay.v
new file mode 100644
index 000000000..81f96ece5
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e130m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e130m5/fenz.v b/src/Specific/montgomery64_2e130m5/fenz.v
new file mode 100644
index 000000000..a101bdc90
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e130m5.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e130m5/fenzDisplay.v b/src/Specific/montgomery64_2e130m5/fenzDisplay.v
new file mode 100644
index 000000000..5e8696e13
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e130m5.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e130m5/feopp.v b/src/Specific/montgomery64_2e130m5/feopp.v
new file mode 100644
index 000000000..dbd04cb64
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e130m5/feoppDisplay.v b/src/Specific/montgomery64_2e130m5/feoppDisplay.v
new file mode 100644
index 000000000..3b2d3bc33
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e130m5.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e130m5/fesub.v b/src/Specific/montgomery64_2e130m5/fesub.v
new file mode 100644
index 000000000..8f66ede0a
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e130m5/fesubDisplay.v b/src/Specific/montgomery64_2e130m5/fesubDisplay.v
new file mode 100644
index 000000000..a5b26a7af
--- /dev/null
+++ b/src/Specific/montgomery64_2e130m5/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e130m5.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e137m13/CurveParameters.v b/src/Specific/montgomery64_2e137m13/CurveParameters.v
new file mode 100644
index 000000000..ce06e0307
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^137 - 13
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^137;
+ c := [(1, 13)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e137m13/Synthesis.v b/src/Specific/montgomery64_2e137m13/Synthesis.v
new file mode 100644
index 000000000..e79d05098
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e137m13.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e137m13/compiler.sh b/src/Specific/montgomery64_2e137m13/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e137m13/feadd.v b/src/Specific/montgomery64_2e137m13/feadd.v
new file mode 100644
index 000000000..23c695c47
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e137m13/feaddDisplay.v b/src/Specific/montgomery64_2e137m13/feaddDisplay.v
new file mode 100644
index 000000000..c18d6076c
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e137m13.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e137m13/femul.v b/src/Specific/montgomery64_2e137m13/femul.v
new file mode 100644
index 000000000..3aa1a6b1b
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e137m13/femulDisplay.v b/src/Specific/montgomery64_2e137m13/femulDisplay.v
new file mode 100644
index 000000000..5d2be51b7
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e137m13.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e137m13/fenz.v b/src/Specific/montgomery64_2e137m13/fenz.v
new file mode 100644
index 000000000..9e575cbbf
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e137m13.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e137m13/fenzDisplay.v b/src/Specific/montgomery64_2e137m13/fenzDisplay.v
new file mode 100644
index 000000000..ec43d342e
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e137m13.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e137m13/feopp.v b/src/Specific/montgomery64_2e137m13/feopp.v
new file mode 100644
index 000000000..677f62bad
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e137m13/feoppDisplay.v b/src/Specific/montgomery64_2e137m13/feoppDisplay.v
new file mode 100644
index 000000000..5564264d0
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e137m13.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e137m13/fesub.v b/src/Specific/montgomery64_2e137m13/fesub.v
new file mode 100644
index 000000000..ace3028ec
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e137m13/fesubDisplay.v b/src/Specific/montgomery64_2e137m13/fesubDisplay.v
new file mode 100644
index 000000000..7a8e7c6f8
--- /dev/null
+++ b/src/Specific/montgomery64_2e137m13/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e137m13.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e140m27/CurveParameters.v b/src/Specific/montgomery64_2e140m27/CurveParameters.v
new file mode 100644
index 000000000..d587823e5
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^140 - 27
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^140;
+ c := [(1, 27)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e140m27/Synthesis.v b/src/Specific/montgomery64_2e140m27/Synthesis.v
new file mode 100644
index 000000000..efb13b4a1
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e140m27.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e140m27/compiler.sh b/src/Specific/montgomery64_2e140m27/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e140m27/feadd.v b/src/Specific/montgomery64_2e140m27/feadd.v
new file mode 100644
index 000000000..45d6ed602
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e140m27/feaddDisplay.v b/src/Specific/montgomery64_2e140m27/feaddDisplay.v
new file mode 100644
index 000000000..e2f84bd88
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e140m27.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e140m27/femul.v b/src/Specific/montgomery64_2e140m27/femul.v
new file mode 100644
index 000000000..9aec74011
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e140m27/femulDisplay.v b/src/Specific/montgomery64_2e140m27/femulDisplay.v
new file mode 100644
index 000000000..d293de974
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e140m27.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e140m27/fenz.v b/src/Specific/montgomery64_2e140m27/fenz.v
new file mode 100644
index 000000000..55a74fa04
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e140m27.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e140m27/fenzDisplay.v b/src/Specific/montgomery64_2e140m27/fenzDisplay.v
new file mode 100644
index 000000000..a8fcb8274
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e140m27.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e140m27/feopp.v b/src/Specific/montgomery64_2e140m27/feopp.v
new file mode 100644
index 000000000..2c434578c
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e140m27/feoppDisplay.v b/src/Specific/montgomery64_2e140m27/feoppDisplay.v
new file mode 100644
index 000000000..7388bbf26
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e140m27.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e140m27/fesub.v b/src/Specific/montgomery64_2e140m27/fesub.v
new file mode 100644
index 000000000..b13fdb8ef
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e140m27/fesubDisplay.v b/src/Specific/montgomery64_2e140m27/fesubDisplay.v
new file mode 100644
index 000000000..938d5c613
--- /dev/null
+++ b/src/Specific/montgomery64_2e140m27/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e140m27.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e141m9/CurveParameters.v b/src/Specific/montgomery64_2e141m9/CurveParameters.v
new file mode 100644
index 000000000..545052531
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^141 - 9
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^141;
+ c := [(1, 9)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e141m9/Synthesis.v b/src/Specific/montgomery64_2e141m9/Synthesis.v
new file mode 100644
index 000000000..fc446364e
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e141m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e141m9/compiler.sh b/src/Specific/montgomery64_2e141m9/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e141m9/feadd.v b/src/Specific/montgomery64_2e141m9/feadd.v
new file mode 100644
index 000000000..8d10f0f2e
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e141m9/feaddDisplay.v b/src/Specific/montgomery64_2e141m9/feaddDisplay.v
new file mode 100644
index 000000000..b7ac5186e
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e141m9.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e141m9/femul.v b/src/Specific/montgomery64_2e141m9/femul.v
new file mode 100644
index 000000000..2e25e7d6f
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e141m9/femulDisplay.v b/src/Specific/montgomery64_2e141m9/femulDisplay.v
new file mode 100644
index 000000000..10b6e0764
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e141m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e141m9/fenz.v b/src/Specific/montgomery64_2e141m9/fenz.v
new file mode 100644
index 000000000..04cb9d02a
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e141m9.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e141m9/fenzDisplay.v b/src/Specific/montgomery64_2e141m9/fenzDisplay.v
new file mode 100644
index 000000000..43e60b4ba
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e141m9.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e141m9/feopp.v b/src/Specific/montgomery64_2e141m9/feopp.v
new file mode 100644
index 000000000..6ffdfd0f7
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e141m9/feoppDisplay.v b/src/Specific/montgomery64_2e141m9/feoppDisplay.v
new file mode 100644
index 000000000..a4ede1653
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e141m9.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e141m9/fesub.v b/src/Specific/montgomery64_2e141m9/fesub.v
new file mode 100644
index 000000000..c5c6e5cb1
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e141m9/fesubDisplay.v b/src/Specific/montgomery64_2e141m9/fesubDisplay.v
new file mode 100644
index 000000000..3b68cfbae
--- /dev/null
+++ b/src/Specific/montgomery64_2e141m9/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e141m9.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e150m3/CurveParameters.v b/src/Specific/montgomery64_2e150m3/CurveParameters.v
new file mode 100644
index 000000000..937bbd064
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^150 - 3
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^150;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e150m3/Synthesis.v b/src/Specific/montgomery64_2e150m3/Synthesis.v
new file mode 100644
index 000000000..25f389930
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e150m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e150m3/compiler.sh b/src/Specific/montgomery64_2e150m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e150m3/feadd.v b/src/Specific/montgomery64_2e150m3/feadd.v
new file mode 100644
index 000000000..573273390
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e150m3/feaddDisplay.v b/src/Specific/montgomery64_2e150m3/feaddDisplay.v
new file mode 100644
index 000000000..50b4ff3c1
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e150m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e150m3/femul.v b/src/Specific/montgomery64_2e150m3/femul.v
new file mode 100644
index 000000000..45e610729
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e150m3/femulDisplay.v b/src/Specific/montgomery64_2e150m3/femulDisplay.v
new file mode 100644
index 000000000..3c009a331
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e150m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e150m3/fenz.v b/src/Specific/montgomery64_2e150m3/fenz.v
new file mode 100644
index 000000000..da4832124
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e150m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e150m3/fenzDisplay.v b/src/Specific/montgomery64_2e150m3/fenzDisplay.v
new file mode 100644
index 000000000..971c40823
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e150m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e150m3/feopp.v b/src/Specific/montgomery64_2e150m3/feopp.v
new file mode 100644
index 000000000..6542f0f66
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e150m3/feoppDisplay.v b/src/Specific/montgomery64_2e150m3/feoppDisplay.v
new file mode 100644
index 000000000..7832a4398
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e150m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e150m3/fesub.v b/src/Specific/montgomery64_2e150m3/fesub.v
new file mode 100644
index 000000000..207fbfee9
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e150m3/fesubDisplay.v b/src/Specific/montgomery64_2e150m3/fesubDisplay.v
new file mode 100644
index 000000000..594588ff0
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e150m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e150m5/CurveParameters.v b/src/Specific/montgomery64_2e150m5/CurveParameters.v
new file mode 100644
index 000000000..7e817fdcb
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^150 - 5
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^150;
+ c := [(1, 5)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e150m5/Synthesis.v b/src/Specific/montgomery64_2e150m5/Synthesis.v
new file mode 100644
index 000000000..0bfe08bbc
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e150m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e150m5/compiler.sh b/src/Specific/montgomery64_2e150m5/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e150m5/feadd.v b/src/Specific/montgomery64_2e150m5/feadd.v
new file mode 100644
index 000000000..b5912cea7
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e150m5/feaddDisplay.v b/src/Specific/montgomery64_2e150m5/feaddDisplay.v
new file mode 100644
index 000000000..579a9bf8f
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e150m5.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e150m5/femul.v b/src/Specific/montgomery64_2e150m5/femul.v
new file mode 100644
index 000000000..899394edd
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e150m5/femulDisplay.v b/src/Specific/montgomery64_2e150m5/femulDisplay.v
new file mode 100644
index 000000000..13df00a44
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e150m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e150m5/fenz.v b/src/Specific/montgomery64_2e150m5/fenz.v
new file mode 100644
index 000000000..c351178f5
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e150m5.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e150m5/fenzDisplay.v b/src/Specific/montgomery64_2e150m5/fenzDisplay.v
new file mode 100644
index 000000000..9eb5a8216
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e150m5.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e150m5/feopp.v b/src/Specific/montgomery64_2e150m5/feopp.v
new file mode 100644
index 000000000..8f4aefe12
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e150m5/feoppDisplay.v b/src/Specific/montgomery64_2e150m5/feoppDisplay.v
new file mode 100644
index 000000000..09b5a12f6
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e150m5.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e150m5/fesub.v b/src/Specific/montgomery64_2e150m5/fesub.v
new file mode 100644
index 000000000..b1a1ab40f
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e150m5/fesubDisplay.v b/src/Specific/montgomery64_2e150m5/fesubDisplay.v
new file mode 100644
index 000000000..53772a7a8
--- /dev/null
+++ b/src/Specific/montgomery64_2e150m5/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e150m5.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e152m17/CurveParameters.v b/src/Specific/montgomery64_2e152m17/CurveParameters.v
new file mode 100644
index 000000000..d80db4404
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^152 - 17
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^152;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e152m17/Synthesis.v b/src/Specific/montgomery64_2e152m17/Synthesis.v
new file mode 100644
index 000000000..660d4d245
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e152m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e152m17/compiler.sh b/src/Specific/montgomery64_2e152m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e152m17/feadd.v b/src/Specific/montgomery64_2e152m17/feadd.v
new file mode 100644
index 000000000..3eb15cbd2
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e152m17/feaddDisplay.v b/src/Specific/montgomery64_2e152m17/feaddDisplay.v
new file mode 100644
index 000000000..7a603d0b1
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e152m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e152m17/femul.v b/src/Specific/montgomery64_2e152m17/femul.v
new file mode 100644
index 000000000..b61e84f27
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e152m17/femulDisplay.v b/src/Specific/montgomery64_2e152m17/femulDisplay.v
new file mode 100644
index 000000000..42d75752f
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e152m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e152m17/fenz.v b/src/Specific/montgomery64_2e152m17/fenz.v
new file mode 100644
index 000000000..5fa15d88a
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e152m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e152m17/fenzDisplay.v b/src/Specific/montgomery64_2e152m17/fenzDisplay.v
new file mode 100644
index 000000000..7532a7e20
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e152m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e152m17/feopp.v b/src/Specific/montgomery64_2e152m17/feopp.v
new file mode 100644
index 000000000..fc6ac48e9
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e152m17/feoppDisplay.v b/src/Specific/montgomery64_2e152m17/feoppDisplay.v
new file mode 100644
index 000000000..fbc2835be
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e152m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e152m17/fesub.v b/src/Specific/montgomery64_2e152m17/fesub.v
new file mode 100644
index 000000000..164b4e75e
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e152m17/fesubDisplay.v b/src/Specific/montgomery64_2e152m17/fesubDisplay.v
new file mode 100644
index 000000000..235c1cc4a
--- /dev/null
+++ b/src/Specific/montgomery64_2e152m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e152m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e158m15/CurveParameters.v b/src/Specific/montgomery64_2e158m15/CurveParameters.v
new file mode 100644
index 000000000..7b673cf4c
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^158 - 15
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^158;
+ c := [(1, 15)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e158m15/Synthesis.v b/src/Specific/montgomery64_2e158m15/Synthesis.v
new file mode 100644
index 000000000..06d4fa020
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e158m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e158m15/compiler.sh b/src/Specific/montgomery64_2e158m15/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e158m15/feadd.v b/src/Specific/montgomery64_2e158m15/feadd.v
new file mode 100644
index 000000000..068aed663
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e158m15/feaddDisplay.v b/src/Specific/montgomery64_2e158m15/feaddDisplay.v
new file mode 100644
index 000000000..e484dc9ac
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e158m15.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e158m15/femul.v b/src/Specific/montgomery64_2e158m15/femul.v
new file mode 100644
index 000000000..3ef5c29ce
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e158m15/femulDisplay.v b/src/Specific/montgomery64_2e158m15/femulDisplay.v
new file mode 100644
index 000000000..09a7b4e08
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e158m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e158m15/fenz.v b/src/Specific/montgomery64_2e158m15/fenz.v
new file mode 100644
index 000000000..9c03167c5
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e158m15.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e158m15/fenzDisplay.v b/src/Specific/montgomery64_2e158m15/fenzDisplay.v
new file mode 100644
index 000000000..145b62564
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e158m15.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e158m15/feopp.v b/src/Specific/montgomery64_2e158m15/feopp.v
new file mode 100644
index 000000000..6fc1d2097
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e158m15/feoppDisplay.v b/src/Specific/montgomery64_2e158m15/feoppDisplay.v
new file mode 100644
index 000000000..20d646aca
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e158m15.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e158m15/fesub.v b/src/Specific/montgomery64_2e158m15/fesub.v
new file mode 100644
index 000000000..d0010e721
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e158m15/fesubDisplay.v b/src/Specific/montgomery64_2e158m15/fesubDisplay.v
new file mode 100644
index 000000000..7f3471c24
--- /dev/null
+++ b/src/Specific/montgomery64_2e158m15/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e158m15.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e165m25/CurveParameters.v b/src/Specific/montgomery64_2e165m25/CurveParameters.v
new file mode 100644
index 000000000..4cf2e2634
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^165 - 25
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^165;
+ c := [(1, 25)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e165m25/Synthesis.v b/src/Specific/montgomery64_2e165m25/Synthesis.v
new file mode 100644
index 000000000..251795189
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e165m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e165m25/compiler.sh b/src/Specific/montgomery64_2e165m25/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e165m25/feadd.v b/src/Specific/montgomery64_2e165m25/feadd.v
new file mode 100644
index 000000000..4d24c1be2
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e165m25/feaddDisplay.v b/src/Specific/montgomery64_2e165m25/feaddDisplay.v
new file mode 100644
index 000000000..92998f48a
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e165m25.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e165m25/femul.v b/src/Specific/montgomery64_2e165m25/femul.v
new file mode 100644
index 000000000..ad984a407
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e165m25/femulDisplay.v b/src/Specific/montgomery64_2e165m25/femulDisplay.v
new file mode 100644
index 000000000..603317064
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e165m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e165m25/fenz.v b/src/Specific/montgomery64_2e165m25/fenz.v
new file mode 100644
index 000000000..552be16b4
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e165m25.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e165m25/fenzDisplay.v b/src/Specific/montgomery64_2e165m25/fenzDisplay.v
new file mode 100644
index 000000000..7f7109636
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e165m25.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e165m25/feopp.v b/src/Specific/montgomery64_2e165m25/feopp.v
new file mode 100644
index 000000000..0a16e5863
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e165m25/feoppDisplay.v b/src/Specific/montgomery64_2e165m25/feoppDisplay.v
new file mode 100644
index 000000000..d846f439b
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e165m25.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e165m25/fesub.v b/src/Specific/montgomery64_2e165m25/fesub.v
new file mode 100644
index 000000000..b0f12b7c3
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e165m25/fesubDisplay.v b/src/Specific/montgomery64_2e165m25/fesubDisplay.v
new file mode 100644
index 000000000..a89d7ad9c
--- /dev/null
+++ b/src/Specific/montgomery64_2e165m25/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e165m25.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e166m5/CurveParameters.v b/src/Specific/montgomery64_2e166m5/CurveParameters.v
new file mode 100644
index 000000000..cded4a72b
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^166 - 5
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^166;
+ c := [(1, 5)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e166m5/Synthesis.v b/src/Specific/montgomery64_2e166m5/Synthesis.v
new file mode 100644
index 000000000..6a4078a06
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e166m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e166m5/compiler.sh b/src/Specific/montgomery64_2e166m5/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e166m5/feadd.v b/src/Specific/montgomery64_2e166m5/feadd.v
new file mode 100644
index 000000000..4f51ee2e4
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e166m5/feaddDisplay.v b/src/Specific/montgomery64_2e166m5/feaddDisplay.v
new file mode 100644
index 000000000..cd12c430f
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e166m5.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e166m5/femul.v b/src/Specific/montgomery64_2e166m5/femul.v
new file mode 100644
index 000000000..91aa72318
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e166m5/femulDisplay.v b/src/Specific/montgomery64_2e166m5/femulDisplay.v
new file mode 100644
index 000000000..7ab3d1d2b
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e166m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e166m5/fenz.v b/src/Specific/montgomery64_2e166m5/fenz.v
new file mode 100644
index 000000000..5cff7952b
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e166m5.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e166m5/fenzDisplay.v b/src/Specific/montgomery64_2e166m5/fenzDisplay.v
new file mode 100644
index 000000000..c7e8919bb
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e166m5.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e166m5/feopp.v b/src/Specific/montgomery64_2e166m5/feopp.v
new file mode 100644
index 000000000..92020d2c0
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e166m5/feoppDisplay.v b/src/Specific/montgomery64_2e166m5/feoppDisplay.v
new file mode 100644
index 000000000..507253ba5
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e166m5.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e166m5/fesub.v b/src/Specific/montgomery64_2e166m5/fesub.v
new file mode 100644
index 000000000..7c3903909
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e166m5/fesubDisplay.v b/src/Specific/montgomery64_2e166m5/fesubDisplay.v
new file mode 100644
index 000000000..795d8269c
--- /dev/null
+++ b/src/Specific/montgomery64_2e166m5/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e166m5.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e171m19/CurveParameters.v b/src/Specific/montgomery64_2e171m19/CurveParameters.v
new file mode 100644
index 000000000..b0058cd54
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^171 - 19
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^171;
+ c := [(1, 19)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e171m19/Synthesis.v b/src/Specific/montgomery64_2e171m19/Synthesis.v
new file mode 100644
index 000000000..73b918945
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e171m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e171m19/compiler.sh b/src/Specific/montgomery64_2e171m19/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e171m19/feadd.v b/src/Specific/montgomery64_2e171m19/feadd.v
new file mode 100644
index 000000000..e58f9d4ed
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e171m19/feaddDisplay.v b/src/Specific/montgomery64_2e171m19/feaddDisplay.v
new file mode 100644
index 000000000..50e04c1d5
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e171m19.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e171m19/femul.v b/src/Specific/montgomery64_2e171m19/femul.v
new file mode 100644
index 000000000..cee541b6e
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e171m19/femulDisplay.v b/src/Specific/montgomery64_2e171m19/femulDisplay.v
new file mode 100644
index 000000000..c68990402
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e171m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e171m19/fenz.v b/src/Specific/montgomery64_2e171m19/fenz.v
new file mode 100644
index 000000000..a2e7ce931
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e171m19.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e171m19/fenzDisplay.v b/src/Specific/montgomery64_2e171m19/fenzDisplay.v
new file mode 100644
index 000000000..f084be5d9
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e171m19.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e171m19/feopp.v b/src/Specific/montgomery64_2e171m19/feopp.v
new file mode 100644
index 000000000..ff068ae49
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e171m19/feoppDisplay.v b/src/Specific/montgomery64_2e171m19/feoppDisplay.v
new file mode 100644
index 000000000..bf84676ad
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e171m19.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e171m19/fesub.v b/src/Specific/montgomery64_2e171m19/fesub.v
new file mode 100644
index 000000000..875aa05b6
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e171m19/fesubDisplay.v b/src/Specific/montgomery64_2e171m19/fesubDisplay.v
new file mode 100644
index 000000000..00ddd84df
--- /dev/null
+++ b/src/Specific/montgomery64_2e171m19/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e171m19.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e174m17/CurveParameters.v b/src/Specific/montgomery64_2e174m17/CurveParameters.v
new file mode 100644
index 000000000..211d241b3
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^174 - 17
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^174;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e174m17/Synthesis.v b/src/Specific/montgomery64_2e174m17/Synthesis.v
new file mode 100644
index 000000000..bb1bc03a4
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e174m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e174m17/compiler.sh b/src/Specific/montgomery64_2e174m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e174m17/feadd.v b/src/Specific/montgomery64_2e174m17/feadd.v
new file mode 100644
index 000000000..477282c66
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e174m17/feaddDisplay.v b/src/Specific/montgomery64_2e174m17/feaddDisplay.v
new file mode 100644
index 000000000..fec68feb3
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e174m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e174m17/femul.v b/src/Specific/montgomery64_2e174m17/femul.v
new file mode 100644
index 000000000..56c76b799
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e174m17/femulDisplay.v b/src/Specific/montgomery64_2e174m17/femulDisplay.v
new file mode 100644
index 000000000..112919173
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e174m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e174m17/fenz.v b/src/Specific/montgomery64_2e174m17/fenz.v
new file mode 100644
index 000000000..96151811d
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e174m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e174m17/fenzDisplay.v b/src/Specific/montgomery64_2e174m17/fenzDisplay.v
new file mode 100644
index 000000000..ed771aba6
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e174m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e174m17/feopp.v b/src/Specific/montgomery64_2e174m17/feopp.v
new file mode 100644
index 000000000..7e24d6200
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e174m17/feoppDisplay.v b/src/Specific/montgomery64_2e174m17/feoppDisplay.v
new file mode 100644
index 000000000..d23ba35fb
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e174m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e174m17/fesub.v b/src/Specific/montgomery64_2e174m17/fesub.v
new file mode 100644
index 000000000..9c3a1e47a
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e174m17/fesubDisplay.v b/src/Specific/montgomery64_2e174m17/fesubDisplay.v
new file mode 100644
index 000000000..9987bfd47
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e174m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e174m3/CurveParameters.v b/src/Specific/montgomery64_2e174m3/CurveParameters.v
new file mode 100644
index 000000000..babe5e156
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^174 - 3
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^174;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e174m3/Synthesis.v b/src/Specific/montgomery64_2e174m3/Synthesis.v
new file mode 100644
index 000000000..4a2dbfc98
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e174m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e174m3/compiler.sh b/src/Specific/montgomery64_2e174m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e174m3/feadd.v b/src/Specific/montgomery64_2e174m3/feadd.v
new file mode 100644
index 000000000..9ccbb0c17
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e174m3/feaddDisplay.v b/src/Specific/montgomery64_2e174m3/feaddDisplay.v
new file mode 100644
index 000000000..9bd37c6e1
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e174m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e174m3/femul.v b/src/Specific/montgomery64_2e174m3/femul.v
new file mode 100644
index 000000000..37dcee0be
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e174m3/femulDisplay.v b/src/Specific/montgomery64_2e174m3/femulDisplay.v
new file mode 100644
index 000000000..031c8d83f
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e174m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e174m3/fenz.v b/src/Specific/montgomery64_2e174m3/fenz.v
new file mode 100644
index 000000000..0b597f7dc
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e174m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e174m3/fenzDisplay.v b/src/Specific/montgomery64_2e174m3/fenzDisplay.v
new file mode 100644
index 000000000..34607c10e
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e174m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e174m3/feopp.v b/src/Specific/montgomery64_2e174m3/feopp.v
new file mode 100644
index 000000000..0b12a4c64
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e174m3/feoppDisplay.v b/src/Specific/montgomery64_2e174m3/feoppDisplay.v
new file mode 100644
index 000000000..567fb7a61
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e174m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e174m3/fesub.v b/src/Specific/montgomery64_2e174m3/fesub.v
new file mode 100644
index 000000000..7aa46209f
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e174m3/fesubDisplay.v b/src/Specific/montgomery64_2e174m3/fesubDisplay.v
new file mode 100644
index 000000000..de2e10d7a
--- /dev/null
+++ b/src/Specific/montgomery64_2e174m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e174m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e189m25/CurveParameters.v b/src/Specific/montgomery64_2e189m25/CurveParameters.v
new file mode 100644
index 000000000..b8db361c3
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^189 - 25
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^189;
+ c := [(1, 25)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e189m25/Synthesis.v b/src/Specific/montgomery64_2e189m25/Synthesis.v
new file mode 100644
index 000000000..9acb45413
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e189m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e189m25/compiler.sh b/src/Specific/montgomery64_2e189m25/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e189m25/feadd.v b/src/Specific/montgomery64_2e189m25/feadd.v
new file mode 100644
index 000000000..83385e55f
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e189m25/feaddDisplay.v b/src/Specific/montgomery64_2e189m25/feaddDisplay.v
new file mode 100644
index 000000000..77fe97f41
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e189m25.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e189m25/femul.v b/src/Specific/montgomery64_2e189m25/femul.v
new file mode 100644
index 000000000..5d0fe890e
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e189m25/femulDisplay.v b/src/Specific/montgomery64_2e189m25/femulDisplay.v
new file mode 100644
index 000000000..a499df697
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e189m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e189m25/fenz.v b/src/Specific/montgomery64_2e189m25/fenz.v
new file mode 100644
index 000000000..6f088dd0d
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e189m25.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e189m25/fenzDisplay.v b/src/Specific/montgomery64_2e189m25/fenzDisplay.v
new file mode 100644
index 000000000..b5802bc4c
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e189m25.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e189m25/feopp.v b/src/Specific/montgomery64_2e189m25/feopp.v
new file mode 100644
index 000000000..5709576a4
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e189m25/feoppDisplay.v b/src/Specific/montgomery64_2e189m25/feoppDisplay.v
new file mode 100644
index 000000000..e1ea6a7f8
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e189m25.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e189m25/fesub.v b/src/Specific/montgomery64_2e189m25/fesub.v
new file mode 100644
index 000000000..9133f490a
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e189m25/fesubDisplay.v b/src/Specific/montgomery64_2e189m25/fesubDisplay.v
new file mode 100644
index 000000000..80d43ea11
--- /dev/null
+++ b/src/Specific/montgomery64_2e189m25/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e189m25.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e190m11/CurveParameters.v b/src/Specific/montgomery64_2e190m11/CurveParameters.v
new file mode 100644
index 000000000..1d67492a9
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^190 - 11
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^190;
+ c := [(1, 11)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e190m11/Synthesis.v b/src/Specific/montgomery64_2e190m11/Synthesis.v
new file mode 100644
index 000000000..ffd4cf05f
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e190m11.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e190m11/compiler.sh b/src/Specific/montgomery64_2e190m11/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e190m11/feadd.v b/src/Specific/montgomery64_2e190m11/feadd.v
new file mode 100644
index 000000000..f1a679f6a
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e190m11/feaddDisplay.v b/src/Specific/montgomery64_2e190m11/feaddDisplay.v
new file mode 100644
index 000000000..86282fccb
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e190m11.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e190m11/femul.v b/src/Specific/montgomery64_2e190m11/femul.v
new file mode 100644
index 000000000..dc57728a3
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e190m11/femulDisplay.v b/src/Specific/montgomery64_2e190m11/femulDisplay.v
new file mode 100644
index 000000000..0b56f9d4f
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e190m11.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e190m11/fenz.v b/src/Specific/montgomery64_2e190m11/fenz.v
new file mode 100644
index 000000000..8e7bd042c
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e190m11.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e190m11/fenzDisplay.v b/src/Specific/montgomery64_2e190m11/fenzDisplay.v
new file mode 100644
index 000000000..48f138d49
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e190m11.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e190m11/feopp.v b/src/Specific/montgomery64_2e190m11/feopp.v
new file mode 100644
index 000000000..3e39bd4e4
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e190m11/feoppDisplay.v b/src/Specific/montgomery64_2e190m11/feoppDisplay.v
new file mode 100644
index 000000000..23d839d8b
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e190m11.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e190m11/fesub.v b/src/Specific/montgomery64_2e190m11/fesub.v
new file mode 100644
index 000000000..88d920d6e
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e190m11/fesubDisplay.v b/src/Specific/montgomery64_2e190m11/fesubDisplay.v
new file mode 100644
index 000000000..d5c5d3373
--- /dev/null
+++ b/src/Specific/montgomery64_2e190m11/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e190m11.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e191m19/CurveParameters.v b/src/Specific/montgomery64_2e191m19/CurveParameters.v
new file mode 100644
index 000000000..0b1f0d8d6
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^191 - 19
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 2%nat;
+ bitwidth := 64;
+ s := 2^191;
+ c := [(1, 19)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e191m19/Synthesis.v b/src/Specific/montgomery64_2e191m19/Synthesis.v
new file mode 100644
index 000000000..8f9d744aa
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e191m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e191m19/compiler.sh b/src/Specific/montgomery64_2e191m19/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e191m19/feadd.v b/src/Specific/montgomery64_2e191m19/feadd.v
new file mode 100644
index 000000000..1698bd5c1
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e191m19/feaddDisplay.v b/src/Specific/montgomery64_2e191m19/feaddDisplay.v
new file mode 100644
index 000000000..26da2fa23
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e191m19.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e191m19/femul.v b/src/Specific/montgomery64_2e191m19/femul.v
new file mode 100644
index 000000000..b06266659
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e191m19/femulDisplay.v b/src/Specific/montgomery64_2e191m19/femulDisplay.v
new file mode 100644
index 000000000..3ad5f82af
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e191m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e191m19/fenz.v b/src/Specific/montgomery64_2e191m19/fenz.v
new file mode 100644
index 000000000..a0882cf77
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e191m19.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e191m19/fenzDisplay.v b/src/Specific/montgomery64_2e191m19/fenzDisplay.v
new file mode 100644
index 000000000..def745c58
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e191m19.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e191m19/feopp.v b/src/Specific/montgomery64_2e191m19/feopp.v
new file mode 100644
index 000000000..47f183dd9
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e191m19/feoppDisplay.v b/src/Specific/montgomery64_2e191m19/feoppDisplay.v
new file mode 100644
index 000000000..0f23448e9
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e191m19.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e191m19/fesub.v b/src/Specific/montgomery64_2e191m19/fesub.v
new file mode 100644
index 000000000..be0f7179b
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e191m19/fesubDisplay.v b/src/Specific/montgomery64_2e191m19/fesubDisplay.v
new file mode 100644
index 000000000..081ceb27d
--- /dev/null
+++ b/src/Specific/montgomery64_2e191m19/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e191m19.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e192m2e64m1/CurveParameters.v b/src/Specific/montgomery64_2e192m2e64m1/CurveParameters.v
new file mode 100644
index 000000000..0b6aa57a5
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^192 - 2^64 - 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^192;
+ c := [(1, 1); (2^64, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e192m2e64m1/Synthesis.v b/src/Specific/montgomery64_2e192m2e64m1/Synthesis.v
new file mode 100644
index 000000000..3e9c0abfd
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e192m2e64m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e192m2e64m1/compiler.sh b/src/Specific/montgomery64_2e192m2e64m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e192m2e64m1/feadd.v b/src/Specific/montgomery64_2e192m2e64m1/feadd.v
new file mode 100644
index 000000000..5b431d1b2
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e192m2e64m1/feaddDisplay.v b/src/Specific/montgomery64_2e192m2e64m1/feaddDisplay.v
new file mode 100644
index 000000000..c9c2e321c
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e192m2e64m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e192m2e64m1/femul.v b/src/Specific/montgomery64_2e192m2e64m1/femul.v
new file mode 100644
index 000000000..a69a0988f
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e192m2e64m1/femulDisplay.v b/src/Specific/montgomery64_2e192m2e64m1/femulDisplay.v
new file mode 100644
index 000000000..cc4ee4fd5
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e192m2e64m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e192m2e64m1/fenz.v b/src/Specific/montgomery64_2e192m2e64m1/fenz.v
new file mode 100644
index 000000000..b87de072e
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e192m2e64m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e192m2e64m1/fenzDisplay.v b/src/Specific/montgomery64_2e192m2e64m1/fenzDisplay.v
new file mode 100644
index 000000000..fc2928498
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e192m2e64m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e192m2e64m1/feopp.v b/src/Specific/montgomery64_2e192m2e64m1/feopp.v
new file mode 100644
index 000000000..673151a75
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e192m2e64m1/feoppDisplay.v b/src/Specific/montgomery64_2e192m2e64m1/feoppDisplay.v
new file mode 100644
index 000000000..4ed4b624c
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e192m2e64m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e192m2e64m1/fesub.v b/src/Specific/montgomery64_2e192m2e64m1/fesub.v
new file mode 100644
index 000000000..19da7aa32
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e192m2e64m1/fesubDisplay.v b/src/Specific/montgomery64_2e192m2e64m1/fesubDisplay.v
new file mode 100644
index 000000000..d32c681ed
--- /dev/null
+++ b/src/Specific/montgomery64_2e192m2e64m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e192m2e64m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e194m33/CurveParameters.v b/src/Specific/montgomery64_2e194m33/CurveParameters.v
new file mode 100644
index 000000000..85cf391dc
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^194 - 33
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^194;
+ c := [(1, 33)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e194m33/Synthesis.v b/src/Specific/montgomery64_2e194m33/Synthesis.v
new file mode 100644
index 000000000..71c5b9402
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e194m33.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e194m33/compiler.sh b/src/Specific/montgomery64_2e194m33/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e194m33/feadd.v b/src/Specific/montgomery64_2e194m33/feadd.v
new file mode 100644
index 000000000..fc8d33320
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e194m33/feaddDisplay.v b/src/Specific/montgomery64_2e194m33/feaddDisplay.v
new file mode 100644
index 000000000..7338c0c6f
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e194m33.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e194m33/femul.v b/src/Specific/montgomery64_2e194m33/femul.v
new file mode 100644
index 000000000..02bc4f9e7
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e194m33/femulDisplay.v b/src/Specific/montgomery64_2e194m33/femulDisplay.v
new file mode 100644
index 000000000..b0cb42496
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e194m33.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e194m33/fenz.v b/src/Specific/montgomery64_2e194m33/fenz.v
new file mode 100644
index 000000000..4192dd0e0
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e194m33.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e194m33/fenzDisplay.v b/src/Specific/montgomery64_2e194m33/fenzDisplay.v
new file mode 100644
index 000000000..b9fc23276
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e194m33.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e194m33/feopp.v b/src/Specific/montgomery64_2e194m33/feopp.v
new file mode 100644
index 000000000..8a9d8fc95
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e194m33/feoppDisplay.v b/src/Specific/montgomery64_2e194m33/feoppDisplay.v
new file mode 100644
index 000000000..f86fa63e3
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e194m33.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e194m33/fesub.v b/src/Specific/montgomery64_2e194m33/fesub.v
new file mode 100644
index 000000000..cfb478e56
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e194m33/fesubDisplay.v b/src/Specific/montgomery64_2e194m33/fesubDisplay.v
new file mode 100644
index 000000000..8bce75931
--- /dev/null
+++ b/src/Specific/montgomery64_2e194m33/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e194m33.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e196m15/CurveParameters.v b/src/Specific/montgomery64_2e196m15/CurveParameters.v
new file mode 100644
index 000000000..3e600aaff
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^196 - 15
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^196;
+ c := [(1, 15)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e196m15/Synthesis.v b/src/Specific/montgomery64_2e196m15/Synthesis.v
new file mode 100644
index 000000000..cc9e108f0
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e196m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e196m15/compiler.sh b/src/Specific/montgomery64_2e196m15/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e196m15/feadd.v b/src/Specific/montgomery64_2e196m15/feadd.v
new file mode 100644
index 000000000..9ebf5f998
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e196m15/feaddDisplay.v b/src/Specific/montgomery64_2e196m15/feaddDisplay.v
new file mode 100644
index 000000000..d3ab9b333
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e196m15.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e196m15/femul.v b/src/Specific/montgomery64_2e196m15/femul.v
new file mode 100644
index 000000000..c5a7d05b8
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e196m15/femulDisplay.v b/src/Specific/montgomery64_2e196m15/femulDisplay.v
new file mode 100644
index 000000000..69c5524a0
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e196m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e196m15/fenz.v b/src/Specific/montgomery64_2e196m15/fenz.v
new file mode 100644
index 000000000..c6fac0926
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e196m15.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e196m15/fenzDisplay.v b/src/Specific/montgomery64_2e196m15/fenzDisplay.v
new file mode 100644
index 000000000..d9ed29291
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e196m15.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e196m15/feopp.v b/src/Specific/montgomery64_2e196m15/feopp.v
new file mode 100644
index 000000000..023d779d7
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e196m15/feoppDisplay.v b/src/Specific/montgomery64_2e196m15/feoppDisplay.v
new file mode 100644
index 000000000..e3c83a34c
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e196m15.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e196m15/fesub.v b/src/Specific/montgomery64_2e196m15/fesub.v
new file mode 100644
index 000000000..b0c7f7a25
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e196m15/fesubDisplay.v b/src/Specific/montgomery64_2e196m15/fesubDisplay.v
new file mode 100644
index 000000000..340671b13
--- /dev/null
+++ b/src/Specific/montgomery64_2e196m15/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e196m15.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e198m17/CurveParameters.v b/src/Specific/montgomery64_2e198m17/CurveParameters.v
new file mode 100644
index 000000000..3f7528bc5
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^198 - 17
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^198;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e198m17/Synthesis.v b/src/Specific/montgomery64_2e198m17/Synthesis.v
new file mode 100644
index 000000000..780f08e1c
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e198m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e198m17/compiler.sh b/src/Specific/montgomery64_2e198m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e198m17/feadd.v b/src/Specific/montgomery64_2e198m17/feadd.v
new file mode 100644
index 000000000..73b0855fc
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e198m17/feaddDisplay.v b/src/Specific/montgomery64_2e198m17/feaddDisplay.v
new file mode 100644
index 000000000..458795e27
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e198m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e198m17/femul.v b/src/Specific/montgomery64_2e198m17/femul.v
new file mode 100644
index 000000000..ac1253894
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e198m17/femulDisplay.v b/src/Specific/montgomery64_2e198m17/femulDisplay.v
new file mode 100644
index 000000000..ffd6ef40e
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e198m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e198m17/fenz.v b/src/Specific/montgomery64_2e198m17/fenz.v
new file mode 100644
index 000000000..bb45a951c
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e198m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e198m17/fenzDisplay.v b/src/Specific/montgomery64_2e198m17/fenzDisplay.v
new file mode 100644
index 000000000..bf5efe3a9
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e198m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e198m17/feopp.v b/src/Specific/montgomery64_2e198m17/feopp.v
new file mode 100644
index 000000000..ebbb8c49e
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e198m17/feoppDisplay.v b/src/Specific/montgomery64_2e198m17/feoppDisplay.v
new file mode 100644
index 000000000..4b1168124
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e198m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e198m17/fesub.v b/src/Specific/montgomery64_2e198m17/fesub.v
new file mode 100644
index 000000000..58e568aa0
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e198m17/fesubDisplay.v b/src/Specific/montgomery64_2e198m17/fesubDisplay.v
new file mode 100644
index 000000000..5eb43966d
--- /dev/null
+++ b/src/Specific/montgomery64_2e198m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e198m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e206m5/CurveParameters.v b/src/Specific/montgomery64_2e206m5/CurveParameters.v
new file mode 100644
index 000000000..f1f8c44e5
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^206 - 5
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^206;
+ c := [(1, 5)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e206m5/Synthesis.v b/src/Specific/montgomery64_2e206m5/Synthesis.v
new file mode 100644
index 000000000..31b23d27b
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e206m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e206m5/compiler.sh b/src/Specific/montgomery64_2e206m5/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e206m5/feadd.v b/src/Specific/montgomery64_2e206m5/feadd.v
new file mode 100644
index 000000000..41c2cd7c1
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e206m5/feaddDisplay.v b/src/Specific/montgomery64_2e206m5/feaddDisplay.v
new file mode 100644
index 000000000..c91f01804
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e206m5.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e206m5/femul.v b/src/Specific/montgomery64_2e206m5/femul.v
new file mode 100644
index 000000000..bd1ec1695
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e206m5/femulDisplay.v b/src/Specific/montgomery64_2e206m5/femulDisplay.v
new file mode 100644
index 000000000..2c6b5f335
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e206m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e206m5/fenz.v b/src/Specific/montgomery64_2e206m5/fenz.v
new file mode 100644
index 000000000..87cbd258a
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e206m5.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e206m5/fenzDisplay.v b/src/Specific/montgomery64_2e206m5/fenzDisplay.v
new file mode 100644
index 000000000..38a408d40
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e206m5.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e206m5/feopp.v b/src/Specific/montgomery64_2e206m5/feopp.v
new file mode 100644
index 000000000..bcd3e106b
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e206m5/feoppDisplay.v b/src/Specific/montgomery64_2e206m5/feoppDisplay.v
new file mode 100644
index 000000000..308f139bd
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e206m5.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e206m5/fesub.v b/src/Specific/montgomery64_2e206m5/fesub.v
new file mode 100644
index 000000000..3b20f1a67
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e206m5/fesubDisplay.v b/src/Specific/montgomery64_2e206m5/fesubDisplay.v
new file mode 100644
index 000000000..33e9348d2
--- /dev/null
+++ b/src/Specific/montgomery64_2e206m5/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e206m5.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e212m29/CurveParameters.v b/src/Specific/montgomery64_2e212m29/CurveParameters.v
new file mode 100644
index 000000000..c51c61c23
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^212 - 29
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^212;
+ c := [(1, 29)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e212m29/Synthesis.v b/src/Specific/montgomery64_2e212m29/Synthesis.v
new file mode 100644
index 000000000..622992994
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e212m29.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e212m29/compiler.sh b/src/Specific/montgomery64_2e212m29/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e212m29/feadd.v b/src/Specific/montgomery64_2e212m29/feadd.v
new file mode 100644
index 000000000..4dd578b04
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e212m29/feaddDisplay.v b/src/Specific/montgomery64_2e212m29/feaddDisplay.v
new file mode 100644
index 000000000..32614397f
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e212m29.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e212m29/femul.v b/src/Specific/montgomery64_2e212m29/femul.v
new file mode 100644
index 000000000..49bf0b3c1
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e212m29/femulDisplay.v b/src/Specific/montgomery64_2e212m29/femulDisplay.v
new file mode 100644
index 000000000..bff16ba22
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e212m29.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e212m29/fenz.v b/src/Specific/montgomery64_2e212m29/fenz.v
new file mode 100644
index 000000000..cc2c0a0d0
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e212m29.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e212m29/fenzDisplay.v b/src/Specific/montgomery64_2e212m29/fenzDisplay.v
new file mode 100644
index 000000000..c7928772b
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e212m29.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e212m29/feopp.v b/src/Specific/montgomery64_2e212m29/feopp.v
new file mode 100644
index 000000000..69263a761
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e212m29/feoppDisplay.v b/src/Specific/montgomery64_2e212m29/feoppDisplay.v
new file mode 100644
index 000000000..b0b39b915
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e212m29.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e212m29/fesub.v b/src/Specific/montgomery64_2e212m29/fesub.v
new file mode 100644
index 000000000..fc6dd5434
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e212m29/fesubDisplay.v b/src/Specific/montgomery64_2e212m29/fesubDisplay.v
new file mode 100644
index 000000000..f71f4562e
--- /dev/null
+++ b/src/Specific/montgomery64_2e212m29/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e212m29.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e213m3/CurveParameters.v b/src/Specific/montgomery64_2e213m3/CurveParameters.v
new file mode 100644
index 000000000..beedf7554
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^213 - 3
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^213;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e213m3/Synthesis.v b/src/Specific/montgomery64_2e213m3/Synthesis.v
new file mode 100644
index 000000000..cc96feb31
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e213m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e213m3/compiler.sh b/src/Specific/montgomery64_2e213m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e213m3/feadd.v b/src/Specific/montgomery64_2e213m3/feadd.v
new file mode 100644
index 000000000..98cb92367
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e213m3/feaddDisplay.v b/src/Specific/montgomery64_2e213m3/feaddDisplay.v
new file mode 100644
index 000000000..b3d48ffab
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e213m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e213m3/femul.v b/src/Specific/montgomery64_2e213m3/femul.v
new file mode 100644
index 000000000..e8c29e1d0
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e213m3/femulDisplay.v b/src/Specific/montgomery64_2e213m3/femulDisplay.v
new file mode 100644
index 000000000..49d740462
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e213m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e213m3/fenz.v b/src/Specific/montgomery64_2e213m3/fenz.v
new file mode 100644
index 000000000..c7cc843f0
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e213m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e213m3/fenzDisplay.v b/src/Specific/montgomery64_2e213m3/fenzDisplay.v
new file mode 100644
index 000000000..63335f429
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e213m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e213m3/feopp.v b/src/Specific/montgomery64_2e213m3/feopp.v
new file mode 100644
index 000000000..0d3f9dd20
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e213m3/feoppDisplay.v b/src/Specific/montgomery64_2e213m3/feoppDisplay.v
new file mode 100644
index 000000000..1a6fed624
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e213m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e213m3/fesub.v b/src/Specific/montgomery64_2e213m3/fesub.v
new file mode 100644
index 000000000..94536376f
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e213m3/fesubDisplay.v b/src/Specific/montgomery64_2e213m3/fesubDisplay.v
new file mode 100644
index 000000000..5bd3ceeb2
--- /dev/null
+++ b/src/Specific/montgomery64_2e213m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e213m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e216m2e108m1/CurveParameters.v b/src/Specific/montgomery64_2e216m2e108m1/CurveParameters.v
new file mode 100644
index 000000000..de17a43f9
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^216 - 2^108 - 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^216;
+ c := [(1, 1); (2^108, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some true;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e216m2e108m1/Synthesis.v b/src/Specific/montgomery64_2e216m2e108m1/Synthesis.v
new file mode 100644
index 000000000..6b8c9ec50
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e216m2e108m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e216m2e108m1/compiler.sh b/src/Specific/montgomery64_2e216m2e108m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e216m2e108m1/feadd.v b/src/Specific/montgomery64_2e216m2e108m1/feadd.v
new file mode 100644
index 000000000..26c6a9fc6
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e216m2e108m1/feaddDisplay.v b/src/Specific/montgomery64_2e216m2e108m1/feaddDisplay.v
new file mode 100644
index 000000000..ba43258d4
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e216m2e108m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e216m2e108m1/femul.v b/src/Specific/montgomery64_2e216m2e108m1/femul.v
new file mode 100644
index 000000000..0c3879af2
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e216m2e108m1/femulDisplay.v b/src/Specific/montgomery64_2e216m2e108m1/femulDisplay.v
new file mode 100644
index 000000000..22e2a8b9f
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e216m2e108m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e216m2e108m1/fenz.v b/src/Specific/montgomery64_2e216m2e108m1/fenz.v
new file mode 100644
index 000000000..19ca0dedf
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e216m2e108m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e216m2e108m1/fenzDisplay.v b/src/Specific/montgomery64_2e216m2e108m1/fenzDisplay.v
new file mode 100644
index 000000000..b5c29bc90
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e216m2e108m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e216m2e108m1/feopp.v b/src/Specific/montgomery64_2e216m2e108m1/feopp.v
new file mode 100644
index 000000000..a37c55cdc
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e216m2e108m1/feoppDisplay.v b/src/Specific/montgomery64_2e216m2e108m1/feoppDisplay.v
new file mode 100644
index 000000000..2b765ae10
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e216m2e108m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e216m2e108m1/fesub.v b/src/Specific/montgomery64_2e216m2e108m1/fesub.v
new file mode 100644
index 000000000..ff7f12041
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e216m2e108m1/fesubDisplay.v b/src/Specific/montgomery64_2e216m2e108m1/fesubDisplay.v
new file mode 100644
index 000000000..46fdc34cf
--- /dev/null
+++ b/src/Specific/montgomery64_2e216m2e108m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e216m2e108m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e221m3/CurveParameters.v b/src/Specific/montgomery64_2e221m3/CurveParameters.v
new file mode 100644
index 000000000..1b05f2b5e
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^221 - 3
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^221;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e221m3/Synthesis.v b/src/Specific/montgomery64_2e221m3/Synthesis.v
new file mode 100644
index 000000000..c92205107
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e221m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e221m3/compiler.sh b/src/Specific/montgomery64_2e221m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e221m3/feadd.v b/src/Specific/montgomery64_2e221m3/feadd.v
new file mode 100644
index 000000000..32df43ead
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e221m3/feaddDisplay.v b/src/Specific/montgomery64_2e221m3/feaddDisplay.v
new file mode 100644
index 000000000..c9a0e7c01
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e221m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e221m3/femul.v b/src/Specific/montgomery64_2e221m3/femul.v
new file mode 100644
index 000000000..8a3b9fefa
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e221m3/femulDisplay.v b/src/Specific/montgomery64_2e221m3/femulDisplay.v
new file mode 100644
index 000000000..aaff5fd68
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e221m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e221m3/fenz.v b/src/Specific/montgomery64_2e221m3/fenz.v
new file mode 100644
index 000000000..e761130d4
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e221m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e221m3/fenzDisplay.v b/src/Specific/montgomery64_2e221m3/fenzDisplay.v
new file mode 100644
index 000000000..da8ffabed
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e221m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e221m3/feopp.v b/src/Specific/montgomery64_2e221m3/feopp.v
new file mode 100644
index 000000000..09e677e80
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e221m3/feoppDisplay.v b/src/Specific/montgomery64_2e221m3/feoppDisplay.v
new file mode 100644
index 000000000..532f47996
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e221m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e221m3/fesub.v b/src/Specific/montgomery64_2e221m3/fesub.v
new file mode 100644
index 000000000..91f03619e
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e221m3/fesubDisplay.v b/src/Specific/montgomery64_2e221m3/fesubDisplay.v
new file mode 100644
index 000000000..20a769273
--- /dev/null
+++ b/src/Specific/montgomery64_2e221m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e221m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e222m117/CurveParameters.v b/src/Specific/montgomery64_2e222m117/CurveParameters.v
new file mode 100644
index 000000000..e91895555
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^222 - 117
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^222;
+ c := [(1, 117)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e222m117/Synthesis.v b/src/Specific/montgomery64_2e222m117/Synthesis.v
new file mode 100644
index 000000000..4ccdbc9aa
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e222m117.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e222m117/compiler.sh b/src/Specific/montgomery64_2e222m117/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e222m117/feadd.v b/src/Specific/montgomery64_2e222m117/feadd.v
new file mode 100644
index 000000000..0f2a71c77
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e222m117/feaddDisplay.v b/src/Specific/montgomery64_2e222m117/feaddDisplay.v
new file mode 100644
index 000000000..af7d09ac2
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e222m117.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e222m117/femul.v b/src/Specific/montgomery64_2e222m117/femul.v
new file mode 100644
index 000000000..78d354100
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e222m117/femulDisplay.v b/src/Specific/montgomery64_2e222m117/femulDisplay.v
new file mode 100644
index 000000000..d55adb91f
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e222m117.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e222m117/fenz.v b/src/Specific/montgomery64_2e222m117/fenz.v
new file mode 100644
index 000000000..d0a147ba2
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e222m117.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e222m117/fenzDisplay.v b/src/Specific/montgomery64_2e222m117/fenzDisplay.v
new file mode 100644
index 000000000..900592d01
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e222m117.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e222m117/feopp.v b/src/Specific/montgomery64_2e222m117/feopp.v
new file mode 100644
index 000000000..6ec3f26ca
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e222m117/feoppDisplay.v b/src/Specific/montgomery64_2e222m117/feoppDisplay.v
new file mode 100644
index 000000000..2e836af53
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e222m117.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e222m117/fesub.v b/src/Specific/montgomery64_2e222m117/fesub.v
new file mode 100644
index 000000000..80e3881e4
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e222m117/fesubDisplay.v b/src/Specific/montgomery64_2e222m117/fesubDisplay.v
new file mode 100644
index 000000000..ea1b8a60e
--- /dev/null
+++ b/src/Specific/montgomery64_2e222m117/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e222m117.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e224m2e96p1/CurveParameters.v b/src/Specific/montgomery64_2e224m2e96p1/CurveParameters.v
new file mode 100644
index 000000000..b75df72ab
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^224 - 2^96 + 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^224;
+ c := [(1, -1); (2^96, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e224m2e96p1/Synthesis.v b/src/Specific/montgomery64_2e224m2e96p1/Synthesis.v
new file mode 100644
index 000000000..7ec5135ce
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e224m2e96p1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e224m2e96p1/compiler.sh b/src/Specific/montgomery64_2e224m2e96p1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e224m2e96p1/feadd.v b/src/Specific/montgomery64_2e224m2e96p1/feadd.v
new file mode 100644
index 000000000..c850b0a4e
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e224m2e96p1/feaddDisplay.v b/src/Specific/montgomery64_2e224m2e96p1/feaddDisplay.v
new file mode 100644
index 000000000..c6082401d
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e224m2e96p1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e224m2e96p1/femul.v b/src/Specific/montgomery64_2e224m2e96p1/femul.v
new file mode 100644
index 000000000..a5a4b11b8
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e224m2e96p1/femulDisplay.v b/src/Specific/montgomery64_2e224m2e96p1/femulDisplay.v
new file mode 100644
index 000000000..d75d7c69b
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e224m2e96p1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e224m2e96p1/fenz.v b/src/Specific/montgomery64_2e224m2e96p1/fenz.v
new file mode 100644
index 000000000..54cfdc272
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e224m2e96p1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e224m2e96p1/fenzDisplay.v b/src/Specific/montgomery64_2e224m2e96p1/fenzDisplay.v
new file mode 100644
index 000000000..81c790d41
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e224m2e96p1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e224m2e96p1/feopp.v b/src/Specific/montgomery64_2e224m2e96p1/feopp.v
new file mode 100644
index 000000000..8959a4772
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e224m2e96p1/feoppDisplay.v b/src/Specific/montgomery64_2e224m2e96p1/feoppDisplay.v
new file mode 100644
index 000000000..f335f4ca7
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e224m2e96p1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e224m2e96p1/fesub.v b/src/Specific/montgomery64_2e224m2e96p1/fesub.v
new file mode 100644
index 000000000..6a2eff3b4
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e224m2e96p1/fesubDisplay.v b/src/Specific/montgomery64_2e224m2e96p1/fesubDisplay.v
new file mode 100644
index 000000000..9a33236ee
--- /dev/null
+++ b/src/Specific/montgomery64_2e224m2e96p1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e224m2e96p1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e226m5/CurveParameters.v b/src/Specific/montgomery64_2e226m5/CurveParameters.v
new file mode 100644
index 000000000..0cf8281f3
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^226 - 5
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^226;
+ c := [(1, 5)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e226m5/Synthesis.v b/src/Specific/montgomery64_2e226m5/Synthesis.v
new file mode 100644
index 000000000..bf270f083
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e226m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e226m5/compiler.sh b/src/Specific/montgomery64_2e226m5/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e226m5/feadd.v b/src/Specific/montgomery64_2e226m5/feadd.v
new file mode 100644
index 000000000..1fccb4e64
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e226m5/feaddDisplay.v b/src/Specific/montgomery64_2e226m5/feaddDisplay.v
new file mode 100644
index 000000000..4210bcd73
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e226m5.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e226m5/femul.v b/src/Specific/montgomery64_2e226m5/femul.v
new file mode 100644
index 000000000..491e18a21
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e226m5/femulDisplay.v b/src/Specific/montgomery64_2e226m5/femulDisplay.v
new file mode 100644
index 000000000..6290fb6df
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e226m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e226m5/fenz.v b/src/Specific/montgomery64_2e226m5/fenz.v
new file mode 100644
index 000000000..3e26bcf72
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e226m5.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e226m5/fenzDisplay.v b/src/Specific/montgomery64_2e226m5/fenzDisplay.v
new file mode 100644
index 000000000..46389cfc7
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e226m5.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e226m5/feopp.v b/src/Specific/montgomery64_2e226m5/feopp.v
new file mode 100644
index 000000000..7a8711909
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e226m5/feoppDisplay.v b/src/Specific/montgomery64_2e226m5/feoppDisplay.v
new file mode 100644
index 000000000..922688f4c
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e226m5.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e226m5/fesub.v b/src/Specific/montgomery64_2e226m5/fesub.v
new file mode 100644
index 000000000..f6de732bf
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e226m5/fesubDisplay.v b/src/Specific/montgomery64_2e226m5/fesubDisplay.v
new file mode 100644
index 000000000..0b776fe9c
--- /dev/null
+++ b/src/Specific/montgomery64_2e226m5/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e226m5.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e230m27/CurveParameters.v b/src/Specific/montgomery64_2e230m27/CurveParameters.v
new file mode 100644
index 000000000..f65113c47
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^230 - 27
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^230;
+ c := [(1, 27)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e230m27/Synthesis.v b/src/Specific/montgomery64_2e230m27/Synthesis.v
new file mode 100644
index 000000000..24b869df8
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e230m27.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e230m27/compiler.sh b/src/Specific/montgomery64_2e230m27/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e230m27/feadd.v b/src/Specific/montgomery64_2e230m27/feadd.v
new file mode 100644
index 000000000..e6067ae6d
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e230m27/feaddDisplay.v b/src/Specific/montgomery64_2e230m27/feaddDisplay.v
new file mode 100644
index 000000000..fc3372721
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e230m27.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e230m27/femul.v b/src/Specific/montgomery64_2e230m27/femul.v
new file mode 100644
index 000000000..c851716e9
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e230m27/femulDisplay.v b/src/Specific/montgomery64_2e230m27/femulDisplay.v
new file mode 100644
index 000000000..307cdb810
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e230m27.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e230m27/fenz.v b/src/Specific/montgomery64_2e230m27/fenz.v
new file mode 100644
index 000000000..8e888bf6e
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e230m27.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e230m27/fenzDisplay.v b/src/Specific/montgomery64_2e230m27/fenzDisplay.v
new file mode 100644
index 000000000..83757c145
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e230m27.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e230m27/feopp.v b/src/Specific/montgomery64_2e230m27/feopp.v
new file mode 100644
index 000000000..ac0a6ccfd
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e230m27/feoppDisplay.v b/src/Specific/montgomery64_2e230m27/feoppDisplay.v
new file mode 100644
index 000000000..eda5385b1
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e230m27.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e230m27/fesub.v b/src/Specific/montgomery64_2e230m27/fesub.v
new file mode 100644
index 000000000..2cc6df637
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e230m27/fesubDisplay.v b/src/Specific/montgomery64_2e230m27/fesubDisplay.v
new file mode 100644
index 000000000..2e7318e7f
--- /dev/null
+++ b/src/Specific/montgomery64_2e230m27/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e230m27.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e235m15/CurveParameters.v b/src/Specific/montgomery64_2e235m15/CurveParameters.v
new file mode 100644
index 000000000..f4f01625c
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^235 - 15
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^235;
+ c := [(1, 15)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e235m15/Synthesis.v b/src/Specific/montgomery64_2e235m15/Synthesis.v
new file mode 100644
index 000000000..da0416ba6
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e235m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e235m15/compiler.sh b/src/Specific/montgomery64_2e235m15/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e235m15/feadd.v b/src/Specific/montgomery64_2e235m15/feadd.v
new file mode 100644
index 000000000..eb8027ce7
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e235m15/feaddDisplay.v b/src/Specific/montgomery64_2e235m15/feaddDisplay.v
new file mode 100644
index 000000000..0661a353f
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e235m15.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e235m15/femul.v b/src/Specific/montgomery64_2e235m15/femul.v
new file mode 100644
index 000000000..e50e012c8
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e235m15/femulDisplay.v b/src/Specific/montgomery64_2e235m15/femulDisplay.v
new file mode 100644
index 000000000..91dead46c
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e235m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e235m15/fenz.v b/src/Specific/montgomery64_2e235m15/fenz.v
new file mode 100644
index 000000000..9bd2b2e47
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e235m15.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e235m15/fenzDisplay.v b/src/Specific/montgomery64_2e235m15/fenzDisplay.v
new file mode 100644
index 000000000..8bb2b7fb8
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e235m15.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e235m15/feopp.v b/src/Specific/montgomery64_2e235m15/feopp.v
new file mode 100644
index 000000000..4bd2e3f37
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e235m15/feoppDisplay.v b/src/Specific/montgomery64_2e235m15/feoppDisplay.v
new file mode 100644
index 000000000..a918a58a2
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e235m15.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e235m15/fesub.v b/src/Specific/montgomery64_2e235m15/fesub.v
new file mode 100644
index 000000000..9bd76b05a
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e235m15/fesubDisplay.v b/src/Specific/montgomery64_2e235m15/fesubDisplay.v
new file mode 100644
index 000000000..b3425abda
--- /dev/null
+++ b/src/Specific/montgomery64_2e235m15/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e235m15.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e243m9/CurveParameters.v b/src/Specific/montgomery64_2e243m9/CurveParameters.v
new file mode 100644
index 000000000..cdc1b8e6b
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^243 - 9
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^243;
+ c := [(1, 9)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e243m9/Synthesis.v b/src/Specific/montgomery64_2e243m9/Synthesis.v
new file mode 100644
index 000000000..43caea3f5
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e243m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e243m9/compiler.sh b/src/Specific/montgomery64_2e243m9/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e243m9/feadd.v b/src/Specific/montgomery64_2e243m9/feadd.v
new file mode 100644
index 000000000..5beb2fddf
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e243m9/feaddDisplay.v b/src/Specific/montgomery64_2e243m9/feaddDisplay.v
new file mode 100644
index 000000000..ef8bb9b3a
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e243m9.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e243m9/femul.v b/src/Specific/montgomery64_2e243m9/femul.v
new file mode 100644
index 000000000..3972420c1
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e243m9/femulDisplay.v b/src/Specific/montgomery64_2e243m9/femulDisplay.v
new file mode 100644
index 000000000..afe0099b9
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e243m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e243m9/fenz.v b/src/Specific/montgomery64_2e243m9/fenz.v
new file mode 100644
index 000000000..a96f27053
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e243m9.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e243m9/fenzDisplay.v b/src/Specific/montgomery64_2e243m9/fenzDisplay.v
new file mode 100644
index 000000000..269bca14d
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e243m9.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e243m9/feopp.v b/src/Specific/montgomery64_2e243m9/feopp.v
new file mode 100644
index 000000000..eeb2279e3
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e243m9/feoppDisplay.v b/src/Specific/montgomery64_2e243m9/feoppDisplay.v
new file mode 100644
index 000000000..05c42fd3d
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e243m9.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e243m9/fesub.v b/src/Specific/montgomery64_2e243m9/fesub.v
new file mode 100644
index 000000000..33de5cbb1
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e243m9/fesubDisplay.v b/src/Specific/montgomery64_2e243m9/fesubDisplay.v
new file mode 100644
index 000000000..de1460d32
--- /dev/null
+++ b/src/Specific/montgomery64_2e243m9/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e243m9.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e251m9/CurveParameters.v b/src/Specific/montgomery64_2e251m9/CurveParameters.v
new file mode 100644
index 000000000..ce7f5f766
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^251 - 9
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^251;
+ c := [(1, 9)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e251m9/Synthesis.v b/src/Specific/montgomery64_2e251m9/Synthesis.v
new file mode 100644
index 000000000..5426330ea
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e251m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e251m9/compiler.sh b/src/Specific/montgomery64_2e251m9/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e251m9/feadd.v b/src/Specific/montgomery64_2e251m9/feadd.v
new file mode 100644
index 000000000..ed0c9d3c0
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e251m9/feaddDisplay.v b/src/Specific/montgomery64_2e251m9/feaddDisplay.v
new file mode 100644
index 000000000..e0e3cac56
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e251m9.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e251m9/femul.v b/src/Specific/montgomery64_2e251m9/femul.v
new file mode 100644
index 000000000..c0013bd56
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e251m9/femulDisplay.v b/src/Specific/montgomery64_2e251m9/femulDisplay.v
new file mode 100644
index 000000000..7a0629b54
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e251m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e251m9/fenz.v b/src/Specific/montgomery64_2e251m9/fenz.v
new file mode 100644
index 000000000..face9c72e
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e251m9.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e251m9/fenzDisplay.v b/src/Specific/montgomery64_2e251m9/fenzDisplay.v
new file mode 100644
index 000000000..ab06c3608
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e251m9.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e251m9/feopp.v b/src/Specific/montgomery64_2e251m9/feopp.v
new file mode 100644
index 000000000..7ea0e1b04
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e251m9/feoppDisplay.v b/src/Specific/montgomery64_2e251m9/feoppDisplay.v
new file mode 100644
index 000000000..d6007539d
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e251m9.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e251m9/fesub.v b/src/Specific/montgomery64_2e251m9/fesub.v
new file mode 100644
index 000000000..8c3c8d976
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e251m9/fesubDisplay.v b/src/Specific/montgomery64_2e251m9/fesubDisplay.v
new file mode 100644
index 000000000..4c9fcbf37
--- /dev/null
+++ b/src/Specific/montgomery64_2e251m9/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e251m9.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e255m19/CurveParameters.v b/src/Specific/montgomery64_2e255m19/CurveParameters.v
new file mode 100644
index 000000000..574297de5
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^255 - 19
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^255;
+ c := [(1, 19)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e255m19/Synthesis.v b/src/Specific/montgomery64_2e255m19/Synthesis.v
new file mode 100644
index 000000000..500b39d0d
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e255m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e255m19/compiler.sh b/src/Specific/montgomery64_2e255m19/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e255m19/feadd.v b/src/Specific/montgomery64_2e255m19/feadd.v
new file mode 100644
index 000000000..5196e0afe
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e255m19/feaddDisplay.v b/src/Specific/montgomery64_2e255m19/feaddDisplay.v
new file mode 100644
index 000000000..48c5c550d
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m19.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e255m19/femul.v b/src/Specific/montgomery64_2e255m19/femul.v
new file mode 100644
index 000000000..e190443c7
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e255m19/femulDisplay.v b/src/Specific/montgomery64_2e255m19/femulDisplay.v
new file mode 100644
index 000000000..3df0854a8
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e255m19/fenz.v b/src/Specific/montgomery64_2e255m19/fenz.v
new file mode 100644
index 000000000..33e2d4a4c
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m19.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e255m19/fenzDisplay.v b/src/Specific/montgomery64_2e255m19/fenzDisplay.v
new file mode 100644
index 000000000..bb346a254
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m19.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e255m19/feopp.v b/src/Specific/montgomery64_2e255m19/feopp.v
new file mode 100644
index 000000000..687f357ab
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e255m19/feoppDisplay.v b/src/Specific/montgomery64_2e255m19/feoppDisplay.v
new file mode 100644
index 000000000..59ad5be57
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m19.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e255m19/fesub.v b/src/Specific/montgomery64_2e255m19/fesub.v
new file mode 100644
index 000000000..95551d105
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e255m19/fesubDisplay.v b/src/Specific/montgomery64_2e255m19/fesubDisplay.v
new file mode 100644
index 000000000..32d63831c
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m19/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m19.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/CurveParameters.v b/src/Specific/montgomery64_2e255m2e4m2e1m1/CurveParameters.v
new file mode 100644
index 000000000..a58f6c71c
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^255 - 2^4 - 2^1 - 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^255;
+ c := [(1, 1); (2^1, 1); (2^4, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/Synthesis.v b/src/Specific/montgomery64_2e255m2e4m2e1m1/Synthesis.v
new file mode 100644
index 000000000..fd251b416
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e255m2e4m2e1m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/compiler.sh b/src/Specific/montgomery64_2e255m2e4m2e1m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/feadd.v b/src/Specific/montgomery64_2e255m2e4m2e1m1/feadd.v
new file mode 100644
index 000000000..a89156c91
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/feaddDisplay.v b/src/Specific/montgomery64_2e255m2e4m2e1m1/feaddDisplay.v
new file mode 100644
index 000000000..9ec2b3bf0
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m2e4m2e1m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/femul.v b/src/Specific/montgomery64_2e255m2e4m2e1m1/femul.v
new file mode 100644
index 000000000..f3ce36d68
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/femulDisplay.v b/src/Specific/montgomery64_2e255m2e4m2e1m1/femulDisplay.v
new file mode 100644
index 000000000..2100cc41b
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m2e4m2e1m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/fenz.v b/src/Specific/montgomery64_2e255m2e4m2e1m1/fenz.v
new file mode 100644
index 000000000..0cf0f008e
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m2e4m2e1m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/fenzDisplay.v b/src/Specific/montgomery64_2e255m2e4m2e1m1/fenzDisplay.v
new file mode 100644
index 000000000..e073de9ec
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m2e4m2e1m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/feopp.v b/src/Specific/montgomery64_2e255m2e4m2e1m1/feopp.v
new file mode 100644
index 000000000..22ce892c0
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/feoppDisplay.v b/src/Specific/montgomery64_2e255m2e4m2e1m1/feoppDisplay.v
new file mode 100644
index 000000000..ac250f528
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m2e4m2e1m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/fesub.v b/src/Specific/montgomery64_2e255m2e4m2e1m1/fesub.v
new file mode 100644
index 000000000..d0bced220
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e255m2e4m2e1m1/fesubDisplay.v b/src/Specific/montgomery64_2e255m2e4m2e1m1/fesubDisplay.v
new file mode 100644
index 000000000..26c9e3f2a
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m2e4m2e1m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m2e4m2e1m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e255m765/CurveParameters.v b/src/Specific/montgomery64_2e255m765/CurveParameters.v
new file mode 100644
index 000000000..728175495
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^255 - 765
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^255;
+ c := [(1, 765)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e255m765/Synthesis.v b/src/Specific/montgomery64_2e255m765/Synthesis.v
new file mode 100644
index 000000000..1ca7feee8
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e255m765.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e255m765/compiler.sh b/src/Specific/montgomery64_2e255m765/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e255m765/feadd.v b/src/Specific/montgomery64_2e255m765/feadd.v
new file mode 100644
index 000000000..4ffe91126
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e255m765/feaddDisplay.v b/src/Specific/montgomery64_2e255m765/feaddDisplay.v
new file mode 100644
index 000000000..6e9d0ea72
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m765.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e255m765/femul.v b/src/Specific/montgomery64_2e255m765/femul.v
new file mode 100644
index 000000000..383df0ec0
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e255m765/femulDisplay.v b/src/Specific/montgomery64_2e255m765/femulDisplay.v
new file mode 100644
index 000000000..43c9ca5af
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m765.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e255m765/fenz.v b/src/Specific/montgomery64_2e255m765/fenz.v
new file mode 100644
index 000000000..ccfff304c
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m765.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e255m765/fenzDisplay.v b/src/Specific/montgomery64_2e255m765/fenzDisplay.v
new file mode 100644
index 000000000..7ff9cc9cf
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m765.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e255m765/feopp.v b/src/Specific/montgomery64_2e255m765/feopp.v
new file mode 100644
index 000000000..b21d13c87
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e255m765/feoppDisplay.v b/src/Specific/montgomery64_2e255m765/feoppDisplay.v
new file mode 100644
index 000000000..baa171ec2
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m765.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e255m765/fesub.v b/src/Specific/montgomery64_2e255m765/fesub.v
new file mode 100644
index 000000000..a82f60333
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e255m765/fesubDisplay.v b/src/Specific/montgomery64_2e255m765/fesubDisplay.v
new file mode 100644
index 000000000..654fbccbc
--- /dev/null
+++ b/src/Specific/montgomery64_2e255m765/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e255m765.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e256m189/CurveParameters.v b/src/Specific/montgomery64_2e256m189/CurveParameters.v
new file mode 100644
index 000000000..32f422e49
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^256 - 189
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^256;
+ c := [(1, 189)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e256m189/Synthesis.v b/src/Specific/montgomery64_2e256m189/Synthesis.v
new file mode 100644
index 000000000..16e00f287
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e256m189.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e256m189/compiler.sh b/src/Specific/montgomery64_2e256m189/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e256m189/feadd.v b/src/Specific/montgomery64_2e256m189/feadd.v
new file mode 100644
index 000000000..52a88df92
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e256m189/feaddDisplay.v b/src/Specific/montgomery64_2e256m189/feaddDisplay.v
new file mode 100644
index 000000000..363d867a5
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m189.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e256m189/femul.v b/src/Specific/montgomery64_2e256m189/femul.v
new file mode 100644
index 000000000..54b070858
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e256m189/femulDisplay.v b/src/Specific/montgomery64_2e256m189/femulDisplay.v
new file mode 100644
index 000000000..0a310f262
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m189.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e256m189/fenz.v b/src/Specific/montgomery64_2e256m189/fenz.v
new file mode 100644
index 000000000..476ef4915
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m189.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e256m189/fenzDisplay.v b/src/Specific/montgomery64_2e256m189/fenzDisplay.v
new file mode 100644
index 000000000..f5b34b6d8
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m189.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e256m189/feopp.v b/src/Specific/montgomery64_2e256m189/feopp.v
new file mode 100644
index 000000000..474026b45
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e256m189/feoppDisplay.v b/src/Specific/montgomery64_2e256m189/feoppDisplay.v
new file mode 100644
index 000000000..6bc246b17
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m189.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e256m189/fesub.v b/src/Specific/montgomery64_2e256m189/fesub.v
new file mode 100644
index 000000000..33d170ead
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e256m189/fesubDisplay.v b/src/Specific/montgomery64_2e256m189/fesubDisplay.v
new file mode 100644
index 000000000..cda7c4b5e
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m189/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m189.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/CurveParameters.v b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/CurveParameters.v
new file mode 100644
index 000000000..35a36d4b5
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^256 - 2^224 + 2^192 + 2^96 - 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^256;
+ c := [(1, 1); (2^96, -1); (2^192, -1); (2^224, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/Synthesis.v b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/Synthesis.v
new file mode 100644
index 000000000..10fb1326a
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e256m2e224p2e192p2e96m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/compiler.sh b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feadd.v b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feadd.v
new file mode 100644
index 000000000..e864c286c
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feaddDisplay.v b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feaddDisplay.v
new file mode 100644
index 000000000..695e31eee
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m2e224p2e192p2e96m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/femul.v b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/femul.v
new file mode 100644
index 000000000..a47f76782
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/femulDisplay.v b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/femulDisplay.v
new file mode 100644
index 000000000..106a547a1
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m2e224p2e192p2e96m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fenz.v b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fenz.v
new file mode 100644
index 000000000..87cd2ecb4
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m2e224p2e192p2e96m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fenzDisplay.v b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fenzDisplay.v
new file mode 100644
index 000000000..226c8a395
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m2e224p2e192p2e96m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feopp.v b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feopp.v
new file mode 100644
index 000000000..a4e662fc8
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feoppDisplay.v b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feoppDisplay.v
new file mode 100644
index 000000000..0122644a6
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m2e224p2e192p2e96m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fesub.v b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fesub.v
new file mode 100644
index 000000000..a09164acc
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fesubDisplay.v b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fesubDisplay.v
new file mode 100644
index 000000000..281fe514c
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e224p2e192p2e96m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m2e224p2e192p2e96m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e256m2e32m977/CurveParameters.v b/src/Specific/montgomery64_2e256m2e32m977/CurveParameters.v
new file mode 100644
index 000000000..33b48b76d
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^256 - 2^32 - 977
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^256;
+ c := [(1, 977); (2^32, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e256m2e32m977/Synthesis.v b/src/Specific/montgomery64_2e256m2e32m977/Synthesis.v
new file mode 100644
index 000000000..e004cf4b2
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e256m2e32m977.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e256m2e32m977/compiler.sh b/src/Specific/montgomery64_2e256m2e32m977/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e256m2e32m977/feadd.v b/src/Specific/montgomery64_2e256m2e32m977/feadd.v
new file mode 100644
index 000000000..9d82497ad
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e256m2e32m977/feaddDisplay.v b/src/Specific/montgomery64_2e256m2e32m977/feaddDisplay.v
new file mode 100644
index 000000000..d16ae6e53
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m2e32m977.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e256m2e32m977/femul.v b/src/Specific/montgomery64_2e256m2e32m977/femul.v
new file mode 100644
index 000000000..5ebb4613b
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e256m2e32m977/femulDisplay.v b/src/Specific/montgomery64_2e256m2e32m977/femulDisplay.v
new file mode 100644
index 000000000..08226bdef
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m2e32m977.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e256m2e32m977/fenz.v b/src/Specific/montgomery64_2e256m2e32m977/fenz.v
new file mode 100644
index 000000000..d302721bb
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m2e32m977.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e256m2e32m977/fenzDisplay.v b/src/Specific/montgomery64_2e256m2e32m977/fenzDisplay.v
new file mode 100644
index 000000000..83a518771
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m2e32m977.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e256m2e32m977/feopp.v b/src/Specific/montgomery64_2e256m2e32m977/feopp.v
new file mode 100644
index 000000000..5b0577c2a
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e256m2e32m977/feoppDisplay.v b/src/Specific/montgomery64_2e256m2e32m977/feoppDisplay.v
new file mode 100644
index 000000000..66863fa35
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m2e32m977.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e256m2e32m977/fesub.v b/src/Specific/montgomery64_2e256m2e32m977/fesub.v
new file mode 100644
index 000000000..564412179
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e256m2e32m977/fesubDisplay.v b/src/Specific/montgomery64_2e256m2e32m977/fesubDisplay.v
new file mode 100644
index 000000000..9886b49a2
--- /dev/null
+++ b/src/Specific/montgomery64_2e256m2e32m977/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e256m2e32m977.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e266m3/CurveParameters.v b/src/Specific/montgomery64_2e266m3/CurveParameters.v
new file mode 100644
index 000000000..0b2f50766
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^266 - 3
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^266;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e266m3/Synthesis.v b/src/Specific/montgomery64_2e266m3/Synthesis.v
new file mode 100644
index 000000000..b14216ef7
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e266m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e266m3/compiler.sh b/src/Specific/montgomery64_2e266m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e266m3/feadd.v b/src/Specific/montgomery64_2e266m3/feadd.v
new file mode 100644
index 000000000..2403c8ddb
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e266m3/feaddDisplay.v b/src/Specific/montgomery64_2e266m3/feaddDisplay.v
new file mode 100644
index 000000000..d51f20c63
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e266m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e266m3/femul.v b/src/Specific/montgomery64_2e266m3/femul.v
new file mode 100644
index 000000000..54c9a104c
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e266m3/femulDisplay.v b/src/Specific/montgomery64_2e266m3/femulDisplay.v
new file mode 100644
index 000000000..cfd88322f
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e266m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e266m3/fenz.v b/src/Specific/montgomery64_2e266m3/fenz.v
new file mode 100644
index 000000000..8149b61eb
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e266m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e266m3/fenzDisplay.v b/src/Specific/montgomery64_2e266m3/fenzDisplay.v
new file mode 100644
index 000000000..8e5499953
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e266m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e266m3/feopp.v b/src/Specific/montgomery64_2e266m3/feopp.v
new file mode 100644
index 000000000..20d363921
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e266m3/feoppDisplay.v b/src/Specific/montgomery64_2e266m3/feoppDisplay.v
new file mode 100644
index 000000000..795ddb1ef
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e266m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e266m3/fesub.v b/src/Specific/montgomery64_2e266m3/fesub.v
new file mode 100644
index 000000000..63683411b
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e266m3/fesubDisplay.v b/src/Specific/montgomery64_2e266m3/fesubDisplay.v
new file mode 100644
index 000000000..4baea9fd7
--- /dev/null
+++ b/src/Specific/montgomery64_2e266m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e266m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e285m9/CurveParameters.v b/src/Specific/montgomery64_2e285m9/CurveParameters.v
new file mode 100644
index 000000000..d275f876f
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^285 - 9
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^285;
+ c := [(1, 9)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e285m9/Synthesis.v b/src/Specific/montgomery64_2e285m9/Synthesis.v
new file mode 100644
index 000000000..9e8ae81e6
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e285m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e285m9/compiler.sh b/src/Specific/montgomery64_2e285m9/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e285m9/feadd.v b/src/Specific/montgomery64_2e285m9/feadd.v
new file mode 100644
index 000000000..609a34356
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e285m9/feaddDisplay.v b/src/Specific/montgomery64_2e285m9/feaddDisplay.v
new file mode 100644
index 000000000..80b13695b
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e285m9.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e285m9/femul.v b/src/Specific/montgomery64_2e285m9/femul.v
new file mode 100644
index 000000000..9c5d2b9c9
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e285m9/femulDisplay.v b/src/Specific/montgomery64_2e285m9/femulDisplay.v
new file mode 100644
index 000000000..8d0c35adb
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e285m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e285m9/fenz.v b/src/Specific/montgomery64_2e285m9/fenz.v
new file mode 100644
index 000000000..6d6d58784
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e285m9.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e285m9/fenzDisplay.v b/src/Specific/montgomery64_2e285m9/fenzDisplay.v
new file mode 100644
index 000000000..311cc95c7
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e285m9.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e285m9/feopp.v b/src/Specific/montgomery64_2e285m9/feopp.v
new file mode 100644
index 000000000..79a5410af
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e285m9/feoppDisplay.v b/src/Specific/montgomery64_2e285m9/feoppDisplay.v
new file mode 100644
index 000000000..410accb4e
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e285m9.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e285m9/fesub.v b/src/Specific/montgomery64_2e285m9/fesub.v
new file mode 100644
index 000000000..676c31305
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e285m9/fesubDisplay.v b/src/Specific/montgomery64_2e285m9/fesubDisplay.v
new file mode 100644
index 000000000..197e1fffe
--- /dev/null
+++ b/src/Specific/montgomery64_2e285m9/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e285m9.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e291m19/CurveParameters.v b/src/Specific/montgomery64_2e291m19/CurveParameters.v
new file mode 100644
index 000000000..7b1a56c04
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^291 - 19
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^291;
+ c := [(1, 19)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e291m19/Synthesis.v b/src/Specific/montgomery64_2e291m19/Synthesis.v
new file mode 100644
index 000000000..10b0ae8a1
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e291m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e291m19/compiler.sh b/src/Specific/montgomery64_2e291m19/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e291m19/feadd.v b/src/Specific/montgomery64_2e291m19/feadd.v
new file mode 100644
index 000000000..5de5e7961
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e291m19/feaddDisplay.v b/src/Specific/montgomery64_2e291m19/feaddDisplay.v
new file mode 100644
index 000000000..e254acefa
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e291m19.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e291m19/femul.v b/src/Specific/montgomery64_2e291m19/femul.v
new file mode 100644
index 000000000..ac338250e
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e291m19/femulDisplay.v b/src/Specific/montgomery64_2e291m19/femulDisplay.v
new file mode 100644
index 000000000..806ed37c8
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e291m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e291m19/fenz.v b/src/Specific/montgomery64_2e291m19/fenz.v
new file mode 100644
index 000000000..a8967212e
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e291m19.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e291m19/fenzDisplay.v b/src/Specific/montgomery64_2e291m19/fenzDisplay.v
new file mode 100644
index 000000000..36dbdbc97
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e291m19.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e291m19/feopp.v b/src/Specific/montgomery64_2e291m19/feopp.v
new file mode 100644
index 000000000..210c981d8
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e291m19/feoppDisplay.v b/src/Specific/montgomery64_2e291m19/feoppDisplay.v
new file mode 100644
index 000000000..5de645f08
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e291m19.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e291m19/fesub.v b/src/Specific/montgomery64_2e291m19/fesub.v
new file mode 100644
index 000000000..88d2c1c3e
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e291m19/fesubDisplay.v b/src/Specific/montgomery64_2e291m19/fesubDisplay.v
new file mode 100644
index 000000000..2873b7809
--- /dev/null
+++ b/src/Specific/montgomery64_2e291m19/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e291m19.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e321m9/CurveParameters.v b/src/Specific/montgomery64_2e321m9/CurveParameters.v
new file mode 100644
index 000000000..e10a581e8
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^321 - 9
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^321;
+ c := [(1, 9)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e321m9/Synthesis.v b/src/Specific/montgomery64_2e321m9/Synthesis.v
new file mode 100644
index 000000000..75502e5f6
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e321m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e321m9/compiler.sh b/src/Specific/montgomery64_2e321m9/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e321m9/feadd.v b/src/Specific/montgomery64_2e321m9/feadd.v
new file mode 100644
index 000000000..80d3621f6
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e321m9/feaddDisplay.v b/src/Specific/montgomery64_2e321m9/feaddDisplay.v
new file mode 100644
index 000000000..e653ca7ac
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e321m9.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e321m9/femul.v b/src/Specific/montgomery64_2e321m9/femul.v
new file mode 100644
index 000000000..2ccaf9854
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e321m9/femulDisplay.v b/src/Specific/montgomery64_2e321m9/femulDisplay.v
new file mode 100644
index 000000000..bb07e0666
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e321m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e321m9/fenz.v b/src/Specific/montgomery64_2e321m9/fenz.v
new file mode 100644
index 000000000..bc22d87d6
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e321m9.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e321m9/fenzDisplay.v b/src/Specific/montgomery64_2e321m9/fenzDisplay.v
new file mode 100644
index 000000000..22350b1be
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e321m9.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e321m9/feopp.v b/src/Specific/montgomery64_2e321m9/feopp.v
new file mode 100644
index 000000000..ecbb94b6d
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e321m9/feoppDisplay.v b/src/Specific/montgomery64_2e321m9/feoppDisplay.v
new file mode 100644
index 000000000..e790342d9
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e321m9.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e321m9/fesub.v b/src/Specific/montgomery64_2e321m9/fesub.v
new file mode 100644
index 000000000..a20636429
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e321m9/fesubDisplay.v b/src/Specific/montgomery64_2e321m9/fesubDisplay.v
new file mode 100644
index 000000000..05afc5ec8
--- /dev/null
+++ b/src/Specific/montgomery64_2e321m9/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e321m9.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e322m2e161m1/CurveParameters.v b/src/Specific/montgomery64_2e322m2e161m1/CurveParameters.v
new file mode 100644
index 000000000..473c9ebae
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^322 - 2^161 - 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^322;
+ c := [(1, 1); (2^161, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some true;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e322m2e161m1/Synthesis.v b/src/Specific/montgomery64_2e322m2e161m1/Synthesis.v
new file mode 100644
index 000000000..6aae95f32
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e322m2e161m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e322m2e161m1/compiler.sh b/src/Specific/montgomery64_2e322m2e161m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e322m2e161m1/feadd.v b/src/Specific/montgomery64_2e322m2e161m1/feadd.v
new file mode 100644
index 000000000..633b3d944
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e322m2e161m1/feaddDisplay.v b/src/Specific/montgomery64_2e322m2e161m1/feaddDisplay.v
new file mode 100644
index 000000000..2878f2a43
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e322m2e161m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e322m2e161m1/femul.v b/src/Specific/montgomery64_2e322m2e161m1/femul.v
new file mode 100644
index 000000000..83474eab3
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e322m2e161m1/femulDisplay.v b/src/Specific/montgomery64_2e322m2e161m1/femulDisplay.v
new file mode 100644
index 000000000..f571e1a0a
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e322m2e161m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e322m2e161m1/fenz.v b/src/Specific/montgomery64_2e322m2e161m1/fenz.v
new file mode 100644
index 000000000..8e0ce2259
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e322m2e161m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e322m2e161m1/fenzDisplay.v b/src/Specific/montgomery64_2e322m2e161m1/fenzDisplay.v
new file mode 100644
index 000000000..42f8beda0
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e322m2e161m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e322m2e161m1/feopp.v b/src/Specific/montgomery64_2e322m2e161m1/feopp.v
new file mode 100644
index 000000000..17eb220bf
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e322m2e161m1/feoppDisplay.v b/src/Specific/montgomery64_2e322m2e161m1/feoppDisplay.v
new file mode 100644
index 000000000..229c1c6f8
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e322m2e161m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e322m2e161m1/fesub.v b/src/Specific/montgomery64_2e322m2e161m1/fesub.v
new file mode 100644
index 000000000..59faba08c
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e322m2e161m1/fesubDisplay.v b/src/Specific/montgomery64_2e322m2e161m1/fesubDisplay.v
new file mode 100644
index 000000000..7c49fd5ff
--- /dev/null
+++ b/src/Specific/montgomery64_2e322m2e161m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e322m2e161m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e336m17/CurveParameters.v b/src/Specific/montgomery64_2e336m17/CurveParameters.v
new file mode 100644
index 000000000..b1f2674dc
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^336 - 17
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^336;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e336m17/Synthesis.v b/src/Specific/montgomery64_2e336m17/Synthesis.v
new file mode 100644
index 000000000..609b4e47e
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e336m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e336m17/compiler.sh b/src/Specific/montgomery64_2e336m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e336m17/feadd.v b/src/Specific/montgomery64_2e336m17/feadd.v
new file mode 100644
index 000000000..5c58f9611
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e336m17/feaddDisplay.v b/src/Specific/montgomery64_2e336m17/feaddDisplay.v
new file mode 100644
index 000000000..baeb5c9c7
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e336m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e336m17/femul.v b/src/Specific/montgomery64_2e336m17/femul.v
new file mode 100644
index 000000000..5bbd048f8
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e336m17/femulDisplay.v b/src/Specific/montgomery64_2e336m17/femulDisplay.v
new file mode 100644
index 000000000..f1629583c
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e336m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e336m17/fenz.v b/src/Specific/montgomery64_2e336m17/fenz.v
new file mode 100644
index 000000000..64bbd970e
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e336m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e336m17/fenzDisplay.v b/src/Specific/montgomery64_2e336m17/fenzDisplay.v
new file mode 100644
index 000000000..e59286d73
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e336m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e336m17/feopp.v b/src/Specific/montgomery64_2e336m17/feopp.v
new file mode 100644
index 000000000..c14494e32
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e336m17/feoppDisplay.v b/src/Specific/montgomery64_2e336m17/feoppDisplay.v
new file mode 100644
index 000000000..db2f2557b
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e336m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e336m17/fesub.v b/src/Specific/montgomery64_2e336m17/fesub.v
new file mode 100644
index 000000000..5c2ee1cd6
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e336m17/fesubDisplay.v b/src/Specific/montgomery64_2e336m17/fesubDisplay.v
new file mode 100644
index 000000000..23a812d8c
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e336m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e336m3/CurveParameters.v b/src/Specific/montgomery64_2e336m3/CurveParameters.v
new file mode 100644
index 000000000..6e476d776
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^336 - 3
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^336;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e336m3/Synthesis.v b/src/Specific/montgomery64_2e336m3/Synthesis.v
new file mode 100644
index 000000000..b955d1dbe
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e336m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e336m3/compiler.sh b/src/Specific/montgomery64_2e336m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e336m3/feadd.v b/src/Specific/montgomery64_2e336m3/feadd.v
new file mode 100644
index 000000000..5bcc2a371
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e336m3/feaddDisplay.v b/src/Specific/montgomery64_2e336m3/feaddDisplay.v
new file mode 100644
index 000000000..d08afab85
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e336m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e336m3/femul.v b/src/Specific/montgomery64_2e336m3/femul.v
new file mode 100644
index 000000000..a3d2cbda2
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e336m3/femulDisplay.v b/src/Specific/montgomery64_2e336m3/femulDisplay.v
new file mode 100644
index 000000000..a339d1d03
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e336m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e336m3/fenz.v b/src/Specific/montgomery64_2e336m3/fenz.v
new file mode 100644
index 000000000..2a55c67d2
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e336m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e336m3/fenzDisplay.v b/src/Specific/montgomery64_2e336m3/fenzDisplay.v
new file mode 100644
index 000000000..4765ba239
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e336m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e336m3/feopp.v b/src/Specific/montgomery64_2e336m3/feopp.v
new file mode 100644
index 000000000..123a66615
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e336m3/feoppDisplay.v b/src/Specific/montgomery64_2e336m3/feoppDisplay.v
new file mode 100644
index 000000000..ee0af9765
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e336m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e336m3/fesub.v b/src/Specific/montgomery64_2e336m3/fesub.v
new file mode 100644
index 000000000..4b2f1fb26
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e336m3/fesubDisplay.v b/src/Specific/montgomery64_2e336m3/fesubDisplay.v
new file mode 100644
index 000000000..a14824ba5
--- /dev/null
+++ b/src/Specific/montgomery64_2e336m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e336m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e338m15/CurveParameters.v b/src/Specific/montgomery64_2e338m15/CurveParameters.v
new file mode 100644
index 000000000..c3129ebc2
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^338 - 15
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^338;
+ c := [(1, 15)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e338m15/Synthesis.v b/src/Specific/montgomery64_2e338m15/Synthesis.v
new file mode 100644
index 000000000..ca8c098ff
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e338m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e338m15/compiler.sh b/src/Specific/montgomery64_2e338m15/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e338m15/feadd.v b/src/Specific/montgomery64_2e338m15/feadd.v
new file mode 100644
index 000000000..f8e165b1a
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e338m15/feaddDisplay.v b/src/Specific/montgomery64_2e338m15/feaddDisplay.v
new file mode 100644
index 000000000..47ff20d43
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e338m15.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e338m15/femul.v b/src/Specific/montgomery64_2e338m15/femul.v
new file mode 100644
index 000000000..db8789ff7
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e338m15/femulDisplay.v b/src/Specific/montgomery64_2e338m15/femulDisplay.v
new file mode 100644
index 000000000..e7afecd38
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e338m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e338m15/fenz.v b/src/Specific/montgomery64_2e338m15/fenz.v
new file mode 100644
index 000000000..c06cca77d
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e338m15.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e338m15/fenzDisplay.v b/src/Specific/montgomery64_2e338m15/fenzDisplay.v
new file mode 100644
index 000000000..ca802b60c
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e338m15.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e338m15/feopp.v b/src/Specific/montgomery64_2e338m15/feopp.v
new file mode 100644
index 000000000..06713df34
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e338m15/feoppDisplay.v b/src/Specific/montgomery64_2e338m15/feoppDisplay.v
new file mode 100644
index 000000000..9d629a548
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e338m15.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e338m15/fesub.v b/src/Specific/montgomery64_2e338m15/fesub.v
new file mode 100644
index 000000000..62271c3ac
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e338m15/fesubDisplay.v b/src/Specific/montgomery64_2e338m15/fesubDisplay.v
new file mode 100644
index 000000000..8edb4c761
--- /dev/null
+++ b/src/Specific/montgomery64_2e338m15/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e338m15.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e369m25/CurveParameters.v b/src/Specific/montgomery64_2e369m25/CurveParameters.v
new file mode 100644
index 000000000..d6a9b3a32
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^369 - 25
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^369;
+ c := [(1, 25)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e369m25/Synthesis.v b/src/Specific/montgomery64_2e369m25/Synthesis.v
new file mode 100644
index 000000000..a4cce3b42
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e369m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e369m25/compiler.sh b/src/Specific/montgomery64_2e369m25/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e369m25/feadd.v b/src/Specific/montgomery64_2e369m25/feadd.v
new file mode 100644
index 000000000..84e528f49
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e369m25/feaddDisplay.v b/src/Specific/montgomery64_2e369m25/feaddDisplay.v
new file mode 100644
index 000000000..d45422e04
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e369m25.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e369m25/femul.v b/src/Specific/montgomery64_2e369m25/femul.v
new file mode 100644
index 000000000..0f3eb76c3
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e369m25/femulDisplay.v b/src/Specific/montgomery64_2e369m25/femulDisplay.v
new file mode 100644
index 000000000..07837925a
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e369m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e369m25/fenz.v b/src/Specific/montgomery64_2e369m25/fenz.v
new file mode 100644
index 000000000..f654a97fb
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e369m25.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e369m25/fenzDisplay.v b/src/Specific/montgomery64_2e369m25/fenzDisplay.v
new file mode 100644
index 000000000..0e800f3e9
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e369m25.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e369m25/feopp.v b/src/Specific/montgomery64_2e369m25/feopp.v
new file mode 100644
index 000000000..75b5da31b
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e369m25/feoppDisplay.v b/src/Specific/montgomery64_2e369m25/feoppDisplay.v
new file mode 100644
index 000000000..8ef0497aa
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e369m25.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e369m25/fesub.v b/src/Specific/montgomery64_2e369m25/fesub.v
new file mode 100644
index 000000000..d927a4514
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e369m25/fesubDisplay.v b/src/Specific/montgomery64_2e369m25/fesubDisplay.v
new file mode 100644
index 000000000..3b2376533
--- /dev/null
+++ b/src/Specific/montgomery64_2e369m25/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e369m25.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e379m19/CurveParameters.v b/src/Specific/montgomery64_2e379m19/CurveParameters.v
new file mode 100644
index 000000000..de21ec61e
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^379 - 19
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^379;
+ c := [(1, 19)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e379m19/Synthesis.v b/src/Specific/montgomery64_2e379m19/Synthesis.v
new file mode 100644
index 000000000..f2fd8bce0
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e379m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e379m19/compiler.sh b/src/Specific/montgomery64_2e379m19/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e379m19/feadd.v b/src/Specific/montgomery64_2e379m19/feadd.v
new file mode 100644
index 000000000..0bcd0e02e
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e379m19/feaddDisplay.v b/src/Specific/montgomery64_2e379m19/feaddDisplay.v
new file mode 100644
index 000000000..76342dbe4
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e379m19.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e379m19/femul.v b/src/Specific/montgomery64_2e379m19/femul.v
new file mode 100644
index 000000000..cf709a717
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e379m19/femulDisplay.v b/src/Specific/montgomery64_2e379m19/femulDisplay.v
new file mode 100644
index 000000000..addc7b614
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e379m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e379m19/fenz.v b/src/Specific/montgomery64_2e379m19/fenz.v
new file mode 100644
index 000000000..38bb484dc
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e379m19.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e379m19/fenzDisplay.v b/src/Specific/montgomery64_2e379m19/fenzDisplay.v
new file mode 100644
index 000000000..097d11716
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e379m19.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e379m19/feopp.v b/src/Specific/montgomery64_2e379m19/feopp.v
new file mode 100644
index 000000000..0cd04ddc1
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e379m19/feoppDisplay.v b/src/Specific/montgomery64_2e379m19/feoppDisplay.v
new file mode 100644
index 000000000..74b6fecf1
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e379m19.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e379m19/fesub.v b/src/Specific/montgomery64_2e379m19/fesub.v
new file mode 100644
index 000000000..813781ce8
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e379m19/fesubDisplay.v b/src/Specific/montgomery64_2e379m19/fesubDisplay.v
new file mode 100644
index 000000000..077904d7d
--- /dev/null
+++ b/src/Specific/montgomery64_2e379m19/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e379m19.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e382m105/CurveParameters.v b/src/Specific/montgomery64_2e382m105/CurveParameters.v
new file mode 100644
index 000000000..4f77a2081
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^382 - 105
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^382;
+ c := [(1, 105)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e382m105/Synthesis.v b/src/Specific/montgomery64_2e382m105/Synthesis.v
new file mode 100644
index 000000000..78128e63a
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e382m105.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e382m105/compiler.sh b/src/Specific/montgomery64_2e382m105/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e382m105/feadd.v b/src/Specific/montgomery64_2e382m105/feadd.v
new file mode 100644
index 000000000..bbd98c54b
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e382m105/feaddDisplay.v b/src/Specific/montgomery64_2e382m105/feaddDisplay.v
new file mode 100644
index 000000000..27995c584
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e382m105.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e382m105/femul.v b/src/Specific/montgomery64_2e382m105/femul.v
new file mode 100644
index 000000000..fad8e7fec
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e382m105/femulDisplay.v b/src/Specific/montgomery64_2e382m105/femulDisplay.v
new file mode 100644
index 000000000..696487420
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e382m105.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e382m105/fenz.v b/src/Specific/montgomery64_2e382m105/fenz.v
new file mode 100644
index 000000000..3b41a8701
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e382m105.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e382m105/fenzDisplay.v b/src/Specific/montgomery64_2e382m105/fenzDisplay.v
new file mode 100644
index 000000000..9449ed727
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e382m105.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e382m105/feopp.v b/src/Specific/montgomery64_2e382m105/feopp.v
new file mode 100644
index 000000000..272836734
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e382m105/feoppDisplay.v b/src/Specific/montgomery64_2e382m105/feoppDisplay.v
new file mode 100644
index 000000000..47d29b50a
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e382m105.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e382m105/fesub.v b/src/Specific/montgomery64_2e382m105/fesub.v
new file mode 100644
index 000000000..80b4b1ae3
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e382m105/fesubDisplay.v b/src/Specific/montgomery64_2e382m105/fesubDisplay.v
new file mode 100644
index 000000000..09ef67956
--- /dev/null
+++ b/src/Specific/montgomery64_2e382m105/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e382m105.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e383m187/CurveParameters.v b/src/Specific/montgomery64_2e383m187/CurveParameters.v
new file mode 100644
index 000000000..50a96b2e2
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^383 - 187
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^383;
+ c := [(1, 187)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e383m187/Synthesis.v b/src/Specific/montgomery64_2e383m187/Synthesis.v
new file mode 100644
index 000000000..812c0a6f7
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e383m187.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e383m187/compiler.sh b/src/Specific/montgomery64_2e383m187/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e383m187/feadd.v b/src/Specific/montgomery64_2e383m187/feadd.v
new file mode 100644
index 000000000..e6ceab1a8
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e383m187/feaddDisplay.v b/src/Specific/montgomery64_2e383m187/feaddDisplay.v
new file mode 100644
index 000000000..d4bbb78b1
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m187.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e383m187/femul.v b/src/Specific/montgomery64_2e383m187/femul.v
new file mode 100644
index 000000000..e1ff1745f
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e383m187/femulDisplay.v b/src/Specific/montgomery64_2e383m187/femulDisplay.v
new file mode 100644
index 000000000..0d3602e9b
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m187.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e383m187/fenz.v b/src/Specific/montgomery64_2e383m187/fenz.v
new file mode 100644
index 000000000..555fd7bba
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m187.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e383m187/fenzDisplay.v b/src/Specific/montgomery64_2e383m187/fenzDisplay.v
new file mode 100644
index 000000000..5fa00b7c3
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m187.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e383m187/feopp.v b/src/Specific/montgomery64_2e383m187/feopp.v
new file mode 100644
index 000000000..37c90bbab
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e383m187/feoppDisplay.v b/src/Specific/montgomery64_2e383m187/feoppDisplay.v
new file mode 100644
index 000000000..75af86a6b
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m187.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e383m187/fesub.v b/src/Specific/montgomery64_2e383m187/fesub.v
new file mode 100644
index 000000000..a5326cffa
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e383m187/fesubDisplay.v b/src/Specific/montgomery64_2e383m187/fesubDisplay.v
new file mode 100644
index 000000000..7520f9f8b
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m187/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m187.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e383m31/CurveParameters.v b/src/Specific/montgomery64_2e383m31/CurveParameters.v
new file mode 100644
index 000000000..355da2cc8
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^383 - 31
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^383;
+ c := [(1, 31)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e383m31/Synthesis.v b/src/Specific/montgomery64_2e383m31/Synthesis.v
new file mode 100644
index 000000000..b63326ee7
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e383m31.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e383m31/compiler.sh b/src/Specific/montgomery64_2e383m31/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e383m31/feadd.v b/src/Specific/montgomery64_2e383m31/feadd.v
new file mode 100644
index 000000000..068688f7a
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e383m31/feaddDisplay.v b/src/Specific/montgomery64_2e383m31/feaddDisplay.v
new file mode 100644
index 000000000..c786ae13f
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m31.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e383m31/femul.v b/src/Specific/montgomery64_2e383m31/femul.v
new file mode 100644
index 000000000..3c4712e57
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e383m31/femulDisplay.v b/src/Specific/montgomery64_2e383m31/femulDisplay.v
new file mode 100644
index 000000000..437a0a934
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m31.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e383m31/fenz.v b/src/Specific/montgomery64_2e383m31/fenz.v
new file mode 100644
index 000000000..b2093aa58
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m31.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e383m31/fenzDisplay.v b/src/Specific/montgomery64_2e383m31/fenzDisplay.v
new file mode 100644
index 000000000..ef2c48559
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m31.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e383m31/feopp.v b/src/Specific/montgomery64_2e383m31/feopp.v
new file mode 100644
index 000000000..9fdda4a6e
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e383m31/feoppDisplay.v b/src/Specific/montgomery64_2e383m31/feoppDisplay.v
new file mode 100644
index 000000000..0bd76f0a0
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m31.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e383m31/fesub.v b/src/Specific/montgomery64_2e383m31/fesub.v
new file mode 100644
index 000000000..0da7e1c74
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e383m31/fesubDisplay.v b/src/Specific/montgomery64_2e383m31/fesubDisplay.v
new file mode 100644
index 000000000..0e038cac5
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m31/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m31.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e383m421/CurveParameters.v b/src/Specific/montgomery64_2e383m421/CurveParameters.v
new file mode 100644
index 000000000..c0bd5fe64
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^383 - 421
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^383;
+ c := [(1, 421)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e383m421/Synthesis.v b/src/Specific/montgomery64_2e383m421/Synthesis.v
new file mode 100644
index 000000000..3f544aa1b
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e383m421.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e383m421/compiler.sh b/src/Specific/montgomery64_2e383m421/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e383m421/feadd.v b/src/Specific/montgomery64_2e383m421/feadd.v
new file mode 100644
index 000000000..a3f5df724
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m421.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e383m421/feaddDisplay.v b/src/Specific/montgomery64_2e383m421/feaddDisplay.v
new file mode 100644
index 000000000..22d8278ba
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m421.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e383m421/femul.v b/src/Specific/montgomery64_2e383m421/femul.v
new file mode 100644
index 000000000..4975fa416
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m421.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e383m421/femulDisplay.v b/src/Specific/montgomery64_2e383m421/femulDisplay.v
new file mode 100644
index 000000000..a32e5f0ca
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m421.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e383m421/fenz.v b/src/Specific/montgomery64_2e383m421/fenz.v
new file mode 100644
index 000000000..1b8fed592
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m421.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e383m421/fenzDisplay.v b/src/Specific/montgomery64_2e383m421/fenzDisplay.v
new file mode 100644
index 000000000..ab5f8c520
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m421.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e383m421/feopp.v b/src/Specific/montgomery64_2e383m421/feopp.v
new file mode 100644
index 000000000..760728a05
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m421.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e383m421/feoppDisplay.v b/src/Specific/montgomery64_2e383m421/feoppDisplay.v
new file mode 100644
index 000000000..6d69832fe
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m421.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e383m421/fesub.v b/src/Specific/montgomery64_2e383m421/fesub.v
new file mode 100644
index 000000000..2a20b22f9
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e383m421.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e383m421/fesubDisplay.v b/src/Specific/montgomery64_2e383m421/fesubDisplay.v
new file mode 100644
index 000000000..6a2455147
--- /dev/null
+++ b/src/Specific/montgomery64_2e383m421/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e383m421.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/CurveParameters.v b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/CurveParameters.v
new file mode 100644
index 000000000..8b29e6620
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^384 - 2^128 - 2^96 + 2^32 - 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^384;
+ c := [(1, 1); (2^32, -1); (2^96, 1); (2^128, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/Synthesis.v b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/Synthesis.v
new file mode 100644
index 000000000..818f8b35c
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e384m2e128m2e96p2e32m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/compiler.sh b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feadd.v b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feadd.v
new file mode 100644
index 000000000..c1f3139ac
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feaddDisplay.v b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feaddDisplay.v
new file mode 100644
index 000000000..59130e182
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e384m2e128m2e96p2e32m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/femul.v b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/femul.v
new file mode 100644
index 000000000..8df271d59
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/femulDisplay.v b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/femulDisplay.v
new file mode 100644
index 000000000..06fa7e2d5
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e384m2e128m2e96p2e32m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fenz.v b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fenz.v
new file mode 100644
index 000000000..6f448ed5e
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e384m2e128m2e96p2e32m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fenzDisplay.v b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fenzDisplay.v
new file mode 100644
index 000000000..f8fa26022
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e384m2e128m2e96p2e32m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feopp.v b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feopp.v
new file mode 100644
index 000000000..cc7983c5f
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feoppDisplay.v b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feoppDisplay.v
new file mode 100644
index 000000000..84dd38ff1
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e384m2e128m2e96p2e32m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fesub.v b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fesub.v
new file mode 100644
index 000000000..cabcb237c
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fesubDisplay.v b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fesubDisplay.v
new file mode 100644
index 000000000..76a023234
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m2e128m2e96p2e32m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e384m2e128m2e96p2e32m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e384m317/CurveParameters.v b/src/Specific/montgomery64_2e384m317/CurveParameters.v
new file mode 100644
index 000000000..a43f2fdc0
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^384 - 317
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^384;
+ c := [(1, 317)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e384m317/Synthesis.v b/src/Specific/montgomery64_2e384m317/Synthesis.v
new file mode 100644
index 000000000..cff97867b
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e384m317.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e384m317/compiler.sh b/src/Specific/montgomery64_2e384m317/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e384m317/feadd.v b/src/Specific/montgomery64_2e384m317/feadd.v
new file mode 100644
index 000000000..6a6ff94ad
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e384m317/feaddDisplay.v b/src/Specific/montgomery64_2e384m317/feaddDisplay.v
new file mode 100644
index 000000000..4e5d670f3
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e384m317.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e384m317/femul.v b/src/Specific/montgomery64_2e384m317/femul.v
new file mode 100644
index 000000000..35788c786
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e384m317/femulDisplay.v b/src/Specific/montgomery64_2e384m317/femulDisplay.v
new file mode 100644
index 000000000..cbfc74e4a
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e384m317.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e384m317/fenz.v b/src/Specific/montgomery64_2e384m317/fenz.v
new file mode 100644
index 000000000..7fec7de60
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e384m317.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e384m317/fenzDisplay.v b/src/Specific/montgomery64_2e384m317/fenzDisplay.v
new file mode 100644
index 000000000..9308deda7
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e384m317.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e384m317/feopp.v b/src/Specific/montgomery64_2e384m317/feopp.v
new file mode 100644
index 000000000..1dcf4ebb1
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e384m317/feoppDisplay.v b/src/Specific/montgomery64_2e384m317/feoppDisplay.v
new file mode 100644
index 000000000..94c00bad4
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e384m317.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e384m317/fesub.v b/src/Specific/montgomery64_2e384m317/fesub.v
new file mode 100644
index 000000000..005567a30
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e384m317/fesubDisplay.v b/src/Specific/montgomery64_2e384m317/fesubDisplay.v
new file mode 100644
index 000000000..c3f1c2c3a
--- /dev/null
+++ b/src/Specific/montgomery64_2e384m317/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e384m317.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e389m21/CurveParameters.v b/src/Specific/montgomery64_2e389m21/CurveParameters.v
new file mode 100644
index 000000000..0a01b5ee7
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^389 - 21
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^389;
+ c := [(1, 21)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e389m21/Synthesis.v b/src/Specific/montgomery64_2e389m21/Synthesis.v
new file mode 100644
index 000000000..67be0b308
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e389m21.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e389m21/compiler.sh b/src/Specific/montgomery64_2e389m21/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e389m21/feadd.v b/src/Specific/montgomery64_2e389m21/feadd.v
new file mode 100644
index 000000000..0896dcd4d
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e389m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e389m21/feaddDisplay.v b/src/Specific/montgomery64_2e389m21/feaddDisplay.v
new file mode 100644
index 000000000..d80ef3f04
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e389m21.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e389m21/femul.v b/src/Specific/montgomery64_2e389m21/femul.v
new file mode 100644
index 000000000..ed4b210cc
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e389m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e389m21/femulDisplay.v b/src/Specific/montgomery64_2e389m21/femulDisplay.v
new file mode 100644
index 000000000..44ad358bc
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e389m21.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e389m21/fenz.v b/src/Specific/montgomery64_2e389m21/fenz.v
new file mode 100644
index 000000000..72caab4b7
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e389m21.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e389m21/fenzDisplay.v b/src/Specific/montgomery64_2e389m21/fenzDisplay.v
new file mode 100644
index 000000000..fcf74bd10
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e389m21.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e389m21/feopp.v b/src/Specific/montgomery64_2e389m21/feopp.v
new file mode 100644
index 000000000..dd7348f6b
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e389m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e389m21/feoppDisplay.v b/src/Specific/montgomery64_2e389m21/feoppDisplay.v
new file mode 100644
index 000000000..0670cdf9f
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e389m21.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e389m21/fesub.v b/src/Specific/montgomery64_2e389m21/fesub.v
new file mode 100644
index 000000000..25d2ae32c
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e389m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e389m21/fesubDisplay.v b/src/Specific/montgomery64_2e389m21/fesubDisplay.v
new file mode 100644
index 000000000..1eb6c803b
--- /dev/null
+++ b/src/Specific/montgomery64_2e389m21/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e389m21.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e401m31/CurveParameters.v b/src/Specific/montgomery64_2e401m31/CurveParameters.v
new file mode 100644
index 000000000..8b8cb1387
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^401 - 31
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^401;
+ c := [(1, 31)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e401m31/Synthesis.v b/src/Specific/montgomery64_2e401m31/Synthesis.v
new file mode 100644
index 000000000..29d9e4496
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e401m31.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e401m31/compiler.sh b/src/Specific/montgomery64_2e401m31/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e401m31/feadd.v b/src/Specific/montgomery64_2e401m31/feadd.v
new file mode 100644
index 000000000..54c89278a
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e401m31/feaddDisplay.v b/src/Specific/montgomery64_2e401m31/feaddDisplay.v
new file mode 100644
index 000000000..e13fdde6f
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e401m31.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e401m31/femul.v b/src/Specific/montgomery64_2e401m31/femul.v
new file mode 100644
index 000000000..2a36a5533
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e401m31/femulDisplay.v b/src/Specific/montgomery64_2e401m31/femulDisplay.v
new file mode 100644
index 000000000..f6b1329f1
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e401m31.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e401m31/fenz.v b/src/Specific/montgomery64_2e401m31/fenz.v
new file mode 100644
index 000000000..d311e1772
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e401m31.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e401m31/fenzDisplay.v b/src/Specific/montgomery64_2e401m31/fenzDisplay.v
new file mode 100644
index 000000000..ff8f3285b
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e401m31.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e401m31/feopp.v b/src/Specific/montgomery64_2e401m31/feopp.v
new file mode 100644
index 000000000..bf635d43e
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e401m31/feoppDisplay.v b/src/Specific/montgomery64_2e401m31/feoppDisplay.v
new file mode 100644
index 000000000..efbe139c1
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e401m31.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e401m31/fesub.v b/src/Specific/montgomery64_2e401m31/fesub.v
new file mode 100644
index 000000000..cd21ff5ef
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e401m31/fesubDisplay.v b/src/Specific/montgomery64_2e401m31/fesubDisplay.v
new file mode 100644
index 000000000..20ce336eb
--- /dev/null
+++ b/src/Specific/montgomery64_2e401m31/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e401m31.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e413m21/CurveParameters.v b/src/Specific/montgomery64_2e413m21/CurveParameters.v
new file mode 100644
index 000000000..138026294
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^413 - 21
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^413;
+ c := [(1, 21)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e413m21/Synthesis.v b/src/Specific/montgomery64_2e413m21/Synthesis.v
new file mode 100644
index 000000000..18c4d0efc
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e413m21.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e413m21/compiler.sh b/src/Specific/montgomery64_2e413m21/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e413m21/feadd.v b/src/Specific/montgomery64_2e413m21/feadd.v
new file mode 100644
index 000000000..82574c5ee
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e413m21/feaddDisplay.v b/src/Specific/montgomery64_2e413m21/feaddDisplay.v
new file mode 100644
index 000000000..eb3011ecc
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e413m21.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e413m21/femul.v b/src/Specific/montgomery64_2e413m21/femul.v
new file mode 100644
index 000000000..083b9e7ac
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e413m21/femulDisplay.v b/src/Specific/montgomery64_2e413m21/femulDisplay.v
new file mode 100644
index 000000000..51312dcc6
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e413m21.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e413m21/fenz.v b/src/Specific/montgomery64_2e413m21/fenz.v
new file mode 100644
index 000000000..03d2feac5
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e413m21.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e413m21/fenzDisplay.v b/src/Specific/montgomery64_2e413m21/fenzDisplay.v
new file mode 100644
index 000000000..19e66eeb8
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e413m21.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e413m21/feopp.v b/src/Specific/montgomery64_2e413m21/feopp.v
new file mode 100644
index 000000000..6bc18e3e4
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e413m21/feoppDisplay.v b/src/Specific/montgomery64_2e413m21/feoppDisplay.v
new file mode 100644
index 000000000..660be7c7e
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e413m21.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e413m21/fesub.v b/src/Specific/montgomery64_2e413m21/fesub.v
new file mode 100644
index 000000000..ef8a3798f
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e413m21/fesubDisplay.v b/src/Specific/montgomery64_2e413m21/fesubDisplay.v
new file mode 100644
index 000000000..242d11ef8
--- /dev/null
+++ b/src/Specific/montgomery64_2e413m21/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e413m21.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e414m17/CurveParameters.v b/src/Specific/montgomery64_2e414m17/CurveParameters.v
new file mode 100644
index 000000000..8739048a2
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^414 - 17
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^414;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e414m17/Synthesis.v b/src/Specific/montgomery64_2e414m17/Synthesis.v
new file mode 100644
index 000000000..19341762b
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e414m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e414m17/compiler.sh b/src/Specific/montgomery64_2e414m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e414m17/feadd.v b/src/Specific/montgomery64_2e414m17/feadd.v
new file mode 100644
index 000000000..df66f8cb6
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e414m17/feaddDisplay.v b/src/Specific/montgomery64_2e414m17/feaddDisplay.v
new file mode 100644
index 000000000..c09396ab5
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e414m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e414m17/femul.v b/src/Specific/montgomery64_2e414m17/femul.v
new file mode 100644
index 000000000..be6546adf
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e414m17/femulDisplay.v b/src/Specific/montgomery64_2e414m17/femulDisplay.v
new file mode 100644
index 000000000..d9f6424d4
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e414m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e414m17/fenz.v b/src/Specific/montgomery64_2e414m17/fenz.v
new file mode 100644
index 000000000..955d590d3
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e414m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e414m17/fenzDisplay.v b/src/Specific/montgomery64_2e414m17/fenzDisplay.v
new file mode 100644
index 000000000..2071731fa
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e414m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e414m17/feopp.v b/src/Specific/montgomery64_2e414m17/feopp.v
new file mode 100644
index 000000000..3e5b46ed1
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e414m17/feoppDisplay.v b/src/Specific/montgomery64_2e414m17/feoppDisplay.v
new file mode 100644
index 000000000..d3fadb16e
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e414m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e414m17/fesub.v b/src/Specific/montgomery64_2e414m17/fesub.v
new file mode 100644
index 000000000..4eb3a279a
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e414m17/fesubDisplay.v b/src/Specific/montgomery64_2e414m17/fesubDisplay.v
new file mode 100644
index 000000000..396aac682
--- /dev/null
+++ b/src/Specific/montgomery64_2e414m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e414m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e416m2e208m1/CurveParameters.v b/src/Specific/montgomery64_2e416m2e208m1/CurveParameters.v
new file mode 100644
index 000000000..7c1f436a2
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^416 - 2^208 - 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^416;
+ c := [(1, 1); (2^208, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some true;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e416m2e208m1/Synthesis.v b/src/Specific/montgomery64_2e416m2e208m1/Synthesis.v
new file mode 100644
index 000000000..1b0ef5b5d
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e416m2e208m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e416m2e208m1/compiler.sh b/src/Specific/montgomery64_2e416m2e208m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e416m2e208m1/feadd.v b/src/Specific/montgomery64_2e416m2e208m1/feadd.v
new file mode 100644
index 000000000..46c7a9d13
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e416m2e208m1/feaddDisplay.v b/src/Specific/montgomery64_2e416m2e208m1/feaddDisplay.v
new file mode 100644
index 000000000..9c6b16c29
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e416m2e208m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e416m2e208m1/femul.v b/src/Specific/montgomery64_2e416m2e208m1/femul.v
new file mode 100644
index 000000000..a9f5d9b35
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e416m2e208m1/femulDisplay.v b/src/Specific/montgomery64_2e416m2e208m1/femulDisplay.v
new file mode 100644
index 000000000..7d2ed8eb6
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e416m2e208m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e416m2e208m1/fenz.v b/src/Specific/montgomery64_2e416m2e208m1/fenz.v
new file mode 100644
index 000000000..141890989
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e416m2e208m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e416m2e208m1/fenzDisplay.v b/src/Specific/montgomery64_2e416m2e208m1/fenzDisplay.v
new file mode 100644
index 000000000..f1527722c
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e416m2e208m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e416m2e208m1/feopp.v b/src/Specific/montgomery64_2e416m2e208m1/feopp.v
new file mode 100644
index 000000000..3e5e42e5f
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e416m2e208m1/feoppDisplay.v b/src/Specific/montgomery64_2e416m2e208m1/feoppDisplay.v
new file mode 100644
index 000000000..2ad050521
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e416m2e208m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e416m2e208m1/fesub.v b/src/Specific/montgomery64_2e416m2e208m1/fesub.v
new file mode 100644
index 000000000..29201dcd8
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e416m2e208m1/fesubDisplay.v b/src/Specific/montgomery64_2e416m2e208m1/fesubDisplay.v
new file mode 100644
index 000000000..0babecea6
--- /dev/null
+++ b/src/Specific/montgomery64_2e416m2e208m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e416m2e208m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e444m17/CurveParameters.v b/src/Specific/montgomery64_2e444m17/CurveParameters.v
new file mode 100644
index 000000000..d747364ac
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^444 - 17
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^444;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e444m17/Synthesis.v b/src/Specific/montgomery64_2e444m17/Synthesis.v
new file mode 100644
index 000000000..736fbd3b9
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e444m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e444m17/compiler.sh b/src/Specific/montgomery64_2e444m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e444m17/feadd.v b/src/Specific/montgomery64_2e444m17/feadd.v
new file mode 100644
index 000000000..2b29b3217
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e444m17/feaddDisplay.v b/src/Specific/montgomery64_2e444m17/feaddDisplay.v
new file mode 100644
index 000000000..c1287046f
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e444m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e444m17/femul.v b/src/Specific/montgomery64_2e444m17/femul.v
new file mode 100644
index 000000000..a6971028c
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e444m17/femulDisplay.v b/src/Specific/montgomery64_2e444m17/femulDisplay.v
new file mode 100644
index 000000000..c8ef3e385
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e444m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e444m17/fenz.v b/src/Specific/montgomery64_2e444m17/fenz.v
new file mode 100644
index 000000000..79477c74c
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e444m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e444m17/fenzDisplay.v b/src/Specific/montgomery64_2e444m17/fenzDisplay.v
new file mode 100644
index 000000000..24c55b7da
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e444m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e444m17/feopp.v b/src/Specific/montgomery64_2e444m17/feopp.v
new file mode 100644
index 000000000..f0ee17461
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e444m17/feoppDisplay.v b/src/Specific/montgomery64_2e444m17/feoppDisplay.v
new file mode 100644
index 000000000..bdbb7f579
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e444m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e444m17/fesub.v b/src/Specific/montgomery64_2e444m17/fesub.v
new file mode 100644
index 000000000..8eed90c46
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e444m17/fesubDisplay.v b/src/Specific/montgomery64_2e444m17/fesubDisplay.v
new file mode 100644
index 000000000..774ebf336
--- /dev/null
+++ b/src/Specific/montgomery64_2e444m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e444m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e448m2e224m1/CurveParameters.v b/src/Specific/montgomery64_2e448m2e224m1/CurveParameters.v
new file mode 100644
index 000000000..7b7b3e65c
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^448 - 2^224 - 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^448;
+ c := [(1, 1); (2^224, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some true;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e448m2e224m1/Synthesis.v b/src/Specific/montgomery64_2e448m2e224m1/Synthesis.v
new file mode 100644
index 000000000..c2e26bc7b
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e448m2e224m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e448m2e224m1/compiler.sh b/src/Specific/montgomery64_2e448m2e224m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e448m2e224m1/feadd.v b/src/Specific/montgomery64_2e448m2e224m1/feadd.v
new file mode 100644
index 000000000..2e66efae0
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e448m2e224m1/feaddDisplay.v b/src/Specific/montgomery64_2e448m2e224m1/feaddDisplay.v
new file mode 100644
index 000000000..dcf98540f
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e448m2e224m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e448m2e224m1/femul.v b/src/Specific/montgomery64_2e448m2e224m1/femul.v
new file mode 100644
index 000000000..33bd16389
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e448m2e224m1/femulDisplay.v b/src/Specific/montgomery64_2e448m2e224m1/femulDisplay.v
new file mode 100644
index 000000000..4a4bfcbef
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e448m2e224m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e448m2e224m1/fenz.v b/src/Specific/montgomery64_2e448m2e224m1/fenz.v
new file mode 100644
index 000000000..33465cde7
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e448m2e224m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e448m2e224m1/fenzDisplay.v b/src/Specific/montgomery64_2e448m2e224m1/fenzDisplay.v
new file mode 100644
index 000000000..f9c9212d4
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e448m2e224m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e448m2e224m1/feopp.v b/src/Specific/montgomery64_2e448m2e224m1/feopp.v
new file mode 100644
index 000000000..ed381e670
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e448m2e224m1/feoppDisplay.v b/src/Specific/montgomery64_2e448m2e224m1/feoppDisplay.v
new file mode 100644
index 000000000..ac44d0ba0
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e448m2e224m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e448m2e224m1/fesub.v b/src/Specific/montgomery64_2e448m2e224m1/fesub.v
new file mode 100644
index 000000000..53eaa63c2
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e448m2e224m1/fesubDisplay.v b/src/Specific/montgomery64_2e448m2e224m1/fesubDisplay.v
new file mode 100644
index 000000000..af9ba227c
--- /dev/null
+++ b/src/Specific/montgomery64_2e448m2e224m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e448m2e224m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e450m2e225m1/CurveParameters.v b/src/Specific/montgomery64_2e450m2e225m1/CurveParameters.v
new file mode 100644
index 000000000..50082723f
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^450 - 2^225 - 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^450;
+ c := [(1, 1); (2^225, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some true;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e450m2e225m1/Synthesis.v b/src/Specific/montgomery64_2e450m2e225m1/Synthesis.v
new file mode 100644
index 000000000..2bf7c4eeb
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e450m2e225m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e450m2e225m1/compiler.sh b/src/Specific/montgomery64_2e450m2e225m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e450m2e225m1/feadd.v b/src/Specific/montgomery64_2e450m2e225m1/feadd.v
new file mode 100644
index 000000000..6794b9c2b
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e450m2e225m1/feaddDisplay.v b/src/Specific/montgomery64_2e450m2e225m1/feaddDisplay.v
new file mode 100644
index 000000000..2839b748a
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e450m2e225m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e450m2e225m1/femul.v b/src/Specific/montgomery64_2e450m2e225m1/femul.v
new file mode 100644
index 000000000..c11faec3a
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e450m2e225m1/femulDisplay.v b/src/Specific/montgomery64_2e450m2e225m1/femulDisplay.v
new file mode 100644
index 000000000..cbeb99a31
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e450m2e225m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e450m2e225m1/fenz.v b/src/Specific/montgomery64_2e450m2e225m1/fenz.v
new file mode 100644
index 000000000..a658ed4e6
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e450m2e225m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e450m2e225m1/fenzDisplay.v b/src/Specific/montgomery64_2e450m2e225m1/fenzDisplay.v
new file mode 100644
index 000000000..316660463
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e450m2e225m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e450m2e225m1/feopp.v b/src/Specific/montgomery64_2e450m2e225m1/feopp.v
new file mode 100644
index 000000000..2790e5306
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e450m2e225m1/feoppDisplay.v b/src/Specific/montgomery64_2e450m2e225m1/feoppDisplay.v
new file mode 100644
index 000000000..260435c59
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e450m2e225m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e450m2e225m1/fesub.v b/src/Specific/montgomery64_2e450m2e225m1/fesub.v
new file mode 100644
index 000000000..22a633bed
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e450m2e225m1/fesubDisplay.v b/src/Specific/montgomery64_2e450m2e225m1/fesubDisplay.v
new file mode 100644
index 000000000..206a32d9e
--- /dev/null
+++ b/src/Specific/montgomery64_2e450m2e225m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e450m2e225m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e452m3/CurveParameters.v b/src/Specific/montgomery64_2e452m3/CurveParameters.v
new file mode 100644
index 000000000..91b59fc14
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^452 - 3
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^452;
+ c := [(1, 3)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e452m3/Synthesis.v b/src/Specific/montgomery64_2e452m3/Synthesis.v
new file mode 100644
index 000000000..c7ad0001e
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e452m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e452m3/compiler.sh b/src/Specific/montgomery64_2e452m3/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e452m3/feadd.v b/src/Specific/montgomery64_2e452m3/feadd.v
new file mode 100644
index 000000000..003c86aa7
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e452m3/feaddDisplay.v b/src/Specific/montgomery64_2e452m3/feaddDisplay.v
new file mode 100644
index 000000000..16fe5ece7
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e452m3.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e452m3/femul.v b/src/Specific/montgomery64_2e452m3/femul.v
new file mode 100644
index 000000000..f8df4d766
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e452m3/femulDisplay.v b/src/Specific/montgomery64_2e452m3/femulDisplay.v
new file mode 100644
index 000000000..15f32417c
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e452m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e452m3/fenz.v b/src/Specific/montgomery64_2e452m3/fenz.v
new file mode 100644
index 000000000..4bbb54c61
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e452m3.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e452m3/fenzDisplay.v b/src/Specific/montgomery64_2e452m3/fenzDisplay.v
new file mode 100644
index 000000000..6f7981bda
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e452m3.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e452m3/feopp.v b/src/Specific/montgomery64_2e452m3/feopp.v
new file mode 100644
index 000000000..bbd3daba9
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e452m3/feoppDisplay.v b/src/Specific/montgomery64_2e452m3/feoppDisplay.v
new file mode 100644
index 000000000..3499111d1
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e452m3.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e452m3/fesub.v b/src/Specific/montgomery64_2e452m3/fesub.v
new file mode 100644
index 000000000..fbd0cc89a
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e452m3/fesubDisplay.v b/src/Specific/montgomery64_2e452m3/fesubDisplay.v
new file mode 100644
index 000000000..e1c48ada2
--- /dev/null
+++ b/src/Specific/montgomery64_2e452m3/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e452m3.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e468m17/CurveParameters.v b/src/Specific/montgomery64_2e468m17/CurveParameters.v
new file mode 100644
index 000000000..bb4b44300
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^468 - 17
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^468;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e468m17/Synthesis.v b/src/Specific/montgomery64_2e468m17/Synthesis.v
new file mode 100644
index 000000000..9201f1212
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e468m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e468m17/compiler.sh b/src/Specific/montgomery64_2e468m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e468m17/feadd.v b/src/Specific/montgomery64_2e468m17/feadd.v
new file mode 100644
index 000000000..9d91cf99b
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e468m17/feaddDisplay.v b/src/Specific/montgomery64_2e468m17/feaddDisplay.v
new file mode 100644
index 000000000..536e1ec21
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e468m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e468m17/femul.v b/src/Specific/montgomery64_2e468m17/femul.v
new file mode 100644
index 000000000..fca092420
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e468m17/femulDisplay.v b/src/Specific/montgomery64_2e468m17/femulDisplay.v
new file mode 100644
index 000000000..73de8469d
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e468m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e468m17/fenz.v b/src/Specific/montgomery64_2e468m17/fenz.v
new file mode 100644
index 000000000..cce320bd7
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e468m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e468m17/fenzDisplay.v b/src/Specific/montgomery64_2e468m17/fenzDisplay.v
new file mode 100644
index 000000000..8c6195ac8
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e468m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e468m17/feopp.v b/src/Specific/montgomery64_2e468m17/feopp.v
new file mode 100644
index 000000000..bd4834744
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e468m17/feoppDisplay.v b/src/Specific/montgomery64_2e468m17/feoppDisplay.v
new file mode 100644
index 000000000..3543fd021
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e468m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e468m17/fesub.v b/src/Specific/montgomery64_2e468m17/fesub.v
new file mode 100644
index 000000000..a5b6e41d7
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e468m17/fesubDisplay.v b/src/Specific/montgomery64_2e468m17/fesubDisplay.v
new file mode 100644
index 000000000..692ad3da6
--- /dev/null
+++ b/src/Specific/montgomery64_2e468m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e468m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e480m2e240m1/CurveParameters.v b/src/Specific/montgomery64_2e480m2e240m1/CurveParameters.v
new file mode 100644
index 000000000..2253d41e9
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^480 - 2^240 - 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^480;
+ c := [(1, 1); (2^240, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some true;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e480m2e240m1/Synthesis.v b/src/Specific/montgomery64_2e480m2e240m1/Synthesis.v
new file mode 100644
index 000000000..08074ab67
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e480m2e240m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e480m2e240m1/compiler.sh b/src/Specific/montgomery64_2e480m2e240m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e480m2e240m1/feadd.v b/src/Specific/montgomery64_2e480m2e240m1/feadd.v
new file mode 100644
index 000000000..23e99375d
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e480m2e240m1/feaddDisplay.v b/src/Specific/montgomery64_2e480m2e240m1/feaddDisplay.v
new file mode 100644
index 000000000..9adbcbe3e
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e480m2e240m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e480m2e240m1/femul.v b/src/Specific/montgomery64_2e480m2e240m1/femul.v
new file mode 100644
index 000000000..e8680f316
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e480m2e240m1/femulDisplay.v b/src/Specific/montgomery64_2e480m2e240m1/femulDisplay.v
new file mode 100644
index 000000000..b46d419c7
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e480m2e240m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e480m2e240m1/fenz.v b/src/Specific/montgomery64_2e480m2e240m1/fenz.v
new file mode 100644
index 000000000..026b66961
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e480m2e240m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e480m2e240m1/fenzDisplay.v b/src/Specific/montgomery64_2e480m2e240m1/fenzDisplay.v
new file mode 100644
index 000000000..a4585a8db
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e480m2e240m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e480m2e240m1/feopp.v b/src/Specific/montgomery64_2e480m2e240m1/feopp.v
new file mode 100644
index 000000000..4b83cc490
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e480m2e240m1/feoppDisplay.v b/src/Specific/montgomery64_2e480m2e240m1/feoppDisplay.v
new file mode 100644
index 000000000..abb79f39b
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e480m2e240m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e480m2e240m1/fesub.v b/src/Specific/montgomery64_2e480m2e240m1/fesub.v
new file mode 100644
index 000000000..9b045e201
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e480m2e240m1/fesubDisplay.v b/src/Specific/montgomery64_2e480m2e240m1/fesubDisplay.v
new file mode 100644
index 000000000..9cabac3ba
--- /dev/null
+++ b/src/Specific/montgomery64_2e480m2e240m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e480m2e240m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e488m17/CurveParameters.v b/src/Specific/montgomery64_2e488m17/CurveParameters.v
new file mode 100644
index 000000000..cf9e878f3
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^488 - 17
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^488;
+ c := [(1, 17)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e488m17/Synthesis.v b/src/Specific/montgomery64_2e488m17/Synthesis.v
new file mode 100644
index 000000000..06e1dc657
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e488m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e488m17/compiler.sh b/src/Specific/montgomery64_2e488m17/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e488m17/feadd.v b/src/Specific/montgomery64_2e488m17/feadd.v
new file mode 100644
index 000000000..970c5ce89
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e488m17/feaddDisplay.v b/src/Specific/montgomery64_2e488m17/feaddDisplay.v
new file mode 100644
index 000000000..8c1ecefab
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e488m17.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e488m17/femul.v b/src/Specific/montgomery64_2e488m17/femul.v
new file mode 100644
index 000000000..6579ced96
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e488m17/femulDisplay.v b/src/Specific/montgomery64_2e488m17/femulDisplay.v
new file mode 100644
index 000000000..dcc370045
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e488m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e488m17/fenz.v b/src/Specific/montgomery64_2e488m17/fenz.v
new file mode 100644
index 000000000..840bca18c
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e488m17.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e488m17/fenzDisplay.v b/src/Specific/montgomery64_2e488m17/fenzDisplay.v
new file mode 100644
index 000000000..b881b698e
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e488m17.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e488m17/feopp.v b/src/Specific/montgomery64_2e488m17/feopp.v
new file mode 100644
index 000000000..23ffa7f7b
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e488m17/feoppDisplay.v b/src/Specific/montgomery64_2e488m17/feoppDisplay.v
new file mode 100644
index 000000000..ad6fec8ba
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e488m17.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e488m17/fesub.v b/src/Specific/montgomery64_2e488m17/fesub.v
new file mode 100644
index 000000000..29cb4171d
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e488m17/fesubDisplay.v b/src/Specific/montgomery64_2e488m17/fesubDisplay.v
new file mode 100644
index 000000000..bc88a45ca
--- /dev/null
+++ b/src/Specific/montgomery64_2e488m17/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e488m17.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e489m21/CurveParameters.v b/src/Specific/montgomery64_2e489m21/CurveParameters.v
new file mode 100644
index 000000000..492fb558a
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^489 - 21
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^489;
+ c := [(1, 21)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e489m21/Synthesis.v b/src/Specific/montgomery64_2e489m21/Synthesis.v
new file mode 100644
index 000000000..9846ddf4e
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e489m21.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e489m21/compiler.sh b/src/Specific/montgomery64_2e489m21/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e489m21/feadd.v b/src/Specific/montgomery64_2e489m21/feadd.v
new file mode 100644
index 000000000..671959684
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e489m21/feaddDisplay.v b/src/Specific/montgomery64_2e489m21/feaddDisplay.v
new file mode 100644
index 000000000..f1226f0cf
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e489m21.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e489m21/femul.v b/src/Specific/montgomery64_2e489m21/femul.v
new file mode 100644
index 000000000..951e8b7ee
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e489m21/femulDisplay.v b/src/Specific/montgomery64_2e489m21/femulDisplay.v
new file mode 100644
index 000000000..af0689ba9
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e489m21.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e489m21/fenz.v b/src/Specific/montgomery64_2e489m21/fenz.v
new file mode 100644
index 000000000..2832a45d6
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e489m21.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e489m21/fenzDisplay.v b/src/Specific/montgomery64_2e489m21/fenzDisplay.v
new file mode 100644
index 000000000..1ac2aa440
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e489m21.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e489m21/feopp.v b/src/Specific/montgomery64_2e489m21/feopp.v
new file mode 100644
index 000000000..45bf9ac45
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e489m21/feoppDisplay.v b/src/Specific/montgomery64_2e489m21/feoppDisplay.v
new file mode 100644
index 000000000..0c0a57f45
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e489m21.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e489m21/fesub.v b/src/Specific/montgomery64_2e489m21/fesub.v
new file mode 100644
index 000000000..c6658294f
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e489m21/fesubDisplay.v b/src/Specific/montgomery64_2e489m21/fesubDisplay.v
new file mode 100644
index 000000000..94bdcf6f0
--- /dev/null
+++ b/src/Specific/montgomery64_2e489m21/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e489m21.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e495m31/CurveParameters.v b/src/Specific/montgomery64_2e495m31/CurveParameters.v
new file mode 100644
index 000000000..223a60eae
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^495 - 31
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^495;
+ c := [(1, 31)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e495m31/Synthesis.v b/src/Specific/montgomery64_2e495m31/Synthesis.v
new file mode 100644
index 000000000..9e79de917
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e495m31.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e495m31/compiler.sh b/src/Specific/montgomery64_2e495m31/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e495m31/feadd.v b/src/Specific/montgomery64_2e495m31/feadd.v
new file mode 100644
index 000000000..0fbe1434d
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e495m31/feaddDisplay.v b/src/Specific/montgomery64_2e495m31/feaddDisplay.v
new file mode 100644
index 000000000..8d82ae354
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e495m31.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e495m31/femul.v b/src/Specific/montgomery64_2e495m31/femul.v
new file mode 100644
index 000000000..9ccf40ea8
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e495m31/femulDisplay.v b/src/Specific/montgomery64_2e495m31/femulDisplay.v
new file mode 100644
index 000000000..2a07e798a
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e495m31.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e495m31/fenz.v b/src/Specific/montgomery64_2e495m31/fenz.v
new file mode 100644
index 000000000..1afb90fb6
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e495m31.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e495m31/fenzDisplay.v b/src/Specific/montgomery64_2e495m31/fenzDisplay.v
new file mode 100644
index 000000000..1eefbf474
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e495m31.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e495m31/feopp.v b/src/Specific/montgomery64_2e495m31/feopp.v
new file mode 100644
index 000000000..9fe311bbb
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e495m31/feoppDisplay.v b/src/Specific/montgomery64_2e495m31/feoppDisplay.v
new file mode 100644
index 000000000..a5cb704e7
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e495m31.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e495m31/fesub.v b/src/Specific/montgomery64_2e495m31/fesub.v
new file mode 100644
index 000000000..aa74af709
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e495m31/fesubDisplay.v b/src/Specific/montgomery64_2e495m31/fesubDisplay.v
new file mode 100644
index 000000000..93419f3a9
--- /dev/null
+++ b/src/Specific/montgomery64_2e495m31/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e495m31.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e511m187/CurveParameters.v b/src/Specific/montgomery64_2e511m187/CurveParameters.v
new file mode 100644
index 000000000..67ebc276e
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^511 - 187
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^511;
+ c := [(1, 187)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e511m187/Synthesis.v b/src/Specific/montgomery64_2e511m187/Synthesis.v
new file mode 100644
index 000000000..e29e9b71e
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e511m187.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e511m187/compiler.sh b/src/Specific/montgomery64_2e511m187/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e511m187/feadd.v b/src/Specific/montgomery64_2e511m187/feadd.v
new file mode 100644
index 000000000..4433946b9
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e511m187/feaddDisplay.v b/src/Specific/montgomery64_2e511m187/feaddDisplay.v
new file mode 100644
index 000000000..c41bca7b7
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e511m187.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e511m187/femul.v b/src/Specific/montgomery64_2e511m187/femul.v
new file mode 100644
index 000000000..406435f7d
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e511m187/femulDisplay.v b/src/Specific/montgomery64_2e511m187/femulDisplay.v
new file mode 100644
index 000000000..46b1061c4
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e511m187.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e511m187/fenz.v b/src/Specific/montgomery64_2e511m187/fenz.v
new file mode 100644
index 000000000..fa1a9b096
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e511m187.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e511m187/fenzDisplay.v b/src/Specific/montgomery64_2e511m187/fenzDisplay.v
new file mode 100644
index 000000000..e0cc09991
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e511m187.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e511m187/feopp.v b/src/Specific/montgomery64_2e511m187/feopp.v
new file mode 100644
index 000000000..9b891405e
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e511m187/feoppDisplay.v b/src/Specific/montgomery64_2e511m187/feoppDisplay.v
new file mode 100644
index 000000000..ca250cf38
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e511m187.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e511m187/fesub.v b/src/Specific/montgomery64_2e511m187/fesub.v
new file mode 100644
index 000000000..2517f6031
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e511m187/fesubDisplay.v b/src/Specific/montgomery64_2e511m187/fesubDisplay.v
new file mode 100644
index 000000000..2b47951c4
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m187/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e511m187.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e511m481/CurveParameters.v b/src/Specific/montgomery64_2e511m481/CurveParameters.v
new file mode 100644
index 000000000..d989ba385
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^511 - 481
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^511;
+ c := [(1, 481)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e511m481/Synthesis.v b/src/Specific/montgomery64_2e511m481/Synthesis.v
new file mode 100644
index 000000000..1905f33da
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e511m481.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e511m481/compiler.sh b/src/Specific/montgomery64_2e511m481/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e511m481/feadd.v b/src/Specific/montgomery64_2e511m481/feadd.v
new file mode 100644
index 000000000..a74238b47
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e511m481/feaddDisplay.v b/src/Specific/montgomery64_2e511m481/feaddDisplay.v
new file mode 100644
index 000000000..5bb47248a
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e511m481.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e511m481/femul.v b/src/Specific/montgomery64_2e511m481/femul.v
new file mode 100644
index 000000000..d338a155f
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e511m481/femulDisplay.v b/src/Specific/montgomery64_2e511m481/femulDisplay.v
new file mode 100644
index 000000000..7dbede50a
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e511m481.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e511m481/fenz.v b/src/Specific/montgomery64_2e511m481/fenz.v
new file mode 100644
index 000000000..73ec21ce6
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e511m481.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e511m481/fenzDisplay.v b/src/Specific/montgomery64_2e511m481/fenzDisplay.v
new file mode 100644
index 000000000..e2eedb4b4
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e511m481.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e511m481/feopp.v b/src/Specific/montgomery64_2e511m481/feopp.v
new file mode 100644
index 000000000..512430b22
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e511m481/feoppDisplay.v b/src/Specific/montgomery64_2e511m481/feoppDisplay.v
new file mode 100644
index 000000000..a75e327c7
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e511m481.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e511m481/fesub.v b/src/Specific/montgomery64_2e511m481/fesub.v
new file mode 100644
index 000000000..9878bd8af
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e511m481/fesubDisplay.v b/src/Specific/montgomery64_2e511m481/fesubDisplay.v
new file mode 100644
index 000000000..1fa2d280c
--- /dev/null
+++ b/src/Specific/montgomery64_2e511m481/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e511m481.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e512m569/CurveParameters.v b/src/Specific/montgomery64_2e512m569/CurveParameters.v
new file mode 100644
index 000000000..13caf487e
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^512 - 569
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 64;
+ s := 2^512;
+ c := [(1, 569)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e512m569/Synthesis.v b/src/Specific/montgomery64_2e512m569/Synthesis.v
new file mode 100644
index 000000000..bd527400e
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e512m569.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e512m569/compiler.sh b/src/Specific/montgomery64_2e512m569/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e512m569/feadd.v b/src/Specific/montgomery64_2e512m569/feadd.v
new file mode 100644
index 000000000..5b23fe324
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e512m569/feaddDisplay.v b/src/Specific/montgomery64_2e512m569/feaddDisplay.v
new file mode 100644
index 000000000..2b00ba4d3
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e512m569.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e512m569/femul.v b/src/Specific/montgomery64_2e512m569/femul.v
new file mode 100644
index 000000000..02d76f2b6
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e512m569/femulDisplay.v b/src/Specific/montgomery64_2e512m569/femulDisplay.v
new file mode 100644
index 000000000..d0cbd9503
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e512m569.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e512m569/fenz.v b/src/Specific/montgomery64_2e512m569/fenz.v
new file mode 100644
index 000000000..468b8a09c
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e512m569.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e512m569/fenzDisplay.v b/src/Specific/montgomery64_2e512m569/fenzDisplay.v
new file mode 100644
index 000000000..2c0e5f649
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e512m569.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e512m569/feopp.v b/src/Specific/montgomery64_2e512m569/feopp.v
new file mode 100644
index 000000000..d474723cc
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e512m569/feoppDisplay.v b/src/Specific/montgomery64_2e512m569/feoppDisplay.v
new file mode 100644
index 000000000..3a8d8f6fd
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e512m569.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e512m569/fesub.v b/src/Specific/montgomery64_2e512m569/fesub.v
new file mode 100644
index 000000000..509bb41b6
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e512m569/fesubDisplay.v b/src/Specific/montgomery64_2e512m569/fesubDisplay.v
new file mode 100644
index 000000000..bf14aeafa
--- /dev/null
+++ b/src/Specific/montgomery64_2e512m569/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e512m569.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/montgomery64_2e521m1/CurveParameters.v b/src/Specific/montgomery64_2e521m1/CurveParameters.v
new file mode 100644
index 000000000..bdb86dec8
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^521 - 1
+Base: 64
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 64;
+ s := 2^521;
+ c := [(1, 1)];
+ carry_chains := None;
+
+ a24 := None;
+ coef_div_modulus := None;
+
+ goldilocks := Some false;
+ montgomery := true;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/montgomery64_2e521m1/Synthesis.v b/src/Specific/montgomery64_2e521m1/Synthesis.v
new file mode 100644
index 000000000..4960e82a1
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.montgomery64_2e521m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/montgomery64_2e521m1/compiler.sh b/src/Specific/montgomery64_2e521m1/compiler.sh
new file mode 100755
index 000000000..518f95765
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -fno-peephole2 `#GCC BUG 81300` -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes -Wno-incompatible-pointer-types -fno-strict-aliasing "$@"
diff --git a/src/Specific/montgomery64_2e521m1/feadd.v b/src/Specific/montgomery64_2e521m1/feadd.v
new file mode 100644
index 000000000..0c57e4e37
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/feadd.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition add :
+ { add : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (add a b) = F.add (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_add ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions add.
diff --git a/src/Specific/montgomery64_2e521m1/feaddDisplay.v b/src/Specific/montgomery64_2e521m1/feaddDisplay.v
new file mode 100644
index 000000000..fbf8b42bb
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/feaddDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e521m1.feadd.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display add.
diff --git a/src/Specific/montgomery64_2e521m1/femul.v b/src/Specific/montgomery64_2e521m1/femul.v
new file mode 100644
index 000000000..98c61ac1a
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (mul a b) = F.mul (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/montgomery64_2e521m1/femulDisplay.v b/src/Specific/montgomery64_2e521m1/femulDisplay.v
new file mode 100644
index 000000000..7fd2957a5
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e521m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/montgomery64_2e521m1/fenz.v b/src/Specific/montgomery64_2e521m1/fenz.v
new file mode 100644
index 000000000..f8599f255
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/fenz.v
@@ -0,0 +1,16 @@
+Require Import Coq.ZArith.ZArith.
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e521m1.Synthesis.
+Local Open Scope Z_scope.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition nonzero :
+ { nonzero : feBW_small -> BoundedWord.BoundedWord 1 adjusted_bitwidth bound1
+ | forall a, (BoundedWord.BoundedWordToZ _ _ _ (nonzero a) =? 0) = (if Decidable.dec (phiM_small a = F.of_Z m 0) then true else false) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_nonzero ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions nonzero.
diff --git a/src/Specific/montgomery64_2e521m1/fenzDisplay.v b/src/Specific/montgomery64_2e521m1/fenzDisplay.v
new file mode 100644
index 000000000..0ae3e8249
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/fenzDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e521m1.fenz.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display nonzero.
diff --git a/src/Specific/montgomery64_2e521m1/feopp.v b/src/Specific/montgomery64_2e521m1/feopp.v
new file mode 100644
index 000000000..0955d475b
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/feopp.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition opp :
+ { opp : feBW_small -> feBW_small
+ | forall a, phiM_small (opp a) = F.opp (phiM_small a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_opp ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions opp.
diff --git a/src/Specific/montgomery64_2e521m1/feoppDisplay.v b/src/Specific/montgomery64_2e521m1/feoppDisplay.v
new file mode 100644
index 000000000..d6053fd7f
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/feoppDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e521m1.feopp.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display opp.
diff --git a/src/Specific/montgomery64_2e521m1/fesub.v b/src/Specific/montgomery64_2e521m1/fesub.v
new file mode 100644
index 000000000..e05110bc1
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/fesub.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.montgomery64_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition sub :
+ { sub : feBW_small -> feBW_small -> feBW_small
+ | forall a b, phiM_small (sub a b) = F.sub (phiM_small a) (phiM_small b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_sub ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions sub.
diff --git a/src/Specific/montgomery64_2e521m1/fesubDisplay.v b/src/Specific/montgomery64_2e521m1/fesubDisplay.v
new file mode 100644
index 000000000..831974f7c
--- /dev/null
+++ b/src/Specific/montgomery64_2e521m1/fesubDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.montgomery64_2e521m1.fesub.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display sub.
diff --git a/src/Specific/solinas32_2e127m1/CurveParameters.v b/src/Specific/solinas32_2e127m1/CurveParameters.v
new file mode 100644
index 000000000..a3aeb5dad
--- /dev/null
+++ b/src/Specific/solinas32_2e127m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^127 - 1
+Base: 21
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^127;
+ c := [(1, 1)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e127m1/Synthesis.v b/src/Specific/solinas32_2e127m1/Synthesis.v
new file mode 100644
index 000000000..ee9097cb9
--- /dev/null
+++ b/src/Specific/solinas32_2e127m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e127m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e127m1/compiler.sh b/src/Specific/solinas32_2e127m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e127m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e127m1/femul.v b/src/Specific/solinas32_2e127m1/femul.v
new file mode 100644
index 000000000..1c3a2c353
--- /dev/null
+++ b/src/Specific/solinas32_2e127m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e127m1/femulDisplay.v b/src/Specific/solinas32_2e127m1/femulDisplay.v
new file mode 100644
index 000000000..98e277067
--- /dev/null
+++ b/src/Specific/solinas32_2e127m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e127m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e127m1/fesquare.v b/src/Specific/solinas32_2e127m1/fesquare.v
new file mode 100644
index 000000000..7e43a2b03
--- /dev/null
+++ b/src/Specific/solinas32_2e127m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e127m1/fesquareDisplay.v b/src/Specific/solinas32_2e127m1/fesquareDisplay.v
new file mode 100644
index 000000000..779aecec9
--- /dev/null
+++ b/src/Specific/solinas32_2e127m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e127m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e127m1/freeze.v b/src/Specific/solinas32_2e127m1/freeze.v
new file mode 100644
index 000000000..8bdb676ee
--- /dev/null
+++ b/src/Specific/solinas32_2e127m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e127m1/freezeDisplay.v b/src/Specific/solinas32_2e127m1/freezeDisplay.v
new file mode 100644
index 000000000..0a366a457
--- /dev/null
+++ b/src/Specific/solinas32_2e127m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e127m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e129m25/CurveParameters.v b/src/Specific/solinas32_2e129m25/CurveParameters.v
new file mode 100644
index 000000000..1e1f480b2
--- /dev/null
+++ b/src/Specific/solinas32_2e129m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^129 - 25
+Base: 21
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^129;
+ c := [(1, 25)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e129m25/Synthesis.v b/src/Specific/solinas32_2e129m25/Synthesis.v
new file mode 100644
index 000000000..e18c491bb
--- /dev/null
+++ b/src/Specific/solinas32_2e129m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e129m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e129m25/compiler.sh b/src/Specific/solinas32_2e129m25/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e129m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e129m25/femul.v b/src/Specific/solinas32_2e129m25/femul.v
new file mode 100644
index 000000000..6816ecea0
--- /dev/null
+++ b/src/Specific/solinas32_2e129m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e129m25/femulDisplay.v b/src/Specific/solinas32_2e129m25/femulDisplay.v
new file mode 100644
index 000000000..909f1061b
--- /dev/null
+++ b/src/Specific/solinas32_2e129m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e129m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e129m25/fesquare.v b/src/Specific/solinas32_2e129m25/fesquare.v
new file mode 100644
index 000000000..57dfc3787
--- /dev/null
+++ b/src/Specific/solinas32_2e129m25/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e129m25/fesquareDisplay.v b/src/Specific/solinas32_2e129m25/fesquareDisplay.v
new file mode 100644
index 000000000..c6482a867
--- /dev/null
+++ b/src/Specific/solinas32_2e129m25/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e129m25.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e129m25/freeze.v b/src/Specific/solinas32_2e129m25/freeze.v
new file mode 100644
index 000000000..50a151139
--- /dev/null
+++ b/src/Specific/solinas32_2e129m25/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e129m25/freezeDisplay.v b/src/Specific/solinas32_2e129m25/freezeDisplay.v
new file mode 100644
index 000000000..38a002bbf
--- /dev/null
+++ b/src/Specific/solinas32_2e129m25/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e129m25.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e130m5/CurveParameters.v b/src/Specific/solinas32_2e130m5/CurveParameters.v
new file mode 100644
index 000000000..30dbf2e00
--- /dev/null
+++ b/src/Specific/solinas32_2e130m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^130 - 5
+Base: 16
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 32;
+ s := 2^130;
+ c := [(1, 5)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e130m5/Synthesis.v b/src/Specific/solinas32_2e130m5/Synthesis.v
new file mode 100644
index 000000000..33378ebd4
--- /dev/null
+++ b/src/Specific/solinas32_2e130m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e130m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e130m5/compiler.sh b/src/Specific/solinas32_2e130m5/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e130m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e130m5/femul.v b/src/Specific/solinas32_2e130m5/femul.v
new file mode 100644
index 000000000..9f234b301
--- /dev/null
+++ b/src/Specific/solinas32_2e130m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e130m5/femulDisplay.v b/src/Specific/solinas32_2e130m5/femulDisplay.v
new file mode 100644
index 000000000..f23d03acf
--- /dev/null
+++ b/src/Specific/solinas32_2e130m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e130m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e130m5/fesquare.v b/src/Specific/solinas32_2e130m5/fesquare.v
new file mode 100644
index 000000000..90a4b378d
--- /dev/null
+++ b/src/Specific/solinas32_2e130m5/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e130m5/fesquareDisplay.v b/src/Specific/solinas32_2e130m5/fesquareDisplay.v
new file mode 100644
index 000000000..003792d39
--- /dev/null
+++ b/src/Specific/solinas32_2e130m5/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e130m5.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e130m5/freeze.v b/src/Specific/solinas32_2e130m5/freeze.v
new file mode 100644
index 000000000..b5b6fdb96
--- /dev/null
+++ b/src/Specific/solinas32_2e130m5/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e130m5/freezeDisplay.v b/src/Specific/solinas32_2e130m5/freezeDisplay.v
new file mode 100644
index 000000000..f8e4e9dce
--- /dev/null
+++ b/src/Specific/solinas32_2e130m5/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e130m5.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e137m13/CurveParameters.v b/src/Specific/solinas32_2e137m13/CurveParameters.v
new file mode 100644
index 000000000..13a61ff27
--- /dev/null
+++ b/src/Specific/solinas32_2e137m13/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^137 - 13
+Base: 17
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 32;
+ s := 2^137;
+ c := [(1, 13)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e137m13/Synthesis.v b/src/Specific/solinas32_2e137m13/Synthesis.v
new file mode 100644
index 000000000..0378a82e4
--- /dev/null
+++ b/src/Specific/solinas32_2e137m13/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e137m13.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e137m13/compiler.sh b/src/Specific/solinas32_2e137m13/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e137m13/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e137m13/femul.v b/src/Specific/solinas32_2e137m13/femul.v
new file mode 100644
index 000000000..9f1d4486a
--- /dev/null
+++ b/src/Specific/solinas32_2e137m13/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e137m13/femulDisplay.v b/src/Specific/solinas32_2e137m13/femulDisplay.v
new file mode 100644
index 000000000..2cbe850b1
--- /dev/null
+++ b/src/Specific/solinas32_2e137m13/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e137m13.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e137m13/fesquare.v b/src/Specific/solinas32_2e137m13/fesquare.v
new file mode 100644
index 000000000..b04989155
--- /dev/null
+++ b/src/Specific/solinas32_2e137m13/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e137m13/fesquareDisplay.v b/src/Specific/solinas32_2e137m13/fesquareDisplay.v
new file mode 100644
index 000000000..77ae64260
--- /dev/null
+++ b/src/Specific/solinas32_2e137m13/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e137m13.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e137m13/freeze.v b/src/Specific/solinas32_2e137m13/freeze.v
new file mode 100644
index 000000000..ff4372c81
--- /dev/null
+++ b/src/Specific/solinas32_2e137m13/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e137m13/freezeDisplay.v b/src/Specific/solinas32_2e137m13/freezeDisplay.v
new file mode 100644
index 000000000..db6a7cccf
--- /dev/null
+++ b/src/Specific/solinas32_2e137m13/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e137m13.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e140m27/CurveParameters.v b/src/Specific/solinas32_2e140m27/CurveParameters.v
new file mode 100644
index 000000000..7704604d7
--- /dev/null
+++ b/src/Specific/solinas32_2e140m27/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^140 - 27
+Base: 20
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 32;
+ s := 2^140;
+ c := [(1, 27)];
+ carry_chains := Some [seq 0 (pred 7); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e140m27/Synthesis.v b/src/Specific/solinas32_2e140m27/Synthesis.v
new file mode 100644
index 000000000..3ae0364e9
--- /dev/null
+++ b/src/Specific/solinas32_2e140m27/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e140m27.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e140m27/compiler.sh b/src/Specific/solinas32_2e140m27/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e140m27/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e140m27/femul.v b/src/Specific/solinas32_2e140m27/femul.v
new file mode 100644
index 000000000..8aedd4b4c
--- /dev/null
+++ b/src/Specific/solinas32_2e140m27/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e140m27/femulDisplay.v b/src/Specific/solinas32_2e140m27/femulDisplay.v
new file mode 100644
index 000000000..7df537684
--- /dev/null
+++ b/src/Specific/solinas32_2e140m27/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e140m27.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e140m27/fesquare.v b/src/Specific/solinas32_2e140m27/fesquare.v
new file mode 100644
index 000000000..4ad1bfc42
--- /dev/null
+++ b/src/Specific/solinas32_2e140m27/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e140m27/fesquareDisplay.v b/src/Specific/solinas32_2e140m27/fesquareDisplay.v
new file mode 100644
index 000000000..7c927e5b2
--- /dev/null
+++ b/src/Specific/solinas32_2e140m27/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e140m27.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e140m27/freeze.v b/src/Specific/solinas32_2e140m27/freeze.v
new file mode 100644
index 000000000..448722b71
--- /dev/null
+++ b/src/Specific/solinas32_2e140m27/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e140m27/freezeDisplay.v b/src/Specific/solinas32_2e140m27/freezeDisplay.v
new file mode 100644
index 000000000..c8812a5c1
--- /dev/null
+++ b/src/Specific/solinas32_2e140m27/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e140m27.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e141m9/CurveParameters.v b/src/Specific/solinas32_2e141m9/CurveParameters.v
new file mode 100644
index 000000000..443201dc7
--- /dev/null
+++ b/src/Specific/solinas32_2e141m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^141 - 9
+Base: 20
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 32;
+ s := 2^141;
+ c := [(1, 9)];
+ carry_chains := Some [seq 0 (pred 7); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e141m9/Synthesis.v b/src/Specific/solinas32_2e141m9/Synthesis.v
new file mode 100644
index 000000000..8a206c247
--- /dev/null
+++ b/src/Specific/solinas32_2e141m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e141m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e141m9/compiler.sh b/src/Specific/solinas32_2e141m9/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e141m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e141m9/femul.v b/src/Specific/solinas32_2e141m9/femul.v
new file mode 100644
index 000000000..b2f540aee
--- /dev/null
+++ b/src/Specific/solinas32_2e141m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e141m9/femulDisplay.v b/src/Specific/solinas32_2e141m9/femulDisplay.v
new file mode 100644
index 000000000..fad1a0bac
--- /dev/null
+++ b/src/Specific/solinas32_2e141m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e141m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e141m9/fesquare.v b/src/Specific/solinas32_2e141m9/fesquare.v
new file mode 100644
index 000000000..dca3e27df
--- /dev/null
+++ b/src/Specific/solinas32_2e141m9/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e141m9/fesquareDisplay.v b/src/Specific/solinas32_2e141m9/fesquareDisplay.v
new file mode 100644
index 000000000..3b1d3f111
--- /dev/null
+++ b/src/Specific/solinas32_2e141m9/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e141m9.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e141m9/freeze.v b/src/Specific/solinas32_2e141m9/freeze.v
new file mode 100644
index 000000000..99baddf4d
--- /dev/null
+++ b/src/Specific/solinas32_2e141m9/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e141m9/freezeDisplay.v b/src/Specific/solinas32_2e141m9/freezeDisplay.v
new file mode 100644
index 000000000..ccb04a579
--- /dev/null
+++ b/src/Specific/solinas32_2e141m9/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e141m9.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e150m3/CurveParameters.v b/src/Specific/solinas32_2e150m3/CurveParameters.v
new file mode 100644
index 000000000..70f68572c
--- /dev/null
+++ b/src/Specific/solinas32_2e150m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^150 - 3
+Base: 25
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 32;
+ s := 2^150;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e150m3/Synthesis.v b/src/Specific/solinas32_2e150m3/Synthesis.v
new file mode 100644
index 000000000..09abeb630
--- /dev/null
+++ b/src/Specific/solinas32_2e150m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e150m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e150m3/compiler.sh b/src/Specific/solinas32_2e150m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e150m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e150m3/femul.v b/src/Specific/solinas32_2e150m3/femul.v
new file mode 100644
index 000000000..de367af09
--- /dev/null
+++ b/src/Specific/solinas32_2e150m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e150m3/femulDisplay.v b/src/Specific/solinas32_2e150m3/femulDisplay.v
new file mode 100644
index 000000000..4e0acc2b9
--- /dev/null
+++ b/src/Specific/solinas32_2e150m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e150m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e150m3/fesquare.v b/src/Specific/solinas32_2e150m3/fesquare.v
new file mode 100644
index 000000000..56f6137cf
--- /dev/null
+++ b/src/Specific/solinas32_2e150m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e150m3/fesquareDisplay.v b/src/Specific/solinas32_2e150m3/fesquareDisplay.v
new file mode 100644
index 000000000..986c8c7ab
--- /dev/null
+++ b/src/Specific/solinas32_2e150m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e150m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e150m3/freeze.v b/src/Specific/solinas32_2e150m3/freeze.v
new file mode 100644
index 000000000..af714037e
--- /dev/null
+++ b/src/Specific/solinas32_2e150m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e150m3/freezeDisplay.v b/src/Specific/solinas32_2e150m3/freezeDisplay.v
new file mode 100644
index 000000000..dbdc80a99
--- /dev/null
+++ b/src/Specific/solinas32_2e150m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e150m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e150m5/CurveParameters.v b/src/Specific/solinas32_2e150m5/CurveParameters.v
new file mode 100644
index 000000000..5f65326ff
--- /dev/null
+++ b/src/Specific/solinas32_2e150m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^150 - 5
+Base: 15
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^150;
+ c := [(1, 5)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e150m5/Synthesis.v b/src/Specific/solinas32_2e150m5/Synthesis.v
new file mode 100644
index 000000000..605446fa9
--- /dev/null
+++ b/src/Specific/solinas32_2e150m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e150m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e150m5/compiler.sh b/src/Specific/solinas32_2e150m5/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e150m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e150m5/femul.v b/src/Specific/solinas32_2e150m5/femul.v
new file mode 100644
index 000000000..75b6a5e62
--- /dev/null
+++ b/src/Specific/solinas32_2e150m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e150m5/femulDisplay.v b/src/Specific/solinas32_2e150m5/femulDisplay.v
new file mode 100644
index 000000000..f56bdc815
--- /dev/null
+++ b/src/Specific/solinas32_2e150m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e150m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e150m5/fesquare.v b/src/Specific/solinas32_2e150m5/fesquare.v
new file mode 100644
index 000000000..537a22e85
--- /dev/null
+++ b/src/Specific/solinas32_2e150m5/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e150m5/fesquareDisplay.v b/src/Specific/solinas32_2e150m5/fesquareDisplay.v
new file mode 100644
index 000000000..bd87139e9
--- /dev/null
+++ b/src/Specific/solinas32_2e150m5/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e150m5.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e150m5/freeze.v b/src/Specific/solinas32_2e150m5/freeze.v
new file mode 100644
index 000000000..2094f6a3f
--- /dev/null
+++ b/src/Specific/solinas32_2e150m5/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e150m5/freezeDisplay.v b/src/Specific/solinas32_2e150m5/freezeDisplay.v
new file mode 100644
index 000000000..fd790e80a
--- /dev/null
+++ b/src/Specific/solinas32_2e150m5/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e150m5.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e152m17/CurveParameters.v b/src/Specific/solinas32_2e152m17/CurveParameters.v
new file mode 100644
index 000000000..162c9a176
--- /dev/null
+++ b/src/Specific/solinas32_2e152m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^152 - 17
+Base: 19
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 32;
+ s := 2^152;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e152m17/Synthesis.v b/src/Specific/solinas32_2e152m17/Synthesis.v
new file mode 100644
index 000000000..4be919691
--- /dev/null
+++ b/src/Specific/solinas32_2e152m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e152m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e152m17/compiler.sh b/src/Specific/solinas32_2e152m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e152m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e152m17/femul.v b/src/Specific/solinas32_2e152m17/femul.v
new file mode 100644
index 000000000..0f700e6b4
--- /dev/null
+++ b/src/Specific/solinas32_2e152m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e152m17/femulDisplay.v b/src/Specific/solinas32_2e152m17/femulDisplay.v
new file mode 100644
index 000000000..590302f59
--- /dev/null
+++ b/src/Specific/solinas32_2e152m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e152m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e152m17/fesquare.v b/src/Specific/solinas32_2e152m17/fesquare.v
new file mode 100644
index 000000000..cd5640ef2
--- /dev/null
+++ b/src/Specific/solinas32_2e152m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e152m17/fesquareDisplay.v b/src/Specific/solinas32_2e152m17/fesquareDisplay.v
new file mode 100644
index 000000000..9774af043
--- /dev/null
+++ b/src/Specific/solinas32_2e152m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e152m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e152m17/freeze.v b/src/Specific/solinas32_2e152m17/freeze.v
new file mode 100644
index 000000000..319afc260
--- /dev/null
+++ b/src/Specific/solinas32_2e152m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e152m17/freezeDisplay.v b/src/Specific/solinas32_2e152m17/freezeDisplay.v
new file mode 100644
index 000000000..91f3434c8
--- /dev/null
+++ b/src/Specific/solinas32_2e152m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e152m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e158m15/CurveParameters.v b/src/Specific/solinas32_2e158m15/CurveParameters.v
new file mode 100644
index 000000000..aac81cfc9
--- /dev/null
+++ b/src/Specific/solinas32_2e158m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^158 - 15
+Base: 13
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^158;
+ c := [(1, 15)];
+ carry_chains := Some [seq 0 (pred 12); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e158m15/Synthesis.v b/src/Specific/solinas32_2e158m15/Synthesis.v
new file mode 100644
index 000000000..1e631bf07
--- /dev/null
+++ b/src/Specific/solinas32_2e158m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e158m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e158m15/compiler.sh b/src/Specific/solinas32_2e158m15/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e158m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e158m15/femul.v b/src/Specific/solinas32_2e158m15/femul.v
new file mode 100644
index 000000000..5209984b7
--- /dev/null
+++ b/src/Specific/solinas32_2e158m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e158m15/femulDisplay.v b/src/Specific/solinas32_2e158m15/femulDisplay.v
new file mode 100644
index 000000000..9410e10c6
--- /dev/null
+++ b/src/Specific/solinas32_2e158m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e158m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e158m15/fesquare.v b/src/Specific/solinas32_2e158m15/fesquare.v
new file mode 100644
index 000000000..166ecb466
--- /dev/null
+++ b/src/Specific/solinas32_2e158m15/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e158m15/fesquareDisplay.v b/src/Specific/solinas32_2e158m15/fesquareDisplay.v
new file mode 100644
index 000000000..ead4ded23
--- /dev/null
+++ b/src/Specific/solinas32_2e158m15/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e158m15.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e158m15/freeze.v b/src/Specific/solinas32_2e158m15/freeze.v
new file mode 100644
index 000000000..b2ad46606
--- /dev/null
+++ b/src/Specific/solinas32_2e158m15/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e158m15/freezeDisplay.v b/src/Specific/solinas32_2e158m15/freezeDisplay.v
new file mode 100644
index 000000000..bfc8e4643
--- /dev/null
+++ b/src/Specific/solinas32_2e158m15/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e158m15.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e165m25/CurveParameters.v b/src/Specific/solinas32_2e165m25/CurveParameters.v
new file mode 100644
index 000000000..36c61dad1
--- /dev/null
+++ b/src/Specific/solinas32_2e165m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^165 - 25
+Base: 18
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 32;
+ s := 2^165;
+ c := [(1, 25)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e165m25/Synthesis.v b/src/Specific/solinas32_2e165m25/Synthesis.v
new file mode 100644
index 000000000..13f36158b
--- /dev/null
+++ b/src/Specific/solinas32_2e165m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e165m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e165m25/compiler.sh b/src/Specific/solinas32_2e165m25/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e165m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e165m25/femul.v b/src/Specific/solinas32_2e165m25/femul.v
new file mode 100644
index 000000000..1fdb1383f
--- /dev/null
+++ b/src/Specific/solinas32_2e165m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e165m25/femulDisplay.v b/src/Specific/solinas32_2e165m25/femulDisplay.v
new file mode 100644
index 000000000..2432077f9
--- /dev/null
+++ b/src/Specific/solinas32_2e165m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e165m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e165m25/fesquare.v b/src/Specific/solinas32_2e165m25/fesquare.v
new file mode 100644
index 000000000..791671999
--- /dev/null
+++ b/src/Specific/solinas32_2e165m25/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e165m25/fesquareDisplay.v b/src/Specific/solinas32_2e165m25/fesquareDisplay.v
new file mode 100644
index 000000000..a3ba6a992
--- /dev/null
+++ b/src/Specific/solinas32_2e165m25/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e165m25.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e165m25/freeze.v b/src/Specific/solinas32_2e165m25/freeze.v
new file mode 100644
index 000000000..5cc04e858
--- /dev/null
+++ b/src/Specific/solinas32_2e165m25/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e165m25/freezeDisplay.v b/src/Specific/solinas32_2e165m25/freezeDisplay.v
new file mode 100644
index 000000000..347bcfead
--- /dev/null
+++ b/src/Specific/solinas32_2e165m25/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e165m25.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e166m5/CurveParameters.v b/src/Specific/solinas32_2e166m5/CurveParameters.v
new file mode 100644
index 000000000..e95606dcb
--- /dev/null
+++ b/src/Specific/solinas32_2e166m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^166 - 5
+Base: 15
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 11%nat;
+ bitwidth := 32;
+ s := 2^166;
+ c := [(1, 5)];
+ carry_chains := Some [seq 0 (pred 11); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e166m5/Synthesis.v b/src/Specific/solinas32_2e166m5/Synthesis.v
new file mode 100644
index 000000000..610987342
--- /dev/null
+++ b/src/Specific/solinas32_2e166m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e166m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e166m5/compiler.sh b/src/Specific/solinas32_2e166m5/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e166m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e166m5/femul.v b/src/Specific/solinas32_2e166m5/femul.v
new file mode 100644
index 000000000..847c6182c
--- /dev/null
+++ b/src/Specific/solinas32_2e166m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e166m5/femulDisplay.v b/src/Specific/solinas32_2e166m5/femulDisplay.v
new file mode 100644
index 000000000..2cb72c9cb
--- /dev/null
+++ b/src/Specific/solinas32_2e166m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e166m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e166m5/fesquare.v b/src/Specific/solinas32_2e166m5/fesquare.v
new file mode 100644
index 000000000..29dd982ca
--- /dev/null
+++ b/src/Specific/solinas32_2e166m5/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e166m5/fesquareDisplay.v b/src/Specific/solinas32_2e166m5/fesquareDisplay.v
new file mode 100644
index 000000000..6df66ca58
--- /dev/null
+++ b/src/Specific/solinas32_2e166m5/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e166m5.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e166m5/freeze.v b/src/Specific/solinas32_2e166m5/freeze.v
new file mode 100644
index 000000000..2ac052e96
--- /dev/null
+++ b/src/Specific/solinas32_2e166m5/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e166m5/freezeDisplay.v b/src/Specific/solinas32_2e166m5/freezeDisplay.v
new file mode 100644
index 000000000..423a991b7
--- /dev/null
+++ b/src/Specific/solinas32_2e166m5/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e166m5.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e171m19/CurveParameters.v b/src/Specific/solinas32_2e171m19/CurveParameters.v
new file mode 100644
index 000000000..121c79854
--- /dev/null
+++ b/src/Specific/solinas32_2e171m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^171 - 19
+Base: 19
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 32;
+ s := 2^171;
+ c := [(1, 19)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e171m19/Synthesis.v b/src/Specific/solinas32_2e171m19/Synthesis.v
new file mode 100644
index 000000000..ab3e6fe72
--- /dev/null
+++ b/src/Specific/solinas32_2e171m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e171m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e171m19/compiler.sh b/src/Specific/solinas32_2e171m19/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e171m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e171m19/femul.v b/src/Specific/solinas32_2e171m19/femul.v
new file mode 100644
index 000000000..96915d4b3
--- /dev/null
+++ b/src/Specific/solinas32_2e171m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e171m19/femulDisplay.v b/src/Specific/solinas32_2e171m19/femulDisplay.v
new file mode 100644
index 000000000..55c49a7fb
--- /dev/null
+++ b/src/Specific/solinas32_2e171m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e171m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e171m19/fesquare.v b/src/Specific/solinas32_2e171m19/fesquare.v
new file mode 100644
index 000000000..47f8a9c43
--- /dev/null
+++ b/src/Specific/solinas32_2e171m19/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e171m19/fesquareDisplay.v b/src/Specific/solinas32_2e171m19/fesquareDisplay.v
new file mode 100644
index 000000000..b1287c429
--- /dev/null
+++ b/src/Specific/solinas32_2e171m19/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e171m19.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e171m19/freeze.v b/src/Specific/solinas32_2e171m19/freeze.v
new file mode 100644
index 000000000..d25a40367
--- /dev/null
+++ b/src/Specific/solinas32_2e171m19/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e171m19/freezeDisplay.v b/src/Specific/solinas32_2e171m19/freezeDisplay.v
new file mode 100644
index 000000000..ed7af8536
--- /dev/null
+++ b/src/Specific/solinas32_2e171m19/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e171m19.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e174m17/CurveParameters.v b/src/Specific/solinas32_2e174m17/CurveParameters.v
new file mode 100644
index 000000000..bb4d5900d
--- /dev/null
+++ b/src/Specific/solinas32_2e174m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^174 - 17
+Base: 19
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 32;
+ s := 2^174;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e174m17/Synthesis.v b/src/Specific/solinas32_2e174m17/Synthesis.v
new file mode 100644
index 000000000..f45a1cff6
--- /dev/null
+++ b/src/Specific/solinas32_2e174m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e174m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e174m17/compiler.sh b/src/Specific/solinas32_2e174m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e174m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e174m17/femul.v b/src/Specific/solinas32_2e174m17/femul.v
new file mode 100644
index 000000000..44f9e69e6
--- /dev/null
+++ b/src/Specific/solinas32_2e174m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e174m17/femulDisplay.v b/src/Specific/solinas32_2e174m17/femulDisplay.v
new file mode 100644
index 000000000..b259e470b
--- /dev/null
+++ b/src/Specific/solinas32_2e174m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e174m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e174m17/fesquare.v b/src/Specific/solinas32_2e174m17/fesquare.v
new file mode 100644
index 000000000..48edfcfa3
--- /dev/null
+++ b/src/Specific/solinas32_2e174m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e174m17/fesquareDisplay.v b/src/Specific/solinas32_2e174m17/fesquareDisplay.v
new file mode 100644
index 000000000..3c35ee539
--- /dev/null
+++ b/src/Specific/solinas32_2e174m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e174m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e174m17/freeze.v b/src/Specific/solinas32_2e174m17/freeze.v
new file mode 100644
index 000000000..240dc4539
--- /dev/null
+++ b/src/Specific/solinas32_2e174m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e174m17/freezeDisplay.v b/src/Specific/solinas32_2e174m17/freezeDisplay.v
new file mode 100644
index 000000000..ac4a2f80b
--- /dev/null
+++ b/src/Specific/solinas32_2e174m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e174m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e174m3/CurveParameters.v b/src/Specific/solinas32_2e174m3/CurveParameters.v
new file mode 100644
index 000000000..544b44105
--- /dev/null
+++ b/src/Specific/solinas32_2e174m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^174 - 3
+Base: 19
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 32;
+ s := 2^174;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e174m3/Synthesis.v b/src/Specific/solinas32_2e174m3/Synthesis.v
new file mode 100644
index 000000000..18ee7ec40
--- /dev/null
+++ b/src/Specific/solinas32_2e174m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e174m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e174m3/compiler.sh b/src/Specific/solinas32_2e174m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e174m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e174m3/femul.v b/src/Specific/solinas32_2e174m3/femul.v
new file mode 100644
index 000000000..99d288325
--- /dev/null
+++ b/src/Specific/solinas32_2e174m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e174m3/femulDisplay.v b/src/Specific/solinas32_2e174m3/femulDisplay.v
new file mode 100644
index 000000000..b05262720
--- /dev/null
+++ b/src/Specific/solinas32_2e174m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e174m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e174m3/fesquare.v b/src/Specific/solinas32_2e174m3/fesquare.v
new file mode 100644
index 000000000..ac1710922
--- /dev/null
+++ b/src/Specific/solinas32_2e174m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e174m3/fesquareDisplay.v b/src/Specific/solinas32_2e174m3/fesquareDisplay.v
new file mode 100644
index 000000000..a1cc9b022
--- /dev/null
+++ b/src/Specific/solinas32_2e174m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e174m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e174m3/freeze.v b/src/Specific/solinas32_2e174m3/freeze.v
new file mode 100644
index 000000000..a9fe90195
--- /dev/null
+++ b/src/Specific/solinas32_2e174m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e174m3/freezeDisplay.v b/src/Specific/solinas32_2e174m3/freezeDisplay.v
new file mode 100644
index 000000000..5304c1262
--- /dev/null
+++ b/src/Specific/solinas32_2e174m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e174m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e189m25/CurveParameters.v b/src/Specific/solinas32_2e189m25/CurveParameters.v
new file mode 100644
index 000000000..b0856234b
--- /dev/null
+++ b/src/Specific/solinas32_2e189m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^189 - 25
+Base: 21
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 32;
+ s := 2^189;
+ c := [(1, 25)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e189m25/Synthesis.v b/src/Specific/solinas32_2e189m25/Synthesis.v
new file mode 100644
index 000000000..eabe5480c
--- /dev/null
+++ b/src/Specific/solinas32_2e189m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e189m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e189m25/compiler.sh b/src/Specific/solinas32_2e189m25/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e189m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e189m25/femul.v b/src/Specific/solinas32_2e189m25/femul.v
new file mode 100644
index 000000000..25a2208fb
--- /dev/null
+++ b/src/Specific/solinas32_2e189m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e189m25/femulDisplay.v b/src/Specific/solinas32_2e189m25/femulDisplay.v
new file mode 100644
index 000000000..f103d3006
--- /dev/null
+++ b/src/Specific/solinas32_2e189m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e189m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e189m25/fesquare.v b/src/Specific/solinas32_2e189m25/fesquare.v
new file mode 100644
index 000000000..abb823776
--- /dev/null
+++ b/src/Specific/solinas32_2e189m25/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e189m25/fesquareDisplay.v b/src/Specific/solinas32_2e189m25/fesquareDisplay.v
new file mode 100644
index 000000000..1abd94e69
--- /dev/null
+++ b/src/Specific/solinas32_2e189m25/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e189m25.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e189m25/freeze.v b/src/Specific/solinas32_2e189m25/freeze.v
new file mode 100644
index 000000000..8a5eb3f18
--- /dev/null
+++ b/src/Specific/solinas32_2e189m25/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e189m25/freezeDisplay.v b/src/Specific/solinas32_2e189m25/freezeDisplay.v
new file mode 100644
index 000000000..d49f5e853
--- /dev/null
+++ b/src/Specific/solinas32_2e189m25/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e189m25.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e190m11/CurveParameters.v b/src/Specific/solinas32_2e190m11/CurveParameters.v
new file mode 100644
index 000000000..d2d4bf8f6
--- /dev/null
+++ b/src/Specific/solinas32_2e190m11/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^190 - 11
+Base: 21
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 32;
+ s := 2^190;
+ c := [(1, 11)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e190m11/Synthesis.v b/src/Specific/solinas32_2e190m11/Synthesis.v
new file mode 100644
index 000000000..4884228a2
--- /dev/null
+++ b/src/Specific/solinas32_2e190m11/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e190m11.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e190m11/compiler.sh b/src/Specific/solinas32_2e190m11/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e190m11/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e190m11/femul.v b/src/Specific/solinas32_2e190m11/femul.v
new file mode 100644
index 000000000..1aa0a42af
--- /dev/null
+++ b/src/Specific/solinas32_2e190m11/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e190m11/femulDisplay.v b/src/Specific/solinas32_2e190m11/femulDisplay.v
new file mode 100644
index 000000000..a54dac2ec
--- /dev/null
+++ b/src/Specific/solinas32_2e190m11/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e190m11.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e190m11/fesquare.v b/src/Specific/solinas32_2e190m11/fesquare.v
new file mode 100644
index 000000000..d382419ed
--- /dev/null
+++ b/src/Specific/solinas32_2e190m11/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e190m11/fesquareDisplay.v b/src/Specific/solinas32_2e190m11/fesquareDisplay.v
new file mode 100644
index 000000000..0bad51ab0
--- /dev/null
+++ b/src/Specific/solinas32_2e190m11/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e190m11.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e190m11/freeze.v b/src/Specific/solinas32_2e190m11/freeze.v
new file mode 100644
index 000000000..89367c277
--- /dev/null
+++ b/src/Specific/solinas32_2e190m11/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e190m11/freezeDisplay.v b/src/Specific/solinas32_2e190m11/freezeDisplay.v
new file mode 100644
index 000000000..a7ce74a91
--- /dev/null
+++ b/src/Specific/solinas32_2e190m11/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e190m11.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e191m19/CurveParameters.v b/src/Specific/solinas32_2e191m19/CurveParameters.v
new file mode 100644
index 000000000..9736c3d90
--- /dev/null
+++ b/src/Specific/solinas32_2e191m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^191 - 19
+Base: 19
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^191;
+ c := [(1, 19)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e191m19/Synthesis.v b/src/Specific/solinas32_2e191m19/Synthesis.v
new file mode 100644
index 000000000..446c76576
--- /dev/null
+++ b/src/Specific/solinas32_2e191m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e191m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e191m19/compiler.sh b/src/Specific/solinas32_2e191m19/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e191m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e191m19/femul.v b/src/Specific/solinas32_2e191m19/femul.v
new file mode 100644
index 000000000..be1e03c9f
--- /dev/null
+++ b/src/Specific/solinas32_2e191m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e191m19/femulDisplay.v b/src/Specific/solinas32_2e191m19/femulDisplay.v
new file mode 100644
index 000000000..a9c1288dc
--- /dev/null
+++ b/src/Specific/solinas32_2e191m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e191m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e191m19/fesquare.v b/src/Specific/solinas32_2e191m19/fesquare.v
new file mode 100644
index 000000000..754574d47
--- /dev/null
+++ b/src/Specific/solinas32_2e191m19/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e191m19/fesquareDisplay.v b/src/Specific/solinas32_2e191m19/fesquareDisplay.v
new file mode 100644
index 000000000..754b6846c
--- /dev/null
+++ b/src/Specific/solinas32_2e191m19/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e191m19.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e191m19/freeze.v b/src/Specific/solinas32_2e191m19/freeze.v
new file mode 100644
index 000000000..2de3d71d4
--- /dev/null
+++ b/src/Specific/solinas32_2e191m19/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e191m19/freezeDisplay.v b/src/Specific/solinas32_2e191m19/freezeDisplay.v
new file mode 100644
index 000000000..8b6998eff
--- /dev/null
+++ b/src/Specific/solinas32_2e191m19/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e191m19.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e192m2e64m1/CurveParameters.v b/src/Specific/solinas32_2e192m2e64m1/CurveParameters.v
new file mode 100644
index 000000000..0d40d5e8f
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^192 - 2^64 - 1
+Base: 24
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 32;
+ s := 2^192;
+ c := [(1, 1); (2^64, 1)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e192m2e64m1/Synthesis.v b/src/Specific/solinas32_2e192m2e64m1/Synthesis.v
new file mode 100644
index 000000000..1ea6c6a07
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e192m2e64m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e192m2e64m1/compiler.sh b/src/Specific/solinas32_2e192m2e64m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e192m2e64m1/femul.v b/src/Specific/solinas32_2e192m2e64m1/femul.v
new file mode 100644
index 000000000..539c86de9
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e192m2e64m1/femulDisplay.v b/src/Specific/solinas32_2e192m2e64m1/femulDisplay.v
new file mode 100644
index 000000000..f0294dfc9
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e192m2e64m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e192m2e64m1/fesquare.v b/src/Specific/solinas32_2e192m2e64m1/fesquare.v
new file mode 100644
index 000000000..a7dc0d2e3
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e192m2e64m1/fesquareDisplay.v b/src/Specific/solinas32_2e192m2e64m1/fesquareDisplay.v
new file mode 100644
index 000000000..e715d3b50
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e192m2e64m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e192m2e64m1/freeze.v b/src/Specific/solinas32_2e192m2e64m1/freeze.v
new file mode 100644
index 000000000..b17791f79
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e192m2e64m1/freezeDisplay.v b/src/Specific/solinas32_2e192m2e64m1/freezeDisplay.v
new file mode 100644
index 000000000..25d9d37bf
--- /dev/null
+++ b/src/Specific/solinas32_2e192m2e64m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e192m2e64m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e194m33/CurveParameters.v b/src/Specific/solinas32_2e194m33/CurveParameters.v
new file mode 100644
index 000000000..ac714a6de
--- /dev/null
+++ b/src/Specific/solinas32_2e194m33/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^194 - 33
+Base: 16
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^194;
+ c := [(1, 33)];
+ carry_chains := Some [seq 0 (pred 12); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e194m33/Synthesis.v b/src/Specific/solinas32_2e194m33/Synthesis.v
new file mode 100644
index 000000000..32e89adb6
--- /dev/null
+++ b/src/Specific/solinas32_2e194m33/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e194m33.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e194m33/compiler.sh b/src/Specific/solinas32_2e194m33/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e194m33/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e194m33/femul.v b/src/Specific/solinas32_2e194m33/femul.v
new file mode 100644
index 000000000..1ac07a7d2
--- /dev/null
+++ b/src/Specific/solinas32_2e194m33/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e194m33/femulDisplay.v b/src/Specific/solinas32_2e194m33/femulDisplay.v
new file mode 100644
index 000000000..2dd83bec7
--- /dev/null
+++ b/src/Specific/solinas32_2e194m33/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e194m33.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e194m33/fesquare.v b/src/Specific/solinas32_2e194m33/fesquare.v
new file mode 100644
index 000000000..7cacbccfd
--- /dev/null
+++ b/src/Specific/solinas32_2e194m33/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e194m33/fesquareDisplay.v b/src/Specific/solinas32_2e194m33/fesquareDisplay.v
new file mode 100644
index 000000000..9cd9d778b
--- /dev/null
+++ b/src/Specific/solinas32_2e194m33/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e194m33.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e194m33/freeze.v b/src/Specific/solinas32_2e194m33/freeze.v
new file mode 100644
index 000000000..ef8f164df
--- /dev/null
+++ b/src/Specific/solinas32_2e194m33/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e194m33/freezeDisplay.v b/src/Specific/solinas32_2e194m33/freezeDisplay.v
new file mode 100644
index 000000000..43ee6e6e2
--- /dev/null
+++ b/src/Specific/solinas32_2e194m33/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e194m33.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e196m15/CurveParameters.v b/src/Specific/solinas32_2e196m15/CurveParameters.v
new file mode 100644
index 000000000..5f1ca68b8
--- /dev/null
+++ b/src/Specific/solinas32_2e196m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^196 - 15
+Base: 24
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 32;
+ s := 2^196;
+ c := [(1, 15)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e196m15/Synthesis.v b/src/Specific/solinas32_2e196m15/Synthesis.v
new file mode 100644
index 000000000..fefb3c60b
--- /dev/null
+++ b/src/Specific/solinas32_2e196m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e196m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e196m15/compiler.sh b/src/Specific/solinas32_2e196m15/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e196m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e196m15/femul.v b/src/Specific/solinas32_2e196m15/femul.v
new file mode 100644
index 000000000..c1af9cac4
--- /dev/null
+++ b/src/Specific/solinas32_2e196m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e196m15/femulDisplay.v b/src/Specific/solinas32_2e196m15/femulDisplay.v
new file mode 100644
index 000000000..2bda971d1
--- /dev/null
+++ b/src/Specific/solinas32_2e196m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e196m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e196m15/fesquare.v b/src/Specific/solinas32_2e196m15/fesquare.v
new file mode 100644
index 000000000..3ad6c829c
--- /dev/null
+++ b/src/Specific/solinas32_2e196m15/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e196m15/fesquareDisplay.v b/src/Specific/solinas32_2e196m15/fesquareDisplay.v
new file mode 100644
index 000000000..3db8b9104
--- /dev/null
+++ b/src/Specific/solinas32_2e196m15/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e196m15.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e196m15/freeze.v b/src/Specific/solinas32_2e196m15/freeze.v
new file mode 100644
index 000000000..e7a4c73d3
--- /dev/null
+++ b/src/Specific/solinas32_2e196m15/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e196m15/freezeDisplay.v b/src/Specific/solinas32_2e196m15/freezeDisplay.v
new file mode 100644
index 000000000..17dd5bc06
--- /dev/null
+++ b/src/Specific/solinas32_2e196m15/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e196m15.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e198m17/CurveParameters.v b/src/Specific/solinas32_2e198m17/CurveParameters.v
new file mode 100644
index 000000000..613beefd0
--- /dev/null
+++ b/src/Specific/solinas32_2e198m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^198 - 17
+Base: 22
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 32;
+ s := 2^198;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e198m17/Synthesis.v b/src/Specific/solinas32_2e198m17/Synthesis.v
new file mode 100644
index 000000000..a33fec378
--- /dev/null
+++ b/src/Specific/solinas32_2e198m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e198m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e198m17/compiler.sh b/src/Specific/solinas32_2e198m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e198m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e198m17/femul.v b/src/Specific/solinas32_2e198m17/femul.v
new file mode 100644
index 000000000..455f568c9
--- /dev/null
+++ b/src/Specific/solinas32_2e198m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e198m17/femulDisplay.v b/src/Specific/solinas32_2e198m17/femulDisplay.v
new file mode 100644
index 000000000..076c2a4a7
--- /dev/null
+++ b/src/Specific/solinas32_2e198m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e198m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e198m17/fesquare.v b/src/Specific/solinas32_2e198m17/fesquare.v
new file mode 100644
index 000000000..b2c171ee9
--- /dev/null
+++ b/src/Specific/solinas32_2e198m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e198m17/fesquareDisplay.v b/src/Specific/solinas32_2e198m17/fesquareDisplay.v
new file mode 100644
index 000000000..f7f8b4ad9
--- /dev/null
+++ b/src/Specific/solinas32_2e198m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e198m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e198m17/freeze.v b/src/Specific/solinas32_2e198m17/freeze.v
new file mode 100644
index 000000000..60dc6ed42
--- /dev/null
+++ b/src/Specific/solinas32_2e198m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e198m17/freezeDisplay.v b/src/Specific/solinas32_2e198m17/freezeDisplay.v
new file mode 100644
index 000000000..73356817b
--- /dev/null
+++ b/src/Specific/solinas32_2e198m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e198m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e206m5/CurveParameters.v b/src/Specific/solinas32_2e206m5/CurveParameters.v
new file mode 100644
index 000000000..04d6be18a
--- /dev/null
+++ b/src/Specific/solinas32_2e206m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^206 - 5
+Base: 17
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^206;
+ c := [(1, 5)];
+ carry_chains := Some [seq 0 (pred 12); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e206m5/Synthesis.v b/src/Specific/solinas32_2e206m5/Synthesis.v
new file mode 100644
index 000000000..777314029
--- /dev/null
+++ b/src/Specific/solinas32_2e206m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e206m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e206m5/compiler.sh b/src/Specific/solinas32_2e206m5/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e206m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e206m5/femul.v b/src/Specific/solinas32_2e206m5/femul.v
new file mode 100644
index 000000000..6a5b88e0e
--- /dev/null
+++ b/src/Specific/solinas32_2e206m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e206m5/femulDisplay.v b/src/Specific/solinas32_2e206m5/femulDisplay.v
new file mode 100644
index 000000000..6d1cf3375
--- /dev/null
+++ b/src/Specific/solinas32_2e206m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e206m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e206m5/fesquare.v b/src/Specific/solinas32_2e206m5/fesquare.v
new file mode 100644
index 000000000..d727a9a41
--- /dev/null
+++ b/src/Specific/solinas32_2e206m5/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e206m5/fesquareDisplay.v b/src/Specific/solinas32_2e206m5/fesquareDisplay.v
new file mode 100644
index 000000000..a08585dc4
--- /dev/null
+++ b/src/Specific/solinas32_2e206m5/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e206m5.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e206m5/freeze.v b/src/Specific/solinas32_2e206m5/freeze.v
new file mode 100644
index 000000000..19183b243
--- /dev/null
+++ b/src/Specific/solinas32_2e206m5/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e206m5/freezeDisplay.v b/src/Specific/solinas32_2e206m5/freezeDisplay.v
new file mode 100644
index 000000000..4ae9e9588
--- /dev/null
+++ b/src/Specific/solinas32_2e206m5/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e206m5.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e212m29/CurveParameters.v b/src/Specific/solinas32_2e212m29/CurveParameters.v
new file mode 100644
index 000000000..fd99bbe99
--- /dev/null
+++ b/src/Specific/solinas32_2e212m29/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^212 - 29
+Base: 21
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^212;
+ c := [(1, 29)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e212m29/Synthesis.v b/src/Specific/solinas32_2e212m29/Synthesis.v
new file mode 100644
index 000000000..0eed33383
--- /dev/null
+++ b/src/Specific/solinas32_2e212m29/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e212m29.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e212m29/compiler.sh b/src/Specific/solinas32_2e212m29/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e212m29/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e212m29/femul.v b/src/Specific/solinas32_2e212m29/femul.v
new file mode 100644
index 000000000..87d30c46a
--- /dev/null
+++ b/src/Specific/solinas32_2e212m29/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e212m29/femulDisplay.v b/src/Specific/solinas32_2e212m29/femulDisplay.v
new file mode 100644
index 000000000..86214acad
--- /dev/null
+++ b/src/Specific/solinas32_2e212m29/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e212m29.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e212m29/fesquare.v b/src/Specific/solinas32_2e212m29/fesquare.v
new file mode 100644
index 000000000..d02288c52
--- /dev/null
+++ b/src/Specific/solinas32_2e212m29/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e212m29/fesquareDisplay.v b/src/Specific/solinas32_2e212m29/fesquareDisplay.v
new file mode 100644
index 000000000..114dab6ca
--- /dev/null
+++ b/src/Specific/solinas32_2e212m29/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e212m29.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e212m29/freeze.v b/src/Specific/solinas32_2e212m29/freeze.v
new file mode 100644
index 000000000..a7b9b2878
--- /dev/null
+++ b/src/Specific/solinas32_2e212m29/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e212m29/freezeDisplay.v b/src/Specific/solinas32_2e212m29/freezeDisplay.v
new file mode 100644
index 000000000..a43e8c1be
--- /dev/null
+++ b/src/Specific/solinas32_2e212m29/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e212m29.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e213m3/CurveParameters.v b/src/Specific/solinas32_2e213m3/CurveParameters.v
new file mode 100644
index 000000000..ea06c10d9
--- /dev/null
+++ b/src/Specific/solinas32_2e213m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^213 - 3
+Base: 14
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 15%nat;
+ bitwidth := 32;
+ s := 2^213;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 15); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e213m3/Synthesis.v b/src/Specific/solinas32_2e213m3/Synthesis.v
new file mode 100644
index 000000000..549f7c2f6
--- /dev/null
+++ b/src/Specific/solinas32_2e213m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e213m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e213m3/compiler.sh b/src/Specific/solinas32_2e213m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e213m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e213m3/femul.v b/src/Specific/solinas32_2e213m3/femul.v
new file mode 100644
index 000000000..5b4b305ee
--- /dev/null
+++ b/src/Specific/solinas32_2e213m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e213m3/femulDisplay.v b/src/Specific/solinas32_2e213m3/femulDisplay.v
new file mode 100644
index 000000000..36c15a42f
--- /dev/null
+++ b/src/Specific/solinas32_2e213m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e213m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e213m3/fesquare.v b/src/Specific/solinas32_2e213m3/fesquare.v
new file mode 100644
index 000000000..572847ace
--- /dev/null
+++ b/src/Specific/solinas32_2e213m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e213m3/fesquareDisplay.v b/src/Specific/solinas32_2e213m3/fesquareDisplay.v
new file mode 100644
index 000000000..5954c3e8f
--- /dev/null
+++ b/src/Specific/solinas32_2e213m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e213m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e213m3/freeze.v b/src/Specific/solinas32_2e213m3/freeze.v
new file mode 100644
index 000000000..b8c3bd54b
--- /dev/null
+++ b/src/Specific/solinas32_2e213m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e213m3/freezeDisplay.v b/src/Specific/solinas32_2e213m3/freezeDisplay.v
new file mode 100644
index 000000000..497d81673
--- /dev/null
+++ b/src/Specific/solinas32_2e213m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e213m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e216m2e108m1/CurveParameters.v b/src/Specific/solinas32_2e216m2e108m1/CurveParameters.v
new file mode 100644
index 000000000..594e4ca55
--- /dev/null
+++ b/src/Specific/solinas32_2e216m2e108m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^216 - 2^108 - 1
+Base: 27
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 32;
+ s := 2^216;
+ c := [(1, 1); (2^108, 1)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some true;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e216m2e108m1/Synthesis.v b/src/Specific/solinas32_2e216m2e108m1/Synthesis.v
new file mode 100644
index 000000000..8e4ac57fa
--- /dev/null
+++ b/src/Specific/solinas32_2e216m2e108m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e216m2e108m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e216m2e108m1/compiler.sh b/src/Specific/solinas32_2e216m2e108m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e216m2e108m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e216m2e108m1/femul.v b/src/Specific/solinas32_2e216m2e108m1/femul.v
new file mode 100644
index 000000000..308301d15
--- /dev/null
+++ b/src/Specific/solinas32_2e216m2e108m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e216m2e108m1/femulDisplay.v b/src/Specific/solinas32_2e216m2e108m1/femulDisplay.v
new file mode 100644
index 000000000..bc2d813de
--- /dev/null
+++ b/src/Specific/solinas32_2e216m2e108m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e216m2e108m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e216m2e108m1/fesquare.v b/src/Specific/solinas32_2e216m2e108m1/fesquare.v
new file mode 100644
index 000000000..a24c1acbd
--- /dev/null
+++ b/src/Specific/solinas32_2e216m2e108m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e216m2e108m1/fesquareDisplay.v b/src/Specific/solinas32_2e216m2e108m1/fesquareDisplay.v
new file mode 100644
index 000000000..164da0fe2
--- /dev/null
+++ b/src/Specific/solinas32_2e216m2e108m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e216m2e108m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e216m2e108m1/freeze.v b/src/Specific/solinas32_2e216m2e108m1/freeze.v
new file mode 100644
index 000000000..86c0f11ba
--- /dev/null
+++ b/src/Specific/solinas32_2e216m2e108m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e216m2e108m1/freezeDisplay.v b/src/Specific/solinas32_2e216m2e108m1/freezeDisplay.v
new file mode 100644
index 000000000..139156532
--- /dev/null
+++ b/src/Specific/solinas32_2e216m2e108m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e216m2e108m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e221m3/CurveParameters.v b/src/Specific/solinas32_2e221m3/CurveParameters.v
new file mode 100644
index 000000000..ade81eefc
--- /dev/null
+++ b/src/Specific/solinas32_2e221m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^221 - 3
+Base: 22
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^221;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e221m3/Synthesis.v b/src/Specific/solinas32_2e221m3/Synthesis.v
new file mode 100644
index 000000000..f3584bac1
--- /dev/null
+++ b/src/Specific/solinas32_2e221m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e221m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e221m3/compiler.sh b/src/Specific/solinas32_2e221m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e221m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e221m3/femul.v b/src/Specific/solinas32_2e221m3/femul.v
new file mode 100644
index 000000000..0bdb421fc
--- /dev/null
+++ b/src/Specific/solinas32_2e221m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e221m3/femulDisplay.v b/src/Specific/solinas32_2e221m3/femulDisplay.v
new file mode 100644
index 000000000..688dd40db
--- /dev/null
+++ b/src/Specific/solinas32_2e221m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e221m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e221m3/fesquare.v b/src/Specific/solinas32_2e221m3/fesquare.v
new file mode 100644
index 000000000..fcfb02b0b
--- /dev/null
+++ b/src/Specific/solinas32_2e221m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e221m3/fesquareDisplay.v b/src/Specific/solinas32_2e221m3/fesquareDisplay.v
new file mode 100644
index 000000000..62ca4bc49
--- /dev/null
+++ b/src/Specific/solinas32_2e221m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e221m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e221m3/freeze.v b/src/Specific/solinas32_2e221m3/freeze.v
new file mode 100644
index 000000000..e22eacd5c
--- /dev/null
+++ b/src/Specific/solinas32_2e221m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e221m3/freezeDisplay.v b/src/Specific/solinas32_2e221m3/freezeDisplay.v
new file mode 100644
index 000000000..410a669bb
--- /dev/null
+++ b/src/Specific/solinas32_2e221m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e221m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e222m117/CurveParameters.v b/src/Specific/solinas32_2e222m117/CurveParameters.v
new file mode 100644
index 000000000..add4aaab2
--- /dev/null
+++ b/src/Specific/solinas32_2e222m117/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^222 - 117
+Base: 22
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^222;
+ c := [(1, 117)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e222m117/Synthesis.v b/src/Specific/solinas32_2e222m117/Synthesis.v
new file mode 100644
index 000000000..fd529f3fc
--- /dev/null
+++ b/src/Specific/solinas32_2e222m117/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e222m117.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e222m117/compiler.sh b/src/Specific/solinas32_2e222m117/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e222m117/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e222m117/femul.v b/src/Specific/solinas32_2e222m117/femul.v
new file mode 100644
index 000000000..aa99d6f06
--- /dev/null
+++ b/src/Specific/solinas32_2e222m117/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e222m117/femulDisplay.v b/src/Specific/solinas32_2e222m117/femulDisplay.v
new file mode 100644
index 000000000..c67c78128
--- /dev/null
+++ b/src/Specific/solinas32_2e222m117/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e222m117.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e222m117/fesquare.v b/src/Specific/solinas32_2e222m117/fesquare.v
new file mode 100644
index 000000000..75b63e9f0
--- /dev/null
+++ b/src/Specific/solinas32_2e222m117/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e222m117/fesquareDisplay.v b/src/Specific/solinas32_2e222m117/fesquareDisplay.v
new file mode 100644
index 000000000..04b809cab
--- /dev/null
+++ b/src/Specific/solinas32_2e222m117/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e222m117.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e222m117/freeze.v b/src/Specific/solinas32_2e222m117/freeze.v
new file mode 100644
index 000000000..e0bcedbde
--- /dev/null
+++ b/src/Specific/solinas32_2e222m117/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e222m117/freezeDisplay.v b/src/Specific/solinas32_2e222m117/freezeDisplay.v
new file mode 100644
index 000000000..1668dc77a
--- /dev/null
+++ b/src/Specific/solinas32_2e222m117/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e222m117.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e224m2e96p1/CurveParameters.v b/src/Specific/solinas32_2e224m2e96p1/CurveParameters.v
new file mode 100644
index 000000000..ace0603b4
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^224 - 2^96 + 1
+Base: 28
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 32;
+ s := 2^224;
+ c := [(1, -1); (2^96, 1)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e224m2e96p1/Synthesis.v b/src/Specific/solinas32_2e224m2e96p1/Synthesis.v
new file mode 100644
index 000000000..c0986fa95
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e224m2e96p1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e224m2e96p1/compiler.sh b/src/Specific/solinas32_2e224m2e96p1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e224m2e96p1/femul.v b/src/Specific/solinas32_2e224m2e96p1/femul.v
new file mode 100644
index 000000000..03ba4b9cf
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e224m2e96p1/femulDisplay.v b/src/Specific/solinas32_2e224m2e96p1/femulDisplay.v
new file mode 100644
index 000000000..be19b3d67
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e224m2e96p1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e224m2e96p1/fesquare.v b/src/Specific/solinas32_2e224m2e96p1/fesquare.v
new file mode 100644
index 000000000..4eba129c3
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e224m2e96p1/fesquareDisplay.v b/src/Specific/solinas32_2e224m2e96p1/fesquareDisplay.v
new file mode 100644
index 000000000..07a3583e6
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e224m2e96p1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e224m2e96p1/freeze.v b/src/Specific/solinas32_2e224m2e96p1/freeze.v
new file mode 100644
index 000000000..d402c4fe4
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e224m2e96p1/freezeDisplay.v b/src/Specific/solinas32_2e224m2e96p1/freezeDisplay.v
new file mode 100644
index 000000000..c7b88292d
--- /dev/null
+++ b/src/Specific/solinas32_2e224m2e96p1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e224m2e96p1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e226m5/CurveParameters.v b/src/Specific/solinas32_2e226m5/CurveParameters.v
new file mode 100644
index 000000000..96417aa62
--- /dev/null
+++ b/src/Specific/solinas32_2e226m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^226 - 5
+Base: 25
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 32;
+ s := 2^226;
+ c := [(1, 5)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e226m5/Synthesis.v b/src/Specific/solinas32_2e226m5/Synthesis.v
new file mode 100644
index 000000000..5ca740421
--- /dev/null
+++ b/src/Specific/solinas32_2e226m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e226m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e226m5/compiler.sh b/src/Specific/solinas32_2e226m5/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e226m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e226m5/femul.v b/src/Specific/solinas32_2e226m5/femul.v
new file mode 100644
index 000000000..886c2d068
--- /dev/null
+++ b/src/Specific/solinas32_2e226m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e226m5/femulDisplay.v b/src/Specific/solinas32_2e226m5/femulDisplay.v
new file mode 100644
index 000000000..958e9cf98
--- /dev/null
+++ b/src/Specific/solinas32_2e226m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e226m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e226m5/fesquare.v b/src/Specific/solinas32_2e226m5/fesquare.v
new file mode 100644
index 000000000..537614430
--- /dev/null
+++ b/src/Specific/solinas32_2e226m5/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e226m5/fesquareDisplay.v b/src/Specific/solinas32_2e226m5/fesquareDisplay.v
new file mode 100644
index 000000000..26d338020
--- /dev/null
+++ b/src/Specific/solinas32_2e226m5/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e226m5.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e226m5/freeze.v b/src/Specific/solinas32_2e226m5/freeze.v
new file mode 100644
index 000000000..26463180b
--- /dev/null
+++ b/src/Specific/solinas32_2e226m5/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e226m5/freezeDisplay.v b/src/Specific/solinas32_2e226m5/freezeDisplay.v
new file mode 100644
index 000000000..ca3647059
--- /dev/null
+++ b/src/Specific/solinas32_2e226m5/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e226m5.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e230m27/CurveParameters.v b/src/Specific/solinas32_2e230m27/CurveParameters.v
new file mode 100644
index 000000000..e5be42277
--- /dev/null
+++ b/src/Specific/solinas32_2e230m27/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^230 - 27
+Base: 23
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^230;
+ c := [(1, 27)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e230m27/Synthesis.v b/src/Specific/solinas32_2e230m27/Synthesis.v
new file mode 100644
index 000000000..7d1eaba73
--- /dev/null
+++ b/src/Specific/solinas32_2e230m27/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e230m27.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e230m27/compiler.sh b/src/Specific/solinas32_2e230m27/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e230m27/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e230m27/femul.v b/src/Specific/solinas32_2e230m27/femul.v
new file mode 100644
index 000000000..84f459fe9
--- /dev/null
+++ b/src/Specific/solinas32_2e230m27/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e230m27/femulDisplay.v b/src/Specific/solinas32_2e230m27/femulDisplay.v
new file mode 100644
index 000000000..60097ff6a
--- /dev/null
+++ b/src/Specific/solinas32_2e230m27/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e230m27.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e230m27/fesquare.v b/src/Specific/solinas32_2e230m27/fesquare.v
new file mode 100644
index 000000000..242086f5a
--- /dev/null
+++ b/src/Specific/solinas32_2e230m27/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e230m27/fesquareDisplay.v b/src/Specific/solinas32_2e230m27/fesquareDisplay.v
new file mode 100644
index 000000000..7eee226ec
--- /dev/null
+++ b/src/Specific/solinas32_2e230m27/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e230m27.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e230m27/freeze.v b/src/Specific/solinas32_2e230m27/freeze.v
new file mode 100644
index 000000000..b020fe8b8
--- /dev/null
+++ b/src/Specific/solinas32_2e230m27/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e230m27/freezeDisplay.v b/src/Specific/solinas32_2e230m27/freezeDisplay.v
new file mode 100644
index 000000000..26eb1dbe0
--- /dev/null
+++ b/src/Specific/solinas32_2e230m27/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e230m27.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e235m15/CurveParameters.v b/src/Specific/solinas32_2e235m15/CurveParameters.v
new file mode 100644
index 000000000..43a282935
--- /dev/null
+++ b/src/Specific/solinas32_2e235m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^235 - 15
+Base: 23
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^235;
+ c := [(1, 15)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e235m15/Synthesis.v b/src/Specific/solinas32_2e235m15/Synthesis.v
new file mode 100644
index 000000000..4b99415ea
--- /dev/null
+++ b/src/Specific/solinas32_2e235m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e235m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e235m15/compiler.sh b/src/Specific/solinas32_2e235m15/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e235m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e235m15/femul.v b/src/Specific/solinas32_2e235m15/femul.v
new file mode 100644
index 000000000..42f4aba4f
--- /dev/null
+++ b/src/Specific/solinas32_2e235m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e235m15/femulDisplay.v b/src/Specific/solinas32_2e235m15/femulDisplay.v
new file mode 100644
index 000000000..2687fed63
--- /dev/null
+++ b/src/Specific/solinas32_2e235m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e235m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e235m15/fesquare.v b/src/Specific/solinas32_2e235m15/fesquare.v
new file mode 100644
index 000000000..9646b630b
--- /dev/null
+++ b/src/Specific/solinas32_2e235m15/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e235m15/fesquareDisplay.v b/src/Specific/solinas32_2e235m15/fesquareDisplay.v
new file mode 100644
index 000000000..45e57a436
--- /dev/null
+++ b/src/Specific/solinas32_2e235m15/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e235m15.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e235m15/freeze.v b/src/Specific/solinas32_2e235m15/freeze.v
new file mode 100644
index 000000000..5227e4d75
--- /dev/null
+++ b/src/Specific/solinas32_2e235m15/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e235m15/freezeDisplay.v b/src/Specific/solinas32_2e235m15/freezeDisplay.v
new file mode 100644
index 000000000..71cac3dbe
--- /dev/null
+++ b/src/Specific/solinas32_2e235m15/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e235m15.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e243m9/CurveParameters.v b/src/Specific/solinas32_2e243m9/CurveParameters.v
new file mode 100644
index 000000000..07cae3d4b
--- /dev/null
+++ b/src/Specific/solinas32_2e243m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^243 - 9
+Base: 22
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 11%nat;
+ bitwidth := 32;
+ s := 2^243;
+ c := [(1, 9)];
+ carry_chains := Some [seq 0 (pred 11); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e243m9/Synthesis.v b/src/Specific/solinas32_2e243m9/Synthesis.v
new file mode 100644
index 000000000..b9497fbdb
--- /dev/null
+++ b/src/Specific/solinas32_2e243m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e243m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e243m9/compiler.sh b/src/Specific/solinas32_2e243m9/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e243m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e243m9/femul.v b/src/Specific/solinas32_2e243m9/femul.v
new file mode 100644
index 000000000..afaa66757
--- /dev/null
+++ b/src/Specific/solinas32_2e243m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e243m9/femulDisplay.v b/src/Specific/solinas32_2e243m9/femulDisplay.v
new file mode 100644
index 000000000..74efbfb14
--- /dev/null
+++ b/src/Specific/solinas32_2e243m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e243m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e243m9/fesquare.v b/src/Specific/solinas32_2e243m9/fesquare.v
new file mode 100644
index 000000000..10b9ed6e9
--- /dev/null
+++ b/src/Specific/solinas32_2e243m9/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e243m9/fesquareDisplay.v b/src/Specific/solinas32_2e243m9/fesquareDisplay.v
new file mode 100644
index 000000000..3bfb11509
--- /dev/null
+++ b/src/Specific/solinas32_2e243m9/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e243m9.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e243m9/freeze.v b/src/Specific/solinas32_2e243m9/freeze.v
new file mode 100644
index 000000000..de7799345
--- /dev/null
+++ b/src/Specific/solinas32_2e243m9/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e243m9/freezeDisplay.v b/src/Specific/solinas32_2e243m9/freezeDisplay.v
new file mode 100644
index 000000000..a1acfcc2c
--- /dev/null
+++ b/src/Specific/solinas32_2e243m9/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e243m9.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e251m9/CurveParameters.v b/src/Specific/solinas32_2e251m9/CurveParameters.v
new file mode 100644
index 000000000..e15731335
--- /dev/null
+++ b/src/Specific/solinas32_2e251m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^251 - 9
+Base: 25
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 32;
+ s := 2^251;
+ c := [(1, 9)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e251m9/Synthesis.v b/src/Specific/solinas32_2e251m9/Synthesis.v
new file mode 100644
index 000000000..90ebde273
--- /dev/null
+++ b/src/Specific/solinas32_2e251m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e251m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e251m9/compiler.sh b/src/Specific/solinas32_2e251m9/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e251m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e251m9/femul.v b/src/Specific/solinas32_2e251m9/femul.v
new file mode 100644
index 000000000..8abf9f965
--- /dev/null
+++ b/src/Specific/solinas32_2e251m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e251m9/femulDisplay.v b/src/Specific/solinas32_2e251m9/femulDisplay.v
new file mode 100644
index 000000000..9e084bdd2
--- /dev/null
+++ b/src/Specific/solinas32_2e251m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e251m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e251m9/fesquare.v b/src/Specific/solinas32_2e251m9/fesquare.v
new file mode 100644
index 000000000..ff934f4f8
--- /dev/null
+++ b/src/Specific/solinas32_2e251m9/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e251m9/fesquareDisplay.v b/src/Specific/solinas32_2e251m9/fesquareDisplay.v
new file mode 100644
index 000000000..837fa74b8
--- /dev/null
+++ b/src/Specific/solinas32_2e251m9/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e251m9.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e251m9/freeze.v b/src/Specific/solinas32_2e251m9/freeze.v
new file mode 100644
index 000000000..1f57709e5
--- /dev/null
+++ b/src/Specific/solinas32_2e251m9/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e251m9/freezeDisplay.v b/src/Specific/solinas32_2e251m9/freezeDisplay.v
new file mode 100644
index 000000000..68960866e
--- /dev/null
+++ b/src/Specific/solinas32_2e251m9/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e251m9.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e255m19/CurveParameters.v b/src/Specific/solinas32_2e255m19/CurveParameters.v
new file mode 100644
index 000000000..c573e5a8d
--- /dev/null
+++ b/src/Specific/solinas32_2e255m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^255 - 19
+Base: 21
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^255;
+ c := [(1, 19)];
+ carry_chains := Some [seq 0 (pred 12); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e255m19/Synthesis.v b/src/Specific/solinas32_2e255m19/Synthesis.v
new file mode 100644
index 000000000..ea9517ab0
--- /dev/null
+++ b/src/Specific/solinas32_2e255m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e255m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e255m19/compiler.sh b/src/Specific/solinas32_2e255m19/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e255m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e255m19/femul.v b/src/Specific/solinas32_2e255m19/femul.v
new file mode 100644
index 000000000..48907c195
--- /dev/null
+++ b/src/Specific/solinas32_2e255m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e255m19/femulDisplay.v b/src/Specific/solinas32_2e255m19/femulDisplay.v
new file mode 100644
index 000000000..bbc7c6f3c
--- /dev/null
+++ b/src/Specific/solinas32_2e255m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e255m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e255m19/fesquare.v b/src/Specific/solinas32_2e255m19/fesquare.v
new file mode 100644
index 000000000..b31b7c2cd
--- /dev/null
+++ b/src/Specific/solinas32_2e255m19/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e255m19/fesquareDisplay.v b/src/Specific/solinas32_2e255m19/fesquareDisplay.v
new file mode 100644
index 000000000..16110140a
--- /dev/null
+++ b/src/Specific/solinas32_2e255m19/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e255m19.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e255m19/freeze.v b/src/Specific/solinas32_2e255m19/freeze.v
new file mode 100644
index 000000000..1ce58d5f9
--- /dev/null
+++ b/src/Specific/solinas32_2e255m19/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e255m19/freezeDisplay.v b/src/Specific/solinas32_2e255m19/freezeDisplay.v
new file mode 100644
index 000000000..bce4482e4
--- /dev/null
+++ b/src/Specific/solinas32_2e255m19/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e255m19.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e255m2e4m2e1m1/CurveParameters.v b/src/Specific/solinas32_2e255m2e4m2e1m1/CurveParameters.v
new file mode 100644
index 000000000..3e10b2177
--- /dev/null
+++ b/src/Specific/solinas32_2e255m2e4m2e1m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^255 - 2^4 - 2^1 - 1
+Base: 28
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 32;
+ s := 2^255;
+ c := [(1, 1); (2^1, 1); (2^4, 1)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e255m2e4m2e1m1/Synthesis.v b/src/Specific/solinas32_2e255m2e4m2e1m1/Synthesis.v
new file mode 100644
index 000000000..2de445d70
--- /dev/null
+++ b/src/Specific/solinas32_2e255m2e4m2e1m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e255m2e4m2e1m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e255m2e4m2e1m1/compiler.sh b/src/Specific/solinas32_2e255m2e4m2e1m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e255m2e4m2e1m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e255m2e4m2e1m1/femul.v b/src/Specific/solinas32_2e255m2e4m2e1m1/femul.v
new file mode 100644
index 000000000..2346560be
--- /dev/null
+++ b/src/Specific/solinas32_2e255m2e4m2e1m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e255m2e4m2e1m1/femulDisplay.v b/src/Specific/solinas32_2e255m2e4m2e1m1/femulDisplay.v
new file mode 100644
index 000000000..417ba638e
--- /dev/null
+++ b/src/Specific/solinas32_2e255m2e4m2e1m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e255m2e4m2e1m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e255m2e4m2e1m1/fesquare.v b/src/Specific/solinas32_2e255m2e4m2e1m1/fesquare.v
new file mode 100644
index 000000000..97b038ef7
--- /dev/null
+++ b/src/Specific/solinas32_2e255m2e4m2e1m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e255m2e4m2e1m1/fesquareDisplay.v b/src/Specific/solinas32_2e255m2e4m2e1m1/fesquareDisplay.v
new file mode 100644
index 000000000..724c10d18
--- /dev/null
+++ b/src/Specific/solinas32_2e255m2e4m2e1m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e255m2e4m2e1m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e255m2e4m2e1m1/freeze.v b/src/Specific/solinas32_2e255m2e4m2e1m1/freeze.v
new file mode 100644
index 000000000..ee06e20dd
--- /dev/null
+++ b/src/Specific/solinas32_2e255m2e4m2e1m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e255m2e4m2e1m1/freezeDisplay.v b/src/Specific/solinas32_2e255m2e4m2e1m1/freezeDisplay.v
new file mode 100644
index 000000000..4426b0f49
--- /dev/null
+++ b/src/Specific/solinas32_2e255m2e4m2e1m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e255m2e4m2e1m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e255m765/CurveParameters.v b/src/Specific/solinas32_2e255m765/CurveParameters.v
new file mode 100644
index 000000000..268c5ff7c
--- /dev/null
+++ b/src/Specific/solinas32_2e255m765/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^255 - 765
+Base: 17
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 15%nat;
+ bitwidth := 32;
+ s := 2^255;
+ c := [(1, 765)];
+ carry_chains := Some [seq 0 (pred 15); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e255m765/Synthesis.v b/src/Specific/solinas32_2e255m765/Synthesis.v
new file mode 100644
index 000000000..8acb6a830
--- /dev/null
+++ b/src/Specific/solinas32_2e255m765/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e255m765.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e255m765/compiler.sh b/src/Specific/solinas32_2e255m765/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e255m765/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e255m765/femul.v b/src/Specific/solinas32_2e255m765/femul.v
new file mode 100644
index 000000000..1e1cbc882
--- /dev/null
+++ b/src/Specific/solinas32_2e255m765/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e255m765/femulDisplay.v b/src/Specific/solinas32_2e255m765/femulDisplay.v
new file mode 100644
index 000000000..566c2387f
--- /dev/null
+++ b/src/Specific/solinas32_2e255m765/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e255m765.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e255m765/fesquare.v b/src/Specific/solinas32_2e255m765/fesquare.v
new file mode 100644
index 000000000..0b6a748f6
--- /dev/null
+++ b/src/Specific/solinas32_2e255m765/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e255m765/fesquareDisplay.v b/src/Specific/solinas32_2e255m765/fesquareDisplay.v
new file mode 100644
index 000000000..a2b9f53e0
--- /dev/null
+++ b/src/Specific/solinas32_2e255m765/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e255m765.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e255m765/freeze.v b/src/Specific/solinas32_2e255m765/freeze.v
new file mode 100644
index 000000000..3a5b007e8
--- /dev/null
+++ b/src/Specific/solinas32_2e255m765/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e255m765/freezeDisplay.v b/src/Specific/solinas32_2e255m765/freezeDisplay.v
new file mode 100644
index 000000000..94d915978
--- /dev/null
+++ b/src/Specific/solinas32_2e255m765/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e255m765.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e256m189/CurveParameters.v b/src/Specific/solinas32_2e256m189/CurveParameters.v
new file mode 100644
index 000000000..5d7ef9fd4
--- /dev/null
+++ b/src/Specific/solinas32_2e256m189/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^256 - 189
+Base: 21
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^256;
+ c := [(1, 189)];
+ carry_chains := Some [seq 0 (pred 12); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e256m189/Synthesis.v b/src/Specific/solinas32_2e256m189/Synthesis.v
new file mode 100644
index 000000000..d7b9b7d93
--- /dev/null
+++ b/src/Specific/solinas32_2e256m189/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e256m189.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e256m189/compiler.sh b/src/Specific/solinas32_2e256m189/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e256m189/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e256m189/femul.v b/src/Specific/solinas32_2e256m189/femul.v
new file mode 100644
index 000000000..406c64f9c
--- /dev/null
+++ b/src/Specific/solinas32_2e256m189/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e256m189/femulDisplay.v b/src/Specific/solinas32_2e256m189/femulDisplay.v
new file mode 100644
index 000000000..d06d9b1f1
--- /dev/null
+++ b/src/Specific/solinas32_2e256m189/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e256m189.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e256m189/fesquare.v b/src/Specific/solinas32_2e256m189/fesquare.v
new file mode 100644
index 000000000..645eb7767
--- /dev/null
+++ b/src/Specific/solinas32_2e256m189/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e256m189/fesquareDisplay.v b/src/Specific/solinas32_2e256m189/fesquareDisplay.v
new file mode 100644
index 000000000..036751aff
--- /dev/null
+++ b/src/Specific/solinas32_2e256m189/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e256m189.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e256m189/freeze.v b/src/Specific/solinas32_2e256m189/freeze.v
new file mode 100644
index 000000000..05064c4f8
--- /dev/null
+++ b/src/Specific/solinas32_2e256m189/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e256m189/freezeDisplay.v b/src/Specific/solinas32_2e256m189/freezeDisplay.v
new file mode 100644
index 000000000..14275e245
--- /dev/null
+++ b/src/Specific/solinas32_2e256m189/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e256m189.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/CurveParameters.v b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/CurveParameters.v
new file mode 100644
index 000000000..e9433584a
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^256 - 2^224 + 2^192 + 2^96 - 1
+Base: 21
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^256;
+ c := [(1, 1); (2^96, -1); (2^192, -1); (2^224, 1)];
+ carry_chains := Some [seq 0 (pred 12); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/Synthesis.v b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/Synthesis.v
new file mode 100644
index 000000000..c2df166f6
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e256m2e224p2e192p2e96m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/compiler.sh b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/femul.v b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/femul.v
new file mode 100644
index 000000000..5cd6393ff
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/femulDisplay.v b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/femulDisplay.v
new file mode 100644
index 000000000..173389cca
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e256m2e224p2e192p2e96m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/fesquare.v b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/fesquare.v
new file mode 100644
index 000000000..4c4cb5b98
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/fesquareDisplay.v b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/fesquareDisplay.v
new file mode 100644
index 000000000..97f3d31a2
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e256m2e224p2e192p2e96m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/freeze.v b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/freeze.v
new file mode 100644
index 000000000..796ef2361
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/freezeDisplay.v b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/freezeDisplay.v
new file mode 100644
index 000000000..02479255d
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e224p2e192p2e96m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e256m2e224p2e192p2e96m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e256m2e32m977/CurveParameters.v b/src/Specific/solinas32_2e256m2e32m977/CurveParameters.v
new file mode 100644
index 000000000..088b65e8c
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^256 - 2^32 - 977
+Base: 17
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 15%nat;
+ bitwidth := 32;
+ s := 2^256;
+ c := [(1, 977); (2^32, 1)];
+ carry_chains := Some [seq 0 (pred 15); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e256m2e32m977/Synthesis.v b/src/Specific/solinas32_2e256m2e32m977/Synthesis.v
new file mode 100644
index 000000000..631d72856
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e256m2e32m977.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e256m2e32m977/compiler.sh b/src/Specific/solinas32_2e256m2e32m977/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e256m2e32m977/femul.v b/src/Specific/solinas32_2e256m2e32m977/femul.v
new file mode 100644
index 000000000..441307767
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e256m2e32m977/femulDisplay.v b/src/Specific/solinas32_2e256m2e32m977/femulDisplay.v
new file mode 100644
index 000000000..d27027c5f
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e256m2e32m977.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e256m2e32m977/fesquare.v b/src/Specific/solinas32_2e256m2e32m977/fesquare.v
new file mode 100644
index 000000000..f52ca519d
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e256m2e32m977/fesquareDisplay.v b/src/Specific/solinas32_2e256m2e32m977/fesquareDisplay.v
new file mode 100644
index 000000000..18be8cdda
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e256m2e32m977.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e256m2e32m977/freeze.v b/src/Specific/solinas32_2e256m2e32m977/freeze.v
new file mode 100644
index 000000000..5ecb33677
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e256m2e32m977/freezeDisplay.v b/src/Specific/solinas32_2e256m2e32m977/freezeDisplay.v
new file mode 100644
index 000000000..f75eed8ed
--- /dev/null
+++ b/src/Specific/solinas32_2e256m2e32m977/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e256m2e32m977.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e266m3/CurveParameters.v b/src/Specific/solinas32_2e266m3/CurveParameters.v
new file mode 100644
index 000000000..fe4026d1a
--- /dev/null
+++ b/src/Specific/solinas32_2e266m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^266 - 3
+Base: 22
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^266;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 12); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e266m3/Synthesis.v b/src/Specific/solinas32_2e266m3/Synthesis.v
new file mode 100644
index 000000000..c7e41c2c9
--- /dev/null
+++ b/src/Specific/solinas32_2e266m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e266m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e266m3/compiler.sh b/src/Specific/solinas32_2e266m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e266m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e266m3/femul.v b/src/Specific/solinas32_2e266m3/femul.v
new file mode 100644
index 000000000..1201b0c0b
--- /dev/null
+++ b/src/Specific/solinas32_2e266m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e266m3/femulDisplay.v b/src/Specific/solinas32_2e266m3/femulDisplay.v
new file mode 100644
index 000000000..5ebf19087
--- /dev/null
+++ b/src/Specific/solinas32_2e266m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e266m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e266m3/fesquare.v b/src/Specific/solinas32_2e266m3/fesquare.v
new file mode 100644
index 000000000..7a8ca6579
--- /dev/null
+++ b/src/Specific/solinas32_2e266m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e266m3/fesquareDisplay.v b/src/Specific/solinas32_2e266m3/fesquareDisplay.v
new file mode 100644
index 000000000..9126ad5d5
--- /dev/null
+++ b/src/Specific/solinas32_2e266m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e266m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e266m3/freeze.v b/src/Specific/solinas32_2e266m3/freeze.v
new file mode 100644
index 000000000..685af0180
--- /dev/null
+++ b/src/Specific/solinas32_2e266m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e266m3/freezeDisplay.v b/src/Specific/solinas32_2e266m3/freezeDisplay.v
new file mode 100644
index 000000000..6c453cc83
--- /dev/null
+++ b/src/Specific/solinas32_2e266m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e266m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e285m9/CurveParameters.v b/src/Specific/solinas32_2e285m9/CurveParameters.v
new file mode 100644
index 000000000..f969bd7d9
--- /dev/null
+++ b/src/Specific/solinas32_2e285m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^285 - 9
+Base: 19
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 15%nat;
+ bitwidth := 32;
+ s := 2^285;
+ c := [(1, 9)];
+ carry_chains := Some [seq 0 (pred 15); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e285m9/Synthesis.v b/src/Specific/solinas32_2e285m9/Synthesis.v
new file mode 100644
index 000000000..0ee065155
--- /dev/null
+++ b/src/Specific/solinas32_2e285m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e285m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e285m9/compiler.sh b/src/Specific/solinas32_2e285m9/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e285m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e285m9/femul.v b/src/Specific/solinas32_2e285m9/femul.v
new file mode 100644
index 000000000..c7c512f3f
--- /dev/null
+++ b/src/Specific/solinas32_2e285m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e285m9/femulDisplay.v b/src/Specific/solinas32_2e285m9/femulDisplay.v
new file mode 100644
index 000000000..7817c92aa
--- /dev/null
+++ b/src/Specific/solinas32_2e285m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e285m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e285m9/fesquare.v b/src/Specific/solinas32_2e285m9/fesquare.v
new file mode 100644
index 000000000..85007cc14
--- /dev/null
+++ b/src/Specific/solinas32_2e285m9/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e285m9/fesquareDisplay.v b/src/Specific/solinas32_2e285m9/fesquareDisplay.v
new file mode 100644
index 000000000..6b59aedb3
--- /dev/null
+++ b/src/Specific/solinas32_2e285m9/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e285m9.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e285m9/freeze.v b/src/Specific/solinas32_2e285m9/freeze.v
new file mode 100644
index 000000000..58321cf72
--- /dev/null
+++ b/src/Specific/solinas32_2e285m9/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e285m9/freezeDisplay.v b/src/Specific/solinas32_2e285m9/freezeDisplay.v
new file mode 100644
index 000000000..8cfe46085
--- /dev/null
+++ b/src/Specific/solinas32_2e285m9/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e285m9.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e291m19/CurveParameters.v b/src/Specific/solinas32_2e291m19/CurveParameters.v
new file mode 100644
index 000000000..90ab80cf8
--- /dev/null
+++ b/src/Specific/solinas32_2e291m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^291 - 19
+Base: 24
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 12%nat;
+ bitwidth := 32;
+ s := 2^291;
+ c := [(1, 19)];
+ carry_chains := Some [seq 0 (pred 12); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e291m19/Synthesis.v b/src/Specific/solinas32_2e291m19/Synthesis.v
new file mode 100644
index 000000000..019c5097c
--- /dev/null
+++ b/src/Specific/solinas32_2e291m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e291m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e291m19/compiler.sh b/src/Specific/solinas32_2e291m19/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e291m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e291m19/femul.v b/src/Specific/solinas32_2e291m19/femul.v
new file mode 100644
index 000000000..99fb1a59e
--- /dev/null
+++ b/src/Specific/solinas32_2e291m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e291m19/femulDisplay.v b/src/Specific/solinas32_2e291m19/femulDisplay.v
new file mode 100644
index 000000000..9468b629d
--- /dev/null
+++ b/src/Specific/solinas32_2e291m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e291m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e291m19/fesquare.v b/src/Specific/solinas32_2e291m19/fesquare.v
new file mode 100644
index 000000000..b809ea376
--- /dev/null
+++ b/src/Specific/solinas32_2e291m19/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e291m19/fesquareDisplay.v b/src/Specific/solinas32_2e291m19/fesquareDisplay.v
new file mode 100644
index 000000000..ee3bb1393
--- /dev/null
+++ b/src/Specific/solinas32_2e291m19/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e291m19.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e291m19/freeze.v b/src/Specific/solinas32_2e291m19/freeze.v
new file mode 100644
index 000000000..c5c7f0bb1
--- /dev/null
+++ b/src/Specific/solinas32_2e291m19/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e291m19/freezeDisplay.v b/src/Specific/solinas32_2e291m19/freezeDisplay.v
new file mode 100644
index 000000000..d895e187d
--- /dev/null
+++ b/src/Specific/solinas32_2e291m19/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e291m19.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e321m9/CurveParameters.v b/src/Specific/solinas32_2e321m9/CurveParameters.v
new file mode 100644
index 000000000..edc1f33f3
--- /dev/null
+++ b/src/Specific/solinas32_2e321m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^321 - 9
+Base: 20
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 16%nat;
+ bitwidth := 32;
+ s := 2^321;
+ c := [(1, 9)];
+ carry_chains := Some [seq 0 (pred 16); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e321m9/Synthesis.v b/src/Specific/solinas32_2e321m9/Synthesis.v
new file mode 100644
index 000000000..fd5f067d9
--- /dev/null
+++ b/src/Specific/solinas32_2e321m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e321m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e321m9/compiler.sh b/src/Specific/solinas32_2e321m9/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e321m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e321m9/femul.v b/src/Specific/solinas32_2e321m9/femul.v
new file mode 100644
index 000000000..abec21932
--- /dev/null
+++ b/src/Specific/solinas32_2e321m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e321m9/femulDisplay.v b/src/Specific/solinas32_2e321m9/femulDisplay.v
new file mode 100644
index 000000000..390800c0c
--- /dev/null
+++ b/src/Specific/solinas32_2e321m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e321m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e321m9/fesquare.v b/src/Specific/solinas32_2e321m9/fesquare.v
new file mode 100644
index 000000000..ec95e4c35
--- /dev/null
+++ b/src/Specific/solinas32_2e321m9/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e321m9/fesquareDisplay.v b/src/Specific/solinas32_2e321m9/fesquareDisplay.v
new file mode 100644
index 000000000..41414cb1c
--- /dev/null
+++ b/src/Specific/solinas32_2e321m9/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e321m9.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e321m9/freeze.v b/src/Specific/solinas32_2e321m9/freeze.v
new file mode 100644
index 000000000..87c4534ae
--- /dev/null
+++ b/src/Specific/solinas32_2e321m9/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e321m9/freezeDisplay.v b/src/Specific/solinas32_2e321m9/freezeDisplay.v
new file mode 100644
index 000000000..3441465ff
--- /dev/null
+++ b/src/Specific/solinas32_2e321m9/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e321m9.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e322m2e161m1/CurveParameters.v b/src/Specific/solinas32_2e322m2e161m1/CurveParameters.v
new file mode 100644
index 000000000..72aebc8bb
--- /dev/null
+++ b/src/Specific/solinas32_2e322m2e161m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^322 - 2^161 - 1
+Base: 23
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 14%nat;
+ bitwidth := 32;
+ s := 2^322;
+ c := [(1, 1); (2^161, 1)];
+ carry_chains := Some [seq 0 (pred 14); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some true;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e322m2e161m1/Synthesis.v b/src/Specific/solinas32_2e322m2e161m1/Synthesis.v
new file mode 100644
index 000000000..18938a04b
--- /dev/null
+++ b/src/Specific/solinas32_2e322m2e161m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e322m2e161m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e322m2e161m1/compiler.sh b/src/Specific/solinas32_2e322m2e161m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e322m2e161m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e322m2e161m1/femul.v b/src/Specific/solinas32_2e322m2e161m1/femul.v
new file mode 100644
index 000000000..473d8b1cf
--- /dev/null
+++ b/src/Specific/solinas32_2e322m2e161m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e322m2e161m1/femulDisplay.v b/src/Specific/solinas32_2e322m2e161m1/femulDisplay.v
new file mode 100644
index 000000000..d43cb5727
--- /dev/null
+++ b/src/Specific/solinas32_2e322m2e161m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e322m2e161m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e322m2e161m1/fesquare.v b/src/Specific/solinas32_2e322m2e161m1/fesquare.v
new file mode 100644
index 000000000..544721bfa
--- /dev/null
+++ b/src/Specific/solinas32_2e322m2e161m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e322m2e161m1/fesquareDisplay.v b/src/Specific/solinas32_2e322m2e161m1/fesquareDisplay.v
new file mode 100644
index 000000000..25a768c6c
--- /dev/null
+++ b/src/Specific/solinas32_2e322m2e161m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e322m2e161m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e322m2e161m1/freeze.v b/src/Specific/solinas32_2e322m2e161m1/freeze.v
new file mode 100644
index 000000000..c34884350
--- /dev/null
+++ b/src/Specific/solinas32_2e322m2e161m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e322m2e161m1/freezeDisplay.v b/src/Specific/solinas32_2e322m2e161m1/freezeDisplay.v
new file mode 100644
index 000000000..8ab2fe2a4
--- /dev/null
+++ b/src/Specific/solinas32_2e322m2e161m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e322m2e161m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e336m17/CurveParameters.v b/src/Specific/solinas32_2e336m17/CurveParameters.v
new file mode 100644
index 000000000..c1b6bdb75
--- /dev/null
+++ b/src/Specific/solinas32_2e336m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^336 - 17
+Base: 24
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 14%nat;
+ bitwidth := 32;
+ s := 2^336;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 14); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e336m17/Synthesis.v b/src/Specific/solinas32_2e336m17/Synthesis.v
new file mode 100644
index 000000000..083d1f5c0
--- /dev/null
+++ b/src/Specific/solinas32_2e336m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e336m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e336m17/compiler.sh b/src/Specific/solinas32_2e336m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e336m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e336m17/femul.v b/src/Specific/solinas32_2e336m17/femul.v
new file mode 100644
index 000000000..13280ca4e
--- /dev/null
+++ b/src/Specific/solinas32_2e336m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e336m17/femulDisplay.v b/src/Specific/solinas32_2e336m17/femulDisplay.v
new file mode 100644
index 000000000..915d6b319
--- /dev/null
+++ b/src/Specific/solinas32_2e336m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e336m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e336m17/fesquare.v b/src/Specific/solinas32_2e336m17/fesquare.v
new file mode 100644
index 000000000..428cfb7ca
--- /dev/null
+++ b/src/Specific/solinas32_2e336m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e336m17/fesquareDisplay.v b/src/Specific/solinas32_2e336m17/fesquareDisplay.v
new file mode 100644
index 000000000..35cf4baf9
--- /dev/null
+++ b/src/Specific/solinas32_2e336m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e336m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e336m17/freeze.v b/src/Specific/solinas32_2e336m17/freeze.v
new file mode 100644
index 000000000..508354148
--- /dev/null
+++ b/src/Specific/solinas32_2e336m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e336m17/freezeDisplay.v b/src/Specific/solinas32_2e336m17/freezeDisplay.v
new file mode 100644
index 000000000..f35af8dec
--- /dev/null
+++ b/src/Specific/solinas32_2e336m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e336m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e336m3/CurveParameters.v b/src/Specific/solinas32_2e336m3/CurveParameters.v
new file mode 100644
index 000000000..fb888dece
--- /dev/null
+++ b/src/Specific/solinas32_2e336m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^336 - 3
+Base: 24
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 14%nat;
+ bitwidth := 32;
+ s := 2^336;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 14); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e336m3/Synthesis.v b/src/Specific/solinas32_2e336m3/Synthesis.v
new file mode 100644
index 000000000..5d8c80a21
--- /dev/null
+++ b/src/Specific/solinas32_2e336m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e336m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e336m3/compiler.sh b/src/Specific/solinas32_2e336m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e336m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e336m3/femul.v b/src/Specific/solinas32_2e336m3/femul.v
new file mode 100644
index 000000000..a656f5122
--- /dev/null
+++ b/src/Specific/solinas32_2e336m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e336m3/femulDisplay.v b/src/Specific/solinas32_2e336m3/femulDisplay.v
new file mode 100644
index 000000000..38c069f1d
--- /dev/null
+++ b/src/Specific/solinas32_2e336m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e336m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e336m3/fesquare.v b/src/Specific/solinas32_2e336m3/fesquare.v
new file mode 100644
index 000000000..13de04f3b
--- /dev/null
+++ b/src/Specific/solinas32_2e336m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e336m3/fesquareDisplay.v b/src/Specific/solinas32_2e336m3/fesquareDisplay.v
new file mode 100644
index 000000000..c2ac164d4
--- /dev/null
+++ b/src/Specific/solinas32_2e336m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e336m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e336m3/freeze.v b/src/Specific/solinas32_2e336m3/freeze.v
new file mode 100644
index 000000000..12661b455
--- /dev/null
+++ b/src/Specific/solinas32_2e336m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e336m3/freezeDisplay.v b/src/Specific/solinas32_2e336m3/freezeDisplay.v
new file mode 100644
index 000000000..946804223
--- /dev/null
+++ b/src/Specific/solinas32_2e336m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e336m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e338m15/CurveParameters.v b/src/Specific/solinas32_2e338m15/CurveParameters.v
new file mode 100644
index 000000000..090c2507d
--- /dev/null
+++ b/src/Specific/solinas32_2e338m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^338 - 15
+Base: 24
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 14%nat;
+ bitwidth := 32;
+ s := 2^338;
+ c := [(1, 15)];
+ carry_chains := Some [seq 0 (pred 14); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e338m15/Synthesis.v b/src/Specific/solinas32_2e338m15/Synthesis.v
new file mode 100644
index 000000000..439b5a185
--- /dev/null
+++ b/src/Specific/solinas32_2e338m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e338m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e338m15/compiler.sh b/src/Specific/solinas32_2e338m15/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e338m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e338m15/femul.v b/src/Specific/solinas32_2e338m15/femul.v
new file mode 100644
index 000000000..6c2d0ab0f
--- /dev/null
+++ b/src/Specific/solinas32_2e338m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e338m15/femulDisplay.v b/src/Specific/solinas32_2e338m15/femulDisplay.v
new file mode 100644
index 000000000..cf7999317
--- /dev/null
+++ b/src/Specific/solinas32_2e338m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e338m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e338m15/fesquare.v b/src/Specific/solinas32_2e338m15/fesquare.v
new file mode 100644
index 000000000..c6d01a999
--- /dev/null
+++ b/src/Specific/solinas32_2e338m15/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e338m15/fesquareDisplay.v b/src/Specific/solinas32_2e338m15/fesquareDisplay.v
new file mode 100644
index 000000000..aab235aab
--- /dev/null
+++ b/src/Specific/solinas32_2e338m15/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e338m15.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e338m15/freeze.v b/src/Specific/solinas32_2e338m15/freeze.v
new file mode 100644
index 000000000..6abdf0b70
--- /dev/null
+++ b/src/Specific/solinas32_2e338m15/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e338m15/freezeDisplay.v b/src/Specific/solinas32_2e338m15/freezeDisplay.v
new file mode 100644
index 000000000..e4f5d9bf2
--- /dev/null
+++ b/src/Specific/solinas32_2e338m15/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e338m15.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e369m25/CurveParameters.v b/src/Specific/solinas32_2e369m25/CurveParameters.v
new file mode 100644
index 000000000..5e3cf4a01
--- /dev/null
+++ b/src/Specific/solinas32_2e369m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^369 - 25
+Base: 23
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 16%nat;
+ bitwidth := 32;
+ s := 2^369;
+ c := [(1, 25)];
+ carry_chains := Some [seq 0 (pred 16); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e369m25/Synthesis.v b/src/Specific/solinas32_2e369m25/Synthesis.v
new file mode 100644
index 000000000..ac0812b3e
--- /dev/null
+++ b/src/Specific/solinas32_2e369m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e369m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e369m25/compiler.sh b/src/Specific/solinas32_2e369m25/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e369m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e369m25/femul.v b/src/Specific/solinas32_2e369m25/femul.v
new file mode 100644
index 000000000..b2f296532
--- /dev/null
+++ b/src/Specific/solinas32_2e369m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e369m25/femulDisplay.v b/src/Specific/solinas32_2e369m25/femulDisplay.v
new file mode 100644
index 000000000..4793722f5
--- /dev/null
+++ b/src/Specific/solinas32_2e369m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e369m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e369m25/fesquare.v b/src/Specific/solinas32_2e369m25/fesquare.v
new file mode 100644
index 000000000..5f582e8d2
--- /dev/null
+++ b/src/Specific/solinas32_2e369m25/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e369m25/fesquareDisplay.v b/src/Specific/solinas32_2e369m25/fesquareDisplay.v
new file mode 100644
index 000000000..6ac4b0ba7
--- /dev/null
+++ b/src/Specific/solinas32_2e369m25/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e369m25.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e369m25/freeze.v b/src/Specific/solinas32_2e369m25/freeze.v
new file mode 100644
index 000000000..21e2bc9d9
--- /dev/null
+++ b/src/Specific/solinas32_2e369m25/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e369m25/freezeDisplay.v b/src/Specific/solinas32_2e369m25/freezeDisplay.v
new file mode 100644
index 000000000..b441a44fc
--- /dev/null
+++ b/src/Specific/solinas32_2e369m25/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e369m25.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e379m19/CurveParameters.v b/src/Specific/solinas32_2e379m19/CurveParameters.v
new file mode 100644
index 000000000..317295beb
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^379 - 19
+Base: 21
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 18%nat;
+ bitwidth := 32;
+ s := 2^379;
+ c := [(1, 19)];
+ carry_chains := Some [seq 0 (pred 18); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e379m19/Synthesis.v b/src/Specific/solinas32_2e379m19/Synthesis.v
new file mode 100644
index 000000000..240d9abf3
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e379m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e379m19/compiler.sh b/src/Specific/solinas32_2e379m19/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e379m19/femul.v b/src/Specific/solinas32_2e379m19/femul.v
new file mode 100644
index 000000000..26646a7f3
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e379m19/femulDisplay.v b/src/Specific/solinas32_2e379m19/femulDisplay.v
new file mode 100644
index 000000000..ddfdb0996
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e379m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e379m19/fesquare.v b/src/Specific/solinas32_2e379m19/fesquare.v
new file mode 100644
index 000000000..21f421136
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e379m19/fesquareDisplay.v b/src/Specific/solinas32_2e379m19/fesquareDisplay.v
new file mode 100644
index 000000000..cf6e27f56
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e379m19.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e379m19/freeze.v b/src/Specific/solinas32_2e379m19/freeze.v
new file mode 100644
index 000000000..399637056
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e379m19/freezeDisplay.v b/src/Specific/solinas32_2e379m19/freezeDisplay.v
new file mode 100644
index 000000000..13c741195
--- /dev/null
+++ b/src/Specific/solinas32_2e379m19/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e379m19.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e382m105/CurveParameters.v b/src/Specific/solinas32_2e382m105/CurveParameters.v
new file mode 100644
index 000000000..e7359580e
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^382 - 105
+Base: 19
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 20%nat;
+ bitwidth := 32;
+ s := 2^382;
+ c := [(1, 105)];
+ carry_chains := Some [seq 0 (pred 20); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e382m105/Synthesis.v b/src/Specific/solinas32_2e382m105/Synthesis.v
new file mode 100644
index 000000000..398b23df2
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e382m105.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e382m105/compiler.sh b/src/Specific/solinas32_2e382m105/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e382m105/femul.v b/src/Specific/solinas32_2e382m105/femul.v
new file mode 100644
index 000000000..fb3bf71e8
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e382m105/femulDisplay.v b/src/Specific/solinas32_2e382m105/femulDisplay.v
new file mode 100644
index 000000000..7ba40a213
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e382m105.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e382m105/fesquare.v b/src/Specific/solinas32_2e382m105/fesquare.v
new file mode 100644
index 000000000..e4afc1c54
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e382m105/fesquareDisplay.v b/src/Specific/solinas32_2e382m105/fesquareDisplay.v
new file mode 100644
index 000000000..4264682bd
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e382m105.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e382m105/freeze.v b/src/Specific/solinas32_2e382m105/freeze.v
new file mode 100644
index 000000000..8cf1e4d4c
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e382m105/freezeDisplay.v b/src/Specific/solinas32_2e382m105/freezeDisplay.v
new file mode 100644
index 000000000..905a21c36
--- /dev/null
+++ b/src/Specific/solinas32_2e382m105/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e382m105.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/CurveParameters.v b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/CurveParameters.v
new file mode 100644
index 000000000..b29950df3
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^384 - 2^128 - 2^96 + 2^32 - 1
+Base: 24
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 16%nat;
+ bitwidth := 32;
+ s := 2^384;
+ c := [(1, 1); (2^32, -1); (2^96, 1); (2^128, 1)];
+ carry_chains := Some [seq 0 (pred 16); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/Synthesis.v b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/Synthesis.v
new file mode 100644
index 000000000..058a72bc2
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e384m2e128m2e96p2e32m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/compiler.sh b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/femul.v b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/femul.v
new file mode 100644
index 000000000..0044bfa58
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/femulDisplay.v b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/femulDisplay.v
new file mode 100644
index 000000000..9bf81755c
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e384m2e128m2e96p2e32m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/fesquare.v b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/fesquare.v
new file mode 100644
index 000000000..736c016ad
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/fesquareDisplay.v b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/fesquareDisplay.v
new file mode 100644
index 000000000..25f53c37d
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e384m2e128m2e96p2e32m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/freeze.v b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/freeze.v
new file mode 100644
index 000000000..fd893f871
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/freezeDisplay.v b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/freezeDisplay.v
new file mode 100644
index 000000000..958596f4b
--- /dev/null
+++ b/src/Specific/solinas32_2e384m2e128m2e96p2e32m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e384m2e128m2e96p2e32m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e384m317/CurveParameters.v b/src/Specific/solinas32_2e384m317/CurveParameters.v
new file mode 100644
index 000000000..2d9bf6263
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^384 - 317
+Base: 21
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 18%nat;
+ bitwidth := 32;
+ s := 2^384;
+ c := [(1, 317)];
+ carry_chains := Some [seq 0 (pred 18); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e384m317/Synthesis.v b/src/Specific/solinas32_2e384m317/Synthesis.v
new file mode 100644
index 000000000..9e01fbb25
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e384m317.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e384m317/compiler.sh b/src/Specific/solinas32_2e384m317/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e384m317/femul.v b/src/Specific/solinas32_2e384m317/femul.v
new file mode 100644
index 000000000..60d843392
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e384m317/femulDisplay.v b/src/Specific/solinas32_2e384m317/femulDisplay.v
new file mode 100644
index 000000000..8d6e0f842
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e384m317.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e384m317/fesquare.v b/src/Specific/solinas32_2e384m317/fesquare.v
new file mode 100644
index 000000000..f83fe5817
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e384m317/fesquareDisplay.v b/src/Specific/solinas32_2e384m317/fesquareDisplay.v
new file mode 100644
index 000000000..0d4388c1a
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e384m317.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e384m317/freeze.v b/src/Specific/solinas32_2e384m317/freeze.v
new file mode 100644
index 000000000..d260a6a75
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e384m317/freezeDisplay.v b/src/Specific/solinas32_2e384m317/freezeDisplay.v
new file mode 100644
index 000000000..96437bc67
--- /dev/null
+++ b/src/Specific/solinas32_2e384m317/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e384m317.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e401m31/CurveParameters.v b/src/Specific/solinas32_2e401m31/CurveParameters.v
new file mode 100644
index 000000000..3fea51421
--- /dev/null
+++ b/src/Specific/solinas32_2e401m31/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^401 - 31
+Base: 25
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 16%nat;
+ bitwidth := 32;
+ s := 2^401;
+ c := [(1, 31)];
+ carry_chains := Some [seq 0 (pred 16); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e401m31/Synthesis.v b/src/Specific/solinas32_2e401m31/Synthesis.v
new file mode 100644
index 000000000..6098e0c7b
--- /dev/null
+++ b/src/Specific/solinas32_2e401m31/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e401m31.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e401m31/compiler.sh b/src/Specific/solinas32_2e401m31/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e401m31/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e401m31/femul.v b/src/Specific/solinas32_2e401m31/femul.v
new file mode 100644
index 000000000..65a5a7a07
--- /dev/null
+++ b/src/Specific/solinas32_2e401m31/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e401m31/femulDisplay.v b/src/Specific/solinas32_2e401m31/femulDisplay.v
new file mode 100644
index 000000000..9aea49854
--- /dev/null
+++ b/src/Specific/solinas32_2e401m31/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e401m31.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e401m31/fesquare.v b/src/Specific/solinas32_2e401m31/fesquare.v
new file mode 100644
index 000000000..627bea25e
--- /dev/null
+++ b/src/Specific/solinas32_2e401m31/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e401m31/fesquareDisplay.v b/src/Specific/solinas32_2e401m31/fesquareDisplay.v
new file mode 100644
index 000000000..1556a678e
--- /dev/null
+++ b/src/Specific/solinas32_2e401m31/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e401m31.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e401m31/freeze.v b/src/Specific/solinas32_2e401m31/freeze.v
new file mode 100644
index 000000000..267ccd8e7
--- /dev/null
+++ b/src/Specific/solinas32_2e401m31/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e401m31/freezeDisplay.v b/src/Specific/solinas32_2e401m31/freezeDisplay.v
new file mode 100644
index 000000000..6968231ed
--- /dev/null
+++ b/src/Specific/solinas32_2e401m31/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e401m31.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e413m21/CurveParameters.v b/src/Specific/solinas32_2e413m21/CurveParameters.v
new file mode 100644
index 000000000..4b3a212e3
--- /dev/null
+++ b/src/Specific/solinas32_2e413m21/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^413 - 21
+Base: 7
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 59%nat;
+ bitwidth := 32;
+ s := 2^413;
+ c := [(1, 21)];
+ carry_chains := Some [seq 0 (pred 59); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e413m21/Synthesis.v b/src/Specific/solinas32_2e413m21/Synthesis.v
new file mode 100644
index 000000000..b672e4d90
--- /dev/null
+++ b/src/Specific/solinas32_2e413m21/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e413m21.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e413m21/compiler.sh b/src/Specific/solinas32_2e413m21/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e413m21/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e413m21/femul.v b/src/Specific/solinas32_2e413m21/femul.v
new file mode 100644
index 000000000..3822272e0
--- /dev/null
+++ b/src/Specific/solinas32_2e413m21/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e413m21/femulDisplay.v b/src/Specific/solinas32_2e413m21/femulDisplay.v
new file mode 100644
index 000000000..7b58da74e
--- /dev/null
+++ b/src/Specific/solinas32_2e413m21/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e413m21.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e413m21/fesquare.v b/src/Specific/solinas32_2e413m21/fesquare.v
new file mode 100644
index 000000000..d722d6ca1
--- /dev/null
+++ b/src/Specific/solinas32_2e413m21/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e413m21/fesquareDisplay.v b/src/Specific/solinas32_2e413m21/fesquareDisplay.v
new file mode 100644
index 000000000..6b79c6f00
--- /dev/null
+++ b/src/Specific/solinas32_2e413m21/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e413m21.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e413m21/freeze.v b/src/Specific/solinas32_2e413m21/freeze.v
new file mode 100644
index 000000000..e27e50870
--- /dev/null
+++ b/src/Specific/solinas32_2e413m21/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e413m21/freezeDisplay.v b/src/Specific/solinas32_2e413m21/freezeDisplay.v
new file mode 100644
index 000000000..7422f40d0
--- /dev/null
+++ b/src/Specific/solinas32_2e413m21/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e413m21.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e414m17/CurveParameters.v b/src/Specific/solinas32_2e414m17/CurveParameters.v
new file mode 100644
index 000000000..da96fb060
--- /dev/null
+++ b/src/Specific/solinas32_2e414m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^414 - 17
+Base: 23
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 18%nat;
+ bitwidth := 32;
+ s := 2^414;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 18); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e414m17/Synthesis.v b/src/Specific/solinas32_2e414m17/Synthesis.v
new file mode 100644
index 000000000..b3a3a8429
--- /dev/null
+++ b/src/Specific/solinas32_2e414m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e414m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e414m17/compiler.sh b/src/Specific/solinas32_2e414m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e414m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e414m17/femul.v b/src/Specific/solinas32_2e414m17/femul.v
new file mode 100644
index 000000000..d8da6338b
--- /dev/null
+++ b/src/Specific/solinas32_2e414m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e414m17/femulDisplay.v b/src/Specific/solinas32_2e414m17/femulDisplay.v
new file mode 100644
index 000000000..b2bf29690
--- /dev/null
+++ b/src/Specific/solinas32_2e414m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e414m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e414m17/fesquare.v b/src/Specific/solinas32_2e414m17/fesquare.v
new file mode 100644
index 000000000..8f0c40e80
--- /dev/null
+++ b/src/Specific/solinas32_2e414m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e414m17/fesquareDisplay.v b/src/Specific/solinas32_2e414m17/fesquareDisplay.v
new file mode 100644
index 000000000..04b09aa0f
--- /dev/null
+++ b/src/Specific/solinas32_2e414m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e414m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e414m17/freeze.v b/src/Specific/solinas32_2e414m17/freeze.v
new file mode 100644
index 000000000..c6ef7ae1b
--- /dev/null
+++ b/src/Specific/solinas32_2e414m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e414m17/freezeDisplay.v b/src/Specific/solinas32_2e414m17/freezeDisplay.v
new file mode 100644
index 000000000..b083fa29a
--- /dev/null
+++ b/src/Specific/solinas32_2e414m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e414m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e416m2e208m1/CurveParameters.v b/src/Specific/solinas32_2e416m2e208m1/CurveParameters.v
new file mode 100644
index 000000000..6295a0867
--- /dev/null
+++ b/src/Specific/solinas32_2e416m2e208m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^416 - 2^208 - 1
+Base: 26
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 16%nat;
+ bitwidth := 32;
+ s := 2^416;
+ c := [(1, 1); (2^208, 1)];
+ carry_chains := Some [seq 0 (pred 16); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some true;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e416m2e208m1/Synthesis.v b/src/Specific/solinas32_2e416m2e208m1/Synthesis.v
new file mode 100644
index 000000000..86eaaf8c2
--- /dev/null
+++ b/src/Specific/solinas32_2e416m2e208m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e416m2e208m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e416m2e208m1/compiler.sh b/src/Specific/solinas32_2e416m2e208m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e416m2e208m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e416m2e208m1/femul.v b/src/Specific/solinas32_2e416m2e208m1/femul.v
new file mode 100644
index 000000000..f9789442e
--- /dev/null
+++ b/src/Specific/solinas32_2e416m2e208m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e416m2e208m1/femulDisplay.v b/src/Specific/solinas32_2e416m2e208m1/femulDisplay.v
new file mode 100644
index 000000000..bd80fef54
--- /dev/null
+++ b/src/Specific/solinas32_2e416m2e208m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e416m2e208m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e416m2e208m1/fesquare.v b/src/Specific/solinas32_2e416m2e208m1/fesquare.v
new file mode 100644
index 000000000..d01d4eb59
--- /dev/null
+++ b/src/Specific/solinas32_2e416m2e208m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e416m2e208m1/fesquareDisplay.v b/src/Specific/solinas32_2e416m2e208m1/fesquareDisplay.v
new file mode 100644
index 000000000..5894a1423
--- /dev/null
+++ b/src/Specific/solinas32_2e416m2e208m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e416m2e208m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e416m2e208m1/freeze.v b/src/Specific/solinas32_2e416m2e208m1/freeze.v
new file mode 100644
index 000000000..83e408313
--- /dev/null
+++ b/src/Specific/solinas32_2e416m2e208m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e416m2e208m1/freezeDisplay.v b/src/Specific/solinas32_2e416m2e208m1/freezeDisplay.v
new file mode 100644
index 000000000..f91856518
--- /dev/null
+++ b/src/Specific/solinas32_2e416m2e208m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e416m2e208m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e444m17/CurveParameters.v b/src/Specific/solinas32_2e444m17/CurveParameters.v
new file mode 100644
index 000000000..0bc85cf21
--- /dev/null
+++ b/src/Specific/solinas32_2e444m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^444 - 17
+Base: 22
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 20%nat;
+ bitwidth := 32;
+ s := 2^444;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 20); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e444m17/Synthesis.v b/src/Specific/solinas32_2e444m17/Synthesis.v
new file mode 100644
index 000000000..d996fe63a
--- /dev/null
+++ b/src/Specific/solinas32_2e444m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e444m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e444m17/compiler.sh b/src/Specific/solinas32_2e444m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e444m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e444m17/femul.v b/src/Specific/solinas32_2e444m17/femul.v
new file mode 100644
index 000000000..8df65140d
--- /dev/null
+++ b/src/Specific/solinas32_2e444m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e444m17/femulDisplay.v b/src/Specific/solinas32_2e444m17/femulDisplay.v
new file mode 100644
index 000000000..65c7e330a
--- /dev/null
+++ b/src/Specific/solinas32_2e444m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e444m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e444m17/fesquare.v b/src/Specific/solinas32_2e444m17/fesquare.v
new file mode 100644
index 000000000..5299608be
--- /dev/null
+++ b/src/Specific/solinas32_2e444m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e444m17/fesquareDisplay.v b/src/Specific/solinas32_2e444m17/fesquareDisplay.v
new file mode 100644
index 000000000..1662b943c
--- /dev/null
+++ b/src/Specific/solinas32_2e444m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e444m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e444m17/freeze.v b/src/Specific/solinas32_2e444m17/freeze.v
new file mode 100644
index 000000000..6d7c502d4
--- /dev/null
+++ b/src/Specific/solinas32_2e444m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e444m17/freezeDisplay.v b/src/Specific/solinas32_2e444m17/freezeDisplay.v
new file mode 100644
index 000000000..42a3c2418
--- /dev/null
+++ b/src/Specific/solinas32_2e444m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e444m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e448m2e224m1/CurveParameters.v b/src/Specific/solinas32_2e448m2e224m1/CurveParameters.v
new file mode 100644
index 000000000..3b8d4e8ee
--- /dev/null
+++ b/src/Specific/solinas32_2e448m2e224m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^448 - 2^224 - 1
+Base: 28
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 16%nat;
+ bitwidth := 32;
+ s := 2^448;
+ c := [(1, 1); (2^224, 1)];
+ carry_chains := Some [seq 0 (pred 16); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some true;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e448m2e224m1/Synthesis.v b/src/Specific/solinas32_2e448m2e224m1/Synthesis.v
new file mode 100644
index 000000000..7612eaa33
--- /dev/null
+++ b/src/Specific/solinas32_2e448m2e224m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e448m2e224m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e448m2e224m1/compiler.sh b/src/Specific/solinas32_2e448m2e224m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e448m2e224m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e448m2e224m1/femul.v b/src/Specific/solinas32_2e448m2e224m1/femul.v
new file mode 100644
index 000000000..84c220637
--- /dev/null
+++ b/src/Specific/solinas32_2e448m2e224m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e448m2e224m1/femulDisplay.v b/src/Specific/solinas32_2e448m2e224m1/femulDisplay.v
new file mode 100644
index 000000000..b381b7ba9
--- /dev/null
+++ b/src/Specific/solinas32_2e448m2e224m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e448m2e224m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e448m2e224m1/fesquare.v b/src/Specific/solinas32_2e448m2e224m1/fesquare.v
new file mode 100644
index 000000000..9990b11d8
--- /dev/null
+++ b/src/Specific/solinas32_2e448m2e224m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e448m2e224m1/fesquareDisplay.v b/src/Specific/solinas32_2e448m2e224m1/fesquareDisplay.v
new file mode 100644
index 000000000..e604a9c0e
--- /dev/null
+++ b/src/Specific/solinas32_2e448m2e224m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e448m2e224m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e448m2e224m1/freeze.v b/src/Specific/solinas32_2e448m2e224m1/freeze.v
new file mode 100644
index 000000000..261e0fd2b
--- /dev/null
+++ b/src/Specific/solinas32_2e448m2e224m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e448m2e224m1/freezeDisplay.v b/src/Specific/solinas32_2e448m2e224m1/freezeDisplay.v
new file mode 100644
index 000000000..ee1243ab2
--- /dev/null
+++ b/src/Specific/solinas32_2e448m2e224m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e448m2e224m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e450m2e225m1/CurveParameters.v b/src/Specific/solinas32_2e450m2e225m1/CurveParameters.v
new file mode 100644
index 000000000..f7216034e
--- /dev/null
+++ b/src/Specific/solinas32_2e450m2e225m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^450 - 2^225 - 1
+Base: 28
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 16%nat;
+ bitwidth := 32;
+ s := 2^450;
+ c := [(1, 1); (2^225, 1)];
+ carry_chains := Some [seq 0 (pred 16); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some true;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e450m2e225m1/Synthesis.v b/src/Specific/solinas32_2e450m2e225m1/Synthesis.v
new file mode 100644
index 000000000..ce52c3ac1
--- /dev/null
+++ b/src/Specific/solinas32_2e450m2e225m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e450m2e225m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e450m2e225m1/compiler.sh b/src/Specific/solinas32_2e450m2e225m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e450m2e225m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e450m2e225m1/femul.v b/src/Specific/solinas32_2e450m2e225m1/femul.v
new file mode 100644
index 000000000..0c73d608b
--- /dev/null
+++ b/src/Specific/solinas32_2e450m2e225m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e450m2e225m1/femulDisplay.v b/src/Specific/solinas32_2e450m2e225m1/femulDisplay.v
new file mode 100644
index 000000000..dfebb09ef
--- /dev/null
+++ b/src/Specific/solinas32_2e450m2e225m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e450m2e225m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e450m2e225m1/fesquare.v b/src/Specific/solinas32_2e450m2e225m1/fesquare.v
new file mode 100644
index 000000000..8c8e7edc0
--- /dev/null
+++ b/src/Specific/solinas32_2e450m2e225m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e450m2e225m1/fesquareDisplay.v b/src/Specific/solinas32_2e450m2e225m1/fesquareDisplay.v
new file mode 100644
index 000000000..77a35fc93
--- /dev/null
+++ b/src/Specific/solinas32_2e450m2e225m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e450m2e225m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e450m2e225m1/freeze.v b/src/Specific/solinas32_2e450m2e225m1/freeze.v
new file mode 100644
index 000000000..829ea37ec
--- /dev/null
+++ b/src/Specific/solinas32_2e450m2e225m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e450m2e225m1/freezeDisplay.v b/src/Specific/solinas32_2e450m2e225m1/freezeDisplay.v
new file mode 100644
index 000000000..1c562b719
--- /dev/null
+++ b/src/Specific/solinas32_2e450m2e225m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e450m2e225m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e452m3/CurveParameters.v b/src/Specific/solinas32_2e452m3/CurveParameters.v
new file mode 100644
index 000000000..bf185327f
--- /dev/null
+++ b/src/Specific/solinas32_2e452m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^452 - 3
+Base: 25
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 18%nat;
+ bitwidth := 32;
+ s := 2^452;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 18); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e452m3/Synthesis.v b/src/Specific/solinas32_2e452m3/Synthesis.v
new file mode 100644
index 000000000..4a5c260ad
--- /dev/null
+++ b/src/Specific/solinas32_2e452m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e452m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e452m3/compiler.sh b/src/Specific/solinas32_2e452m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e452m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e452m3/femul.v b/src/Specific/solinas32_2e452m3/femul.v
new file mode 100644
index 000000000..7421c0f54
--- /dev/null
+++ b/src/Specific/solinas32_2e452m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e452m3/femulDisplay.v b/src/Specific/solinas32_2e452m3/femulDisplay.v
new file mode 100644
index 000000000..ec8700b70
--- /dev/null
+++ b/src/Specific/solinas32_2e452m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e452m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e452m3/fesquare.v b/src/Specific/solinas32_2e452m3/fesquare.v
new file mode 100644
index 000000000..1e524dcb7
--- /dev/null
+++ b/src/Specific/solinas32_2e452m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e452m3/fesquareDisplay.v b/src/Specific/solinas32_2e452m3/fesquareDisplay.v
new file mode 100644
index 000000000..4d3956887
--- /dev/null
+++ b/src/Specific/solinas32_2e452m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e452m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e452m3/freeze.v b/src/Specific/solinas32_2e452m3/freeze.v
new file mode 100644
index 000000000..ef149e3ba
--- /dev/null
+++ b/src/Specific/solinas32_2e452m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e452m3/freezeDisplay.v b/src/Specific/solinas32_2e452m3/freezeDisplay.v
new file mode 100644
index 000000000..7f4ba0cc0
--- /dev/null
+++ b/src/Specific/solinas32_2e452m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e452m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e468m17/CurveParameters.v b/src/Specific/solinas32_2e468m17/CurveParameters.v
new file mode 100644
index 000000000..0e05fc82f
--- /dev/null
+++ b/src/Specific/solinas32_2e468m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^468 - 17
+Base: 19
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 24%nat;
+ bitwidth := 32;
+ s := 2^468;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 24); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e468m17/Synthesis.v b/src/Specific/solinas32_2e468m17/Synthesis.v
new file mode 100644
index 000000000..999ef6973
--- /dev/null
+++ b/src/Specific/solinas32_2e468m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e468m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e468m17/compiler.sh b/src/Specific/solinas32_2e468m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e468m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e468m17/femul.v b/src/Specific/solinas32_2e468m17/femul.v
new file mode 100644
index 000000000..e36b17051
--- /dev/null
+++ b/src/Specific/solinas32_2e468m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e468m17/femulDisplay.v b/src/Specific/solinas32_2e468m17/femulDisplay.v
new file mode 100644
index 000000000..c8ece38e2
--- /dev/null
+++ b/src/Specific/solinas32_2e468m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e468m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e468m17/fesquare.v b/src/Specific/solinas32_2e468m17/fesquare.v
new file mode 100644
index 000000000..4231e3d62
--- /dev/null
+++ b/src/Specific/solinas32_2e468m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e468m17/fesquareDisplay.v b/src/Specific/solinas32_2e468m17/fesquareDisplay.v
new file mode 100644
index 000000000..89eaef749
--- /dev/null
+++ b/src/Specific/solinas32_2e468m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e468m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e468m17/freeze.v b/src/Specific/solinas32_2e468m17/freeze.v
new file mode 100644
index 000000000..61bfaa79b
--- /dev/null
+++ b/src/Specific/solinas32_2e468m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e468m17/freezeDisplay.v b/src/Specific/solinas32_2e468m17/freezeDisplay.v
new file mode 100644
index 000000000..f15067186
--- /dev/null
+++ b/src/Specific/solinas32_2e468m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e468m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e480m2e240m1/CurveParameters.v b/src/Specific/solinas32_2e480m2e240m1/CurveParameters.v
new file mode 100644
index 000000000..45051abd7
--- /dev/null
+++ b/src/Specific/solinas32_2e480m2e240m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^480 - 2^240 - 1
+Base: 30
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 16%nat;
+ bitwidth := 32;
+ s := 2^480;
+ c := [(1, 1); (2^240, 1)];
+ carry_chains := Some [seq 0 (pred 16); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some true;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e480m2e240m1/Synthesis.v b/src/Specific/solinas32_2e480m2e240m1/Synthesis.v
new file mode 100644
index 000000000..f57a4bd2e
--- /dev/null
+++ b/src/Specific/solinas32_2e480m2e240m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e480m2e240m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e480m2e240m1/compiler.sh b/src/Specific/solinas32_2e480m2e240m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e480m2e240m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e480m2e240m1/femul.v b/src/Specific/solinas32_2e480m2e240m1/femul.v
new file mode 100644
index 000000000..eae613170
--- /dev/null
+++ b/src/Specific/solinas32_2e480m2e240m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e480m2e240m1/femulDisplay.v b/src/Specific/solinas32_2e480m2e240m1/femulDisplay.v
new file mode 100644
index 000000000..16e983c49
--- /dev/null
+++ b/src/Specific/solinas32_2e480m2e240m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e480m2e240m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e480m2e240m1/fesquare.v b/src/Specific/solinas32_2e480m2e240m1/fesquare.v
new file mode 100644
index 000000000..9520f0bd1
--- /dev/null
+++ b/src/Specific/solinas32_2e480m2e240m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e480m2e240m1/fesquareDisplay.v b/src/Specific/solinas32_2e480m2e240m1/fesquareDisplay.v
new file mode 100644
index 000000000..3200570b1
--- /dev/null
+++ b/src/Specific/solinas32_2e480m2e240m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e480m2e240m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e480m2e240m1/freeze.v b/src/Specific/solinas32_2e480m2e240m1/freeze.v
new file mode 100644
index 000000000..8631a693f
--- /dev/null
+++ b/src/Specific/solinas32_2e480m2e240m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e480m2e240m1/freezeDisplay.v b/src/Specific/solinas32_2e480m2e240m1/freezeDisplay.v
new file mode 100644
index 000000000..fd38a1d38
--- /dev/null
+++ b/src/Specific/solinas32_2e480m2e240m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e480m2e240m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e488m17/CurveParameters.v b/src/Specific/solinas32_2e488m17/CurveParameters.v
new file mode 100644
index 000000000..9c4a57305
--- /dev/null
+++ b/src/Specific/solinas32_2e488m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^488 - 17
+Base: 20
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 24%nat;
+ bitwidth := 32;
+ s := 2^488;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 24); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e488m17/Synthesis.v b/src/Specific/solinas32_2e488m17/Synthesis.v
new file mode 100644
index 000000000..1d87bb2a9
--- /dev/null
+++ b/src/Specific/solinas32_2e488m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e488m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e488m17/compiler.sh b/src/Specific/solinas32_2e488m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e488m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e488m17/femul.v b/src/Specific/solinas32_2e488m17/femul.v
new file mode 100644
index 000000000..0e0db057a
--- /dev/null
+++ b/src/Specific/solinas32_2e488m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e488m17/femulDisplay.v b/src/Specific/solinas32_2e488m17/femulDisplay.v
new file mode 100644
index 000000000..573ba1091
--- /dev/null
+++ b/src/Specific/solinas32_2e488m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e488m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e488m17/fesquare.v b/src/Specific/solinas32_2e488m17/fesquare.v
new file mode 100644
index 000000000..d1d14baf6
--- /dev/null
+++ b/src/Specific/solinas32_2e488m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e488m17/fesquareDisplay.v b/src/Specific/solinas32_2e488m17/fesquareDisplay.v
new file mode 100644
index 000000000..c9aa5c7d0
--- /dev/null
+++ b/src/Specific/solinas32_2e488m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e488m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e488m17/freeze.v b/src/Specific/solinas32_2e488m17/freeze.v
new file mode 100644
index 000000000..3fd216fde
--- /dev/null
+++ b/src/Specific/solinas32_2e488m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e488m17/freezeDisplay.v b/src/Specific/solinas32_2e488m17/freezeDisplay.v
new file mode 100644
index 000000000..01e7830d4
--- /dev/null
+++ b/src/Specific/solinas32_2e488m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e488m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e489m21/CurveParameters.v b/src/Specific/solinas32_2e489m21/CurveParameters.v
new file mode 100644
index 000000000..465fcdf01
--- /dev/null
+++ b/src/Specific/solinas32_2e489m21/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^489 - 21
+Base: 18
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 27%nat;
+ bitwidth := 32;
+ s := 2^489;
+ c := [(1, 21)];
+ carry_chains := Some [seq 0 (pred 27); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e489m21/Synthesis.v b/src/Specific/solinas32_2e489m21/Synthesis.v
new file mode 100644
index 000000000..d01329972
--- /dev/null
+++ b/src/Specific/solinas32_2e489m21/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e489m21.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e489m21/compiler.sh b/src/Specific/solinas32_2e489m21/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e489m21/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e489m21/femul.v b/src/Specific/solinas32_2e489m21/femul.v
new file mode 100644
index 000000000..1ac7dc8aa
--- /dev/null
+++ b/src/Specific/solinas32_2e489m21/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e489m21/femulDisplay.v b/src/Specific/solinas32_2e489m21/femulDisplay.v
new file mode 100644
index 000000000..b8f1d0971
--- /dev/null
+++ b/src/Specific/solinas32_2e489m21/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e489m21.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e489m21/fesquare.v b/src/Specific/solinas32_2e489m21/fesquare.v
new file mode 100644
index 000000000..5dbbb15e6
--- /dev/null
+++ b/src/Specific/solinas32_2e489m21/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e489m21/fesquareDisplay.v b/src/Specific/solinas32_2e489m21/fesquareDisplay.v
new file mode 100644
index 000000000..8f90e9196
--- /dev/null
+++ b/src/Specific/solinas32_2e489m21/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e489m21.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e489m21/freeze.v b/src/Specific/solinas32_2e489m21/freeze.v
new file mode 100644
index 000000000..5e5698f13
--- /dev/null
+++ b/src/Specific/solinas32_2e489m21/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e489m21/freezeDisplay.v b/src/Specific/solinas32_2e489m21/freezeDisplay.v
new file mode 100644
index 000000000..52f0276ef
--- /dev/null
+++ b/src/Specific/solinas32_2e489m21/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e489m21.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e495m31/CurveParameters.v b/src/Specific/solinas32_2e495m31/CurveParameters.v
new file mode 100644
index 000000000..ea520666f
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^495 - 31
+Base: 22
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 22%nat;
+ bitwidth := 32;
+ s := 2^495;
+ c := [(1, 31)];
+ carry_chains := Some [seq 0 (pred 22); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e495m31/Synthesis.v b/src/Specific/solinas32_2e495m31/Synthesis.v
new file mode 100644
index 000000000..00de3fafd
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e495m31.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e495m31/compiler.sh b/src/Specific/solinas32_2e495m31/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e495m31/femul.v b/src/Specific/solinas32_2e495m31/femul.v
new file mode 100644
index 000000000..5966a0422
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e495m31/femulDisplay.v b/src/Specific/solinas32_2e495m31/femulDisplay.v
new file mode 100644
index 000000000..84af0b8b7
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e495m31.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e495m31/fesquare.v b/src/Specific/solinas32_2e495m31/fesquare.v
new file mode 100644
index 000000000..3de31e47c
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e495m31/fesquareDisplay.v b/src/Specific/solinas32_2e495m31/fesquareDisplay.v
new file mode 100644
index 000000000..0db5995e7
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e495m31.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e495m31/freeze.v b/src/Specific/solinas32_2e495m31/freeze.v
new file mode 100644
index 000000000..4718230b4
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e495m31/freezeDisplay.v b/src/Specific/solinas32_2e495m31/freezeDisplay.v
new file mode 100644
index 000000000..039f793bb
--- /dev/null
+++ b/src/Specific/solinas32_2e495m31/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e495m31.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e511m187/CurveParameters.v b/src/Specific/solinas32_2e511m187/CurveParameters.v
new file mode 100644
index 000000000..c5bce978f
--- /dev/null
+++ b/src/Specific/solinas32_2e511m187/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^511 - 187
+Base: 18
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 28%nat;
+ bitwidth := 32;
+ s := 2^511;
+ c := [(1, 187)];
+ carry_chains := Some [seq 0 (pred 28); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e511m187/Synthesis.v b/src/Specific/solinas32_2e511m187/Synthesis.v
new file mode 100644
index 000000000..e2ccddf39
--- /dev/null
+++ b/src/Specific/solinas32_2e511m187/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e511m187.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e511m187/compiler.sh b/src/Specific/solinas32_2e511m187/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e511m187/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e511m187/femul.v b/src/Specific/solinas32_2e511m187/femul.v
new file mode 100644
index 000000000..c9e3fd28b
--- /dev/null
+++ b/src/Specific/solinas32_2e511m187/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e511m187/femulDisplay.v b/src/Specific/solinas32_2e511m187/femulDisplay.v
new file mode 100644
index 000000000..37c22439a
--- /dev/null
+++ b/src/Specific/solinas32_2e511m187/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e511m187.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e511m187/fesquare.v b/src/Specific/solinas32_2e511m187/fesquare.v
new file mode 100644
index 000000000..3ae8d534d
--- /dev/null
+++ b/src/Specific/solinas32_2e511m187/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e511m187/fesquareDisplay.v b/src/Specific/solinas32_2e511m187/fesquareDisplay.v
new file mode 100644
index 000000000..6735a28b4
--- /dev/null
+++ b/src/Specific/solinas32_2e511m187/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e511m187.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e511m187/freeze.v b/src/Specific/solinas32_2e511m187/freeze.v
new file mode 100644
index 000000000..06f962ca8
--- /dev/null
+++ b/src/Specific/solinas32_2e511m187/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e511m187/freezeDisplay.v b/src/Specific/solinas32_2e511m187/freezeDisplay.v
new file mode 100644
index 000000000..1e93eb9be
--- /dev/null
+++ b/src/Specific/solinas32_2e511m187/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e511m187.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e511m481/CurveParameters.v b/src/Specific/solinas32_2e511m481/CurveParameters.v
new file mode 100644
index 000000000..839b27383
--- /dev/null
+++ b/src/Specific/solinas32_2e511m481/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^511 - 481
+Base: 18
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 28%nat;
+ bitwidth := 32;
+ s := 2^511;
+ c := [(1, 481)];
+ carry_chains := Some [seq 0 (pred 28); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e511m481/Synthesis.v b/src/Specific/solinas32_2e511m481/Synthesis.v
new file mode 100644
index 000000000..232591803
--- /dev/null
+++ b/src/Specific/solinas32_2e511m481/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e511m481.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e511m481/compiler.sh b/src/Specific/solinas32_2e511m481/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e511m481/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e511m481/femul.v b/src/Specific/solinas32_2e511m481/femul.v
new file mode 100644
index 000000000..c8f938e03
--- /dev/null
+++ b/src/Specific/solinas32_2e511m481/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e511m481/femulDisplay.v b/src/Specific/solinas32_2e511m481/femulDisplay.v
new file mode 100644
index 000000000..4b852f3c2
--- /dev/null
+++ b/src/Specific/solinas32_2e511m481/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e511m481.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e511m481/fesquare.v b/src/Specific/solinas32_2e511m481/fesquare.v
new file mode 100644
index 000000000..379d9e1cd
--- /dev/null
+++ b/src/Specific/solinas32_2e511m481/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e511m481/fesquareDisplay.v b/src/Specific/solinas32_2e511m481/fesquareDisplay.v
new file mode 100644
index 000000000..538facd42
--- /dev/null
+++ b/src/Specific/solinas32_2e511m481/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e511m481.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e511m481/freeze.v b/src/Specific/solinas32_2e511m481/freeze.v
new file mode 100644
index 000000000..a6df1c054
--- /dev/null
+++ b/src/Specific/solinas32_2e511m481/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e511m481/freezeDisplay.v b/src/Specific/solinas32_2e511m481/freezeDisplay.v
new file mode 100644
index 000000000..2a55bd9f1
--- /dev/null
+++ b/src/Specific/solinas32_2e511m481/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e511m481.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e512m569/CurveParameters.v b/src/Specific/solinas32_2e512m569/CurveParameters.v
new file mode 100644
index 000000000..5e3245006
--- /dev/null
+++ b/src/Specific/solinas32_2e512m569/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^512 - 569
+Base: 17
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 30%nat;
+ bitwidth := 32;
+ s := 2^512;
+ c := [(1, 569)];
+ carry_chains := Some [seq 0 (pred 30); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e512m569/Synthesis.v b/src/Specific/solinas32_2e512m569/Synthesis.v
new file mode 100644
index 000000000..507054fc7
--- /dev/null
+++ b/src/Specific/solinas32_2e512m569/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e512m569.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e512m569/compiler.sh b/src/Specific/solinas32_2e512m569/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e512m569/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e512m569/femul.v b/src/Specific/solinas32_2e512m569/femul.v
new file mode 100644
index 000000000..9d14591c0
--- /dev/null
+++ b/src/Specific/solinas32_2e512m569/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e512m569/femulDisplay.v b/src/Specific/solinas32_2e512m569/femulDisplay.v
new file mode 100644
index 000000000..5d0671727
--- /dev/null
+++ b/src/Specific/solinas32_2e512m569/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e512m569.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e512m569/fesquare.v b/src/Specific/solinas32_2e512m569/fesquare.v
new file mode 100644
index 000000000..829642ae3
--- /dev/null
+++ b/src/Specific/solinas32_2e512m569/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e512m569/fesquareDisplay.v b/src/Specific/solinas32_2e512m569/fesquareDisplay.v
new file mode 100644
index 000000000..548291d5b
--- /dev/null
+++ b/src/Specific/solinas32_2e512m569/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e512m569.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e512m569/freeze.v b/src/Specific/solinas32_2e512m569/freeze.v
new file mode 100644
index 000000000..f38a4c5f8
--- /dev/null
+++ b/src/Specific/solinas32_2e512m569/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e512m569/freezeDisplay.v b/src/Specific/solinas32_2e512m569/freezeDisplay.v
new file mode 100644
index 000000000..b8af3964d
--- /dev/null
+++ b/src/Specific/solinas32_2e512m569/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e512m569.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas32_2e521m1/CurveParameters.v b/src/Specific/solinas32_2e521m1/CurveParameters.v
new file mode 100644
index 000000000..6bd17770f
--- /dev/null
+++ b/src/Specific/solinas32_2e521m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^521 - 1
+Base: 26
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 20%nat;
+ bitwidth := 32;
+ s := 2^521;
+ c := [(1, 1)];
+ carry_chains := Some [seq 0 (pred 20); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas32_2e521m1/Synthesis.v b/src/Specific/solinas32_2e521m1/Synthesis.v
new file mode 100644
index 000000000..a18d4ba65
--- /dev/null
+++ b/src/Specific/solinas32_2e521m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas32_2e521m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas32_2e521m1/compiler.sh b/src/Specific/solinas32_2e521m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas32_2e521m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas32_2e521m1/femul.v b/src/Specific/solinas32_2e521m1/femul.v
new file mode 100644
index 000000000..52399b985
--- /dev/null
+++ b/src/Specific/solinas32_2e521m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas32_2e521m1/femulDisplay.v b/src/Specific/solinas32_2e521m1/femulDisplay.v
new file mode 100644
index 000000000..717ee5a0a
--- /dev/null
+++ b/src/Specific/solinas32_2e521m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e521m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas32_2e521m1/fesquare.v b/src/Specific/solinas32_2e521m1/fesquare.v
new file mode 100644
index 000000000..2b0a9c83c
--- /dev/null
+++ b/src/Specific/solinas32_2e521m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas32_2e521m1/fesquareDisplay.v b/src/Specific/solinas32_2e521m1/fesquareDisplay.v
new file mode 100644
index 000000000..a9354494c
--- /dev/null
+++ b/src/Specific/solinas32_2e521m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e521m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas32_2e521m1/freeze.v b/src/Specific/solinas32_2e521m1/freeze.v
new file mode 100644
index 000000000..b8c4a4206
--- /dev/null
+++ b/src/Specific/solinas32_2e521m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas32_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas32_2e521m1/freezeDisplay.v b/src/Specific/solinas32_2e521m1/freezeDisplay.v
new file mode 100644
index 000000000..b5befd5e6
--- /dev/null
+++ b/src/Specific/solinas32_2e521m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas32_2e521m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e127m1/CurveParameters.v b/src/Specific/solinas64_2e127m1/CurveParameters.v
new file mode 100644
index 000000000..8af535441
--- /dev/null
+++ b/src/Specific/solinas64_2e127m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^127 - 1
+Base: 42
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 3%nat;
+ bitwidth := 64;
+ s := 2^127;
+ c := [(1, 1)];
+ carry_chains := Some [seq 0 (pred 3); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e127m1/Synthesis.v b/src/Specific/solinas64_2e127m1/Synthesis.v
new file mode 100644
index 000000000..60a01497a
--- /dev/null
+++ b/src/Specific/solinas64_2e127m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e127m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e127m1/compiler.sh b/src/Specific/solinas64_2e127m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e127m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e127m1/femul.v b/src/Specific/solinas64_2e127m1/femul.v
new file mode 100644
index 000000000..6a32e72ba
--- /dev/null
+++ b/src/Specific/solinas64_2e127m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e127m1/femulDisplay.v b/src/Specific/solinas64_2e127m1/femulDisplay.v
new file mode 100644
index 000000000..2be44b491
--- /dev/null
+++ b/src/Specific/solinas64_2e127m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e127m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e127m1/fesquare.v b/src/Specific/solinas64_2e127m1/fesquare.v
new file mode 100644
index 000000000..2e2bb8680
--- /dev/null
+++ b/src/Specific/solinas64_2e127m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e127m1/fesquareDisplay.v b/src/Specific/solinas64_2e127m1/fesquareDisplay.v
new file mode 100644
index 000000000..6dbed64df
--- /dev/null
+++ b/src/Specific/solinas64_2e127m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e127m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e127m1/freeze.v b/src/Specific/solinas64_2e127m1/freeze.v
new file mode 100644
index 000000000..6fc2987f8
--- /dev/null
+++ b/src/Specific/solinas64_2e127m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e127m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e127m1/freezeDisplay.v b/src/Specific/solinas64_2e127m1/freezeDisplay.v
new file mode 100644
index 000000000..93b331e46
--- /dev/null
+++ b/src/Specific/solinas64_2e127m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e127m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e129m25/CurveParameters.v b/src/Specific/solinas64_2e129m25/CurveParameters.v
new file mode 100644
index 000000000..7f4e537a8
--- /dev/null
+++ b/src/Specific/solinas64_2e129m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^129 - 25
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^129;
+ c := [(1, 25)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e129m25/Synthesis.v b/src/Specific/solinas64_2e129m25/Synthesis.v
new file mode 100644
index 000000000..c789fba2e
--- /dev/null
+++ b/src/Specific/solinas64_2e129m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e129m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e129m25/compiler.sh b/src/Specific/solinas64_2e129m25/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e129m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e129m25/femul.v b/src/Specific/solinas64_2e129m25/femul.v
new file mode 100644
index 000000000..c90c753f3
--- /dev/null
+++ b/src/Specific/solinas64_2e129m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e129m25/femulDisplay.v b/src/Specific/solinas64_2e129m25/femulDisplay.v
new file mode 100644
index 000000000..9e19e4bb7
--- /dev/null
+++ b/src/Specific/solinas64_2e129m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e129m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e129m25/fesquare.v b/src/Specific/solinas64_2e129m25/fesquare.v
new file mode 100644
index 000000000..376e8011f
--- /dev/null
+++ b/src/Specific/solinas64_2e129m25/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e129m25/fesquareDisplay.v b/src/Specific/solinas64_2e129m25/fesquareDisplay.v
new file mode 100644
index 000000000..0421e33cd
--- /dev/null
+++ b/src/Specific/solinas64_2e129m25/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e129m25.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e129m25/freeze.v b/src/Specific/solinas64_2e129m25/freeze.v
new file mode 100644
index 000000000..7e2f08b5a
--- /dev/null
+++ b/src/Specific/solinas64_2e129m25/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e129m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e129m25/freezeDisplay.v b/src/Specific/solinas64_2e129m25/freezeDisplay.v
new file mode 100644
index 000000000..eb16da649
--- /dev/null
+++ b/src/Specific/solinas64_2e129m25/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e129m25.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e130m5/CurveParameters.v b/src/Specific/solinas64_2e130m5/CurveParameters.v
new file mode 100644
index 000000000..bb1ca71ec
--- /dev/null
+++ b/src/Specific/solinas64_2e130m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^130 - 5
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^130;
+ c := [(1, 5)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e130m5/Synthesis.v b/src/Specific/solinas64_2e130m5/Synthesis.v
new file mode 100644
index 000000000..373f46625
--- /dev/null
+++ b/src/Specific/solinas64_2e130m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e130m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e130m5/compiler.sh b/src/Specific/solinas64_2e130m5/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e130m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e130m5/femul.v b/src/Specific/solinas64_2e130m5/femul.v
new file mode 100644
index 000000000..46646f68f
--- /dev/null
+++ b/src/Specific/solinas64_2e130m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e130m5/femulDisplay.v b/src/Specific/solinas64_2e130m5/femulDisplay.v
new file mode 100644
index 000000000..c7952bff0
--- /dev/null
+++ b/src/Specific/solinas64_2e130m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e130m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e130m5/fesquare.v b/src/Specific/solinas64_2e130m5/fesquare.v
new file mode 100644
index 000000000..ae5980253
--- /dev/null
+++ b/src/Specific/solinas64_2e130m5/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e130m5/fesquareDisplay.v b/src/Specific/solinas64_2e130m5/fesquareDisplay.v
new file mode 100644
index 000000000..8b9f10023
--- /dev/null
+++ b/src/Specific/solinas64_2e130m5/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e130m5.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e130m5/freeze.v b/src/Specific/solinas64_2e130m5/freeze.v
new file mode 100644
index 000000000..c5ef0d3b6
--- /dev/null
+++ b/src/Specific/solinas64_2e130m5/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e130m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e130m5/freezeDisplay.v b/src/Specific/solinas64_2e130m5/freezeDisplay.v
new file mode 100644
index 000000000..e6268545b
--- /dev/null
+++ b/src/Specific/solinas64_2e130m5/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e130m5.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e137m13/CurveParameters.v b/src/Specific/solinas64_2e137m13/CurveParameters.v
new file mode 100644
index 000000000..6692e0d94
--- /dev/null
+++ b/src/Specific/solinas64_2e137m13/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^137 - 13
+Base: 34
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^137;
+ c := [(1, 13)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e137m13/Synthesis.v b/src/Specific/solinas64_2e137m13/Synthesis.v
new file mode 100644
index 000000000..f730d0502
--- /dev/null
+++ b/src/Specific/solinas64_2e137m13/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e137m13.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e137m13/compiler.sh b/src/Specific/solinas64_2e137m13/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e137m13/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e137m13/femul.v b/src/Specific/solinas64_2e137m13/femul.v
new file mode 100644
index 000000000..ddb855b06
--- /dev/null
+++ b/src/Specific/solinas64_2e137m13/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e137m13/femulDisplay.v b/src/Specific/solinas64_2e137m13/femulDisplay.v
new file mode 100644
index 000000000..740a92ac7
--- /dev/null
+++ b/src/Specific/solinas64_2e137m13/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e137m13.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e137m13/fesquare.v b/src/Specific/solinas64_2e137m13/fesquare.v
new file mode 100644
index 000000000..9c43cb9bf
--- /dev/null
+++ b/src/Specific/solinas64_2e137m13/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e137m13/fesquareDisplay.v b/src/Specific/solinas64_2e137m13/fesquareDisplay.v
new file mode 100644
index 000000000..dffec2348
--- /dev/null
+++ b/src/Specific/solinas64_2e137m13/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e137m13.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e137m13/freeze.v b/src/Specific/solinas64_2e137m13/freeze.v
new file mode 100644
index 000000000..ab3a2dae7
--- /dev/null
+++ b/src/Specific/solinas64_2e137m13/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e137m13.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e137m13/freezeDisplay.v b/src/Specific/solinas64_2e137m13/freezeDisplay.v
new file mode 100644
index 000000000..b8cd20fdb
--- /dev/null
+++ b/src/Specific/solinas64_2e137m13/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e137m13.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e140m27/CurveParameters.v b/src/Specific/solinas64_2e140m27/CurveParameters.v
new file mode 100644
index 000000000..b202655ba
--- /dev/null
+++ b/src/Specific/solinas64_2e140m27/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^140 - 27
+Base: 35
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^140;
+ c := [(1, 27)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e140m27/Synthesis.v b/src/Specific/solinas64_2e140m27/Synthesis.v
new file mode 100644
index 000000000..c121fa6b2
--- /dev/null
+++ b/src/Specific/solinas64_2e140m27/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e140m27.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e140m27/compiler.sh b/src/Specific/solinas64_2e140m27/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e140m27/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e140m27/femul.v b/src/Specific/solinas64_2e140m27/femul.v
new file mode 100644
index 000000000..93d679f88
--- /dev/null
+++ b/src/Specific/solinas64_2e140m27/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e140m27/femulDisplay.v b/src/Specific/solinas64_2e140m27/femulDisplay.v
new file mode 100644
index 000000000..e298ddcdf
--- /dev/null
+++ b/src/Specific/solinas64_2e140m27/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e140m27.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e140m27/fesquare.v b/src/Specific/solinas64_2e140m27/fesquare.v
new file mode 100644
index 000000000..861cd6abe
--- /dev/null
+++ b/src/Specific/solinas64_2e140m27/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e140m27/fesquareDisplay.v b/src/Specific/solinas64_2e140m27/fesquareDisplay.v
new file mode 100644
index 000000000..1d6a6d968
--- /dev/null
+++ b/src/Specific/solinas64_2e140m27/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e140m27.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e140m27/freeze.v b/src/Specific/solinas64_2e140m27/freeze.v
new file mode 100644
index 000000000..ac55c52b6
--- /dev/null
+++ b/src/Specific/solinas64_2e140m27/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e140m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e140m27/freezeDisplay.v b/src/Specific/solinas64_2e140m27/freezeDisplay.v
new file mode 100644
index 000000000..33a23db46
--- /dev/null
+++ b/src/Specific/solinas64_2e140m27/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e140m27.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e141m9/CurveParameters.v b/src/Specific/solinas64_2e141m9/CurveParameters.v
new file mode 100644
index 000000000..c8ba55e0c
--- /dev/null
+++ b/src/Specific/solinas64_2e141m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^141 - 9
+Base: 35
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^141;
+ c := [(1, 9)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e141m9/Synthesis.v b/src/Specific/solinas64_2e141m9/Synthesis.v
new file mode 100644
index 000000000..a2a6f2318
--- /dev/null
+++ b/src/Specific/solinas64_2e141m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e141m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e141m9/compiler.sh b/src/Specific/solinas64_2e141m9/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e141m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e141m9/femul.v b/src/Specific/solinas64_2e141m9/femul.v
new file mode 100644
index 000000000..4f059bb2d
--- /dev/null
+++ b/src/Specific/solinas64_2e141m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e141m9/femulDisplay.v b/src/Specific/solinas64_2e141m9/femulDisplay.v
new file mode 100644
index 000000000..e6ea27b80
--- /dev/null
+++ b/src/Specific/solinas64_2e141m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e141m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e141m9/fesquare.v b/src/Specific/solinas64_2e141m9/fesquare.v
new file mode 100644
index 000000000..a06e1b888
--- /dev/null
+++ b/src/Specific/solinas64_2e141m9/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e141m9/fesquareDisplay.v b/src/Specific/solinas64_2e141m9/fesquareDisplay.v
new file mode 100644
index 000000000..7ada9803a
--- /dev/null
+++ b/src/Specific/solinas64_2e141m9/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e141m9.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e141m9/freeze.v b/src/Specific/solinas64_2e141m9/freeze.v
new file mode 100644
index 000000000..99b1f6275
--- /dev/null
+++ b/src/Specific/solinas64_2e141m9/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e141m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e141m9/freezeDisplay.v b/src/Specific/solinas64_2e141m9/freezeDisplay.v
new file mode 100644
index 000000000..efafb2746
--- /dev/null
+++ b/src/Specific/solinas64_2e141m9/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e141m9.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e150m3/CurveParameters.v b/src/Specific/solinas64_2e150m3/CurveParameters.v
new file mode 100644
index 000000000..5f26d8bd0
--- /dev/null
+++ b/src/Specific/solinas64_2e150m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^150 - 3
+Base: 37
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^150;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e150m3/Synthesis.v b/src/Specific/solinas64_2e150m3/Synthesis.v
new file mode 100644
index 000000000..61c60fc06
--- /dev/null
+++ b/src/Specific/solinas64_2e150m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e150m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e150m3/compiler.sh b/src/Specific/solinas64_2e150m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e150m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e150m3/femul.v b/src/Specific/solinas64_2e150m3/femul.v
new file mode 100644
index 000000000..93dc6f33b
--- /dev/null
+++ b/src/Specific/solinas64_2e150m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e150m3/femulDisplay.v b/src/Specific/solinas64_2e150m3/femulDisplay.v
new file mode 100644
index 000000000..1bf41c9e3
--- /dev/null
+++ b/src/Specific/solinas64_2e150m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e150m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e150m3/fesquare.v b/src/Specific/solinas64_2e150m3/fesquare.v
new file mode 100644
index 000000000..ae9a5f780
--- /dev/null
+++ b/src/Specific/solinas64_2e150m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e150m3/fesquareDisplay.v b/src/Specific/solinas64_2e150m3/fesquareDisplay.v
new file mode 100644
index 000000000..1c1fcce5a
--- /dev/null
+++ b/src/Specific/solinas64_2e150m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e150m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e150m3/freeze.v b/src/Specific/solinas64_2e150m3/freeze.v
new file mode 100644
index 000000000..a48b95941
--- /dev/null
+++ b/src/Specific/solinas64_2e150m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e150m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e150m3/freezeDisplay.v b/src/Specific/solinas64_2e150m3/freezeDisplay.v
new file mode 100644
index 000000000..f7008b0c4
--- /dev/null
+++ b/src/Specific/solinas64_2e150m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e150m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e150m5/CurveParameters.v b/src/Specific/solinas64_2e150m5/CurveParameters.v
new file mode 100644
index 000000000..2746bcc0a
--- /dev/null
+++ b/src/Specific/solinas64_2e150m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^150 - 5
+Base: 37
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^150;
+ c := [(1, 5)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e150m5/Synthesis.v b/src/Specific/solinas64_2e150m5/Synthesis.v
new file mode 100644
index 000000000..ee7ba7afe
--- /dev/null
+++ b/src/Specific/solinas64_2e150m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e150m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e150m5/compiler.sh b/src/Specific/solinas64_2e150m5/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e150m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e150m5/femul.v b/src/Specific/solinas64_2e150m5/femul.v
new file mode 100644
index 000000000..bd3f3ccce
--- /dev/null
+++ b/src/Specific/solinas64_2e150m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e150m5/femulDisplay.v b/src/Specific/solinas64_2e150m5/femulDisplay.v
new file mode 100644
index 000000000..ea44959a3
--- /dev/null
+++ b/src/Specific/solinas64_2e150m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e150m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e150m5/fesquare.v b/src/Specific/solinas64_2e150m5/fesquare.v
new file mode 100644
index 000000000..dd9df6ff8
--- /dev/null
+++ b/src/Specific/solinas64_2e150m5/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e150m5/fesquareDisplay.v b/src/Specific/solinas64_2e150m5/fesquareDisplay.v
new file mode 100644
index 000000000..d736ddbea
--- /dev/null
+++ b/src/Specific/solinas64_2e150m5/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e150m5.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e150m5/freeze.v b/src/Specific/solinas64_2e150m5/freeze.v
new file mode 100644
index 000000000..d9be7c053
--- /dev/null
+++ b/src/Specific/solinas64_2e150m5/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e150m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e150m5/freezeDisplay.v b/src/Specific/solinas64_2e150m5/freezeDisplay.v
new file mode 100644
index 000000000..b91ff46bc
--- /dev/null
+++ b/src/Specific/solinas64_2e150m5/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e150m5.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e152m17/CurveParameters.v b/src/Specific/solinas64_2e152m17/CurveParameters.v
new file mode 100644
index 000000000..44bd56245
--- /dev/null
+++ b/src/Specific/solinas64_2e152m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^152 - 17
+Base: 38
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^152;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e152m17/Synthesis.v b/src/Specific/solinas64_2e152m17/Synthesis.v
new file mode 100644
index 000000000..488b23101
--- /dev/null
+++ b/src/Specific/solinas64_2e152m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e152m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e152m17/compiler.sh b/src/Specific/solinas64_2e152m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e152m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e152m17/femul.v b/src/Specific/solinas64_2e152m17/femul.v
new file mode 100644
index 000000000..cf75e2e1b
--- /dev/null
+++ b/src/Specific/solinas64_2e152m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e152m17/femulDisplay.v b/src/Specific/solinas64_2e152m17/femulDisplay.v
new file mode 100644
index 000000000..1b71d1890
--- /dev/null
+++ b/src/Specific/solinas64_2e152m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e152m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e152m17/fesquare.v b/src/Specific/solinas64_2e152m17/fesquare.v
new file mode 100644
index 000000000..bda80b139
--- /dev/null
+++ b/src/Specific/solinas64_2e152m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e152m17/fesquareDisplay.v b/src/Specific/solinas64_2e152m17/fesquareDisplay.v
new file mode 100644
index 000000000..5893cb455
--- /dev/null
+++ b/src/Specific/solinas64_2e152m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e152m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e152m17/freeze.v b/src/Specific/solinas64_2e152m17/freeze.v
new file mode 100644
index 000000000..b5e58a256
--- /dev/null
+++ b/src/Specific/solinas64_2e152m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e152m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e152m17/freezeDisplay.v b/src/Specific/solinas64_2e152m17/freezeDisplay.v
new file mode 100644
index 000000000..4ad427d5a
--- /dev/null
+++ b/src/Specific/solinas64_2e152m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e152m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e158m15/CurveParameters.v b/src/Specific/solinas64_2e158m15/CurveParameters.v
new file mode 100644
index 000000000..53e537787
--- /dev/null
+++ b/src/Specific/solinas64_2e158m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^158 - 15
+Base: 39
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^158;
+ c := [(1, 15)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e158m15/Synthesis.v b/src/Specific/solinas64_2e158m15/Synthesis.v
new file mode 100644
index 000000000..caf8b53c9
--- /dev/null
+++ b/src/Specific/solinas64_2e158m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e158m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e158m15/compiler.sh b/src/Specific/solinas64_2e158m15/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e158m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e158m15/femul.v b/src/Specific/solinas64_2e158m15/femul.v
new file mode 100644
index 000000000..aa97e498f
--- /dev/null
+++ b/src/Specific/solinas64_2e158m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e158m15/femulDisplay.v b/src/Specific/solinas64_2e158m15/femulDisplay.v
new file mode 100644
index 000000000..591dc3c95
--- /dev/null
+++ b/src/Specific/solinas64_2e158m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e158m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e158m15/fesquare.v b/src/Specific/solinas64_2e158m15/fesquare.v
new file mode 100644
index 000000000..35ebec493
--- /dev/null
+++ b/src/Specific/solinas64_2e158m15/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e158m15/fesquareDisplay.v b/src/Specific/solinas64_2e158m15/fesquareDisplay.v
new file mode 100644
index 000000000..986616c7e
--- /dev/null
+++ b/src/Specific/solinas64_2e158m15/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e158m15.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e158m15/freeze.v b/src/Specific/solinas64_2e158m15/freeze.v
new file mode 100644
index 000000000..88e853f1b
--- /dev/null
+++ b/src/Specific/solinas64_2e158m15/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e158m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e158m15/freezeDisplay.v b/src/Specific/solinas64_2e158m15/freezeDisplay.v
new file mode 100644
index 000000000..0284531c6
--- /dev/null
+++ b/src/Specific/solinas64_2e158m15/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e158m15.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e165m25/CurveParameters.v b/src/Specific/solinas64_2e165m25/CurveParameters.v
new file mode 100644
index 000000000..02fed3fb8
--- /dev/null
+++ b/src/Specific/solinas64_2e165m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^165 - 25
+Base: 41
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^165;
+ c := [(1, 25)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e165m25/Synthesis.v b/src/Specific/solinas64_2e165m25/Synthesis.v
new file mode 100644
index 000000000..e5a0e11da
--- /dev/null
+++ b/src/Specific/solinas64_2e165m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e165m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e165m25/compiler.sh b/src/Specific/solinas64_2e165m25/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e165m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e165m25/femul.v b/src/Specific/solinas64_2e165m25/femul.v
new file mode 100644
index 000000000..d313d1047
--- /dev/null
+++ b/src/Specific/solinas64_2e165m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e165m25/femulDisplay.v b/src/Specific/solinas64_2e165m25/femulDisplay.v
new file mode 100644
index 000000000..56c6e52a1
--- /dev/null
+++ b/src/Specific/solinas64_2e165m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e165m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e165m25/fesquare.v b/src/Specific/solinas64_2e165m25/fesquare.v
new file mode 100644
index 000000000..97cdfae25
--- /dev/null
+++ b/src/Specific/solinas64_2e165m25/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e165m25/fesquareDisplay.v b/src/Specific/solinas64_2e165m25/fesquareDisplay.v
new file mode 100644
index 000000000..93396cb72
--- /dev/null
+++ b/src/Specific/solinas64_2e165m25/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e165m25.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e165m25/freeze.v b/src/Specific/solinas64_2e165m25/freeze.v
new file mode 100644
index 000000000..eee4a5682
--- /dev/null
+++ b/src/Specific/solinas64_2e165m25/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e165m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e165m25/freezeDisplay.v b/src/Specific/solinas64_2e165m25/freezeDisplay.v
new file mode 100644
index 000000000..0d10f079f
--- /dev/null
+++ b/src/Specific/solinas64_2e165m25/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e165m25.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e166m5/CurveParameters.v b/src/Specific/solinas64_2e166m5/CurveParameters.v
new file mode 100644
index 000000000..a67ae8cbf
--- /dev/null
+++ b/src/Specific/solinas64_2e166m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^166 - 5
+Base: 41
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^166;
+ c := [(1, 5)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e166m5/Synthesis.v b/src/Specific/solinas64_2e166m5/Synthesis.v
new file mode 100644
index 000000000..75358af7f
--- /dev/null
+++ b/src/Specific/solinas64_2e166m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e166m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e166m5/compiler.sh b/src/Specific/solinas64_2e166m5/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e166m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e166m5/femul.v b/src/Specific/solinas64_2e166m5/femul.v
new file mode 100644
index 000000000..a497284b4
--- /dev/null
+++ b/src/Specific/solinas64_2e166m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e166m5/femulDisplay.v b/src/Specific/solinas64_2e166m5/femulDisplay.v
new file mode 100644
index 000000000..8a95c5b48
--- /dev/null
+++ b/src/Specific/solinas64_2e166m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e166m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e166m5/fesquare.v b/src/Specific/solinas64_2e166m5/fesquare.v
new file mode 100644
index 000000000..e32d86d3f
--- /dev/null
+++ b/src/Specific/solinas64_2e166m5/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e166m5/fesquareDisplay.v b/src/Specific/solinas64_2e166m5/fesquareDisplay.v
new file mode 100644
index 000000000..524fb948d
--- /dev/null
+++ b/src/Specific/solinas64_2e166m5/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e166m5.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e166m5/freeze.v b/src/Specific/solinas64_2e166m5/freeze.v
new file mode 100644
index 000000000..714f783e3
--- /dev/null
+++ b/src/Specific/solinas64_2e166m5/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e166m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e166m5/freezeDisplay.v b/src/Specific/solinas64_2e166m5/freezeDisplay.v
new file mode 100644
index 000000000..01fb689ae
--- /dev/null
+++ b/src/Specific/solinas64_2e166m5/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e166m5.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e171m19/CurveParameters.v b/src/Specific/solinas64_2e171m19/CurveParameters.v
new file mode 100644
index 000000000..d6798ba7c
--- /dev/null
+++ b/src/Specific/solinas64_2e171m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^171 - 19
+Base: 34
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^171;
+ c := [(1, 19)];
+ carry_chains := Some [seq 0 (pred 5); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e171m19/Synthesis.v b/src/Specific/solinas64_2e171m19/Synthesis.v
new file mode 100644
index 000000000..20ce488df
--- /dev/null
+++ b/src/Specific/solinas64_2e171m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e171m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e171m19/compiler.sh b/src/Specific/solinas64_2e171m19/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e171m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e171m19/femul.v b/src/Specific/solinas64_2e171m19/femul.v
new file mode 100644
index 000000000..9cee13f45
--- /dev/null
+++ b/src/Specific/solinas64_2e171m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e171m19/femulDisplay.v b/src/Specific/solinas64_2e171m19/femulDisplay.v
new file mode 100644
index 000000000..e9944b463
--- /dev/null
+++ b/src/Specific/solinas64_2e171m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e171m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e171m19/fesquare.v b/src/Specific/solinas64_2e171m19/fesquare.v
new file mode 100644
index 000000000..68d9032bc
--- /dev/null
+++ b/src/Specific/solinas64_2e171m19/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e171m19/fesquareDisplay.v b/src/Specific/solinas64_2e171m19/fesquareDisplay.v
new file mode 100644
index 000000000..e6ed3e08d
--- /dev/null
+++ b/src/Specific/solinas64_2e171m19/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e171m19.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e171m19/freeze.v b/src/Specific/solinas64_2e171m19/freeze.v
new file mode 100644
index 000000000..d0429d5e9
--- /dev/null
+++ b/src/Specific/solinas64_2e171m19/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e171m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e171m19/freezeDisplay.v b/src/Specific/solinas64_2e171m19/freezeDisplay.v
new file mode 100644
index 000000000..883e0dc63
--- /dev/null
+++ b/src/Specific/solinas64_2e171m19/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e171m19.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e174m17/CurveParameters.v b/src/Specific/solinas64_2e174m17/CurveParameters.v
new file mode 100644
index 000000000..cf37cd033
--- /dev/null
+++ b/src/Specific/solinas64_2e174m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^174 - 17
+Base: 43
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^174;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e174m17/Synthesis.v b/src/Specific/solinas64_2e174m17/Synthesis.v
new file mode 100644
index 000000000..029f73481
--- /dev/null
+++ b/src/Specific/solinas64_2e174m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e174m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e174m17/compiler.sh b/src/Specific/solinas64_2e174m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e174m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e174m17/femul.v b/src/Specific/solinas64_2e174m17/femul.v
new file mode 100644
index 000000000..8dc10586c
--- /dev/null
+++ b/src/Specific/solinas64_2e174m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e174m17/femulDisplay.v b/src/Specific/solinas64_2e174m17/femulDisplay.v
new file mode 100644
index 000000000..27b53286b
--- /dev/null
+++ b/src/Specific/solinas64_2e174m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e174m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e174m17/fesquare.v b/src/Specific/solinas64_2e174m17/fesquare.v
new file mode 100644
index 000000000..fbe8c70cf
--- /dev/null
+++ b/src/Specific/solinas64_2e174m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e174m17/fesquareDisplay.v b/src/Specific/solinas64_2e174m17/fesquareDisplay.v
new file mode 100644
index 000000000..1d7b2326f
--- /dev/null
+++ b/src/Specific/solinas64_2e174m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e174m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e174m17/freeze.v b/src/Specific/solinas64_2e174m17/freeze.v
new file mode 100644
index 000000000..dcb7ce4a5
--- /dev/null
+++ b/src/Specific/solinas64_2e174m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e174m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e174m17/freezeDisplay.v b/src/Specific/solinas64_2e174m17/freezeDisplay.v
new file mode 100644
index 000000000..8a07d8341
--- /dev/null
+++ b/src/Specific/solinas64_2e174m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e174m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e174m3/CurveParameters.v b/src/Specific/solinas64_2e174m3/CurveParameters.v
new file mode 100644
index 000000000..d0c91efc6
--- /dev/null
+++ b/src/Specific/solinas64_2e174m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^174 - 3
+Base: 43
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^174;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e174m3/Synthesis.v b/src/Specific/solinas64_2e174m3/Synthesis.v
new file mode 100644
index 000000000..b4fbb2ee6
--- /dev/null
+++ b/src/Specific/solinas64_2e174m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e174m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e174m3/compiler.sh b/src/Specific/solinas64_2e174m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e174m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e174m3/femul.v b/src/Specific/solinas64_2e174m3/femul.v
new file mode 100644
index 000000000..65ad73687
--- /dev/null
+++ b/src/Specific/solinas64_2e174m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e174m3/femulDisplay.v b/src/Specific/solinas64_2e174m3/femulDisplay.v
new file mode 100644
index 000000000..df4ed6352
--- /dev/null
+++ b/src/Specific/solinas64_2e174m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e174m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e174m3/fesquare.v b/src/Specific/solinas64_2e174m3/fesquare.v
new file mode 100644
index 000000000..d8363dd6c
--- /dev/null
+++ b/src/Specific/solinas64_2e174m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e174m3/fesquareDisplay.v b/src/Specific/solinas64_2e174m3/fesquareDisplay.v
new file mode 100644
index 000000000..93752164b
--- /dev/null
+++ b/src/Specific/solinas64_2e174m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e174m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e174m3/freeze.v b/src/Specific/solinas64_2e174m3/freeze.v
new file mode 100644
index 000000000..e02586feb
--- /dev/null
+++ b/src/Specific/solinas64_2e174m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e174m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e174m3/freezeDisplay.v b/src/Specific/solinas64_2e174m3/freezeDisplay.v
new file mode 100644
index 000000000..9444f48c9
--- /dev/null
+++ b/src/Specific/solinas64_2e174m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e174m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e189m25/CurveParameters.v b/src/Specific/solinas64_2e189m25/CurveParameters.v
new file mode 100644
index 000000000..082da31cb
--- /dev/null
+++ b/src/Specific/solinas64_2e189m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^189 - 25
+Base: 31
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^189;
+ c := [(1, 25)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e189m25/Synthesis.v b/src/Specific/solinas64_2e189m25/Synthesis.v
new file mode 100644
index 000000000..c8b5fd91f
--- /dev/null
+++ b/src/Specific/solinas64_2e189m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e189m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e189m25/compiler.sh b/src/Specific/solinas64_2e189m25/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e189m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e189m25/femul.v b/src/Specific/solinas64_2e189m25/femul.v
new file mode 100644
index 000000000..8f1ac0330
--- /dev/null
+++ b/src/Specific/solinas64_2e189m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e189m25/femulDisplay.v b/src/Specific/solinas64_2e189m25/femulDisplay.v
new file mode 100644
index 000000000..a00e9f296
--- /dev/null
+++ b/src/Specific/solinas64_2e189m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e189m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e189m25/fesquare.v b/src/Specific/solinas64_2e189m25/fesquare.v
new file mode 100644
index 000000000..fec65e5fa
--- /dev/null
+++ b/src/Specific/solinas64_2e189m25/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e189m25/fesquareDisplay.v b/src/Specific/solinas64_2e189m25/fesquareDisplay.v
new file mode 100644
index 000000000..118157107
--- /dev/null
+++ b/src/Specific/solinas64_2e189m25/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e189m25.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e189m25/freeze.v b/src/Specific/solinas64_2e189m25/freeze.v
new file mode 100644
index 000000000..2906a9cc7
--- /dev/null
+++ b/src/Specific/solinas64_2e189m25/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e189m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e189m25/freezeDisplay.v b/src/Specific/solinas64_2e189m25/freezeDisplay.v
new file mode 100644
index 000000000..3ee63b8c1
--- /dev/null
+++ b/src/Specific/solinas64_2e189m25/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e189m25.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e190m11/CurveParameters.v b/src/Specific/solinas64_2e190m11/CurveParameters.v
new file mode 100644
index 000000000..82d0e9712
--- /dev/null
+++ b/src/Specific/solinas64_2e190m11/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^190 - 11
+Base: 38
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^190;
+ c := [(1, 11)];
+ carry_chains := Some [seq 0 (pred 5); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e190m11/Synthesis.v b/src/Specific/solinas64_2e190m11/Synthesis.v
new file mode 100644
index 000000000..ce9a154d4
--- /dev/null
+++ b/src/Specific/solinas64_2e190m11/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e190m11.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e190m11/compiler.sh b/src/Specific/solinas64_2e190m11/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e190m11/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e190m11/femul.v b/src/Specific/solinas64_2e190m11/femul.v
new file mode 100644
index 000000000..3deab4092
--- /dev/null
+++ b/src/Specific/solinas64_2e190m11/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e190m11/femulDisplay.v b/src/Specific/solinas64_2e190m11/femulDisplay.v
new file mode 100644
index 000000000..e5ae3858b
--- /dev/null
+++ b/src/Specific/solinas64_2e190m11/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e190m11.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e190m11/fesquare.v b/src/Specific/solinas64_2e190m11/fesquare.v
new file mode 100644
index 000000000..edaf8a1a3
--- /dev/null
+++ b/src/Specific/solinas64_2e190m11/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e190m11/fesquareDisplay.v b/src/Specific/solinas64_2e190m11/fesquareDisplay.v
new file mode 100644
index 000000000..20cc004d6
--- /dev/null
+++ b/src/Specific/solinas64_2e190m11/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e190m11.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e190m11/freeze.v b/src/Specific/solinas64_2e190m11/freeze.v
new file mode 100644
index 000000000..638dd3dd6
--- /dev/null
+++ b/src/Specific/solinas64_2e190m11/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e190m11.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e190m11/freezeDisplay.v b/src/Specific/solinas64_2e190m11/freezeDisplay.v
new file mode 100644
index 000000000..e12e31057
--- /dev/null
+++ b/src/Specific/solinas64_2e190m11/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e190m11.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e191m19/CurveParameters.v b/src/Specific/solinas64_2e191m19/CurveParameters.v
new file mode 100644
index 000000000..9d7333943
--- /dev/null
+++ b/src/Specific/solinas64_2e191m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^191 - 19
+Base: 38
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^191;
+ c := [(1, 19)];
+ carry_chains := Some [seq 0 (pred 5); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e191m19/Synthesis.v b/src/Specific/solinas64_2e191m19/Synthesis.v
new file mode 100644
index 000000000..2bd22832a
--- /dev/null
+++ b/src/Specific/solinas64_2e191m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e191m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e191m19/compiler.sh b/src/Specific/solinas64_2e191m19/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e191m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e191m19/femul.v b/src/Specific/solinas64_2e191m19/femul.v
new file mode 100644
index 000000000..de522d215
--- /dev/null
+++ b/src/Specific/solinas64_2e191m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e191m19/femulDisplay.v b/src/Specific/solinas64_2e191m19/femulDisplay.v
new file mode 100644
index 000000000..27384537c
--- /dev/null
+++ b/src/Specific/solinas64_2e191m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e191m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e191m19/fesquare.v b/src/Specific/solinas64_2e191m19/fesquare.v
new file mode 100644
index 000000000..e7321b8ed
--- /dev/null
+++ b/src/Specific/solinas64_2e191m19/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e191m19/fesquareDisplay.v b/src/Specific/solinas64_2e191m19/fesquareDisplay.v
new file mode 100644
index 000000000..b96a3ef5a
--- /dev/null
+++ b/src/Specific/solinas64_2e191m19/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e191m19.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e191m19/freeze.v b/src/Specific/solinas64_2e191m19/freeze.v
new file mode 100644
index 000000000..8c416c3fe
--- /dev/null
+++ b/src/Specific/solinas64_2e191m19/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e191m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e191m19/freezeDisplay.v b/src/Specific/solinas64_2e191m19/freezeDisplay.v
new file mode 100644
index 000000000..001af740c
--- /dev/null
+++ b/src/Specific/solinas64_2e191m19/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e191m19.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e192m2e64m1/CurveParameters.v b/src/Specific/solinas64_2e192m2e64m1/CurveParameters.v
new file mode 100644
index 000000000..9505f7190
--- /dev/null
+++ b/src/Specific/solinas64_2e192m2e64m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^192 - 2^64 - 1
+Base: 48
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 4%nat;
+ bitwidth := 64;
+ s := 2^192;
+ c := [(1, 1); (2^64, 1)];
+ carry_chains := Some [seq 0 (pred 4); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e192m2e64m1/Synthesis.v b/src/Specific/solinas64_2e192m2e64m1/Synthesis.v
new file mode 100644
index 000000000..173dd36e5
--- /dev/null
+++ b/src/Specific/solinas64_2e192m2e64m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e192m2e64m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e192m2e64m1/compiler.sh b/src/Specific/solinas64_2e192m2e64m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e192m2e64m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e192m2e64m1/femul.v b/src/Specific/solinas64_2e192m2e64m1/femul.v
new file mode 100644
index 000000000..6db3540ea
--- /dev/null
+++ b/src/Specific/solinas64_2e192m2e64m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e192m2e64m1/femulDisplay.v b/src/Specific/solinas64_2e192m2e64m1/femulDisplay.v
new file mode 100644
index 000000000..edc129565
--- /dev/null
+++ b/src/Specific/solinas64_2e192m2e64m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e192m2e64m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e192m2e64m1/fesquare.v b/src/Specific/solinas64_2e192m2e64m1/fesquare.v
new file mode 100644
index 000000000..793f280ea
--- /dev/null
+++ b/src/Specific/solinas64_2e192m2e64m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e192m2e64m1/fesquareDisplay.v b/src/Specific/solinas64_2e192m2e64m1/fesquareDisplay.v
new file mode 100644
index 000000000..ab5627e83
--- /dev/null
+++ b/src/Specific/solinas64_2e192m2e64m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e192m2e64m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e192m2e64m1/freeze.v b/src/Specific/solinas64_2e192m2e64m1/freeze.v
new file mode 100644
index 000000000..093270d8b
--- /dev/null
+++ b/src/Specific/solinas64_2e192m2e64m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e192m2e64m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e192m2e64m1/freezeDisplay.v b/src/Specific/solinas64_2e192m2e64m1/freezeDisplay.v
new file mode 100644
index 000000000..41a9caa45
--- /dev/null
+++ b/src/Specific/solinas64_2e192m2e64m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e192m2e64m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e194m33/CurveParameters.v b/src/Specific/solinas64_2e194m33/CurveParameters.v
new file mode 100644
index 000000000..c0d42734b
--- /dev/null
+++ b/src/Specific/solinas64_2e194m33/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^194 - 33
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^194;
+ c := [(1, 33)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e194m33/Synthesis.v b/src/Specific/solinas64_2e194m33/Synthesis.v
new file mode 100644
index 000000000..5aa9ba293
--- /dev/null
+++ b/src/Specific/solinas64_2e194m33/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e194m33.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e194m33/compiler.sh b/src/Specific/solinas64_2e194m33/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e194m33/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e194m33/femul.v b/src/Specific/solinas64_2e194m33/femul.v
new file mode 100644
index 000000000..1fb6e9859
--- /dev/null
+++ b/src/Specific/solinas64_2e194m33/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e194m33/femulDisplay.v b/src/Specific/solinas64_2e194m33/femulDisplay.v
new file mode 100644
index 000000000..6adef65aa
--- /dev/null
+++ b/src/Specific/solinas64_2e194m33/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e194m33.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e194m33/fesquare.v b/src/Specific/solinas64_2e194m33/fesquare.v
new file mode 100644
index 000000000..af1ee2fcc
--- /dev/null
+++ b/src/Specific/solinas64_2e194m33/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e194m33/fesquareDisplay.v b/src/Specific/solinas64_2e194m33/fesquareDisplay.v
new file mode 100644
index 000000000..ad7e9d4e8
--- /dev/null
+++ b/src/Specific/solinas64_2e194m33/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e194m33.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e194m33/freeze.v b/src/Specific/solinas64_2e194m33/freeze.v
new file mode 100644
index 000000000..6e040077e
--- /dev/null
+++ b/src/Specific/solinas64_2e194m33/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e194m33.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e194m33/freezeDisplay.v b/src/Specific/solinas64_2e194m33/freezeDisplay.v
new file mode 100644
index 000000000..636798cc1
--- /dev/null
+++ b/src/Specific/solinas64_2e194m33/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e194m33.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e196m15/CurveParameters.v b/src/Specific/solinas64_2e196m15/CurveParameters.v
new file mode 100644
index 000000000..465198151
--- /dev/null
+++ b/src/Specific/solinas64_2e196m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^196 - 15
+Base: 39
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^196;
+ c := [(1, 15)];
+ carry_chains := Some [seq 0 (pred 5); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e196m15/Synthesis.v b/src/Specific/solinas64_2e196m15/Synthesis.v
new file mode 100644
index 000000000..d75e126e4
--- /dev/null
+++ b/src/Specific/solinas64_2e196m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e196m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e196m15/compiler.sh b/src/Specific/solinas64_2e196m15/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e196m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e196m15/femul.v b/src/Specific/solinas64_2e196m15/femul.v
new file mode 100644
index 000000000..9ddf9db05
--- /dev/null
+++ b/src/Specific/solinas64_2e196m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e196m15/femulDisplay.v b/src/Specific/solinas64_2e196m15/femulDisplay.v
new file mode 100644
index 000000000..77c8c881b
--- /dev/null
+++ b/src/Specific/solinas64_2e196m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e196m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e196m15/fesquare.v b/src/Specific/solinas64_2e196m15/fesquare.v
new file mode 100644
index 000000000..1f4b0923c
--- /dev/null
+++ b/src/Specific/solinas64_2e196m15/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e196m15/fesquareDisplay.v b/src/Specific/solinas64_2e196m15/fesquareDisplay.v
new file mode 100644
index 000000000..f05bbc636
--- /dev/null
+++ b/src/Specific/solinas64_2e196m15/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e196m15.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e196m15/freeze.v b/src/Specific/solinas64_2e196m15/freeze.v
new file mode 100644
index 000000000..94f78409d
--- /dev/null
+++ b/src/Specific/solinas64_2e196m15/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e196m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e196m15/freezeDisplay.v b/src/Specific/solinas64_2e196m15/freezeDisplay.v
new file mode 100644
index 000000000..db100631c
--- /dev/null
+++ b/src/Specific/solinas64_2e196m15/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e196m15.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e198m17/CurveParameters.v b/src/Specific/solinas64_2e198m17/CurveParameters.v
new file mode 100644
index 000000000..2a5a102d0
--- /dev/null
+++ b/src/Specific/solinas64_2e198m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^198 - 17
+Base: 33
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^198;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e198m17/Synthesis.v b/src/Specific/solinas64_2e198m17/Synthesis.v
new file mode 100644
index 000000000..6477384b8
--- /dev/null
+++ b/src/Specific/solinas64_2e198m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e198m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e198m17/compiler.sh b/src/Specific/solinas64_2e198m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e198m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e198m17/femul.v b/src/Specific/solinas64_2e198m17/femul.v
new file mode 100644
index 000000000..7bb9dbce7
--- /dev/null
+++ b/src/Specific/solinas64_2e198m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e198m17/femulDisplay.v b/src/Specific/solinas64_2e198m17/femulDisplay.v
new file mode 100644
index 000000000..76527fa7e
--- /dev/null
+++ b/src/Specific/solinas64_2e198m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e198m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e198m17/fesquare.v b/src/Specific/solinas64_2e198m17/fesquare.v
new file mode 100644
index 000000000..d02a29ad1
--- /dev/null
+++ b/src/Specific/solinas64_2e198m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e198m17/fesquareDisplay.v b/src/Specific/solinas64_2e198m17/fesquareDisplay.v
new file mode 100644
index 000000000..a52937443
--- /dev/null
+++ b/src/Specific/solinas64_2e198m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e198m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e198m17/freeze.v b/src/Specific/solinas64_2e198m17/freeze.v
new file mode 100644
index 000000000..108d627e3
--- /dev/null
+++ b/src/Specific/solinas64_2e198m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e198m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e198m17/freezeDisplay.v b/src/Specific/solinas64_2e198m17/freezeDisplay.v
new file mode 100644
index 000000000..d91b19627
--- /dev/null
+++ b/src/Specific/solinas64_2e198m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e198m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e206m5/CurveParameters.v b/src/Specific/solinas64_2e206m5/CurveParameters.v
new file mode 100644
index 000000000..23248bbc1
--- /dev/null
+++ b/src/Specific/solinas64_2e206m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^206 - 5
+Base: 41
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^206;
+ c := [(1, 5)];
+ carry_chains := Some [seq 0 (pred 5); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e206m5/Synthesis.v b/src/Specific/solinas64_2e206m5/Synthesis.v
new file mode 100644
index 000000000..082a81b6f
--- /dev/null
+++ b/src/Specific/solinas64_2e206m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e206m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e206m5/compiler.sh b/src/Specific/solinas64_2e206m5/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e206m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e206m5/femul.v b/src/Specific/solinas64_2e206m5/femul.v
new file mode 100644
index 000000000..d344ad1db
--- /dev/null
+++ b/src/Specific/solinas64_2e206m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e206m5/femulDisplay.v b/src/Specific/solinas64_2e206m5/femulDisplay.v
new file mode 100644
index 000000000..c8411822c
--- /dev/null
+++ b/src/Specific/solinas64_2e206m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e206m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e206m5/fesquare.v b/src/Specific/solinas64_2e206m5/fesquare.v
new file mode 100644
index 000000000..c06188613
--- /dev/null
+++ b/src/Specific/solinas64_2e206m5/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e206m5/fesquareDisplay.v b/src/Specific/solinas64_2e206m5/fesquareDisplay.v
new file mode 100644
index 000000000..6d3c236c9
--- /dev/null
+++ b/src/Specific/solinas64_2e206m5/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e206m5.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e206m5/freeze.v b/src/Specific/solinas64_2e206m5/freeze.v
new file mode 100644
index 000000000..4fc9ca136
--- /dev/null
+++ b/src/Specific/solinas64_2e206m5/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e206m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e206m5/freezeDisplay.v b/src/Specific/solinas64_2e206m5/freezeDisplay.v
new file mode 100644
index 000000000..1b4a4fa57
--- /dev/null
+++ b/src/Specific/solinas64_2e206m5/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e206m5.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e212m29/CurveParameters.v b/src/Specific/solinas64_2e212m29/CurveParameters.v
new file mode 100644
index 000000000..81e47c234
--- /dev/null
+++ b/src/Specific/solinas64_2e212m29/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^212 - 29
+Base: 35
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^212;
+ c := [(1, 29)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e212m29/Synthesis.v b/src/Specific/solinas64_2e212m29/Synthesis.v
new file mode 100644
index 000000000..9a529751b
--- /dev/null
+++ b/src/Specific/solinas64_2e212m29/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e212m29.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e212m29/compiler.sh b/src/Specific/solinas64_2e212m29/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e212m29/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e212m29/femul.v b/src/Specific/solinas64_2e212m29/femul.v
new file mode 100644
index 000000000..f2f8e3eec
--- /dev/null
+++ b/src/Specific/solinas64_2e212m29/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e212m29/femulDisplay.v b/src/Specific/solinas64_2e212m29/femulDisplay.v
new file mode 100644
index 000000000..2074b50a5
--- /dev/null
+++ b/src/Specific/solinas64_2e212m29/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e212m29.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e212m29/fesquare.v b/src/Specific/solinas64_2e212m29/fesquare.v
new file mode 100644
index 000000000..3af075eee
--- /dev/null
+++ b/src/Specific/solinas64_2e212m29/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e212m29/fesquareDisplay.v b/src/Specific/solinas64_2e212m29/fesquareDisplay.v
new file mode 100644
index 000000000..156918001
--- /dev/null
+++ b/src/Specific/solinas64_2e212m29/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e212m29.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e212m29/freeze.v b/src/Specific/solinas64_2e212m29/freeze.v
new file mode 100644
index 000000000..759086c34
--- /dev/null
+++ b/src/Specific/solinas64_2e212m29/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e212m29.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e212m29/freezeDisplay.v b/src/Specific/solinas64_2e212m29/freezeDisplay.v
new file mode 100644
index 000000000..ac1c329ec
--- /dev/null
+++ b/src/Specific/solinas64_2e212m29/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e212m29.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e213m3/CurveParameters.v b/src/Specific/solinas64_2e213m3/CurveParameters.v
new file mode 100644
index 000000000..0219e4f79
--- /dev/null
+++ b/src/Specific/solinas64_2e213m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^213 - 3
+Base: 35
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^213;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e213m3/Synthesis.v b/src/Specific/solinas64_2e213m3/Synthesis.v
new file mode 100644
index 000000000..b800aea08
--- /dev/null
+++ b/src/Specific/solinas64_2e213m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e213m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e213m3/compiler.sh b/src/Specific/solinas64_2e213m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e213m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e213m3/femul.v b/src/Specific/solinas64_2e213m3/femul.v
new file mode 100644
index 000000000..3e1d54398
--- /dev/null
+++ b/src/Specific/solinas64_2e213m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e213m3/femulDisplay.v b/src/Specific/solinas64_2e213m3/femulDisplay.v
new file mode 100644
index 000000000..586758dfe
--- /dev/null
+++ b/src/Specific/solinas64_2e213m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e213m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e213m3/fesquare.v b/src/Specific/solinas64_2e213m3/fesquare.v
new file mode 100644
index 000000000..663ba494d
--- /dev/null
+++ b/src/Specific/solinas64_2e213m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e213m3/fesquareDisplay.v b/src/Specific/solinas64_2e213m3/fesquareDisplay.v
new file mode 100644
index 000000000..c69e35c73
--- /dev/null
+++ b/src/Specific/solinas64_2e213m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e213m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e213m3/freeze.v b/src/Specific/solinas64_2e213m3/freeze.v
new file mode 100644
index 000000000..a2feaf97f
--- /dev/null
+++ b/src/Specific/solinas64_2e213m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e213m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e213m3/freezeDisplay.v b/src/Specific/solinas64_2e213m3/freezeDisplay.v
new file mode 100644
index 000000000..f149478b0
--- /dev/null
+++ b/src/Specific/solinas64_2e213m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e213m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e216m2e108m1/CurveParameters.v b/src/Specific/solinas64_2e216m2e108m1/CurveParameters.v
new file mode 100644
index 000000000..266c44e73
--- /dev/null
+++ b/src/Specific/solinas64_2e216m2e108m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^216 - 2^108 - 1
+Base: 43
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^216;
+ c := [(1, 1); (2^108, 1)];
+ carry_chains := Some [seq 0 (pred 5); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some true;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e216m2e108m1/Synthesis.v b/src/Specific/solinas64_2e216m2e108m1/Synthesis.v
new file mode 100644
index 000000000..d98e57c9f
--- /dev/null
+++ b/src/Specific/solinas64_2e216m2e108m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e216m2e108m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e216m2e108m1/compiler.sh b/src/Specific/solinas64_2e216m2e108m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e216m2e108m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e216m2e108m1/femul.v b/src/Specific/solinas64_2e216m2e108m1/femul.v
new file mode 100644
index 000000000..ee74263f8
--- /dev/null
+++ b/src/Specific/solinas64_2e216m2e108m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e216m2e108m1/femulDisplay.v b/src/Specific/solinas64_2e216m2e108m1/femulDisplay.v
new file mode 100644
index 000000000..acbeab03f
--- /dev/null
+++ b/src/Specific/solinas64_2e216m2e108m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e216m2e108m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e216m2e108m1/fesquare.v b/src/Specific/solinas64_2e216m2e108m1/fesquare.v
new file mode 100644
index 000000000..824b92f04
--- /dev/null
+++ b/src/Specific/solinas64_2e216m2e108m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e216m2e108m1/fesquareDisplay.v b/src/Specific/solinas64_2e216m2e108m1/fesquareDisplay.v
new file mode 100644
index 000000000..f0f5c22f9
--- /dev/null
+++ b/src/Specific/solinas64_2e216m2e108m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e216m2e108m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e216m2e108m1/freeze.v b/src/Specific/solinas64_2e216m2e108m1/freeze.v
new file mode 100644
index 000000000..d8d9008c9
--- /dev/null
+++ b/src/Specific/solinas64_2e216m2e108m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e216m2e108m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e216m2e108m1/freezeDisplay.v b/src/Specific/solinas64_2e216m2e108m1/freezeDisplay.v
new file mode 100644
index 000000000..317f1086c
--- /dev/null
+++ b/src/Specific/solinas64_2e216m2e108m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e216m2e108m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e221m3/CurveParameters.v b/src/Specific/solinas64_2e221m3/CurveParameters.v
new file mode 100644
index 000000000..a7d90d497
--- /dev/null
+++ b/src/Specific/solinas64_2e221m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^221 - 3
+Base: 44
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^221;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 5); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e221m3/Synthesis.v b/src/Specific/solinas64_2e221m3/Synthesis.v
new file mode 100644
index 000000000..74abf23e4
--- /dev/null
+++ b/src/Specific/solinas64_2e221m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e221m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e221m3/compiler.sh b/src/Specific/solinas64_2e221m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e221m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e221m3/femul.v b/src/Specific/solinas64_2e221m3/femul.v
new file mode 100644
index 000000000..e832b8bde
--- /dev/null
+++ b/src/Specific/solinas64_2e221m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e221m3/femulDisplay.v b/src/Specific/solinas64_2e221m3/femulDisplay.v
new file mode 100644
index 000000000..76aa68781
--- /dev/null
+++ b/src/Specific/solinas64_2e221m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e221m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e221m3/fesquare.v b/src/Specific/solinas64_2e221m3/fesquare.v
new file mode 100644
index 000000000..f07ba64ff
--- /dev/null
+++ b/src/Specific/solinas64_2e221m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e221m3/fesquareDisplay.v b/src/Specific/solinas64_2e221m3/fesquareDisplay.v
new file mode 100644
index 000000000..27cf9549a
--- /dev/null
+++ b/src/Specific/solinas64_2e221m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e221m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e221m3/freeze.v b/src/Specific/solinas64_2e221m3/freeze.v
new file mode 100644
index 000000000..08fa26edb
--- /dev/null
+++ b/src/Specific/solinas64_2e221m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e221m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e221m3/freezeDisplay.v b/src/Specific/solinas64_2e221m3/freezeDisplay.v
new file mode 100644
index 000000000..82c507e1d
--- /dev/null
+++ b/src/Specific/solinas64_2e221m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e221m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e222m117/CurveParameters.v b/src/Specific/solinas64_2e222m117/CurveParameters.v
new file mode 100644
index 000000000..e4d3701ae
--- /dev/null
+++ b/src/Specific/solinas64_2e222m117/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^222 - 117
+Base: 37
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^222;
+ c := [(1, 117)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e222m117/Synthesis.v b/src/Specific/solinas64_2e222m117/Synthesis.v
new file mode 100644
index 000000000..2cbf2f98a
--- /dev/null
+++ b/src/Specific/solinas64_2e222m117/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e222m117.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e222m117/compiler.sh b/src/Specific/solinas64_2e222m117/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e222m117/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e222m117/femul.v b/src/Specific/solinas64_2e222m117/femul.v
new file mode 100644
index 000000000..003b9de75
--- /dev/null
+++ b/src/Specific/solinas64_2e222m117/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e222m117/femulDisplay.v b/src/Specific/solinas64_2e222m117/femulDisplay.v
new file mode 100644
index 000000000..aaa0fc7e7
--- /dev/null
+++ b/src/Specific/solinas64_2e222m117/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e222m117.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e222m117/fesquare.v b/src/Specific/solinas64_2e222m117/fesquare.v
new file mode 100644
index 000000000..3c56d3496
--- /dev/null
+++ b/src/Specific/solinas64_2e222m117/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e222m117/fesquareDisplay.v b/src/Specific/solinas64_2e222m117/fesquareDisplay.v
new file mode 100644
index 000000000..04d5ae461
--- /dev/null
+++ b/src/Specific/solinas64_2e222m117/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e222m117.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e222m117/freeze.v b/src/Specific/solinas64_2e222m117/freeze.v
new file mode 100644
index 000000000..1113a6619
--- /dev/null
+++ b/src/Specific/solinas64_2e222m117/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e222m117.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e222m117/freezeDisplay.v b/src/Specific/solinas64_2e222m117/freezeDisplay.v
new file mode 100644
index 000000000..dd83c8d47
--- /dev/null
+++ b/src/Specific/solinas64_2e222m117/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e222m117.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e224m2e96p1/CurveParameters.v b/src/Specific/solinas64_2e224m2e96p1/CurveParameters.v
new file mode 100644
index 000000000..6c35c0027
--- /dev/null
+++ b/src/Specific/solinas64_2e224m2e96p1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^224 - 2^96 + 1
+Base: 37
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^224;
+ c := [(1, -1); (2^96, 1)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e224m2e96p1/Synthesis.v b/src/Specific/solinas64_2e224m2e96p1/Synthesis.v
new file mode 100644
index 000000000..b2b342a2a
--- /dev/null
+++ b/src/Specific/solinas64_2e224m2e96p1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e224m2e96p1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e224m2e96p1/compiler.sh b/src/Specific/solinas64_2e224m2e96p1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e224m2e96p1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e224m2e96p1/femul.v b/src/Specific/solinas64_2e224m2e96p1/femul.v
new file mode 100644
index 000000000..04a891c54
--- /dev/null
+++ b/src/Specific/solinas64_2e224m2e96p1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e224m2e96p1/femulDisplay.v b/src/Specific/solinas64_2e224m2e96p1/femulDisplay.v
new file mode 100644
index 000000000..32a63986c
--- /dev/null
+++ b/src/Specific/solinas64_2e224m2e96p1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e224m2e96p1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e224m2e96p1/fesquare.v b/src/Specific/solinas64_2e224m2e96p1/fesquare.v
new file mode 100644
index 000000000..0f6ee91ea
--- /dev/null
+++ b/src/Specific/solinas64_2e224m2e96p1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e224m2e96p1/fesquareDisplay.v b/src/Specific/solinas64_2e224m2e96p1/fesquareDisplay.v
new file mode 100644
index 000000000..bdac77212
--- /dev/null
+++ b/src/Specific/solinas64_2e224m2e96p1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e224m2e96p1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e224m2e96p1/freeze.v b/src/Specific/solinas64_2e224m2e96p1/freeze.v
new file mode 100644
index 000000000..c50291623
--- /dev/null
+++ b/src/Specific/solinas64_2e224m2e96p1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e224m2e96p1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e224m2e96p1/freezeDisplay.v b/src/Specific/solinas64_2e224m2e96p1/freezeDisplay.v
new file mode 100644
index 000000000..e6b91534b
--- /dev/null
+++ b/src/Specific/solinas64_2e224m2e96p1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e224m2e96p1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e226m5/CurveParameters.v b/src/Specific/solinas64_2e226m5/CurveParameters.v
new file mode 100644
index 000000000..840ad51e4
--- /dev/null
+++ b/src/Specific/solinas64_2e226m5/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^226 - 5
+Base: 45
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^226;
+ c := [(1, 5)];
+ carry_chains := Some [seq 0 (pred 5); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e226m5/Synthesis.v b/src/Specific/solinas64_2e226m5/Synthesis.v
new file mode 100644
index 000000000..a1d599e8c
--- /dev/null
+++ b/src/Specific/solinas64_2e226m5/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e226m5.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e226m5/compiler.sh b/src/Specific/solinas64_2e226m5/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e226m5/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e226m5/femul.v b/src/Specific/solinas64_2e226m5/femul.v
new file mode 100644
index 000000000..35499708c
--- /dev/null
+++ b/src/Specific/solinas64_2e226m5/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e226m5/femulDisplay.v b/src/Specific/solinas64_2e226m5/femulDisplay.v
new file mode 100644
index 000000000..259d90aed
--- /dev/null
+++ b/src/Specific/solinas64_2e226m5/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e226m5.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e226m5/fesquare.v b/src/Specific/solinas64_2e226m5/fesquare.v
new file mode 100644
index 000000000..199a7540a
--- /dev/null
+++ b/src/Specific/solinas64_2e226m5/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e226m5/fesquareDisplay.v b/src/Specific/solinas64_2e226m5/fesquareDisplay.v
new file mode 100644
index 000000000..7247b9dfe
--- /dev/null
+++ b/src/Specific/solinas64_2e226m5/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e226m5.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e226m5/freeze.v b/src/Specific/solinas64_2e226m5/freeze.v
new file mode 100644
index 000000000..edc65f60d
--- /dev/null
+++ b/src/Specific/solinas64_2e226m5/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e226m5.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e226m5/freezeDisplay.v b/src/Specific/solinas64_2e226m5/freezeDisplay.v
new file mode 100644
index 000000000..6830a52fa
--- /dev/null
+++ b/src/Specific/solinas64_2e226m5/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e226m5.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e230m27/CurveParameters.v b/src/Specific/solinas64_2e230m27/CurveParameters.v
new file mode 100644
index 000000000..b2529f018
--- /dev/null
+++ b/src/Specific/solinas64_2e230m27/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^230 - 27
+Base: 46
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^230;
+ c := [(1, 27)];
+ carry_chains := Some [seq 0 (pred 5); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e230m27/Synthesis.v b/src/Specific/solinas64_2e230m27/Synthesis.v
new file mode 100644
index 000000000..e39d5a577
--- /dev/null
+++ b/src/Specific/solinas64_2e230m27/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e230m27.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e230m27/compiler.sh b/src/Specific/solinas64_2e230m27/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e230m27/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e230m27/femul.v b/src/Specific/solinas64_2e230m27/femul.v
new file mode 100644
index 000000000..31fa7948d
--- /dev/null
+++ b/src/Specific/solinas64_2e230m27/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e230m27/femulDisplay.v b/src/Specific/solinas64_2e230m27/femulDisplay.v
new file mode 100644
index 000000000..f570f64c0
--- /dev/null
+++ b/src/Specific/solinas64_2e230m27/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e230m27.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e230m27/fesquare.v b/src/Specific/solinas64_2e230m27/fesquare.v
new file mode 100644
index 000000000..613acc13f
--- /dev/null
+++ b/src/Specific/solinas64_2e230m27/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e230m27/fesquareDisplay.v b/src/Specific/solinas64_2e230m27/fesquareDisplay.v
new file mode 100644
index 000000000..2f9fe044a
--- /dev/null
+++ b/src/Specific/solinas64_2e230m27/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e230m27.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e230m27/freeze.v b/src/Specific/solinas64_2e230m27/freeze.v
new file mode 100644
index 000000000..5f89077dd
--- /dev/null
+++ b/src/Specific/solinas64_2e230m27/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e230m27.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e230m27/freezeDisplay.v b/src/Specific/solinas64_2e230m27/freezeDisplay.v
new file mode 100644
index 000000000..107ab205c
--- /dev/null
+++ b/src/Specific/solinas64_2e230m27/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e230m27.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e235m15/CurveParameters.v b/src/Specific/solinas64_2e235m15/CurveParameters.v
new file mode 100644
index 000000000..4a1e49247
--- /dev/null
+++ b/src/Specific/solinas64_2e235m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^235 - 15
+Base: 47
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^235;
+ c := [(1, 15)];
+ carry_chains := Some [seq 0 (pred 5); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e235m15/Synthesis.v b/src/Specific/solinas64_2e235m15/Synthesis.v
new file mode 100644
index 000000000..22da94029
--- /dev/null
+++ b/src/Specific/solinas64_2e235m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e235m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e235m15/compiler.sh b/src/Specific/solinas64_2e235m15/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e235m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e235m15/femul.v b/src/Specific/solinas64_2e235m15/femul.v
new file mode 100644
index 000000000..0af89ab4e
--- /dev/null
+++ b/src/Specific/solinas64_2e235m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e235m15/femulDisplay.v b/src/Specific/solinas64_2e235m15/femulDisplay.v
new file mode 100644
index 000000000..dc0c198d1
--- /dev/null
+++ b/src/Specific/solinas64_2e235m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e235m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e235m15/fesquare.v b/src/Specific/solinas64_2e235m15/fesquare.v
new file mode 100644
index 000000000..96d151af7
--- /dev/null
+++ b/src/Specific/solinas64_2e235m15/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e235m15/fesquareDisplay.v b/src/Specific/solinas64_2e235m15/fesquareDisplay.v
new file mode 100644
index 000000000..92c659f79
--- /dev/null
+++ b/src/Specific/solinas64_2e235m15/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e235m15.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e235m15/freeze.v b/src/Specific/solinas64_2e235m15/freeze.v
new file mode 100644
index 000000000..660941de1
--- /dev/null
+++ b/src/Specific/solinas64_2e235m15/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e235m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e235m15/freezeDisplay.v b/src/Specific/solinas64_2e235m15/freezeDisplay.v
new file mode 100644
index 000000000..2cd9f2e74
--- /dev/null
+++ b/src/Specific/solinas64_2e235m15/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e235m15.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e243m9/CurveParameters.v b/src/Specific/solinas64_2e243m9/CurveParameters.v
new file mode 100644
index 000000000..1dc4e1640
--- /dev/null
+++ b/src/Specific/solinas64_2e243m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^243 - 9
+Base: 40
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^243;
+ c := [(1, 9)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e243m9/Synthesis.v b/src/Specific/solinas64_2e243m9/Synthesis.v
new file mode 100644
index 000000000..ce273c501
--- /dev/null
+++ b/src/Specific/solinas64_2e243m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e243m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e243m9/compiler.sh b/src/Specific/solinas64_2e243m9/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e243m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e243m9/femul.v b/src/Specific/solinas64_2e243m9/femul.v
new file mode 100644
index 000000000..1236a315f
--- /dev/null
+++ b/src/Specific/solinas64_2e243m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e243m9/femulDisplay.v b/src/Specific/solinas64_2e243m9/femulDisplay.v
new file mode 100644
index 000000000..bf73a45c8
--- /dev/null
+++ b/src/Specific/solinas64_2e243m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e243m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e243m9/fesquare.v b/src/Specific/solinas64_2e243m9/fesquare.v
new file mode 100644
index 000000000..dd63ef01b
--- /dev/null
+++ b/src/Specific/solinas64_2e243m9/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e243m9/fesquareDisplay.v b/src/Specific/solinas64_2e243m9/fesquareDisplay.v
new file mode 100644
index 000000000..5fefb5929
--- /dev/null
+++ b/src/Specific/solinas64_2e243m9/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e243m9.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e243m9/freeze.v b/src/Specific/solinas64_2e243m9/freeze.v
new file mode 100644
index 000000000..f733c0429
--- /dev/null
+++ b/src/Specific/solinas64_2e243m9/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e243m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e243m9/freezeDisplay.v b/src/Specific/solinas64_2e243m9/freezeDisplay.v
new file mode 100644
index 000000000..3c95d37bf
--- /dev/null
+++ b/src/Specific/solinas64_2e243m9/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e243m9.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e251m9/CurveParameters.v b/src/Specific/solinas64_2e251m9/CurveParameters.v
new file mode 100644
index 000000000..52ba2f753
--- /dev/null
+++ b/src/Specific/solinas64_2e251m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^251 - 9
+Base: 25
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 64;
+ s := 2^251;
+ c := [(1, 9)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e251m9/Synthesis.v b/src/Specific/solinas64_2e251m9/Synthesis.v
new file mode 100644
index 000000000..f9a98dc55
--- /dev/null
+++ b/src/Specific/solinas64_2e251m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e251m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e251m9/compiler.sh b/src/Specific/solinas64_2e251m9/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e251m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e251m9/femul.v b/src/Specific/solinas64_2e251m9/femul.v
new file mode 100644
index 000000000..beaa1363a
--- /dev/null
+++ b/src/Specific/solinas64_2e251m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e251m9/femulDisplay.v b/src/Specific/solinas64_2e251m9/femulDisplay.v
new file mode 100644
index 000000000..bf25adf15
--- /dev/null
+++ b/src/Specific/solinas64_2e251m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e251m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e251m9/fesquare.v b/src/Specific/solinas64_2e251m9/fesquare.v
new file mode 100644
index 000000000..2d696d431
--- /dev/null
+++ b/src/Specific/solinas64_2e251m9/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e251m9/fesquareDisplay.v b/src/Specific/solinas64_2e251m9/fesquareDisplay.v
new file mode 100644
index 000000000..9b3a2158f
--- /dev/null
+++ b/src/Specific/solinas64_2e251m9/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e251m9.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e251m9/freeze.v b/src/Specific/solinas64_2e251m9/freeze.v
new file mode 100644
index 000000000..6401b8d23
--- /dev/null
+++ b/src/Specific/solinas64_2e251m9/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e251m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e251m9/freezeDisplay.v b/src/Specific/solinas64_2e251m9/freezeDisplay.v
new file mode 100644
index 000000000..a77edefb8
--- /dev/null
+++ b/src/Specific/solinas64_2e251m9/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e251m9.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e255m19/CurveParameters.v b/src/Specific/solinas64_2e255m19/CurveParameters.v
new file mode 100644
index 000000000..f113a3dcc
--- /dev/null
+++ b/src/Specific/solinas64_2e255m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^255 - 19
+Base: 42
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^255;
+ c := [(1, 19)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e255m19/Synthesis.v b/src/Specific/solinas64_2e255m19/Synthesis.v
new file mode 100644
index 000000000..07488b7d5
--- /dev/null
+++ b/src/Specific/solinas64_2e255m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e255m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e255m19/compiler.sh b/src/Specific/solinas64_2e255m19/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e255m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e255m19/femul.v b/src/Specific/solinas64_2e255m19/femul.v
new file mode 100644
index 000000000..03161ea6a
--- /dev/null
+++ b/src/Specific/solinas64_2e255m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e255m19/femulDisplay.v b/src/Specific/solinas64_2e255m19/femulDisplay.v
new file mode 100644
index 000000000..128297d93
--- /dev/null
+++ b/src/Specific/solinas64_2e255m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e255m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e255m19/fesquare.v b/src/Specific/solinas64_2e255m19/fesquare.v
new file mode 100644
index 000000000..f284b7bcd
--- /dev/null
+++ b/src/Specific/solinas64_2e255m19/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e255m19/fesquareDisplay.v b/src/Specific/solinas64_2e255m19/fesquareDisplay.v
new file mode 100644
index 000000000..350a1d7cc
--- /dev/null
+++ b/src/Specific/solinas64_2e255m19/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e255m19.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e255m19/freeze.v b/src/Specific/solinas64_2e255m19/freeze.v
new file mode 100644
index 000000000..30c397bd1
--- /dev/null
+++ b/src/Specific/solinas64_2e255m19/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e255m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e255m19/freezeDisplay.v b/src/Specific/solinas64_2e255m19/freezeDisplay.v
new file mode 100644
index 000000000..e5fa5fc6d
--- /dev/null
+++ b/src/Specific/solinas64_2e255m19/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e255m19.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e255m2e4m2e1m1/CurveParameters.v b/src/Specific/solinas64_2e255m2e4m2e1m1/CurveParameters.v
new file mode 100644
index 000000000..a27a0ba4b
--- /dev/null
+++ b/src/Specific/solinas64_2e255m2e4m2e1m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^255 - 2^4 - 2^1 - 1
+Base: 51
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^255;
+ c := [(1, 1); (2^1, 1); (2^4, 1)];
+ carry_chains := Some [seq 0 (pred 5); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e255m2e4m2e1m1/Synthesis.v b/src/Specific/solinas64_2e255m2e4m2e1m1/Synthesis.v
new file mode 100644
index 000000000..02aa8bdc8
--- /dev/null
+++ b/src/Specific/solinas64_2e255m2e4m2e1m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e255m2e4m2e1m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e255m2e4m2e1m1/compiler.sh b/src/Specific/solinas64_2e255m2e4m2e1m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e255m2e4m2e1m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e255m2e4m2e1m1/femul.v b/src/Specific/solinas64_2e255m2e4m2e1m1/femul.v
new file mode 100644
index 000000000..14820c29b
--- /dev/null
+++ b/src/Specific/solinas64_2e255m2e4m2e1m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e255m2e4m2e1m1/femulDisplay.v b/src/Specific/solinas64_2e255m2e4m2e1m1/femulDisplay.v
new file mode 100644
index 000000000..b6b202d0c
--- /dev/null
+++ b/src/Specific/solinas64_2e255m2e4m2e1m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e255m2e4m2e1m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e255m2e4m2e1m1/fesquare.v b/src/Specific/solinas64_2e255m2e4m2e1m1/fesquare.v
new file mode 100644
index 000000000..e36113d72
--- /dev/null
+++ b/src/Specific/solinas64_2e255m2e4m2e1m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e255m2e4m2e1m1/fesquareDisplay.v b/src/Specific/solinas64_2e255m2e4m2e1m1/fesquareDisplay.v
new file mode 100644
index 000000000..9d611b0f4
--- /dev/null
+++ b/src/Specific/solinas64_2e255m2e4m2e1m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e255m2e4m2e1m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e255m2e4m2e1m1/freeze.v b/src/Specific/solinas64_2e255m2e4m2e1m1/freeze.v
new file mode 100644
index 000000000..7e1dc2694
--- /dev/null
+++ b/src/Specific/solinas64_2e255m2e4m2e1m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e255m2e4m2e1m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e255m2e4m2e1m1/freezeDisplay.v b/src/Specific/solinas64_2e255m2e4m2e1m1/freezeDisplay.v
new file mode 100644
index 000000000..5da0b0d6a
--- /dev/null
+++ b/src/Specific/solinas64_2e255m2e4m2e1m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e255m2e4m2e1m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e255m765/CurveParameters.v b/src/Specific/solinas64_2e255m765/CurveParameters.v
new file mode 100644
index 000000000..83a63703d
--- /dev/null
+++ b/src/Specific/solinas64_2e255m765/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^255 - 765
+Base: 42
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^255;
+ c := [(1, 765)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e255m765/Synthesis.v b/src/Specific/solinas64_2e255m765/Synthesis.v
new file mode 100644
index 000000000..0e926038a
--- /dev/null
+++ b/src/Specific/solinas64_2e255m765/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e255m765.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e255m765/compiler.sh b/src/Specific/solinas64_2e255m765/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e255m765/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e255m765/femul.v b/src/Specific/solinas64_2e255m765/femul.v
new file mode 100644
index 000000000..350689714
--- /dev/null
+++ b/src/Specific/solinas64_2e255m765/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e255m765/femulDisplay.v b/src/Specific/solinas64_2e255m765/femulDisplay.v
new file mode 100644
index 000000000..b78979161
--- /dev/null
+++ b/src/Specific/solinas64_2e255m765/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e255m765.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e255m765/fesquare.v b/src/Specific/solinas64_2e255m765/fesquare.v
new file mode 100644
index 000000000..e3aeb0b63
--- /dev/null
+++ b/src/Specific/solinas64_2e255m765/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e255m765/fesquareDisplay.v b/src/Specific/solinas64_2e255m765/fesquareDisplay.v
new file mode 100644
index 000000000..91f9d692b
--- /dev/null
+++ b/src/Specific/solinas64_2e255m765/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e255m765.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e255m765/freeze.v b/src/Specific/solinas64_2e255m765/freeze.v
new file mode 100644
index 000000000..ef8417be3
--- /dev/null
+++ b/src/Specific/solinas64_2e255m765/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e255m765.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e255m765/freezeDisplay.v b/src/Specific/solinas64_2e255m765/freezeDisplay.v
new file mode 100644
index 000000000..0cb33cd19
--- /dev/null
+++ b/src/Specific/solinas64_2e255m765/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e255m765.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e256m189/CurveParameters.v b/src/Specific/solinas64_2e256m189/CurveParameters.v
new file mode 100644
index 000000000..3e25722d7
--- /dev/null
+++ b/src/Specific/solinas64_2e256m189/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^256 - 189
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 64;
+ s := 2^256;
+ c := [(1, 189)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e256m189/Synthesis.v b/src/Specific/solinas64_2e256m189/Synthesis.v
new file mode 100644
index 000000000..67b8124b3
--- /dev/null
+++ b/src/Specific/solinas64_2e256m189/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e256m189.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e256m189/compiler.sh b/src/Specific/solinas64_2e256m189/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e256m189/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e256m189/femul.v b/src/Specific/solinas64_2e256m189/femul.v
new file mode 100644
index 000000000..1f911915e
--- /dev/null
+++ b/src/Specific/solinas64_2e256m189/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e256m189/femulDisplay.v b/src/Specific/solinas64_2e256m189/femulDisplay.v
new file mode 100644
index 000000000..9b241b20f
--- /dev/null
+++ b/src/Specific/solinas64_2e256m189/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e256m189.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e256m189/fesquare.v b/src/Specific/solinas64_2e256m189/fesquare.v
new file mode 100644
index 000000000..e84de71a7
--- /dev/null
+++ b/src/Specific/solinas64_2e256m189/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e256m189/fesquareDisplay.v b/src/Specific/solinas64_2e256m189/fesquareDisplay.v
new file mode 100644
index 000000000..9e9f9cc56
--- /dev/null
+++ b/src/Specific/solinas64_2e256m189/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e256m189.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e256m189/freeze.v b/src/Specific/solinas64_2e256m189/freeze.v
new file mode 100644
index 000000000..ae621e819
--- /dev/null
+++ b/src/Specific/solinas64_2e256m189/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e256m189.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e256m189/freezeDisplay.v b/src/Specific/solinas64_2e256m189/freezeDisplay.v
new file mode 100644
index 000000000..728d06791
--- /dev/null
+++ b/src/Specific/solinas64_2e256m189/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e256m189.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/CurveParameters.v b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/CurveParameters.v
new file mode 100644
index 000000000..108b9aeaa
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^256 - 2^224 + 2^192 + 2^96 - 1
+Base: 51
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 5%nat;
+ bitwidth := 64;
+ s := 2^256;
+ c := [(1, 1); (2^96, -1); (2^192, -1); (2^224, 1)];
+ carry_chains := Some [seq 0 (pred 5); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/Synthesis.v b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/Synthesis.v
new file mode 100644
index 000000000..b57f16745
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e256m2e224p2e192p2e96m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/compiler.sh b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/femul.v b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/femul.v
new file mode 100644
index 000000000..97363f7f4
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/femulDisplay.v b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/femulDisplay.v
new file mode 100644
index 000000000..441029def
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e256m2e224p2e192p2e96m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/fesquare.v b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/fesquare.v
new file mode 100644
index 000000000..7a3a25c64
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/fesquareDisplay.v b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/fesquareDisplay.v
new file mode 100644
index 000000000..1e552ed55
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e256m2e224p2e192p2e96m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/freeze.v b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/freeze.v
new file mode 100644
index 000000000..304343493
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e256m2e224p2e192p2e96m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/freezeDisplay.v b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/freezeDisplay.v
new file mode 100644
index 000000000..ca6cdff15
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e224p2e192p2e96m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e256m2e224p2e192p2e96m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e256m2e32m977/CurveParameters.v b/src/Specific/solinas64_2e256m2e32m977/CurveParameters.v
new file mode 100644
index 000000000..1a10fc18b
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^256 - 2^32 - 977
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 64;
+ s := 2^256;
+ c := [(1, 977); (2^32, 1)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e256m2e32m977/Synthesis.v b/src/Specific/solinas64_2e256m2e32m977/Synthesis.v
new file mode 100644
index 000000000..cd01a66d8
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e256m2e32m977.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e256m2e32m977/compiler.sh b/src/Specific/solinas64_2e256m2e32m977/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e256m2e32m977/femul.v b/src/Specific/solinas64_2e256m2e32m977/femul.v
new file mode 100644
index 000000000..d879e9eb7
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e256m2e32m977/femulDisplay.v b/src/Specific/solinas64_2e256m2e32m977/femulDisplay.v
new file mode 100644
index 000000000..f4c3278ca
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e256m2e32m977.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e256m2e32m977/fesquare.v b/src/Specific/solinas64_2e256m2e32m977/fesquare.v
new file mode 100644
index 000000000..5288aaa13
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e256m2e32m977/fesquareDisplay.v b/src/Specific/solinas64_2e256m2e32m977/fesquareDisplay.v
new file mode 100644
index 000000000..de4d570af
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e256m2e32m977.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e256m2e32m977/freeze.v b/src/Specific/solinas64_2e256m2e32m977/freeze.v
new file mode 100644
index 000000000..ace27596c
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e256m2e32m977.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e256m2e32m977/freezeDisplay.v b/src/Specific/solinas64_2e256m2e32m977/freezeDisplay.v
new file mode 100644
index 000000000..28d474b28
--- /dev/null
+++ b/src/Specific/solinas64_2e256m2e32m977/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e256m2e32m977.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e266m3/CurveParameters.v b/src/Specific/solinas64_2e266m3/CurveParameters.v
new file mode 100644
index 000000000..6215265f4
--- /dev/null
+++ b/src/Specific/solinas64_2e266m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^266 - 3
+Base: 44
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^266;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e266m3/Synthesis.v b/src/Specific/solinas64_2e266m3/Synthesis.v
new file mode 100644
index 000000000..351201d4d
--- /dev/null
+++ b/src/Specific/solinas64_2e266m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e266m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e266m3/compiler.sh b/src/Specific/solinas64_2e266m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e266m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e266m3/femul.v b/src/Specific/solinas64_2e266m3/femul.v
new file mode 100644
index 000000000..d4c9e7362
--- /dev/null
+++ b/src/Specific/solinas64_2e266m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e266m3/femulDisplay.v b/src/Specific/solinas64_2e266m3/femulDisplay.v
new file mode 100644
index 000000000..1b231cef6
--- /dev/null
+++ b/src/Specific/solinas64_2e266m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e266m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e266m3/fesquare.v b/src/Specific/solinas64_2e266m3/fesquare.v
new file mode 100644
index 000000000..674c62a32
--- /dev/null
+++ b/src/Specific/solinas64_2e266m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e266m3/fesquareDisplay.v b/src/Specific/solinas64_2e266m3/fesquareDisplay.v
new file mode 100644
index 000000000..93db1f5ce
--- /dev/null
+++ b/src/Specific/solinas64_2e266m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e266m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e266m3/freeze.v b/src/Specific/solinas64_2e266m3/freeze.v
new file mode 100644
index 000000000..4a16e2d4a
--- /dev/null
+++ b/src/Specific/solinas64_2e266m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e266m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e266m3/freezeDisplay.v b/src/Specific/solinas64_2e266m3/freezeDisplay.v
new file mode 100644
index 000000000..1644f2498
--- /dev/null
+++ b/src/Specific/solinas64_2e266m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e266m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e285m9/CurveParameters.v b/src/Specific/solinas64_2e285m9/CurveParameters.v
new file mode 100644
index 000000000..20f884c12
--- /dev/null
+++ b/src/Specific/solinas64_2e285m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^285 - 9
+Base: 47
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^285;
+ c := [(1, 9)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e285m9/Synthesis.v b/src/Specific/solinas64_2e285m9/Synthesis.v
new file mode 100644
index 000000000..5c70ce3e9
--- /dev/null
+++ b/src/Specific/solinas64_2e285m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e285m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e285m9/compiler.sh b/src/Specific/solinas64_2e285m9/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e285m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e285m9/femul.v b/src/Specific/solinas64_2e285m9/femul.v
new file mode 100644
index 000000000..1bf49d36d
--- /dev/null
+++ b/src/Specific/solinas64_2e285m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e285m9/femulDisplay.v b/src/Specific/solinas64_2e285m9/femulDisplay.v
new file mode 100644
index 000000000..087ee2fa8
--- /dev/null
+++ b/src/Specific/solinas64_2e285m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e285m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e285m9/fesquare.v b/src/Specific/solinas64_2e285m9/fesquare.v
new file mode 100644
index 000000000..828bbde72
--- /dev/null
+++ b/src/Specific/solinas64_2e285m9/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e285m9/fesquareDisplay.v b/src/Specific/solinas64_2e285m9/fesquareDisplay.v
new file mode 100644
index 000000000..832569d9f
--- /dev/null
+++ b/src/Specific/solinas64_2e285m9/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e285m9.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e285m9/freeze.v b/src/Specific/solinas64_2e285m9/freeze.v
new file mode 100644
index 000000000..ad81f4345
--- /dev/null
+++ b/src/Specific/solinas64_2e285m9/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e285m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e285m9/freezeDisplay.v b/src/Specific/solinas64_2e285m9/freezeDisplay.v
new file mode 100644
index 000000000..0fa0aa925
--- /dev/null
+++ b/src/Specific/solinas64_2e285m9/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e285m9.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e291m19/CurveParameters.v b/src/Specific/solinas64_2e291m19/CurveParameters.v
new file mode 100644
index 000000000..59feda840
--- /dev/null
+++ b/src/Specific/solinas64_2e291m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^291 - 19
+Base: 48
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 6%nat;
+ bitwidth := 64;
+ s := 2^291;
+ c := [(1, 19)];
+ carry_chains := Some [seq 0 (pred 6); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e291m19/Synthesis.v b/src/Specific/solinas64_2e291m19/Synthesis.v
new file mode 100644
index 000000000..146c1188b
--- /dev/null
+++ b/src/Specific/solinas64_2e291m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e291m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e291m19/compiler.sh b/src/Specific/solinas64_2e291m19/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e291m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e291m19/femul.v b/src/Specific/solinas64_2e291m19/femul.v
new file mode 100644
index 000000000..8c1c05c03
--- /dev/null
+++ b/src/Specific/solinas64_2e291m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e291m19/femulDisplay.v b/src/Specific/solinas64_2e291m19/femulDisplay.v
new file mode 100644
index 000000000..2838c652c
--- /dev/null
+++ b/src/Specific/solinas64_2e291m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e291m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e291m19/fesquare.v b/src/Specific/solinas64_2e291m19/fesquare.v
new file mode 100644
index 000000000..a0947927e
--- /dev/null
+++ b/src/Specific/solinas64_2e291m19/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e291m19/fesquareDisplay.v b/src/Specific/solinas64_2e291m19/fesquareDisplay.v
new file mode 100644
index 000000000..21236ec43
--- /dev/null
+++ b/src/Specific/solinas64_2e291m19/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e291m19.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e291m19/freeze.v b/src/Specific/solinas64_2e291m19/freeze.v
new file mode 100644
index 000000000..0c2f49e06
--- /dev/null
+++ b/src/Specific/solinas64_2e291m19/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e291m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e291m19/freezeDisplay.v b/src/Specific/solinas64_2e291m19/freezeDisplay.v
new file mode 100644
index 000000000..847f158e1
--- /dev/null
+++ b/src/Specific/solinas64_2e291m19/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e291m19.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e321m9/CurveParameters.v b/src/Specific/solinas64_2e321m9/CurveParameters.v
new file mode 100644
index 000000000..8112879f0
--- /dev/null
+++ b/src/Specific/solinas64_2e321m9/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^321 - 9
+Base: 40
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 64;
+ s := 2^321;
+ c := [(1, 9)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e321m9/Synthesis.v b/src/Specific/solinas64_2e321m9/Synthesis.v
new file mode 100644
index 000000000..f8be3b5f7
--- /dev/null
+++ b/src/Specific/solinas64_2e321m9/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e321m9.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e321m9/compiler.sh b/src/Specific/solinas64_2e321m9/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e321m9/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e321m9/femul.v b/src/Specific/solinas64_2e321m9/femul.v
new file mode 100644
index 000000000..03d4aae34
--- /dev/null
+++ b/src/Specific/solinas64_2e321m9/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e321m9/femulDisplay.v b/src/Specific/solinas64_2e321m9/femulDisplay.v
new file mode 100644
index 000000000..d35d64121
--- /dev/null
+++ b/src/Specific/solinas64_2e321m9/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e321m9.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e321m9/fesquare.v b/src/Specific/solinas64_2e321m9/fesquare.v
new file mode 100644
index 000000000..9d7b962c1
--- /dev/null
+++ b/src/Specific/solinas64_2e321m9/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e321m9/fesquareDisplay.v b/src/Specific/solinas64_2e321m9/fesquareDisplay.v
new file mode 100644
index 000000000..c2ac28115
--- /dev/null
+++ b/src/Specific/solinas64_2e321m9/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e321m9.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e321m9/freeze.v b/src/Specific/solinas64_2e321m9/freeze.v
new file mode 100644
index 000000000..be9f9f183
--- /dev/null
+++ b/src/Specific/solinas64_2e321m9/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e321m9.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e321m9/freezeDisplay.v b/src/Specific/solinas64_2e321m9/freezeDisplay.v
new file mode 100644
index 000000000..13c2961a3
--- /dev/null
+++ b/src/Specific/solinas64_2e321m9/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e321m9.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e322m2e161m1/CurveParameters.v b/src/Specific/solinas64_2e322m2e161m1/CurveParameters.v
new file mode 100644
index 000000000..b6a2c0947
--- /dev/null
+++ b/src/Specific/solinas64_2e322m2e161m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^322 - 2^161 - 1
+Base: 46
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^322;
+ c := [(1, 1); (2^161, 1)];
+ carry_chains := Some [seq 0 (pred 7); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some true;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e322m2e161m1/Synthesis.v b/src/Specific/solinas64_2e322m2e161m1/Synthesis.v
new file mode 100644
index 000000000..85c94a4ca
--- /dev/null
+++ b/src/Specific/solinas64_2e322m2e161m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e322m2e161m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e322m2e161m1/compiler.sh b/src/Specific/solinas64_2e322m2e161m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e322m2e161m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e322m2e161m1/femul.v b/src/Specific/solinas64_2e322m2e161m1/femul.v
new file mode 100644
index 000000000..74a26dcf1
--- /dev/null
+++ b/src/Specific/solinas64_2e322m2e161m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e322m2e161m1/femulDisplay.v b/src/Specific/solinas64_2e322m2e161m1/femulDisplay.v
new file mode 100644
index 000000000..47333f821
--- /dev/null
+++ b/src/Specific/solinas64_2e322m2e161m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e322m2e161m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e322m2e161m1/fesquare.v b/src/Specific/solinas64_2e322m2e161m1/fesquare.v
new file mode 100644
index 000000000..a21febd23
--- /dev/null
+++ b/src/Specific/solinas64_2e322m2e161m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e322m2e161m1/fesquareDisplay.v b/src/Specific/solinas64_2e322m2e161m1/fesquareDisplay.v
new file mode 100644
index 000000000..bc5d7d18e
--- /dev/null
+++ b/src/Specific/solinas64_2e322m2e161m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e322m2e161m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e322m2e161m1/freeze.v b/src/Specific/solinas64_2e322m2e161m1/freeze.v
new file mode 100644
index 000000000..43fab11cc
--- /dev/null
+++ b/src/Specific/solinas64_2e322m2e161m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e322m2e161m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e322m2e161m1/freezeDisplay.v b/src/Specific/solinas64_2e322m2e161m1/freezeDisplay.v
new file mode 100644
index 000000000..c56e92ce0
--- /dev/null
+++ b/src/Specific/solinas64_2e322m2e161m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e322m2e161m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e336m17/CurveParameters.v b/src/Specific/solinas64_2e336m17/CurveParameters.v
new file mode 100644
index 000000000..3de0c9ac7
--- /dev/null
+++ b/src/Specific/solinas64_2e336m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^336 - 17
+Base: 48
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^336;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 7); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e336m17/Synthesis.v b/src/Specific/solinas64_2e336m17/Synthesis.v
new file mode 100644
index 000000000..e4422b943
--- /dev/null
+++ b/src/Specific/solinas64_2e336m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e336m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e336m17/compiler.sh b/src/Specific/solinas64_2e336m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e336m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e336m17/femul.v b/src/Specific/solinas64_2e336m17/femul.v
new file mode 100644
index 000000000..ffd402365
--- /dev/null
+++ b/src/Specific/solinas64_2e336m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e336m17/femulDisplay.v b/src/Specific/solinas64_2e336m17/femulDisplay.v
new file mode 100644
index 000000000..f91a21c57
--- /dev/null
+++ b/src/Specific/solinas64_2e336m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e336m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e336m17/fesquare.v b/src/Specific/solinas64_2e336m17/fesquare.v
new file mode 100644
index 000000000..015d213ad
--- /dev/null
+++ b/src/Specific/solinas64_2e336m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e336m17/fesquareDisplay.v b/src/Specific/solinas64_2e336m17/fesquareDisplay.v
new file mode 100644
index 000000000..9aad964b3
--- /dev/null
+++ b/src/Specific/solinas64_2e336m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e336m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e336m17/freeze.v b/src/Specific/solinas64_2e336m17/freeze.v
new file mode 100644
index 000000000..a4b6fb12d
--- /dev/null
+++ b/src/Specific/solinas64_2e336m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e336m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e336m17/freezeDisplay.v b/src/Specific/solinas64_2e336m17/freezeDisplay.v
new file mode 100644
index 000000000..f6414d465
--- /dev/null
+++ b/src/Specific/solinas64_2e336m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e336m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e336m3/CurveParameters.v b/src/Specific/solinas64_2e336m3/CurveParameters.v
new file mode 100644
index 000000000..e0c5109e5
--- /dev/null
+++ b/src/Specific/solinas64_2e336m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^336 - 3
+Base: 48
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 7%nat;
+ bitwidth := 64;
+ s := 2^336;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 7); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e336m3/Synthesis.v b/src/Specific/solinas64_2e336m3/Synthesis.v
new file mode 100644
index 000000000..2f0eb56dd
--- /dev/null
+++ b/src/Specific/solinas64_2e336m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e336m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e336m3/compiler.sh b/src/Specific/solinas64_2e336m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e336m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e336m3/femul.v b/src/Specific/solinas64_2e336m3/femul.v
new file mode 100644
index 000000000..bbcf8a69d
--- /dev/null
+++ b/src/Specific/solinas64_2e336m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e336m3/femulDisplay.v b/src/Specific/solinas64_2e336m3/femulDisplay.v
new file mode 100644
index 000000000..e1a359c1f
--- /dev/null
+++ b/src/Specific/solinas64_2e336m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e336m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e336m3/fesquare.v b/src/Specific/solinas64_2e336m3/fesquare.v
new file mode 100644
index 000000000..900d9d7a4
--- /dev/null
+++ b/src/Specific/solinas64_2e336m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e336m3/fesquareDisplay.v b/src/Specific/solinas64_2e336m3/fesquareDisplay.v
new file mode 100644
index 000000000..107bbfec4
--- /dev/null
+++ b/src/Specific/solinas64_2e336m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e336m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e336m3/freeze.v b/src/Specific/solinas64_2e336m3/freeze.v
new file mode 100644
index 000000000..5aac90ce3
--- /dev/null
+++ b/src/Specific/solinas64_2e336m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e336m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e336m3/freezeDisplay.v b/src/Specific/solinas64_2e336m3/freezeDisplay.v
new file mode 100644
index 000000000..7b8985eed
--- /dev/null
+++ b/src/Specific/solinas64_2e336m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e336m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e338m15/CurveParameters.v b/src/Specific/solinas64_2e338m15/CurveParameters.v
new file mode 100644
index 000000000..5fdb17750
--- /dev/null
+++ b/src/Specific/solinas64_2e338m15/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^338 - 15
+Base: 42
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 64;
+ s := 2^338;
+ c := [(1, 15)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e338m15/Synthesis.v b/src/Specific/solinas64_2e338m15/Synthesis.v
new file mode 100644
index 000000000..92841e340
--- /dev/null
+++ b/src/Specific/solinas64_2e338m15/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e338m15.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e338m15/compiler.sh b/src/Specific/solinas64_2e338m15/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e338m15/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e338m15/femul.v b/src/Specific/solinas64_2e338m15/femul.v
new file mode 100644
index 000000000..f66328f3d
--- /dev/null
+++ b/src/Specific/solinas64_2e338m15/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e338m15/femulDisplay.v b/src/Specific/solinas64_2e338m15/femulDisplay.v
new file mode 100644
index 000000000..47397d348
--- /dev/null
+++ b/src/Specific/solinas64_2e338m15/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e338m15.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e338m15/fesquare.v b/src/Specific/solinas64_2e338m15/fesquare.v
new file mode 100644
index 000000000..e8f705302
--- /dev/null
+++ b/src/Specific/solinas64_2e338m15/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e338m15/fesquareDisplay.v b/src/Specific/solinas64_2e338m15/fesquareDisplay.v
new file mode 100644
index 000000000..1f5b1efae
--- /dev/null
+++ b/src/Specific/solinas64_2e338m15/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e338m15.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e338m15/freeze.v b/src/Specific/solinas64_2e338m15/freeze.v
new file mode 100644
index 000000000..72d4b9405
--- /dev/null
+++ b/src/Specific/solinas64_2e338m15/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e338m15.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e338m15/freezeDisplay.v b/src/Specific/solinas64_2e338m15/freezeDisplay.v
new file mode 100644
index 000000000..103a60d4d
--- /dev/null
+++ b/src/Specific/solinas64_2e338m15/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e338m15.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e369m25/CurveParameters.v b/src/Specific/solinas64_2e369m25/CurveParameters.v
new file mode 100644
index 000000000..13b0f66df
--- /dev/null
+++ b/src/Specific/solinas64_2e369m25/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^369 - 25
+Base: 46
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 64;
+ s := 2^369;
+ c := [(1, 25)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e369m25/Synthesis.v b/src/Specific/solinas64_2e369m25/Synthesis.v
new file mode 100644
index 000000000..a3faefbdd
--- /dev/null
+++ b/src/Specific/solinas64_2e369m25/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e369m25.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e369m25/compiler.sh b/src/Specific/solinas64_2e369m25/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e369m25/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e369m25/femul.v b/src/Specific/solinas64_2e369m25/femul.v
new file mode 100644
index 000000000..161f52ba0
--- /dev/null
+++ b/src/Specific/solinas64_2e369m25/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e369m25/femulDisplay.v b/src/Specific/solinas64_2e369m25/femulDisplay.v
new file mode 100644
index 000000000..f5277b77f
--- /dev/null
+++ b/src/Specific/solinas64_2e369m25/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e369m25.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e369m25/fesquare.v b/src/Specific/solinas64_2e369m25/fesquare.v
new file mode 100644
index 000000000..888970715
--- /dev/null
+++ b/src/Specific/solinas64_2e369m25/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e369m25/fesquareDisplay.v b/src/Specific/solinas64_2e369m25/fesquareDisplay.v
new file mode 100644
index 000000000..3cda19d73
--- /dev/null
+++ b/src/Specific/solinas64_2e369m25/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e369m25.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e369m25/freeze.v b/src/Specific/solinas64_2e369m25/freeze.v
new file mode 100644
index 000000000..2b84327e4
--- /dev/null
+++ b/src/Specific/solinas64_2e369m25/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e369m25.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e369m25/freezeDisplay.v b/src/Specific/solinas64_2e369m25/freezeDisplay.v
new file mode 100644
index 000000000..32a7789d4
--- /dev/null
+++ b/src/Specific/solinas64_2e369m25/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e369m25.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e379m19/CurveParameters.v b/src/Specific/solinas64_2e379m19/CurveParameters.v
new file mode 100644
index 000000000..1981adcf5
--- /dev/null
+++ b/src/Specific/solinas64_2e379m19/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^379 - 19
+Base: 42
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 64;
+ s := 2^379;
+ c := [(1, 19)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e379m19/Synthesis.v b/src/Specific/solinas64_2e379m19/Synthesis.v
new file mode 100644
index 000000000..589f0b341
--- /dev/null
+++ b/src/Specific/solinas64_2e379m19/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e379m19.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e379m19/compiler.sh b/src/Specific/solinas64_2e379m19/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e379m19/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e379m19/femul.v b/src/Specific/solinas64_2e379m19/femul.v
new file mode 100644
index 000000000..516181b39
--- /dev/null
+++ b/src/Specific/solinas64_2e379m19/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e379m19/femulDisplay.v b/src/Specific/solinas64_2e379m19/femulDisplay.v
new file mode 100644
index 000000000..356e36caf
--- /dev/null
+++ b/src/Specific/solinas64_2e379m19/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e379m19.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e379m19/fesquare.v b/src/Specific/solinas64_2e379m19/fesquare.v
new file mode 100644
index 000000000..bb0d3f332
--- /dev/null
+++ b/src/Specific/solinas64_2e379m19/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e379m19/fesquareDisplay.v b/src/Specific/solinas64_2e379m19/fesquareDisplay.v
new file mode 100644
index 000000000..d653e4ca4
--- /dev/null
+++ b/src/Specific/solinas64_2e379m19/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e379m19.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e379m19/freeze.v b/src/Specific/solinas64_2e379m19/freeze.v
new file mode 100644
index 000000000..ac35825d8
--- /dev/null
+++ b/src/Specific/solinas64_2e379m19/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e379m19.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e379m19/freezeDisplay.v b/src/Specific/solinas64_2e379m19/freezeDisplay.v
new file mode 100644
index 000000000..8157591b3
--- /dev/null
+++ b/src/Specific/solinas64_2e379m19/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e379m19.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e382m105/CurveParameters.v b/src/Specific/solinas64_2e382m105/CurveParameters.v
new file mode 100644
index 000000000..4dff15b2a
--- /dev/null
+++ b/src/Specific/solinas64_2e382m105/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^382 - 105
+Base: 38
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 64;
+ s := 2^382;
+ c := [(1, 105)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e382m105/Synthesis.v b/src/Specific/solinas64_2e382m105/Synthesis.v
new file mode 100644
index 000000000..bbfd31260
--- /dev/null
+++ b/src/Specific/solinas64_2e382m105/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e382m105.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e382m105/compiler.sh b/src/Specific/solinas64_2e382m105/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e382m105/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e382m105/femul.v b/src/Specific/solinas64_2e382m105/femul.v
new file mode 100644
index 000000000..c5fce8202
--- /dev/null
+++ b/src/Specific/solinas64_2e382m105/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e382m105/femulDisplay.v b/src/Specific/solinas64_2e382m105/femulDisplay.v
new file mode 100644
index 000000000..ff5f054d2
--- /dev/null
+++ b/src/Specific/solinas64_2e382m105/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e382m105.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e382m105/fesquare.v b/src/Specific/solinas64_2e382m105/fesquare.v
new file mode 100644
index 000000000..1ef6b3973
--- /dev/null
+++ b/src/Specific/solinas64_2e382m105/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e382m105/fesquareDisplay.v b/src/Specific/solinas64_2e382m105/fesquareDisplay.v
new file mode 100644
index 000000000..363312d3a
--- /dev/null
+++ b/src/Specific/solinas64_2e382m105/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e382m105.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e382m105/freeze.v b/src/Specific/solinas64_2e382m105/freeze.v
new file mode 100644
index 000000000..93d7bf1e1
--- /dev/null
+++ b/src/Specific/solinas64_2e382m105/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e382m105.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e382m105/freezeDisplay.v b/src/Specific/solinas64_2e382m105/freezeDisplay.v
new file mode 100644
index 000000000..5a37b74f5
--- /dev/null
+++ b/src/Specific/solinas64_2e382m105/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e382m105.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/CurveParameters.v b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/CurveParameters.v
new file mode 100644
index 000000000..23733bdf6
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^384 - 2^128 - 2^96 + 2^32 - 1
+Base: 48
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 64;
+ s := 2^384;
+ c := [(1, 1); (2^32, -1); (2^96, 1); (2^128, 1)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/Synthesis.v b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/Synthesis.v
new file mode 100644
index 000000000..3a26cd0a2
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e384m2e128m2e96p2e32m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/compiler.sh b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/femul.v b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/femul.v
new file mode 100644
index 000000000..200b1e83e
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/femulDisplay.v b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/femulDisplay.v
new file mode 100644
index 000000000..d4e6ec27b
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e384m2e128m2e96p2e32m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/fesquare.v b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/fesquare.v
new file mode 100644
index 000000000..72ee12ad6
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/fesquareDisplay.v b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/fesquareDisplay.v
new file mode 100644
index 000000000..513458e7b
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e384m2e128m2e96p2e32m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/freeze.v b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/freeze.v
new file mode 100644
index 000000000..bca2d8b76
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e384m2e128m2e96p2e32m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/freezeDisplay.v b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/freezeDisplay.v
new file mode 100644
index 000000000..5ff2ae298
--- /dev/null
+++ b/src/Specific/solinas64_2e384m2e128m2e96p2e32m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e384m2e128m2e96p2e32m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e384m317/CurveParameters.v b/src/Specific/solinas64_2e384m317/CurveParameters.v
new file mode 100644
index 000000000..3947edf8b
--- /dev/null
+++ b/src/Specific/solinas64_2e384m317/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^384 - 317
+Base: 48
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 64;
+ s := 2^384;
+ c := [(1, 317)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e384m317/Synthesis.v b/src/Specific/solinas64_2e384m317/Synthesis.v
new file mode 100644
index 000000000..729b085cc
--- /dev/null
+++ b/src/Specific/solinas64_2e384m317/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e384m317.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e384m317/compiler.sh b/src/Specific/solinas64_2e384m317/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e384m317/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e384m317/femul.v b/src/Specific/solinas64_2e384m317/femul.v
new file mode 100644
index 000000000..cf26eef23
--- /dev/null
+++ b/src/Specific/solinas64_2e384m317/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e384m317/femulDisplay.v b/src/Specific/solinas64_2e384m317/femulDisplay.v
new file mode 100644
index 000000000..77ffb589d
--- /dev/null
+++ b/src/Specific/solinas64_2e384m317/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e384m317.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e384m317/fesquare.v b/src/Specific/solinas64_2e384m317/fesquare.v
new file mode 100644
index 000000000..35051d2b3
--- /dev/null
+++ b/src/Specific/solinas64_2e384m317/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e384m317/fesquareDisplay.v b/src/Specific/solinas64_2e384m317/fesquareDisplay.v
new file mode 100644
index 000000000..1cdcdb913
--- /dev/null
+++ b/src/Specific/solinas64_2e384m317/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e384m317.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e384m317/freeze.v b/src/Specific/solinas64_2e384m317/freeze.v
new file mode 100644
index 000000000..89a321f88
--- /dev/null
+++ b/src/Specific/solinas64_2e384m317/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e384m317.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e384m317/freezeDisplay.v b/src/Specific/solinas64_2e384m317/freezeDisplay.v
new file mode 100644
index 000000000..fe549f5a9
--- /dev/null
+++ b/src/Specific/solinas64_2e384m317/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e384m317.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e401m31/CurveParameters.v b/src/Specific/solinas64_2e401m31/CurveParameters.v
new file mode 100644
index 000000000..fd79bcc09
--- /dev/null
+++ b/src/Specific/solinas64_2e401m31/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^401 - 31
+Base: 50
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 64;
+ s := 2^401;
+ c := [(1, 31)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e401m31/Synthesis.v b/src/Specific/solinas64_2e401m31/Synthesis.v
new file mode 100644
index 000000000..57a7ecb81
--- /dev/null
+++ b/src/Specific/solinas64_2e401m31/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e401m31.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e401m31/compiler.sh b/src/Specific/solinas64_2e401m31/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e401m31/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e401m31/femul.v b/src/Specific/solinas64_2e401m31/femul.v
new file mode 100644
index 000000000..44cc10cc4
--- /dev/null
+++ b/src/Specific/solinas64_2e401m31/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e401m31/femulDisplay.v b/src/Specific/solinas64_2e401m31/femulDisplay.v
new file mode 100644
index 000000000..74068f906
--- /dev/null
+++ b/src/Specific/solinas64_2e401m31/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e401m31.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e401m31/fesquare.v b/src/Specific/solinas64_2e401m31/fesquare.v
new file mode 100644
index 000000000..f9bf9175f
--- /dev/null
+++ b/src/Specific/solinas64_2e401m31/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e401m31/fesquareDisplay.v b/src/Specific/solinas64_2e401m31/fesquareDisplay.v
new file mode 100644
index 000000000..ddbf5d13e
--- /dev/null
+++ b/src/Specific/solinas64_2e401m31/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e401m31.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e401m31/freeze.v b/src/Specific/solinas64_2e401m31/freeze.v
new file mode 100644
index 000000000..e86f5274d
--- /dev/null
+++ b/src/Specific/solinas64_2e401m31/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e401m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e401m31/freezeDisplay.v b/src/Specific/solinas64_2e401m31/freezeDisplay.v
new file mode 100644
index 000000000..672bcc545
--- /dev/null
+++ b/src/Specific/solinas64_2e401m31/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e401m31.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e413m21/CurveParameters.v b/src/Specific/solinas64_2e413m21/CurveParameters.v
new file mode 100644
index 000000000..bbf20f65a
--- /dev/null
+++ b/src/Specific/solinas64_2e413m21/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^413 - 21
+Base: 29
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 14%nat;
+ bitwidth := 64;
+ s := 2^413;
+ c := [(1, 21)];
+ carry_chains := Some [seq 0 (pred 14); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e413m21/Synthesis.v b/src/Specific/solinas64_2e413m21/Synthesis.v
new file mode 100644
index 000000000..90ef5bc02
--- /dev/null
+++ b/src/Specific/solinas64_2e413m21/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e413m21.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e413m21/compiler.sh b/src/Specific/solinas64_2e413m21/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e413m21/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e413m21/femul.v b/src/Specific/solinas64_2e413m21/femul.v
new file mode 100644
index 000000000..20a671ba1
--- /dev/null
+++ b/src/Specific/solinas64_2e413m21/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e413m21/femulDisplay.v b/src/Specific/solinas64_2e413m21/femulDisplay.v
new file mode 100644
index 000000000..308ef6091
--- /dev/null
+++ b/src/Specific/solinas64_2e413m21/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e413m21.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e413m21/fesquare.v b/src/Specific/solinas64_2e413m21/fesquare.v
new file mode 100644
index 000000000..21920016f
--- /dev/null
+++ b/src/Specific/solinas64_2e413m21/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e413m21/fesquareDisplay.v b/src/Specific/solinas64_2e413m21/fesquareDisplay.v
new file mode 100644
index 000000000..a90a9b1ad
--- /dev/null
+++ b/src/Specific/solinas64_2e413m21/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e413m21.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e413m21/freeze.v b/src/Specific/solinas64_2e413m21/freeze.v
new file mode 100644
index 000000000..137bf018c
--- /dev/null
+++ b/src/Specific/solinas64_2e413m21/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e413m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e413m21/freezeDisplay.v b/src/Specific/solinas64_2e413m21/freezeDisplay.v
new file mode 100644
index 000000000..6bbcfba54
--- /dev/null
+++ b/src/Specific/solinas64_2e413m21/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e413m21.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e414m17/CurveParameters.v b/src/Specific/solinas64_2e414m17/CurveParameters.v
new file mode 100644
index 000000000..2dcf746df
--- /dev/null
+++ b/src/Specific/solinas64_2e414m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^414 - 17
+Base: 46
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 64;
+ s := 2^414;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e414m17/Synthesis.v b/src/Specific/solinas64_2e414m17/Synthesis.v
new file mode 100644
index 000000000..d1b6aebc4
--- /dev/null
+++ b/src/Specific/solinas64_2e414m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e414m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e414m17/compiler.sh b/src/Specific/solinas64_2e414m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e414m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e414m17/femul.v b/src/Specific/solinas64_2e414m17/femul.v
new file mode 100644
index 000000000..06b417c7a
--- /dev/null
+++ b/src/Specific/solinas64_2e414m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e414m17/femulDisplay.v b/src/Specific/solinas64_2e414m17/femulDisplay.v
new file mode 100644
index 000000000..8343041fa
--- /dev/null
+++ b/src/Specific/solinas64_2e414m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e414m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e414m17/fesquare.v b/src/Specific/solinas64_2e414m17/fesquare.v
new file mode 100644
index 000000000..9768c51bf
--- /dev/null
+++ b/src/Specific/solinas64_2e414m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e414m17/fesquareDisplay.v b/src/Specific/solinas64_2e414m17/fesquareDisplay.v
new file mode 100644
index 000000000..86d21ac2f
--- /dev/null
+++ b/src/Specific/solinas64_2e414m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e414m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e414m17/freeze.v b/src/Specific/solinas64_2e414m17/freeze.v
new file mode 100644
index 000000000..8202136ad
--- /dev/null
+++ b/src/Specific/solinas64_2e414m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e414m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e414m17/freezeDisplay.v b/src/Specific/solinas64_2e414m17/freezeDisplay.v
new file mode 100644
index 000000000..4c84f66e2
--- /dev/null
+++ b/src/Specific/solinas64_2e414m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e414m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e416m2e208m1/CurveParameters.v b/src/Specific/solinas64_2e416m2e208m1/CurveParameters.v
new file mode 100644
index 000000000..8280b7471
--- /dev/null
+++ b/src/Specific/solinas64_2e416m2e208m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^416 - 2^208 - 1
+Base: 52
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 64;
+ s := 2^416;
+ c := [(1, 1); (2^208, 1)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some true;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e416m2e208m1/Synthesis.v b/src/Specific/solinas64_2e416m2e208m1/Synthesis.v
new file mode 100644
index 000000000..f36fcabec
--- /dev/null
+++ b/src/Specific/solinas64_2e416m2e208m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e416m2e208m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e416m2e208m1/compiler.sh b/src/Specific/solinas64_2e416m2e208m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e416m2e208m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e416m2e208m1/femul.v b/src/Specific/solinas64_2e416m2e208m1/femul.v
new file mode 100644
index 000000000..f35ee0d20
--- /dev/null
+++ b/src/Specific/solinas64_2e416m2e208m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e416m2e208m1/femulDisplay.v b/src/Specific/solinas64_2e416m2e208m1/femulDisplay.v
new file mode 100644
index 000000000..5331972c2
--- /dev/null
+++ b/src/Specific/solinas64_2e416m2e208m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e416m2e208m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e416m2e208m1/fesquare.v b/src/Specific/solinas64_2e416m2e208m1/fesquare.v
new file mode 100644
index 000000000..cad70e764
--- /dev/null
+++ b/src/Specific/solinas64_2e416m2e208m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e416m2e208m1/fesquareDisplay.v b/src/Specific/solinas64_2e416m2e208m1/fesquareDisplay.v
new file mode 100644
index 000000000..9c649ca70
--- /dev/null
+++ b/src/Specific/solinas64_2e416m2e208m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e416m2e208m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e416m2e208m1/freeze.v b/src/Specific/solinas64_2e416m2e208m1/freeze.v
new file mode 100644
index 000000000..1ff8812b2
--- /dev/null
+++ b/src/Specific/solinas64_2e416m2e208m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e416m2e208m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e416m2e208m1/freezeDisplay.v b/src/Specific/solinas64_2e416m2e208m1/freezeDisplay.v
new file mode 100644
index 000000000..a7b62b2a4
--- /dev/null
+++ b/src/Specific/solinas64_2e416m2e208m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e416m2e208m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e444m17/CurveParameters.v b/src/Specific/solinas64_2e444m17/CurveParameters.v
new file mode 100644
index 000000000..df70cc9e0
--- /dev/null
+++ b/src/Specific/solinas64_2e444m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^444 - 17
+Base: 49
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 64;
+ s := 2^444;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e444m17/Synthesis.v b/src/Specific/solinas64_2e444m17/Synthesis.v
new file mode 100644
index 000000000..4ba5af55f
--- /dev/null
+++ b/src/Specific/solinas64_2e444m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e444m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e444m17/compiler.sh b/src/Specific/solinas64_2e444m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e444m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e444m17/femul.v b/src/Specific/solinas64_2e444m17/femul.v
new file mode 100644
index 000000000..f9d507ce8
--- /dev/null
+++ b/src/Specific/solinas64_2e444m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e444m17/femulDisplay.v b/src/Specific/solinas64_2e444m17/femulDisplay.v
new file mode 100644
index 000000000..9c919d1b3
--- /dev/null
+++ b/src/Specific/solinas64_2e444m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e444m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e444m17/fesquare.v b/src/Specific/solinas64_2e444m17/fesquare.v
new file mode 100644
index 000000000..5f73be8d3
--- /dev/null
+++ b/src/Specific/solinas64_2e444m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e444m17/fesquareDisplay.v b/src/Specific/solinas64_2e444m17/fesquareDisplay.v
new file mode 100644
index 000000000..9de1f9f80
--- /dev/null
+++ b/src/Specific/solinas64_2e444m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e444m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e444m17/freeze.v b/src/Specific/solinas64_2e444m17/freeze.v
new file mode 100644
index 000000000..a0b44808b
--- /dev/null
+++ b/src/Specific/solinas64_2e444m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e444m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e444m17/freezeDisplay.v b/src/Specific/solinas64_2e444m17/freezeDisplay.v
new file mode 100644
index 000000000..e2c35d43b
--- /dev/null
+++ b/src/Specific/solinas64_2e444m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e444m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e448m2e224m1/CurveParameters.v b/src/Specific/solinas64_2e448m2e224m1/CurveParameters.v
new file mode 100644
index 000000000..e28b2bf32
--- /dev/null
+++ b/src/Specific/solinas64_2e448m2e224m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^448 - 2^224 - 1
+Base: 56
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 8%nat;
+ bitwidth := 64;
+ s := 2^448;
+ c := [(1, 1); (2^224, 1)];
+ carry_chains := Some [seq 0 (pred 8); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some true;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e448m2e224m1/Synthesis.v b/src/Specific/solinas64_2e448m2e224m1/Synthesis.v
new file mode 100644
index 000000000..b805360d8
--- /dev/null
+++ b/src/Specific/solinas64_2e448m2e224m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e448m2e224m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e448m2e224m1/compiler.sh b/src/Specific/solinas64_2e448m2e224m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e448m2e224m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e448m2e224m1/femul.v b/src/Specific/solinas64_2e448m2e224m1/femul.v
new file mode 100644
index 000000000..6aafaf303
--- /dev/null
+++ b/src/Specific/solinas64_2e448m2e224m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e448m2e224m1/femulDisplay.v b/src/Specific/solinas64_2e448m2e224m1/femulDisplay.v
new file mode 100644
index 000000000..bc30635a5
--- /dev/null
+++ b/src/Specific/solinas64_2e448m2e224m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e448m2e224m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e448m2e224m1/fesquare.v b/src/Specific/solinas64_2e448m2e224m1/fesquare.v
new file mode 100644
index 000000000..b998369bb
--- /dev/null
+++ b/src/Specific/solinas64_2e448m2e224m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e448m2e224m1/fesquareDisplay.v b/src/Specific/solinas64_2e448m2e224m1/fesquareDisplay.v
new file mode 100644
index 000000000..ed85edf82
--- /dev/null
+++ b/src/Specific/solinas64_2e448m2e224m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e448m2e224m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e448m2e224m1/freeze.v b/src/Specific/solinas64_2e448m2e224m1/freeze.v
new file mode 100644
index 000000000..e030100dc
--- /dev/null
+++ b/src/Specific/solinas64_2e448m2e224m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e448m2e224m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e448m2e224m1/freezeDisplay.v b/src/Specific/solinas64_2e448m2e224m1/freezeDisplay.v
new file mode 100644
index 000000000..113720b68
--- /dev/null
+++ b/src/Specific/solinas64_2e448m2e224m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e448m2e224m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e450m2e225m1/CurveParameters.v b/src/Specific/solinas64_2e450m2e225m1/CurveParameters.v
new file mode 100644
index 000000000..e6fff2de0
--- /dev/null
+++ b/src/Specific/solinas64_2e450m2e225m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^450 - 2^225 - 1
+Base: 50
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 64;
+ s := 2^450;
+ c := [(1, 1); (2^225, 1)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some true;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e450m2e225m1/Synthesis.v b/src/Specific/solinas64_2e450m2e225m1/Synthesis.v
new file mode 100644
index 000000000..30663b0fa
--- /dev/null
+++ b/src/Specific/solinas64_2e450m2e225m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e450m2e225m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e450m2e225m1/compiler.sh b/src/Specific/solinas64_2e450m2e225m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e450m2e225m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e450m2e225m1/femul.v b/src/Specific/solinas64_2e450m2e225m1/femul.v
new file mode 100644
index 000000000..90e63ad16
--- /dev/null
+++ b/src/Specific/solinas64_2e450m2e225m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e450m2e225m1/femulDisplay.v b/src/Specific/solinas64_2e450m2e225m1/femulDisplay.v
new file mode 100644
index 000000000..3512d83ff
--- /dev/null
+++ b/src/Specific/solinas64_2e450m2e225m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e450m2e225m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e450m2e225m1/fesquare.v b/src/Specific/solinas64_2e450m2e225m1/fesquare.v
new file mode 100644
index 000000000..363d18c2f
--- /dev/null
+++ b/src/Specific/solinas64_2e450m2e225m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e450m2e225m1/fesquareDisplay.v b/src/Specific/solinas64_2e450m2e225m1/fesquareDisplay.v
new file mode 100644
index 000000000..d6e79071a
--- /dev/null
+++ b/src/Specific/solinas64_2e450m2e225m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e450m2e225m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e450m2e225m1/freeze.v b/src/Specific/solinas64_2e450m2e225m1/freeze.v
new file mode 100644
index 000000000..423012515
--- /dev/null
+++ b/src/Specific/solinas64_2e450m2e225m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e450m2e225m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e450m2e225m1/freezeDisplay.v b/src/Specific/solinas64_2e450m2e225m1/freezeDisplay.v
new file mode 100644
index 000000000..cc013c23e
--- /dev/null
+++ b/src/Specific/solinas64_2e450m2e225m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e450m2e225m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e452m3/CurveParameters.v b/src/Specific/solinas64_2e452m3/CurveParameters.v
new file mode 100644
index 000000000..4f7a8cda9
--- /dev/null
+++ b/src/Specific/solinas64_2e452m3/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^452 - 3
+Base: 45
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 64;
+ s := 2^452;
+ c := [(1, 3)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e452m3/Synthesis.v b/src/Specific/solinas64_2e452m3/Synthesis.v
new file mode 100644
index 000000000..e8af183c2
--- /dev/null
+++ b/src/Specific/solinas64_2e452m3/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e452m3.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e452m3/compiler.sh b/src/Specific/solinas64_2e452m3/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e452m3/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e452m3/femul.v b/src/Specific/solinas64_2e452m3/femul.v
new file mode 100644
index 000000000..af859ed21
--- /dev/null
+++ b/src/Specific/solinas64_2e452m3/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e452m3/femulDisplay.v b/src/Specific/solinas64_2e452m3/femulDisplay.v
new file mode 100644
index 000000000..e961c04b3
--- /dev/null
+++ b/src/Specific/solinas64_2e452m3/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e452m3.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e452m3/fesquare.v b/src/Specific/solinas64_2e452m3/fesquare.v
new file mode 100644
index 000000000..22dac873f
--- /dev/null
+++ b/src/Specific/solinas64_2e452m3/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e452m3/fesquareDisplay.v b/src/Specific/solinas64_2e452m3/fesquareDisplay.v
new file mode 100644
index 000000000..210b25d02
--- /dev/null
+++ b/src/Specific/solinas64_2e452m3/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e452m3.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e452m3/freeze.v b/src/Specific/solinas64_2e452m3/freeze.v
new file mode 100644
index 000000000..7dd0c7666
--- /dev/null
+++ b/src/Specific/solinas64_2e452m3/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e452m3.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e452m3/freezeDisplay.v b/src/Specific/solinas64_2e452m3/freezeDisplay.v
new file mode 100644
index 000000000..5c814dd81
--- /dev/null
+++ b/src/Specific/solinas64_2e452m3/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e452m3.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e468m17/CurveParameters.v b/src/Specific/solinas64_2e468m17/CurveParameters.v
new file mode 100644
index 000000000..7a7086cf9
--- /dev/null
+++ b/src/Specific/solinas64_2e468m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^468 - 17
+Base: 52
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 64;
+ s := 2^468;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e468m17/Synthesis.v b/src/Specific/solinas64_2e468m17/Synthesis.v
new file mode 100644
index 000000000..1eb192892
--- /dev/null
+++ b/src/Specific/solinas64_2e468m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e468m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e468m17/compiler.sh b/src/Specific/solinas64_2e468m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e468m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e468m17/femul.v b/src/Specific/solinas64_2e468m17/femul.v
new file mode 100644
index 000000000..9a6c95f1b
--- /dev/null
+++ b/src/Specific/solinas64_2e468m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e468m17/femulDisplay.v b/src/Specific/solinas64_2e468m17/femulDisplay.v
new file mode 100644
index 000000000..dcc968520
--- /dev/null
+++ b/src/Specific/solinas64_2e468m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e468m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e468m17/fesquare.v b/src/Specific/solinas64_2e468m17/fesquare.v
new file mode 100644
index 000000000..d035fa7cc
--- /dev/null
+++ b/src/Specific/solinas64_2e468m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e468m17/fesquareDisplay.v b/src/Specific/solinas64_2e468m17/fesquareDisplay.v
new file mode 100644
index 000000000..e00af9ad5
--- /dev/null
+++ b/src/Specific/solinas64_2e468m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e468m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e468m17/freeze.v b/src/Specific/solinas64_2e468m17/freeze.v
new file mode 100644
index 000000000..b61064065
--- /dev/null
+++ b/src/Specific/solinas64_2e468m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e468m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e468m17/freezeDisplay.v b/src/Specific/solinas64_2e468m17/freezeDisplay.v
new file mode 100644
index 000000000..0f0e4891e
--- /dev/null
+++ b/src/Specific/solinas64_2e468m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e468m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e480m2e240m1/CurveParameters.v b/src/Specific/solinas64_2e480m2e240m1/CurveParameters.v
new file mode 100644
index 000000000..b3051d75e
--- /dev/null
+++ b/src/Specific/solinas64_2e480m2e240m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^480 - 2^240 - 1
+Base: 53
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 9%nat;
+ bitwidth := 64;
+ s := 2^480;
+ c := [(1, 1); (2^240, 1)];
+ carry_chains := Some [seq 0 (pred 9); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some true;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e480m2e240m1/Synthesis.v b/src/Specific/solinas64_2e480m2e240m1/Synthesis.v
new file mode 100644
index 000000000..dbacea146
--- /dev/null
+++ b/src/Specific/solinas64_2e480m2e240m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e480m2e240m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e480m2e240m1/compiler.sh b/src/Specific/solinas64_2e480m2e240m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e480m2e240m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e480m2e240m1/femul.v b/src/Specific/solinas64_2e480m2e240m1/femul.v
new file mode 100644
index 000000000..b2049a894
--- /dev/null
+++ b/src/Specific/solinas64_2e480m2e240m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e480m2e240m1/femulDisplay.v b/src/Specific/solinas64_2e480m2e240m1/femulDisplay.v
new file mode 100644
index 000000000..68a771916
--- /dev/null
+++ b/src/Specific/solinas64_2e480m2e240m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e480m2e240m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e480m2e240m1/fesquare.v b/src/Specific/solinas64_2e480m2e240m1/fesquare.v
new file mode 100644
index 000000000..b2f8f2276
--- /dev/null
+++ b/src/Specific/solinas64_2e480m2e240m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e480m2e240m1/fesquareDisplay.v b/src/Specific/solinas64_2e480m2e240m1/fesquareDisplay.v
new file mode 100644
index 000000000..0e58e172f
--- /dev/null
+++ b/src/Specific/solinas64_2e480m2e240m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e480m2e240m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e480m2e240m1/freeze.v b/src/Specific/solinas64_2e480m2e240m1/freeze.v
new file mode 100644
index 000000000..cf72decd0
--- /dev/null
+++ b/src/Specific/solinas64_2e480m2e240m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e480m2e240m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e480m2e240m1/freezeDisplay.v b/src/Specific/solinas64_2e480m2e240m1/freezeDisplay.v
new file mode 100644
index 000000000..f4027debf
--- /dev/null
+++ b/src/Specific/solinas64_2e480m2e240m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e480m2e240m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e488m17/CurveParameters.v b/src/Specific/solinas64_2e488m17/CurveParameters.v
new file mode 100644
index 000000000..b2837cdbf
--- /dev/null
+++ b/src/Specific/solinas64_2e488m17/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^488 - 17
+Base: 30
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 16%nat;
+ bitwidth := 64;
+ s := 2^488;
+ c := [(1, 17)];
+ carry_chains := Some [seq 0 (pred 16); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e488m17/Synthesis.v b/src/Specific/solinas64_2e488m17/Synthesis.v
new file mode 100644
index 000000000..6c84b57b2
--- /dev/null
+++ b/src/Specific/solinas64_2e488m17/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e488m17.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e488m17/compiler.sh b/src/Specific/solinas64_2e488m17/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e488m17/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e488m17/femul.v b/src/Specific/solinas64_2e488m17/femul.v
new file mode 100644
index 000000000..b62a50886
--- /dev/null
+++ b/src/Specific/solinas64_2e488m17/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e488m17/femulDisplay.v b/src/Specific/solinas64_2e488m17/femulDisplay.v
new file mode 100644
index 000000000..45c82eac2
--- /dev/null
+++ b/src/Specific/solinas64_2e488m17/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e488m17.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e488m17/fesquare.v b/src/Specific/solinas64_2e488m17/fesquare.v
new file mode 100644
index 000000000..a8f0e20d7
--- /dev/null
+++ b/src/Specific/solinas64_2e488m17/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e488m17/fesquareDisplay.v b/src/Specific/solinas64_2e488m17/fesquareDisplay.v
new file mode 100644
index 000000000..6b0bb7870
--- /dev/null
+++ b/src/Specific/solinas64_2e488m17/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e488m17.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e488m17/freeze.v b/src/Specific/solinas64_2e488m17/freeze.v
new file mode 100644
index 000000000..08a3241e7
--- /dev/null
+++ b/src/Specific/solinas64_2e488m17/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e488m17.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e488m17/freezeDisplay.v b/src/Specific/solinas64_2e488m17/freezeDisplay.v
new file mode 100644
index 000000000..7a8ed1a0a
--- /dev/null
+++ b/src/Specific/solinas64_2e488m17/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e488m17.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e489m21/CurveParameters.v b/src/Specific/solinas64_2e489m21/CurveParameters.v
new file mode 100644
index 000000000..8c842d205
--- /dev/null
+++ b/src/Specific/solinas64_2e489m21/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^489 - 21
+Base: 27
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 18%nat;
+ bitwidth := 64;
+ s := 2^489;
+ c := [(1, 21)];
+ carry_chains := Some [seq 0 (pred 18); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e489m21/Synthesis.v b/src/Specific/solinas64_2e489m21/Synthesis.v
new file mode 100644
index 000000000..41003e6c0
--- /dev/null
+++ b/src/Specific/solinas64_2e489m21/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e489m21.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e489m21/compiler.sh b/src/Specific/solinas64_2e489m21/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e489m21/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e489m21/femul.v b/src/Specific/solinas64_2e489m21/femul.v
new file mode 100644
index 000000000..764ce93a8
--- /dev/null
+++ b/src/Specific/solinas64_2e489m21/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e489m21/femulDisplay.v b/src/Specific/solinas64_2e489m21/femulDisplay.v
new file mode 100644
index 000000000..956d19749
--- /dev/null
+++ b/src/Specific/solinas64_2e489m21/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e489m21.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e489m21/fesquare.v b/src/Specific/solinas64_2e489m21/fesquare.v
new file mode 100644
index 000000000..9d47bca90
--- /dev/null
+++ b/src/Specific/solinas64_2e489m21/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e489m21/fesquareDisplay.v b/src/Specific/solinas64_2e489m21/fesquareDisplay.v
new file mode 100644
index 000000000..f299731f7
--- /dev/null
+++ b/src/Specific/solinas64_2e489m21/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e489m21.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e489m21/freeze.v b/src/Specific/solinas64_2e489m21/freeze.v
new file mode 100644
index 000000000..add2dd470
--- /dev/null
+++ b/src/Specific/solinas64_2e489m21/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e489m21.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e489m21/freezeDisplay.v b/src/Specific/solinas64_2e489m21/freezeDisplay.v
new file mode 100644
index 000000000..af13a2347
--- /dev/null
+++ b/src/Specific/solinas64_2e489m21/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e489m21.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e495m31/CurveParameters.v b/src/Specific/solinas64_2e495m31/CurveParameters.v
new file mode 100644
index 000000000..0f461ac6c
--- /dev/null
+++ b/src/Specific/solinas64_2e495m31/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^495 - 31
+Base: 49
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 64;
+ s := 2^495;
+ c := [(1, 31)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e495m31/Synthesis.v b/src/Specific/solinas64_2e495m31/Synthesis.v
new file mode 100644
index 000000000..459c65c1f
--- /dev/null
+++ b/src/Specific/solinas64_2e495m31/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e495m31.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e495m31/compiler.sh b/src/Specific/solinas64_2e495m31/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e495m31/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e495m31/femul.v b/src/Specific/solinas64_2e495m31/femul.v
new file mode 100644
index 000000000..ccd2cbb45
--- /dev/null
+++ b/src/Specific/solinas64_2e495m31/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e495m31/femulDisplay.v b/src/Specific/solinas64_2e495m31/femulDisplay.v
new file mode 100644
index 000000000..0dfb798d0
--- /dev/null
+++ b/src/Specific/solinas64_2e495m31/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e495m31.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e495m31/fesquare.v b/src/Specific/solinas64_2e495m31/fesquare.v
new file mode 100644
index 000000000..6e97a9ce2
--- /dev/null
+++ b/src/Specific/solinas64_2e495m31/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e495m31/fesquareDisplay.v b/src/Specific/solinas64_2e495m31/fesquareDisplay.v
new file mode 100644
index 000000000..0b7a5ec0e
--- /dev/null
+++ b/src/Specific/solinas64_2e495m31/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e495m31.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e495m31/freeze.v b/src/Specific/solinas64_2e495m31/freeze.v
new file mode 100644
index 000000000..43da1337a
--- /dev/null
+++ b/src/Specific/solinas64_2e495m31/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e495m31.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e495m31/freezeDisplay.v b/src/Specific/solinas64_2e495m31/freezeDisplay.v
new file mode 100644
index 000000000..61e6eed31
--- /dev/null
+++ b/src/Specific/solinas64_2e495m31/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e495m31.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e511m187/CurveParameters.v b/src/Specific/solinas64_2e511m187/CurveParameters.v
new file mode 100644
index 000000000..102905ed1
--- /dev/null
+++ b/src/Specific/solinas64_2e511m187/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^511 - 187
+Base: 36
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 14%nat;
+ bitwidth := 64;
+ s := 2^511;
+ c := [(1, 187)];
+ carry_chains := Some [seq 0 (pred 14); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e511m187/Synthesis.v b/src/Specific/solinas64_2e511m187/Synthesis.v
new file mode 100644
index 000000000..0cb265b62
--- /dev/null
+++ b/src/Specific/solinas64_2e511m187/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e511m187.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e511m187/compiler.sh b/src/Specific/solinas64_2e511m187/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e511m187/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e511m187/femul.v b/src/Specific/solinas64_2e511m187/femul.v
new file mode 100644
index 000000000..86a5c5014
--- /dev/null
+++ b/src/Specific/solinas64_2e511m187/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e511m187/femulDisplay.v b/src/Specific/solinas64_2e511m187/femulDisplay.v
new file mode 100644
index 000000000..f5f0e9102
--- /dev/null
+++ b/src/Specific/solinas64_2e511m187/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e511m187.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e511m187/fesquare.v b/src/Specific/solinas64_2e511m187/fesquare.v
new file mode 100644
index 000000000..8f4b7f345
--- /dev/null
+++ b/src/Specific/solinas64_2e511m187/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e511m187/fesquareDisplay.v b/src/Specific/solinas64_2e511m187/fesquareDisplay.v
new file mode 100644
index 000000000..2e923aba3
--- /dev/null
+++ b/src/Specific/solinas64_2e511m187/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e511m187.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e511m187/freeze.v b/src/Specific/solinas64_2e511m187/freeze.v
new file mode 100644
index 000000000..db6dbd38e
--- /dev/null
+++ b/src/Specific/solinas64_2e511m187/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e511m187.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e511m187/freezeDisplay.v b/src/Specific/solinas64_2e511m187/freezeDisplay.v
new file mode 100644
index 000000000..3343de172
--- /dev/null
+++ b/src/Specific/solinas64_2e511m187/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e511m187.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e511m481/CurveParameters.v b/src/Specific/solinas64_2e511m481/CurveParameters.v
new file mode 100644
index 000000000..ac65d991d
--- /dev/null
+++ b/src/Specific/solinas64_2e511m481/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^511 - 481
+Base: 36
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 14%nat;
+ bitwidth := 64;
+ s := 2^511;
+ c := [(1, 481)];
+ carry_chains := Some [seq 0 (pred 14); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e511m481/Synthesis.v b/src/Specific/solinas64_2e511m481/Synthesis.v
new file mode 100644
index 000000000..b79a3e9a4
--- /dev/null
+++ b/src/Specific/solinas64_2e511m481/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e511m481.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e511m481/compiler.sh b/src/Specific/solinas64_2e511m481/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e511m481/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e511m481/femul.v b/src/Specific/solinas64_2e511m481/femul.v
new file mode 100644
index 000000000..ccbb4d089
--- /dev/null
+++ b/src/Specific/solinas64_2e511m481/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e511m481/femulDisplay.v b/src/Specific/solinas64_2e511m481/femulDisplay.v
new file mode 100644
index 000000000..3d81e8c41
--- /dev/null
+++ b/src/Specific/solinas64_2e511m481/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e511m481.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e511m481/fesquare.v b/src/Specific/solinas64_2e511m481/fesquare.v
new file mode 100644
index 000000000..dcadbce19
--- /dev/null
+++ b/src/Specific/solinas64_2e511m481/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e511m481/fesquareDisplay.v b/src/Specific/solinas64_2e511m481/fesquareDisplay.v
new file mode 100644
index 000000000..5ed3a2dc9
--- /dev/null
+++ b/src/Specific/solinas64_2e511m481/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e511m481.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e511m481/freeze.v b/src/Specific/solinas64_2e511m481/freeze.v
new file mode 100644
index 000000000..c0a0c3c4f
--- /dev/null
+++ b/src/Specific/solinas64_2e511m481/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e511m481.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e511m481/freezeDisplay.v b/src/Specific/solinas64_2e511m481/freezeDisplay.v
new file mode 100644
index 000000000..b1ea33231
--- /dev/null
+++ b/src/Specific/solinas64_2e511m481/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e511m481.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e512m569/CurveParameters.v b/src/Specific/solinas64_2e512m569/CurveParameters.v
new file mode 100644
index 000000000..6a7620320
--- /dev/null
+++ b/src/Specific/solinas64_2e512m569/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^512 - 569
+Base: 32
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 16%nat;
+ bitwidth := 64;
+ s := 2^512;
+ c := [(1, 569)];
+ carry_chains := Some [seq 0 (pred 16); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e512m569/Synthesis.v b/src/Specific/solinas64_2e512m569/Synthesis.v
new file mode 100644
index 000000000..8fbfecacf
--- /dev/null
+++ b/src/Specific/solinas64_2e512m569/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e512m569.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e512m569/compiler.sh b/src/Specific/solinas64_2e512m569/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e512m569/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e512m569/femul.v b/src/Specific/solinas64_2e512m569/femul.v
new file mode 100644
index 000000000..e06004eaf
--- /dev/null
+++ b/src/Specific/solinas64_2e512m569/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e512m569/femulDisplay.v b/src/Specific/solinas64_2e512m569/femulDisplay.v
new file mode 100644
index 000000000..4bda29399
--- /dev/null
+++ b/src/Specific/solinas64_2e512m569/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e512m569.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e512m569/fesquare.v b/src/Specific/solinas64_2e512m569/fesquare.v
new file mode 100644
index 000000000..a6a44c600
--- /dev/null
+++ b/src/Specific/solinas64_2e512m569/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e512m569/fesquareDisplay.v b/src/Specific/solinas64_2e512m569/fesquareDisplay.v
new file mode 100644
index 000000000..197fc1d7f
--- /dev/null
+++ b/src/Specific/solinas64_2e512m569/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e512m569.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e512m569/freeze.v b/src/Specific/solinas64_2e512m569/freeze.v
new file mode 100644
index 000000000..54f65a751
--- /dev/null
+++ b/src/Specific/solinas64_2e512m569/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e512m569.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e512m569/freezeDisplay.v b/src/Specific/solinas64_2e512m569/freezeDisplay.v
new file mode 100644
index 000000000..f71fb9573
--- /dev/null
+++ b/src/Specific/solinas64_2e512m569/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e512m569.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.
diff --git a/src/Specific/solinas64_2e521m1/CurveParameters.v b/src/Specific/solinas64_2e521m1/CurveParameters.v
new file mode 100644
index 000000000..33dd15c4a
--- /dev/null
+++ b/src/Specific/solinas64_2e521m1/CurveParameters.v
@@ -0,0 +1,34 @@
+Require Import Crypto.Specific.Framework.RawCurveParameters.
+Require Import Crypto.Util.LetIn.
+
+(***
+Modulus : 2^521 - 1
+Base: 52
+***)
+
+Definition curve : CurveParameters :=
+ {|
+ sz := 10%nat;
+ bitwidth := 64;
+ s := 2^521;
+ c := [(1, 1)];
+ carry_chains := Some [seq 0 (pred 10); [0; 1]]%nat;
+
+ a24 := None;
+ coef_div_modulus := Some 2%nat;
+
+ goldilocks := Some false;
+ montgomery := false;
+
+ mul_code := None;
+
+ square_code := None;
+
+ upper_bound_of_exponent := None;
+ allowable_bit_widths := None;
+ freeze_extra_allowable_bit_widths := None;
+ modinv_fuel := None
+ |}.
+
+Ltac extra_prove_mul_eq _ := idtac.
+Ltac extra_prove_square_eq _ := idtac.
diff --git a/src/Specific/solinas64_2e521m1/Synthesis.v b/src/Specific/solinas64_2e521m1/Synthesis.v
new file mode 100644
index 000000000..6d7c3f2f3
--- /dev/null
+++ b/src/Specific/solinas64_2e521m1/Synthesis.v
@@ -0,0 +1,9 @@
+Require Import Crypto.Specific.Framework.SynthesisFramework.
+Require Import Crypto.Specific.solinas64_2e521m1.CurveParameters.
+
+Module P <: PrePackage.
+ Definition package : Tag.Context.
+ Proof. make_Synthesis_package curve extra_prove_mul_eq extra_prove_square_eq. Defined.
+End P.
+
+Module Export S := PackageSynthesis P.
diff --git a/src/Specific/solinas64_2e521m1/compiler.sh b/src/Specific/solinas64_2e521m1/compiler.sh
new file mode 100755
index 000000000..401968c8b
--- /dev/null
+++ b/src/Specific/solinas64_2e521m1/compiler.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+set -eu
+
+gcc -march=native -mtune=native -std=gnu11 -O3 -flto -fomit-frame-pointer -fwrapv -Wno-attributes "$@"
diff --git a/src/Specific/solinas64_2e521m1/femul.v b/src/Specific/solinas64_2e521m1/femul.v
new file mode 100644
index 000000000..3a07cee90
--- /dev/null
+++ b/src/Specific/solinas64_2e521m1/femul.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition mul :
+ { mul : feBW -> feBW -> feBW
+ | forall a b, phiBW (mul a b) = F.mul (phiBW a) (phiBW b) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_mul ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions mul.
diff --git a/src/Specific/solinas64_2e521m1/femulDisplay.v b/src/Specific/solinas64_2e521m1/femulDisplay.v
new file mode 100644
index 000000000..ede8d307e
--- /dev/null
+++ b/src/Specific/solinas64_2e521m1/femulDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e521m1.femul.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display mul.
diff --git a/src/Specific/solinas64_2e521m1/fesquare.v b/src/Specific/solinas64_2e521m1/fesquare.v
new file mode 100644
index 000000000..50cc2e10a
--- /dev/null
+++ b/src/Specific/solinas64_2e521m1/fesquare.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition square :
+ { square : feBW -> feBW
+ | forall a, phiBW (square a) = F.mul (phiBW a) (phiBW a) }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_square ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions square.
diff --git a/src/Specific/solinas64_2e521m1/fesquareDisplay.v b/src/Specific/solinas64_2e521m1/fesquareDisplay.v
new file mode 100644
index 000000000..a9358302b
--- /dev/null
+++ b/src/Specific/solinas64_2e521m1/fesquareDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e521m1.fesquare.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display square.
diff --git a/src/Specific/solinas64_2e521m1/freeze.v b/src/Specific/solinas64_2e521m1/freeze.v
new file mode 100644
index 000000000..1f483f2ab
--- /dev/null
+++ b/src/Specific/solinas64_2e521m1/freeze.v
@@ -0,0 +1,14 @@
+Require Import Crypto.Arithmetic.PrimeFieldTheorems.
+Require Import Crypto.Specific.solinas64_2e521m1.Synthesis.
+
+(* TODO : change this to field once field isomorphism happens *)
+Definition freeze :
+ { freeze : feBW -> feBW
+ | forall a, phiBW (freeze a) = phiBW a }.
+Proof.
+ Set Ltac Profiling.
+ Time synthesize_freeze ().
+ Show Ltac Profile.
+Time Defined.
+
+Print Assumptions freeze.
diff --git a/src/Specific/solinas64_2e521m1/freezeDisplay.v b/src/Specific/solinas64_2e521m1/freezeDisplay.v
new file mode 100644
index 000000000..5e06d18cd
--- /dev/null
+++ b/src/Specific/solinas64_2e521m1/freezeDisplay.v
@@ -0,0 +1,4 @@
+Require Import Crypto.Specific.solinas64_2e521m1.freeze.
+Require Import Crypto.Specific.Framework.IntegrationTestDisplayCommon.
+
+Check display freeze.