Structure
This folder is structured as follows:
Assembly files
All those assembly files have been generated by CryptOpt on ten different CPUs.
The structure is fiat_<CURVE>_<METHOD>/seed<SEED>_ratio<RATIO>.asm
.
Every folder contains optimized and proven correct implementations of the respective function using the CryptOpt Framework.
The <CURVE>
is one of Fiat Cryptography’s main supported curves: curve25519
curve25519_solinas
p224
p256
p384
p434
p448_solinas
p521
poly1305
secp256k1_dettman
secp256k1_montgomery
The <METHOD>
is one of the respective multiply
or square
(carry) if it is based on the solinas primes.
The <SEED>
value is the seed that CryptOpt was called with to create this file, the <RATIO>
is an indication of the measured performance during optimization.
Specifically, a <RATIO>
-value of abbbb
corresponds to a performance ratio of a.bbbb
x compared to the assembly that clang-15 -O3 -march=native -mtune=native
would have produces on the system.
Hence, the higher the value the faster the code.
Every asm
file contains a footer comment with some metadata on which CPU it was produced.
All assembly files use the Linux System-V ABI and require the CPU flags -adx
and -bmi2
(Supported at least from Intel Cores since the 6th generation (Skylake), released in 2016).
The files are written using Intel assembly syntax.
~~~~~~~~~~~Geometic Means of cycles of each impl over 10 archs (to copy into your lib) ~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~fiat_p224_mul~~~~~~~~~~~~~~~~~~~
25112.3519 – seed0000000230781590_ratio16447.asm
25147.1308 – seed0000000035941855_ratio15715.asm
25792.7671 – seed0000000884745008_ratio16044.asm
25873.0661 – seed0000000233187636_ratio15310.asm
26008.8013 – seed0000000713537315_ratio14658.asm
26020.6837 – seed0000000190561377_ratio16606.asm
26169.2856 – seed0000000789123944_ratio15959.asm
26213.4999 – seed0000000797595915_ratio15768.asm
26218.6936 – seed0000000659181642_ratio14722.asm
26336.4484 – seed0000000254201214_ratio15889.asm
~~~~~~~~~~~~~~~~~~~fiat_p256_mul~~~~~~~~~~~~~~~~~~~
22946.0391 – seed0000000327800118_ratio16285.asm
23039.4228 – seed0000000002746408_ratio17100.asm
23208.9795 – seed0000000304627183_ratio16225.asm
23546.9118 – seed0000000176686913_ratio17527.asm
23693.1370 – seed0000000030021278_ratio16319.asm
23845.2269 – seed0000000475321601_ratio15867.asm
23858.7084 – seed0000000787361747_ratio16115.asm
24036.8225 – seed0000000322905724_ratio16379.asm
24062.0615 – seed0000000497354156_ratio16065.asm
24086.1679 – seed0000000078046135_ratio17247.asm
~~~~~~~~~~~~~~~~~~~fiat_poly1305_carry_mul~~~~~~~~~~~~~~~~~~~
9387.6967 – seed0000000111879398_ratio12149.asm
9432.6362 – seed2092515808618690_ratio12222.asm
9610.4697 – seed3840524294645365_ratio11162.asm
9621.4541 – seed0000000022179739_ratio12188.asm
9636.0483 – seed0573130910005998_ratio12211.asm
9693.5590 – seed1576779209975026_ratio12136.asm
9714.2755 – seed4073650571830588_ratio11877.asm
9890.0780 – seed3164456322877334_ratio10566.asm
9975.9784 – seed0874383228537197_ratio11378.asm
10113.4455 – seed0000000730763325_ratio10970.asm
~~~~~~~~~~~~~~~~~~~fiat_p448_solinas_carry_square~~~~~~~~~~~~~~~~~~~
38122.7182 – seed0000000916159791_ratio10871.asm
38342.6845 – seed0000000907335901_ratio10934.asm
38362.7624 – seed0000000815670891_ratio10776.asm
38781.0677 – seed0000000770508884_ratio10738.asm
38837.9680 – seed0000000263746695_ratio10769.asm
38968.5368 – seed0000000774799711_ratio11436.asm
38975.1292 – seed0000000205064604_ratio10826.asm
38977.5958 – seed0000000300876850_ratio10449.asm
39025.2459 – seed0000000959319738_ratio10393.asm
39069.3716 – seed0000000896404879_ratio10524.asm
~~~~~~~~~~~~~~~~~~~fiat_secp256k1_dettman_mul~~~~~~~~~~~~~~~~~~~
23774.0878 – seed0000000764585948_ratio11463.asm
23788.5990 – seed0000000754074063_ratio11508.asm
24221.9895 – seed0000000777140409_ratio11402.asm
24674.1064 – seed0000000117828100_ratio11094.asm
24713.4518 – seed0000000513775597_ratio10809.asm
24972.7904 – seed0000000602977451_ratio11350.asm
25053.4382 – seed0000000031736312_ratio11350.asm
25094.3252 – seed0000000878093032_ratio11037.asm
25258.7113 – seed0000000058770487_ratio10592.asm
25266.0068 – seed0000000031436027_ratio10592.asm
~~~~~~~~~~~~~~~~~~~fiat_secp256k1_dettman_square~~~~~~~~~~~~~~~~~~~
18850.2703 – seed0000000393571661_ratio11258.asm
19038.6043 – seed0000000679347858_ratio11028.asm
19304.2764 – seed0000000418162066_ratio11252.asm
19462.1175 – seed0000000670971280_ratio11066.asm
19484.5966 – seed0000000675745200_ratio10833.asm
19611.4064 – seed0000000492908844_ratio10835.asm
19682.7685 – seed0000000845876874_ratio09989.asm
19754.8447 – seed0000000910645671_ratio10490.asm
19775.5481 – seed0000000814019596_ratio10889.asm
19896.3987 – seed0000000915489316_ratio10016.asm
~~~~~~~~~~~~~~~~~~~fiat_p434_mul~~~~~~~~~~~~~~~~~~~
76001.5329 – seed0000000520612228_ratio17727.asm
76186.4869 – seed0000000952646158_ratio18231.asm
76920.2936 – seed0000000957195289_ratio18834.asm
77695.5821 – seed0000000961713176_ratio17798.asm
78585.0413 – seed0000000492212526_ratio19146.asm
79184.3068 – seed0000000862806124_ratio17455.asm
81216.6482 – seed0000000504879121_ratio19015.asm
81522.1156 – seed0000000552077394_ratio16208.asm
82108.0557 – seed0000000852485200_ratio16911.asm
83327.2418 – seed0000000434205913_ratio16767.asm
~~~~~~~~~~~~~~~~~~~fiat_curve25519_carry_mul~~~~~~~~~~~~~~~~~~~
20659.2454 – seed0000000221072601_ratio12557.asm
20984.3987 – seed0000000800695177_ratio12068.asm
21066.1098 – seed0000000879783339_ratio12750.asm
21199.2470 – seed0000000857960681_ratio12531.asm
21202.5392 – seed0000000726041533_ratio12682.asm
21203.5860 – seed0000000164614668_ratio12098.asm
21214.1997 – seed0000000682011160_ratio11713.asm
21381.1549 – seed0000000785921685_ratio12135.asm
21435.2993 – seed0000000767513593_ratio12108.asm
21519.9361 – seed0000000741567926_ratio12480.asm
~~~~~~~~~~~~~~~~~~~fiat_p224_square~~~~~~~~~~~~~~~~~~~
25226.0019 – seed0000000916067212_ratio14016.asm
25272.6138 – seed0000000832586119_ratio14347.asm
25416.2707 – seed0000000756666782_ratio14345.asm
25495.1046 – seed0000000065522631_ratio14075.asm
25619.9646 – seed0000000385297777_ratio14178.asm
25845.2698 – seed0000000638333753_ratio14731.asm
25880.0445 – seed0000000055780533_ratio13991.asm
26009.9470 – seed0000000425289864_ratio14152.asm
26124.3835 – seed0000000727873578_ratio13921.asm
26150.9470 – seed0000000524759647_ratio14350.asm
~~~~~~~~~~~~~~~~~~~fiat_p384_mul~~~~~~~~~~~~~~~~~~~
55821.5615 – seed0000000671992404_ratio17232.asm
55837.9975 – seed0000000761560947_ratio15811.asm
55915.0450 – seed0000000181026480_ratio16313.asm
55925.3724 – seed0000000692953721_ratio16777.asm
57396.2502 – seed0000000201623742_ratio15205.asm
57449.1894 – seed0000000728228858_ratio14834.asm
57765.9770 – seed0000000675766294_ratio16188.asm
57779.2796 – seed0000000213732304_ratio16049.asm
57968.8276 – seed0000000368815009_ratio15659.asm
59263.3898 – seed0000000625674740_ratio15520.asm
~~~~~~~~~~~~~~~~~~~fiat_curve25519_solinas_square~~~~~~~~~~~~~~~~~~~
12380.6899 – seed0000000194085448_ratio15409.asm
12485.1253 – seed0000000860601667_ratio13294.asm
12521.9329 – seed0000000165326008_ratio14631.asm
12574.8684 – seed0000000835690746_ratio13642.asm
12593.3552 – seed0000000827921337_ratio14783.asm
12640.2558 – seed0000000872384643_ratio14262.asm
12640.9389 – seed0000000859941493_ratio14120.asm
12694.5447 – seed0000000874470044_ratio12927.asm
12775.8633 – seed0000000479142102_ratio13441.asm
12777.6899 – seed0000000832095084_ratio15007.asm
~~~~~~~~~~~~~~~~~~~fiat_p256_square~~~~~~~~~~~~~~~~~~~
22701.4904 – seed0000000560870535_ratio15522.asm
23049.4691 – seed0000000124692692_ratio16765.asm
23148.7840 – seed0000000087551558_ratio16199.asm
23234.7306 – seed0000000203222751_ratio15388.asm
23444.6866 – seed0000000489460953_ratio14628.asm
23473.1494 – seed0000000755558814_ratio16757.asm
23477.0533 – seed0000000809815865_ratio17019.asm
23512.0893 – seed0000000089416875_ratio16416.asm
23701.5991 – seed0000000107645793_ratio15709.asm
23809.5119 – seed0000000400202840_ratio15221.asm
~~~~~~~~~~~~~~~~~~~fiat_p448_solinas_carry_mul~~~~~~~~~~~~~~~~~~~
55253.1573 – seed0000000840933824_ratio13296.asm
56198.1065 – seed0000000527308980_ratio12941.asm
56300.0141 – seed0000000549311738_ratio13288.asm
56518.6217 – seed0000000871755297_ratio12576.asm
56834.8703 – seed0000000212886965_ratio12373.asm
57194.8084 – seed0000000538634415_ratio12378.asm
57358.1033 – seed0000000190660971_ratio12325.asm
58406.2833 – seed0000000170510776_ratio12522.asm
58754.5952 – seed0000000744087219_ratio12191.asm
59057.8753 – seed0000000518067523_ratio11496.asm
~~~~~~~~~~~~~~~~~~~fiat_p384_square~~~~~~~~~~~~~~~~~~~
55726.4583 – seed0000000274547940_ratio16784.asm
56407.0624 – seed0000000270527998_ratio16131.asm
56897.7620 – seed0000000048287391_ratio14792.asm
56948.6332 – seed0000000497150072_ratio14874.asm
56959.6876 – seed0000000735984944_ratio15521.asm
56988.3967 – seed0000000266777140_ratio15734.asm
57105.6746 – seed0000000957351372_ratio15209.asm
57117.1611 – seed0000000981147748_ratio15061.asm
57762.7663 – seed0000000457892130_ratio14853.asm
57936.9541 – seed0000000466859061_ratio15114.asm
~~~~~~~~~~~~~~~~~~~fiat_poly1305_carry_square~~~~~~~~~~~~~~~~~~~
7613.3953 – seed0000000053624325_ratio12095.asm
7642.0311 – seed0024457231423267_ratio10957.asm
7718.2563 – seed3372161002404255_ratio11912.asm
7744.4783 – seed0167852095821801_ratio10967.asm
7746.6953 – seed0000000048663337_ratio12049.asm
7777.2097 – seed1547509449887630_ratio12028.asm
7790.5204 – seed0000000482050298_ratio11130.asm
7814.1661 – seed0220574641222642_ratio11869.asm
7889.7565 – seed1423064809924844_ratio12077.asm
8128.7257 – seed2529170448241788_ratio10324.asm
~~~~~~~~~~~~~~~~~~~fiat_p521_carry_mul~~~~~~~~~~~~~~~~~~~
62017.8011 – seed0000000227334668_ratio13683.asm
62759.0233 – seed0000000218099951_ratio13778.asm
62795.7849 – seed0000000618562372_ratio13969.asm
63441.5488 – seed0000000068483547_ratio13662.asm
64071.1390 – seed0000000351333954_ratio12294.asm
64313.9885 – seed0000000640227164_ratio13223.asm
64763.6920 – seed0000000213937139_ratio13741.asm
64764.8577 – seed0000000630079487_ratio13595.asm
65137.4131 – seed0000000261526367_ratio13624.asm
65321.6756 – seed0000000256360227_ratio12393.asm
~~~~~~~~~~~~~~~~~~~fiat_p434_square~~~~~~~~~~~~~~~~~~~
71951.2926 – seed0000000208775533_ratio18549.asm
77479.8548 – seed0000000435461898_ratio17687.asm
77885.0865 – seed0000000445297389_ratio17770.asm
77996.4022 – seed0000000192159417_ratio17760.asm
78244.9282 – seed0000000933071736_ratio16974.asm
79153.4367 – seed0000000177622163_ratio17402.asm
79322.7587 – seed0000000900355537_ratio16741.asm
79903.0843 – seed0000000371239834_ratio18442.asm
83863.3797 – seed0000000875343212_ratio16291.asm
85554.1462 – seed0000000354278994_ratio16606.asm
~~~~~~~~~~~~~~~~~~~fiat_secp256k1_montgomery_square~~~~~~~~~~~~~~~~~~~
24680.5288 – seed0000000529382333_ratio18803.asm
24911.9800 – seed0000000710707594_ratio16905.asm
24942.5072 – seed0000000779869803_ratio17348.asm
25000.4499 – seed0000000104014335_ratio16619.asm
25244.6686 – seed0000000099351455_ratio16646.asm
25339.0073 – seed0000000085777171_ratio16625.asm
25489.4089 – seed0000000420429112_ratio16654.asm
25682.3169 – seed0000000820099107_ratio16813.asm
25715.7658 – seed0000000517225990_ratio17679.asm
25730.5211 – seed0000000349755458_ratio17038.asm
~~~~~~~~~~~~~~~~~~~fiat_curve25519_solinas_mul~~~~~~~~~~~~~~~~~~~
16439.8722 – seed0000000511010538_ratio17508.asm
16596.1689 – seed0000000966911541_ratio15211.asm
16622.5135 – seed0000000308463864_ratio13682.asm
16648.0798 – seed0000000356490115_ratio18494.asm
16691.0942 – seed0000000954477777_ratio14153.asm
16699.9773 – seed0000000184220986_ratio14106.asm
16768.7382 – seed0000000151532088_ratio14145.asm
16791.1490 – seed0000000275534021_ratio16928.asm
16813.4581 – seed0000000910285772_ratio17411.asm
16850.9880 – seed0000000959481953_ratio14098.asm
~~~~~~~~~~~~~~~~~~~fiat_secp256k1_montgomery_mul~~~~~~~~~~~~~~~~~~~
24688.7089 – seed0000000296317198_ratio17262.asm
25034.8809 – seed0000000716402322_ratio17042.asm
25270.0010 – seed0000000499107423_ratio17485.asm
25341.0576 – seed0000000866960015_ratio18630.asm
25539.0270 – seed0000000618348495_ratio17036.asm
25563.0753 – seed0000000763169037_ratio18998.asm
25647.0350 – seed0000000513650667_ratio17495.asm
25684.5690 – seed0000000307664977_ratio17812.asm
25692.3282 – seed0000000241130509_ratio18375.asm
25823.1236 – seed0000000605119269_ratio17367.asm
~~~~~~~~~~~~~~~~~~~fiat_p521_carry_square~~~~~~~~~~~~~~~~~~~
39933.5684 – seed0000000234238998_ratio15002.asm
40181.1817 – seed0000000702884021_ratio14542.asm
40369.7156 – seed0000000882458724_ratio15398.asm
40453.8272 – seed0000000823465095_ratio13019.asm
40584.3445 – seed0000000648790289_ratio14634.asm
40593.3113 – seed0000000875801491_ratio14530.asm
40671.2566 – seed0000000813914803_ratio12975.asm
40816.6980 – seed0000000756025198_ratio12445.asm
40951.8564 – seed0000000244944536_ratio14852.asm
41103.9684 – seed0000000632440548_ratio14173.asm
~~~~~~~~~~~~~~~~~~~fiat_curve25519_carry_square~~~~~~~~~~~~~~~~~~~
15022.8062 – seed0000000623063394_ratio11752.asm
15256.9052 – seed0000000624291849_ratio12217.asm
15268.2585 – seed0000000602835153_ratio11693.asm
15279.3464 – seed0000000553108538_ratio12619.asm
15342.6751 – seed0000000634178982_ratio11788.asm
15542.9888 – seed0000000595743874_ratio12066.asm
15544.3075 – seed0000000580196903_ratio12524.asm
15852.4394 – seed0000000995093600_ratio12993.asm
15856.9433 – seed0000000865063170_ratio12182.asm
15884.1621 – seed0000000588914417_ratio12019.asm