Skip to content

Commit 799bfae

Browse files
authored
Switch to the *_neon functions (#183)
* Switch to the `*_neon` functions This patch makes the `*_neon` functions replace their original scalar implementations. This (partially) resolves the divergence between the set of functions supported in Arm and in x86. There are still a few functions that are diverged - `bignum_emontredc_8n_cdiff` and `bignum_copy_row_from_table_*` which only exists in Arm - but all other functions are converged into one. The original scalar functions are moved to the `unopt/` directories. Their proofs are merged into the `*_neon.ml` proofs, which are again renamed to the original `*.ml`. All `_NEON` and `_neon` suffixes are removed. Also, this patch applies the NIST P-256 optimized field operations to `p256_scalarmulbase` which was missing in the past. * Remove {arm,x86}/proofs/make.ml * Remove debug messages in elf.ml
1 parent 3559610 commit 799bfae

File tree

113 files changed

+29132
-40772
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+29132
-40772
lines changed

arm/Makefile

+33-36
Original file line numberDiff line numberDiff line change
@@ -160,30 +160,23 @@ BIGNUM_OBJ = curve25519/bignum_add_p25519.o \
160160
curve25519/bignum_sqrt_p25519_alt.o \
161161
curve25519/bignum_sub_p25519.o \
162162
fastmul/bignum_emontredc_8n.o \
163-
fastmul/bignum_emontredc_8n_neon.o \
164163
fastmul/bignum_emontredc_8n_cdiff.o \
165164
fastmul/bignum_kmul_16_32.o \
166-
fastmul/bignum_kmul_16_32_neon.o \
167165
fastmul/bignum_kmul_32_64.o \
168-
fastmul/bignum_kmul_32_64_neon.o \
169166
fastmul/bignum_ksqr_16_32.o \
170-
fastmul/bignum_ksqr_16_32_neon.o \
171167
fastmul/bignum_ksqr_32_64.o \
172-
fastmul/bignum_ksqr_32_64_neon.o \
173168
fastmul/bignum_mul_4_8.o \
174169
fastmul/bignum_mul_4_8_alt.o \
175170
fastmul/bignum_mul_6_12.o \
176171
fastmul/bignum_mul_6_12_alt.o \
177172
fastmul/bignum_mul_8_16.o \
178173
fastmul/bignum_mul_8_16_alt.o \
179-
fastmul/bignum_mul_8_16_neon.o \
180174
fastmul/bignum_sqr_4_8.o \
181175
fastmul/bignum_sqr_4_8_alt.o \
182176
fastmul/bignum_sqr_6_12.o \
183177
fastmul/bignum_sqr_6_12_alt.o \
184178
fastmul/bignum_sqr_8_16.o \
185179
fastmul/bignum_sqr_8_16_alt.o \
186-
fastmul/bignum_sqr_8_16_neon.o \
187180
generic/bignum_add.o \
188181
generic/bignum_amontifier.o \
189182
generic/bignum_amontmul.o \
@@ -202,9 +195,9 @@ BIGNUM_OBJ = curve25519/bignum_add_p25519.o \
202195
generic/bignum_coprime.o \
203196
generic/bignum_copy.o \
204197
generic/bignum_copy_row_from_table.o \
205-
generic/bignum_copy_row_from_table_8n_neon.o \
206-
generic/bignum_copy_row_from_table_16_neon.o \
207-
generic/bignum_copy_row_from_table_32_neon.o \
198+
generic/bignum_copy_row_from_table_8n.o \
199+
generic/bignum_copy_row_from_table_16.o \
200+
generic/bignum_copy_row_from_table_32.o \
208201
generic/bignum_ctd.o \
209202
generic/bignum_ctz.o \
210203
generic/bignum_demont.o \
@@ -274,10 +267,8 @@ BIGNUM_OBJ = curve25519/bignum_add_p25519.o \
274267
p256/bignum_montinv_p256.o \
275268
p256/bignum_montmul_p256.o \
276269
p256/bignum_montmul_p256_alt.o \
277-
p256/bignum_montmul_p256_neon.o \
278270
p256/bignum_montsqr_p256.o \
279271
p256/bignum_montsqr_p256_alt.o \
280-
p256/bignum_montsqr_p256_neon.o \
281272
p256/bignum_mux_4.o \
282273
p256/bignum_neg_p256.o \
283274
p256/bignum_nonzero_4.o \
@@ -301,10 +292,8 @@ BIGNUM_OBJ = curve25519/bignum_add_p25519.o \
301292
p384/bignum_montinv_p384.o \
302293
p384/bignum_montmul_p384.o \
303294
p384/bignum_montmul_p384_alt.o \
304-
p384/bignum_montmul_p384_neon.o \
305295
p384/bignum_montsqr_p384.o \
306296
p384/bignum_montsqr_p384_alt.o \
307-
p384/bignum_montsqr_p384_neon.o \
308297
p384/bignum_mux_6.o \
309298
p384/bignum_neg_p384.o \
310299
p384/bignum_nonzero_6.o \
@@ -324,18 +313,14 @@ BIGNUM_OBJ = curve25519/bignum_add_p25519.o \
324313
p521/bignum_mod_p521_9.o \
325314
p521/bignum_montmul_p521.o \
326315
p521/bignum_montmul_p521_alt.o \
327-
p521/bignum_montmul_p521_neon.o \
328316
p521/bignum_montsqr_p521.o \
329317
p521/bignum_montsqr_p521_alt.o \
330-
p521/bignum_montsqr_p521_neon.o \
331318
p521/bignum_mul_p521.o \
332319
p521/bignum_mul_p521_alt.o \
333-
p521/bignum_mul_p521_neon.o \
334320
p521/bignum_neg_p521.o \
335321
p521/bignum_optneg_p521.o \
336322
p521/bignum_sqr_p521.o \
337323
p521/bignum_sqr_p521_alt.o \
338-
p521/bignum_sqr_p521_neon.o \
339324
p521/bignum_sub_p521.o \
340325
p521/bignum_tolebytes_p521.o \
341326
p521/bignum_tomont_p521.o \
@@ -383,11 +368,22 @@ BIGNUM_OBJ = curve25519/bignum_add_p25519.o \
383368
sm2/bignum_tomont_sm2.o \
384369
sm2/bignum_triple_sm2.o
385370

386-
UNOPT_OBJ = p256/unopt/p256_montjadd.o \
371+
UNOPT_OBJ = p256/unopt/bignum_montmul_p256_base.o \
372+
p256/unopt/bignum_montsqr_p256_base.o \
373+
p256/unopt/p256_montjadd.o \
387374
p256/unopt/p256_montjdouble.o \
375+
p384/unopt/bignum_montmul_p384_base.o \
376+
p384/unopt/bignum_montsqr_p384_base.o \
388377
p384/unopt/p384_montjadd.o \
389378
p384/unopt/p384_montjdouble.o \
390-
fastmul/unopt/bignum_emontredc_8n_cdiff_base.o
379+
p521/unopt/bignum_montmul_p521_base.o \
380+
p521/unopt/bignum_montsqr_p521_base.o \
381+
p521/unopt/bignum_mul_p521_base.o \
382+
p521/unopt/bignum_sqr_p521_base.o \
383+
fastmul/unopt/bignum_emontredc_8n_base.o \
384+
fastmul/unopt/bignum_emontredc_8n_cdiff_base.o \
385+
fastmul/unopt/bignum_mul_8_16_base.o \
386+
fastmul/unopt/bignum_sqr_8_16_base.o
391387

392388
OBJ = $(POINT_OBJ) $(BIGNUM_OBJ)
393389

@@ -443,16 +439,17 @@ proofs/simulator.native: proofs/simulator.ml ; ../tools/build-proof.sh proofs/si
443439

444440
# Cases where a proof uses other proofs for lemmas and/or subroutines
445441

446-
p256/bignum_montmul_p256_neon.native: p256/bignum_montmul_p256.native
447-
p384/bignum_montmul_p384_neon.native: p384/bignum_montmul_p384.native
448-
p521/bignum_montmul_p521_neon.native: p521/bignum_montmul_p521.native
449-
p256/bignum_montsqr_p256_neon.native: p256/bignum_montsqr_p256.native
450-
p384/bignum_montsqr_p384_neon.native: p384/bignum_montsqr_p384.native
451-
p521/bignum_montsqr_p521_neon.native: p521/bignum_montsqr_p521.native
452-
p521/bignum_mul_p521_neon.native: p521/bignum_mul_p521.native
453-
p521/bignum_sqr_p521_neon.native: p521/bignum_sqr_p521.native
454-
fastmul/bignum_mul_8_16_neon.native: fastmul/bignum_mul_8_16.native
455-
fastmul/bignum_sqr_8_16_neon.native: fastmul/bignum_sqr_8_16.native
442+
p256/bignum_montmul_p256.native: p256/unopt/bignum_montmul_p256_base.o
443+
p384/bignum_montmul_p384.native: p384/unopt/bignum_montmul_p384_base.o
444+
p521/bignum_montmul_p521.native: p521/unopt/bignum_montmul_p521_base.o
445+
p256/bignum_montsqr_p256.native: p256/unopt/bignum_montsqr_p256_base.o
446+
p384/bignum_montsqr_p384.native: p384/unopt/bignum_montsqr_p384_base.o
447+
p521/bignum_montsqr_p521.native: p521/unopt/bignum_montsqr_p521_base.o
448+
p521/bignum_mul_p521.native: p521/unopt/bignum_mul_p521_base.o
449+
p521/bignum_sqr_p521.native: p521/unopt/bignum_sqr_p521_base.o
450+
fastmul/bignum_emontredc_8n_cdiff.native: fastmul/unopt/bignum_emontredc_8n_base.o fastmul/unopt/bignum_emontredc_8n_cdiff_base.o
451+
fastmul/bignum_mul_8_16.native: fastmul/unopt/bignum_mul_8_16_base.o
452+
fastmul/bignum_sqr_8_16.native: fastmul/unopt/bignum_sqr_8_16_base.o
456453
curve25519/curve25519_x25519.native: curve25519/bignum_inv_p25519.native
457454
curve25519/curve25519_x25519_alt.native: curve25519/bignum_inv_p25519.native
458455
curve25519/curve25519_x25519_byte.native: curve25519/bignum_inv_p25519.native
@@ -466,22 +463,22 @@ curve25519/edwards25519_scalarmulbase_alt.native: curve25519/bignum_inv_p25519.n
466463
curve25519/edwards25519_scalarmuldouble.native: curve25519/bignum_inv_p25519.native
467464
curve25519/edwards25519_scalarmuldouble_alt.native: curve25519/bignum_inv_p25519.native
468465
generic/bignum_modexp.native: generic/bignum_amontifier.native generic/bignum_amontmul.native generic/bignum_demont.native generic/bignum_mux.native
469-
p256/p256_montjadd.native: p256/unopt/p256_montjadd.o p256/bignum_montsqr_p256_neon.native p256/bignum_montmul_p256_neon.native p256/bignum_sub_p256.native
470-
p256/p256_montjdouble.native: p256/unopt/p256_montjdouble.o p256/bignum_montsqr_p256_neon.native p256/bignum_montmul_p256_neon.native p256/bignum_sub_p256.native p256/bignum_add_p256.native
466+
p256/p256_montjadd.native: p256/unopt/p256_montjadd.o p256/bignum_montsqr_p256.native p256/bignum_montmul_p256.native p256/bignum_sub_p256.native
467+
p256/p256_montjdouble.native: p256/unopt/p256_montjdouble.o p256/bignum_montsqr_p256.native p256/bignum_montmul_p256.native p256/bignum_sub_p256.native p256/bignum_add_p256.native
471468
p256/p256_montjscalarmul.native: p256/p256_montjadd.native p256/p256_montjdouble.native
472469
p256/p256_montjscalarmul_alt.native: p256/p256_montjadd_alt.native p256/p256_montjdouble_alt.native
473470
p256/p256_scalarmul.native: p256/bignum_demont_p256.native p256/bignum_inv_p256.native p256/bignum_tomont_p256.native p256/p256_montjadd.native p256/p256_montjdouble.native p256/p256_montjmixadd.native
474471
p256/p256_scalarmul_alt.native: p256/bignum_demont_p256.native p256/bignum_inv_p256.native p256/p256_montjadd_alt.native p256/p256_montjdouble_alt.native p256/p256_montjmixadd_alt.native
475472
p256/p256_scalarmulbase.native: p256/bignum_demont_p256.native p256/bignum_inv_p256.native p256/p256_montjmixadd.native
476473
p256/p256_scalarmulbase_alt.native: p256/bignum_demont_p256.native p256/bignum_inv_p256.native p256/p256_montjmixadd_alt.native
477-
p384/p384_montjadd.native: p384/unopt/p384_montjadd.o p384/bignum_montsqr_p384_neon.native p384/bignum_montmul_p384_neon.native p384/bignum_sub_p384.native
478-
p384/p384_montjdouble.native: p384/unopt/p384_montjdouble.o p384/bignum_montsqr_p384_neon.native p384/bignum_montmul_p384_neon.native p384/bignum_sub_p384.native p384/bignum_add_p384.native
474+
p384/p384_montjadd.native: p384/unopt/p384_montjadd.o p384/bignum_montsqr_p384.native p384/bignum_montmul_p384.native p384/bignum_sub_p384.native
475+
p384/p384_montjdouble.native: p384/unopt/p384_montjdouble.o p384/bignum_montsqr_p384.native p384/bignum_montmul_p384.native p384/bignum_sub_p384.native p384/bignum_add_p384.native
479476
p384/p384_montjscalarmul.native: \
480477
p384/p384_montjadd.native p384/p384_montjdouble.native \
481478
p384/bignum_sub_p384.native p384/bignum_add_p384.native
482479
p384/p384_montjscalarmul_alt.native: p384/p384_montjadd_alt.native p384/p384_montjdouble_alt.native
483-
p521/p521_jadd.native: p521/bignum_mul_p521_neon.native p521/bignum_sqr_p521_neon.native
484-
p521/p521_jdouble.native: p521/bignum_mul_p521_neon.native p521/bignum_sqr_p521_neon.native
480+
p521/p521_jadd.native: p521/bignum_mul_p521.native p521/bignum_sqr_p521.native
481+
p521/p521_jdouble.native: p521/bignum_mul_p521.native p521/bignum_sqr_p521.native
485482
p521/p521_jscalarmul.native: p521/bignum_mod_n521_9.native p521/p521_jadd.native p521/p521_jdouble.native
486483
p521/p521_jscalarmul_alt.native: p521/bignum_mod_n521_9.native
487484
sm2/sm2_montjscalarmul.native: sm2/sm2_montjadd.native sm2/sm2_montjdouble.native

arm/fastmul/Makefile

-7
Original file line numberDiff line numberDiff line change
@@ -22,30 +22,23 @@ endif
2222
# List of object files
2323

2424
OBJ = bignum_emontredc_8n.o \
25-
bignum_emontredc_8n_neon.o \
2625
bignum_emontredc_8n_cdiff.o \
2726
bignum_kmul_16_32.o \
28-
bignum_kmul_16_32_neon.o \
2927
bignum_kmul_32_64.o \
30-
bignum_kmul_32_64_neon.o \
3128
bignum_ksqr_16_32.o \
32-
bignum_ksqr_16_32_neon.o \
3329
bignum_ksqr_32_64.o \
34-
bignum_ksqr_32_64_neon.o \
3530
bignum_mul_4_8.o \
3631
bignum_mul_4_8_alt.o \
3732
bignum_mul_6_12.o \
3833
bignum_mul_6_12_alt.o \
3934
bignum_mul_8_16.o \
4035
bignum_mul_8_16_alt.o \
41-
bignum_mul_8_16_neon.o \
4236
bignum_sqr_4_8.o \
4337
bignum_sqr_4_8_alt.o \
4438
bignum_sqr_6_12.o \
4539
bignum_sqr_6_12_alt.o \
4640
bignum_sqr_8_16.o \
4741
bignum_sqr_8_16_alt.o \
48-
bignum_sqr_8_16_neon.o
4942

5043
%.o : %.S ; $(CC) -E -I../../include $< | $(GAS) -o $@ -
5144

0 commit comments

Comments
 (0)