From a17fb3b4c1c04e3f397e03525f53a12875c85fe8 Mon Sep 17 00:00:00 2001 From: Mamy Ratsimbazafy Date: Sat, 6 Aug 2022 19:55:35 +0200 Subject: [PATCH] Fix compiler hints and warnings (unused import/variables, ...) --- bindings/constantine_pasta.nim | 12 ++-- bindings/generated/constantine_pasta.h | 60 +++++++++++++++++++ constantine/curves_primitives.nim | 2 +- .../limbs_asm_modular_dbl_prec_x86.nim | 2 +- .../assembly/limbs_asm_modular_x86.nim | 6 +- .../assembly/limbs_asm_mul_mont_x86.nim | 2 +- .../limbs_asm_mul_mont_x86_adx_bmi2.nim | 2 +- .../assembly/limbs_asm_mul_x86_adx_bmi2.nim | 4 +- .../assembly/limbs_asm_redc_mont_x86.nim | 4 +- .../limbs_asm_redc_mont_x86_adx_bmi2.nim | 4 +- .../math/arithmetic/bigints_montgomery.nim | 3 - .../finite_fields_double_precision.nim | 1 - constantine/math/arithmetic/limbs_extmul.nim | 2 +- .../math/arithmetic/limbs_montgomery.nim | 2 +- .../math/arithmetic/limbs_unsaturated.nim | 2 +- constantine/math/config/precompute.nim | 4 +- .../math/curves/bls12_377_constants.nim | 4 +- .../math/curves/bls12_377_endomorphisms.nim | 2 + .../math/curves/bls12_377_frobenius.nim | 2 + .../math/curves/bls12_381_constants.nim | 4 +- .../math/curves/bls12_381_endomorphisms.nim | 2 + .../math/curves/bls12_381_frobenius.nim | 2 + .../math/curves/bls12_381_generators.nim | 2 + .../curves/bls12_381_hash_to_curve_g1.nim | 2 + .../curves/bls12_381_hash_to_curve_g2.nim | 2 + .../math/curves/bls12_381_sqrt_fp2.nim | 2 + .../math/curves/bn254_nogami_constants.nim | 4 +- .../curves/bn254_nogami_endomorphisms.nim | 2 + .../math/curves/bn254_nogami_frobenius.nim | 2 + constantine/math/curves/bn254_nogami_sqrt.nim | 2 - .../math/curves/bn254_nogami_sqrt_fp2.nim | 2 + .../math/curves/bn254_nogami_subgroups.nim | 3 +- .../math/curves/bn254_snarks_constants.nim | 4 +- .../curves/bn254_snarks_endomorphisms.nim | 2 + .../math/curves/bn254_snarks_frobenius.nim | 2 + .../math/curves/bn254_snarks_generators.nim | 2 + .../curves/bn254_snarks_hash_to_curve_g1.nim | 2 + .../curves/bn254_snarks_hash_to_curve_g2.nim | 4 +- .../math/curves/bn254_snarks_pairing.nim | 3 +- .../math/curves/bn254_snarks_sqrt_fp2.nim | 2 + .../math/curves/bn254_snarks_subgroups.nim | 3 +- constantine/math/curves/bw6_761_constants.nim | 2 + .../math/curves/bw6_761_endomorphisms.nim | 2 + constantine/math/curves/bw6_761_frobenius.nim | 2 + constantine/math/curves/bw6_761_subgroups.nim | 4 +- .../math/curves/pallas_endomorphisms.nim | 2 + constantine/math/curves/pallas_subgroups.nim | 6 +- .../math/curves/vesta_endomorphisms.nim | 2 + constantine/math/curves/vesta_subgroups.nim | 12 ++-- .../elliptic/ec_shortweierstrass_jacobian.nim | 2 +- .../platforms/constant_time/multiplexers.nim | 4 +- .../platforms/isa/macro_assembler_x86.nim | 24 ++++---- metering/tracer.nim | 2 +- 53 files changed, 170 insertions(+), 69 deletions(-) diff --git a/bindings/constantine_pasta.nim b/bindings/constantine_pasta.nim index 987fc76..8760985 100644 --- a/bindings/constantine_pasta.nim +++ b/bindings/constantine_pasta.nim @@ -14,11 +14,11 @@ type vesta_fr = Fr[Vesta] vesta_fp = Fp[Vesta] pallas_ec_aff = ECP_ShortW_Aff[Fp[Pallas], G1] - pallas_ec_jac = ECP_ShortW_Aff[Fp[Pallas], G1] - pallas_ec_prj = ECP_ShortW_Aff[Fp[Pallas], G1] + pallas_ec_jac = ECP_ShortW_Jac[Fp[Pallas], G1] + pallas_ec_prj = ECP_ShortW_Prj[Fp[Pallas], G1] vesta_ec_aff = ECP_ShortW_Aff[Fp[Vesta], G1] - vesta_ec_jac = ECP_ShortW_Aff[Fp[Vesta], G1] - vesta_ec_prj = ECP_ShortW_Aff[Fp[Vesta], G1] + vesta_ec_jac = ECP_ShortW_Jac[Fp[Vesta], G1] + vesta_ec_prj = ECP_ShortW_Prj[Fp[Vesta], G1] collectBindings(cBindings): genBindingsField(pallas_fr) @@ -28,7 +28,11 @@ collectBindings(cBindings): genBindingsField(vesta_fp) genBindingsFieldSqrt(vesta_fp) genBindings_EC_ShortW_Affine(pallas_ec_aff, pallas_fp) + genBindings_EC_ShortW_NonAffine(pallas_ec_jac, pallas_ec_aff, pallas_fp) + genBindings_EC_ShortW_NonAffine(pallas_ec_prj, pallas_ec_aff, pallas_fp) genBindings_EC_ShortW_Affine(vesta_ec_aff, pallas_fp) + genBindings_EC_ShortW_NonAffine(vesta_ec_jac, vesta_ec_aff, vesta_fp) + genBindings_EC_ShortW_NonAffine(vesta_ec_prj, vesta_ec_aff, vesta_fp) # Write header when isMainModule and defined(CttGenerateHeaders): diff --git a/bindings/generated/constantine_pasta.h b/bindings/generated/constantine_pasta.h index c76b7bb..81e70af 100644 --- a/bindings/generated/constantine_pasta.h +++ b/bindings/generated/constantine_pasta.h @@ -198,6 +198,36 @@ secret_bool ctt_pallas_ec_aff_is_on_curve(const pallas_fp* x, const pallas_fp* y void ctt_pallas_ec_aff_neg(pallas_ec_aff* P, const pallas_ec_aff* Q); void ctt_pallas_ec_aff_neg_in_place(pallas_ec_aff* P); +secret_bool ctt_pallas_ec_jac_is_eq(const pallas_ec_jac* P, const pallas_ec_jac* Q); +secret_bool ctt_pallas_ec_jac_is_inf(const pallas_ec_jac* P); +void ctt_pallas_ec_jac_set_inf(pallas_ec_jac* P); +void ctt_pallas_ec_jac_ccopy(pallas_ec_jac* P, const pallas_ec_jac* Q, const secret_bool ctl); +void ctt_pallas_ec_jac_neg(pallas_ec_jac* P, const pallas_ec_jac* Q); +void ctt_pallas_ec_jac_neg_in_place(pallas_ec_jac* P); +void ctt_pallas_ec_jac_cneg_in_place(pallas_ec_jac* P, const secret_bool ctl); +void ctt_pallas_ec_jac_sum(pallas_ec_jac* r, const pallas_ec_jac* P, const pallas_ec_jac* Q); +void ctt_pallas_ec_jac_add_in_place(pallas_ec_jac* P, const pallas_ec_jac* Q); +void ctt_pallas_ec_jac_diff(pallas_ec_jac* r, const pallas_ec_jac* P, const pallas_ec_jac* Q); +void ctt_pallas_ec_jac_double(pallas_ec_jac* r, const pallas_ec_jac* P); +void ctt_pallas_ec_jac_double_in_place(pallas_ec_jac* P); +void ctt_pallas_ec_jac_affine(pallas_ec_aff* dst, const pallas_ec_jac* src); +void ctt_pallas_ec_jac_from_affine(pallas_ec_jac* dst, const pallas_ec_aff* src); + +secret_bool ctt_pallas_ec_prj_is_eq(const pallas_ec_prj* P, const pallas_ec_prj* Q); +secret_bool ctt_pallas_ec_prj_is_inf(const pallas_ec_prj* P); +void ctt_pallas_ec_prj_set_inf(pallas_ec_prj* P); +void ctt_pallas_ec_prj_ccopy(pallas_ec_prj* P, const pallas_ec_prj* Q, const secret_bool ctl); +void ctt_pallas_ec_prj_neg(pallas_ec_prj* P, const pallas_ec_prj* Q); +void ctt_pallas_ec_prj_neg_in_place(pallas_ec_prj* P); +void ctt_pallas_ec_prj_cneg_in_place(pallas_ec_prj* P, const secret_bool ctl); +void ctt_pallas_ec_prj_sum(pallas_ec_prj* r, const pallas_ec_prj* P, const pallas_ec_prj* Q); +void ctt_pallas_ec_prj_add_in_place(pallas_ec_prj* P, const pallas_ec_prj* Q); +void ctt_pallas_ec_prj_diff(pallas_ec_prj* r, const pallas_ec_prj* P, const pallas_ec_prj* Q); +void ctt_pallas_ec_prj_double(pallas_ec_prj* r, const pallas_ec_prj* P); +void ctt_pallas_ec_prj_double_in_place(pallas_ec_prj* P); +void ctt_pallas_ec_prj_affine(pallas_ec_aff* dst, const pallas_ec_prj* src); +void ctt_pallas_ec_prj_from_affine(pallas_ec_prj* dst, const pallas_ec_aff* src); + secret_bool ctt_vesta_ec_aff_is_eq(const vesta_ec_aff* P, const vesta_ec_aff* Q); secret_bool ctt_vesta_ec_aff_is_inf(const vesta_ec_aff* P); void ctt_vesta_ec_aff_set_inf(vesta_ec_aff* P); @@ -206,6 +236,36 @@ secret_bool ctt_vesta_ec_aff_is_on_curve(const pallas_fp* x, const pallas_fp* y) void ctt_vesta_ec_aff_neg(vesta_ec_aff* P, const vesta_ec_aff* Q); void ctt_vesta_ec_aff_neg_in_place(vesta_ec_aff* P); +secret_bool ctt_vesta_ec_jac_is_eq(const vesta_ec_jac* P, const vesta_ec_jac* Q); +secret_bool ctt_vesta_ec_jac_is_inf(const vesta_ec_jac* P); +void ctt_vesta_ec_jac_set_inf(vesta_ec_jac* P); +void ctt_vesta_ec_jac_ccopy(vesta_ec_jac* P, const vesta_ec_jac* Q, const secret_bool ctl); +void ctt_vesta_ec_jac_neg(vesta_ec_jac* P, const vesta_ec_jac* Q); +void ctt_vesta_ec_jac_neg_in_place(vesta_ec_jac* P); +void ctt_vesta_ec_jac_cneg_in_place(vesta_ec_jac* P, const secret_bool ctl); +void ctt_vesta_ec_jac_sum(vesta_ec_jac* r, const vesta_ec_jac* P, const vesta_ec_jac* Q); +void ctt_vesta_ec_jac_add_in_place(vesta_ec_jac* P, const vesta_ec_jac* Q); +void ctt_vesta_ec_jac_diff(vesta_ec_jac* r, const vesta_ec_jac* P, const vesta_ec_jac* Q); +void ctt_vesta_ec_jac_double(vesta_ec_jac* r, const vesta_ec_jac* P); +void ctt_vesta_ec_jac_double_in_place(vesta_ec_jac* P); +void ctt_vesta_ec_jac_affine(vesta_ec_aff* dst, const vesta_ec_jac* src); +void ctt_vesta_ec_jac_from_affine(vesta_ec_jac* dst, const vesta_ec_aff* src); + +secret_bool ctt_vesta_ec_prj_is_eq(const vesta_ec_prj* P, const vesta_ec_prj* Q); +secret_bool ctt_vesta_ec_prj_is_inf(const vesta_ec_prj* P); +void ctt_vesta_ec_prj_set_inf(vesta_ec_prj* P); +void ctt_vesta_ec_prj_ccopy(vesta_ec_prj* P, const vesta_ec_prj* Q, const secret_bool ctl); +void ctt_vesta_ec_prj_neg(vesta_ec_prj* P, const vesta_ec_prj* Q); +void ctt_vesta_ec_prj_neg_in_place(vesta_ec_prj* P); +void ctt_vesta_ec_prj_cneg_in_place(vesta_ec_prj* P, const secret_bool ctl); +void ctt_vesta_ec_prj_sum(vesta_ec_prj* r, const vesta_ec_prj* P, const vesta_ec_prj* Q); +void ctt_vesta_ec_prj_add_in_place(vesta_ec_prj* P, const vesta_ec_prj* Q); +void ctt_vesta_ec_prj_diff(vesta_ec_prj* r, const vesta_ec_prj* P, const vesta_ec_prj* Q); +void ctt_vesta_ec_prj_double(vesta_ec_prj* r, const vesta_ec_prj* P); +void ctt_vesta_ec_prj_double_in_place(vesta_ec_prj* P); +void ctt_vesta_ec_prj_affine(vesta_ec_aff* dst, const vesta_ec_prj* src); +void ctt_vesta_ec_prj_from_affine(vesta_ec_prj* dst, const vesta_ec_aff* src); + /* * Initializes the library: * - the Nim runtime if heap-allocated types are used, diff --git a/constantine/curves_primitives.nim b/constantine/curves_primitives.nim index c8a603a..35dbca5 100644 --- a/constantine/curves_primitives.nim +++ b/constantine/curves_primitives.nim @@ -16,7 +16,7 @@ import curves/zoo_subgroups, curves/zoo_generators ], - ./math/io/[io_bigints, io_fields, io_ec], + ./math/io/[io_bigints, io_fields], ./math/isogenies/frobenius, ./math/pairings, ./math/pairing/[ diff --git a/constantine/math/arithmetic/assembly/limbs_asm_modular_dbl_prec_x86.nim b/constantine/math/arithmetic/assembly/limbs_asm_modular_dbl_prec_x86.nim index dff0d80..e9736f6 100644 --- a/constantine/math/arithmetic/assembly/limbs_asm_modular_dbl_prec_x86.nim +++ b/constantine/math/arithmetic/assembly/limbs_asm_modular_dbl_prec_x86.nim @@ -235,7 +235,7 @@ macro negmod2x_gen[N: static int](R: var Limbs[N], A: Limbs[N], m: Limbs[N div 2 let usym = u.nimSymbol result.add quote do: var `isZerosym`{.noInit.}: BaseType - var `usym`{.noinit.}: typeof(`A`) + var `usym`{.noinit, used.}: typeof(`A`) result.add ctx.generate func negmod2x_asm*[N: static int](r: var Limbs[N], a: Limbs[N], M: Limbs[N div 2]) = diff --git a/constantine/math/arithmetic/assembly/limbs_asm_modular_x86.nim b/constantine/math/arithmetic/assembly/limbs_asm_modular_x86.nim index a752ea6..b6492dc 100644 --- a/constantine/math/arithmetic/assembly/limbs_asm_modular_x86.nim +++ b/constantine/math/arithmetic/assembly/limbs_asm_modular_x86.nim @@ -151,7 +151,7 @@ macro addmod_gen[N: static int](R: var Limbs[N], A, B, m: Limbs[N], spareBits: s let usym = u.nimSymbol let vsym = v.nimSymbol result.add quote do: - var `usym`{.noinit.}, `vsym` {.noInit.}: typeof(`A`) + var `usym`{.noinit.}, `vsym` {.noInit, used.}: typeof(`A`) staticFor i, 0, `N`: `usym`[i] = `A`[i] @@ -204,7 +204,7 @@ macro submod_gen[N: static int](R: var Limbs[N], A, B, m: Limbs[N]): untyped = let usym = u.nimSymbol let vsym = v.nimSymbol result.add quote do: - var `usym`{.noinit.}, `vsym` {.noInit.}: typeof(`A`) + var `usym`{.noinit.}, `vsym` {.noInit, used.}: typeof(`A`) staticFor i, 0, `N`: `usym`[i] = `A`[i] @@ -278,7 +278,7 @@ macro negmod_gen[N: static int](R: var Limbs[N], A, m: Limbs[N]): untyped = let usym = u.nimSymbol result.add quote do: - var `usym`{.noinit.}: typeof(`A`) + var `usym`{.noinit, used.}: typeof(`A`) result.add ctx.generate func negmod_asm*(r: var Limbs, a, m: Limbs) = diff --git a/constantine/math/arithmetic/assembly/limbs_asm_mul_mont_x86.nim b/constantine/math/arithmetic/assembly/limbs_asm_mul_mont_x86.nim index e290503..daa7d19 100644 --- a/constantine/math/arithmetic/assembly/limbs_asm_mul_mont_x86.nim +++ b/constantine/math/arithmetic/assembly/limbs_asm_mul_mont_x86.nim @@ -101,7 +101,7 @@ macro mulMont_CIOS_sparebit_gen[N: static int]( result.add quote do: static: doAssert: sizeof(SecretWord) == sizeof(ByteAddress) - var `tsym`: typeof(`r_PIR`) # zero init + var `tsym`{.noInit, used.}: typeof(`r_PIR`) # Assumes 64-bit limbs on 64-bit arch (or you can't store an address) var `scratchSym` {.noInit.}: Limbs[`scratchSlots`] `scratchSym`[0] = cast[SecretWord](`a_PIR`[0].unsafeAddr) diff --git a/constantine/math/arithmetic/assembly/limbs_asm_mul_mont_x86_adx_bmi2.nim b/constantine/math/arithmetic/assembly/limbs_asm_mul_mont_x86_adx_bmi2.nim index e72bea0..d6f94b5 100644 --- a/constantine/math/arithmetic/assembly/limbs_asm_mul_mont_x86_adx_bmi2.nim +++ b/constantine/math/arithmetic/assembly/limbs_asm_mul_mont_x86_adx_bmi2.nim @@ -227,7 +227,7 @@ macro mulMont_CIOS_sparebit_adx_gen[N: static int]( result.add quote do: static: doAssert: sizeof(SecretWord) == sizeof(ByteAddress) - var `tsym`{.noInit.}: typeof(`r_PIR`) # zero init + var `tsym`{.noInit, used.}: typeof(`r_PIR`) # Assumes 64-bit limbs on 64-bit arch (or you can't store an address) var `scratchSym` {.noInit.}: Limbs[`scratchSlots`] `scratchSym`[0] = cast[SecretWord](`a_PIR`[0].unsafeAddr) diff --git a/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim b/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim index 9c8c693..e5a797e 100644 --- a/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim +++ b/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim @@ -136,7 +136,7 @@ macro mulx_gen[rLen, aLen, bLen: static int](r_PIR: var Limbs[rLen], a_PIR: Limb # Prologue let tsym = t.nimSymbol result.add quote do: - var `tsym`{.noInit.}: array[`tSlots`, BaseType] + var `tsym`{.noInit, used.}: array[`tSlots`, BaseType] for i in 0 ..< min(rLen, bLen): if i == 0: @@ -591,7 +591,7 @@ macro sqrx_gen*[rLen, aLen: static int](r_PIR: var Limbs[rLen], a_PIR: Limbs[aLe # ------------------------------- let tsym = t.nimSymbol result.add quote do: - var `tsym`{.noInit.}: array[`tSlots`, BaseType] + var `tsym`{.noInit, used.}: array[`tSlots`, BaseType] if aLen == 4: ctx.sqrx_gen4L(r, a, t) diff --git a/constantine/math/arithmetic/assembly/limbs_asm_redc_mont_x86.nim b/constantine/math/arithmetic/assembly/limbs_asm_redc_mont_x86.nim index 3730e13..13962cd 100644 --- a/constantine/math/arithmetic/assembly/limbs_asm_redc_mont_x86.nim +++ b/constantine/math/arithmetic/assembly/limbs_asm_redc_mont_x86.nim @@ -62,7 +62,7 @@ macro redc2xMont_gen*[N: static int]( let usym = u.nimSymbol let vsym = v.nimSymbol result.add quote do: - var `usym`{.noinit.}: Limbs[`uSlots`] + var `usym`{.noinit, used.}: Limbs[`uSlots`] var `vsym` {.noInit.}: Limbs[`vSlots`] `vsym`[0] = cast[SecretWord](`r_PIR`[0].unsafeAddr) `vsym`[1] = cast[SecretWord](`a_PIR`[0].unsafeAddr) @@ -233,7 +233,7 @@ macro mulMont_by_1_gen[N: static int]( # Copy a in t result.add quote do: - var `scratchSym` {.noInit.}: Limbs[`scratchSlots`] + var `scratchSym` {.noInit, used.}: Limbs[`scratchSlots`] # Algorithm # --------------------------------------------------------- diff --git a/constantine/math/arithmetic/assembly/limbs_asm_redc_mont_x86_adx_bmi2.nim b/constantine/math/arithmetic/assembly/limbs_asm_redc_mont_x86_adx_bmi2.nim index c0628ef..eda44e0 100644 --- a/constantine/math/arithmetic/assembly/limbs_asm_redc_mont_x86_adx_bmi2.nim +++ b/constantine/math/arithmetic/assembly/limbs_asm_redc_mont_x86_adx_bmi2.nim @@ -62,7 +62,7 @@ macro redc2xMont_adx_gen[N: static int]( let vsym = v.nimSymbol result.add quote do: static: doAssert: sizeof(SecretWord) == sizeof(ByteAddress) - var `usym`{.noinit.}: Limbs[`uSlots`] + var `usym`{.noinit, used.}: Limbs[`uSlots`] var `vsym` {.noInit.}: Limbs[`vSlots`] `vsym`[0] = cast[SecretWord](`r_PIR`[0].unsafeAddr) `vsym`[1] = cast[SecretWord](`a_PIR`[0].unsafeAddr) @@ -208,7 +208,7 @@ macro mulMont_by_1_adx_gen[N: static int]( # Copy a in t result.add quote do: - var `scratchSym` {.noInit.}: Limbs[`scratchSlots`] + var `scratchSym` {.noInit, used.}: Limbs[`scratchSlots`] # Algorithm # --------------------------------------------------------- diff --git a/constantine/math/arithmetic/bigints_montgomery.nim b/constantine/math/arithmetic/bigints_montgomery.nim index 6065080..52d7893 100644 --- a/constantine/math/arithmetic/bigints_montgomery.nim +++ b/constantine/math/arithmetic/bigints_montgomery.nim @@ -114,9 +114,6 @@ func powMontUnsafeExponent*[mBits: static int]( var scratchSpace {.noInit.}: array[scratchLen, Limbs[mBits.wordsRequired]] powMontUnsafeExponent(a.limbs, exponent, M.limbs, one.limbs, negInvModWord, scratchSpace, spareBits) -from ../io/io_bigints import marshal -# Workaround recursive dependencies - func powMont*[mBits, eBits: static int]( a: var BigInt[mBits], exponent: BigInt[eBits], M, one: BigInt[mBits], negInvModWord: static BaseType, windowSize: static int, diff --git a/constantine/math/arithmetic/finite_fields_double_precision.nim b/constantine/math/arithmetic/finite_fields_double_precision.nim index e41cfe3..ecc24f8 100644 --- a/constantine/math/arithmetic/finite_fields_double_precision.nim +++ b/constantine/math/arithmetic/finite_fields_double_precision.nim @@ -72,7 +72,6 @@ func square2x*(r: var FpDbl, a: Fp) = func redc2x*(r: var Fp, a: FpDbl) = ## Reduce a double-precision field element into r ## from [0, 2ⁿp) range to [0, p) range - const N = r.mres.limbs.len redc2xMont( r.mres.limbs, a.limbs2x, diff --git a/constantine/math/arithmetic/limbs_extmul.nim b/constantine/math/arithmetic/limbs_extmul.nim index 807d3a3..f3f769b 100644 --- a/constantine/math/arithmetic/limbs_extmul.nim +++ b/constantine/math/arithmetic/limbs_extmul.nim @@ -161,7 +161,7 @@ func square_Comba[rLen, aLen]( func square_operandScan[rLen, aLen]( r: var Limbs[rLen], - a: Limbs[aLen]) = + a: Limbs[aLen]) {.used.} = ## Multi-precision squaring using Operand Scanning const stopEx = min(a.len * 2, r.len) var t: typeof(r) # zero-init, ensure on stack diff --git a/constantine/math/arithmetic/limbs_montgomery.nim b/constantine/math/arithmetic/limbs_montgomery.nim index 3c0b96b..1f2c2dc 100644 --- a/constantine/math/arithmetic/limbs_montgomery.nim +++ b/constantine/math/arithmetic/limbs_montgomery.nim @@ -125,7 +125,7 @@ func redc2xMont_Comba[N: static int]( r: var array[N, SecretWord], a: array[N*2, SecretWord], M: array[N, SecretWord], - m0ninv: BaseType, skipFinalSub: static bool = false) = + m0ninv: BaseType, skipFinalSub: static bool = false) {.used.} = ## Montgomery reduce a double-precision bigint modulo M ## ## This maps diff --git a/constantine/math/arithmetic/limbs_unsaturated.nim b/constantine/math/arithmetic/limbs_unsaturated.nim index bf0967a..4139a69 100644 --- a/constantine/math/arithmetic/limbs_unsaturated.nim +++ b/constantine/math/arithmetic/limbs_unsaturated.nim @@ -148,7 +148,7 @@ func fromUnsatRepr*[LU, E, LP: static int]( "\n WordBitwidth * LP: " & $WordBitwidth & " * " & $LP & " = " & $(WordBitwidth * LP) var - srcIdx, dstIdx = 0 + srcIdx {.used.}, dstIdx = 0 acc = Zero accLen = 0 diff --git a/constantine/math/config/precompute.nim b/constantine/math/config/precompute.nim index 58dcbb9..e09026d 100644 --- a/constantine/math/config/precompute.nim +++ b/constantine/math/config/precompute.nim @@ -11,6 +11,8 @@ import ./type_bigint, ../io/io_bigints +{.used.} + # Precomputed constants # We need alternate code paths for the VM # for various reasons @@ -161,7 +163,7 @@ func muladd2(hi, lo: var BaseType, a, b, c1, c2: BaseType) {.inline.}= addC(carry2, lo, lo, c2, 0) addC(carry2, hi, hi, 0, carry2) -func cadd(a: var BigInt, b: BigInt, ctl: bool): bool = +func cadd(a: var BigInt, b: BigInt, ctl: bool): bool {.used.} = ## In-place optional addition ## ## It is NOT constant-time and is intended diff --git a/constantine/math/curves/bls12_377_constants.nim b/constantine/math/curves/bls12_377_constants.nim index 93b72de..fb66a9d 100644 --- a/constantine/math/curves/bls12_377_constants.nim +++ b/constantine/math/curves/bls12_377_constants.nim @@ -8,7 +8,9 @@ import ../config/curves, - ../io/[io_fields, io_extfields] + ../io/io_extfields + +{.used.} # Curve precomputed parameters # ----------------------------------------------------------------- diff --git a/constantine/math/curves/bls12_377_endomorphisms.nim b/constantine/math/curves/bls12_377_endomorphisms.nim index d6b2582..05c856e 100644 --- a/constantine/math/curves/bls12_377_endomorphisms.nim +++ b/constantine/math/curves/bls12_377_endomorphisms.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/[io_bigints, io_fields] +{.used.} + # BLS12_377 G1 # ------------------------------------------------------------ diff --git a/constantine/math/curves/bls12_377_frobenius.nim b/constantine/math/curves/bls12_377_frobenius.nim index 408d66c..7aedb97 100644 --- a/constantine/math/curves/bls12_377_frobenius.nim +++ b/constantine/math/curves/bls12_377_frobenius.nim @@ -11,6 +11,8 @@ import ../extension_fields, ../io/io_extfields +{.used.} + # Frobenius map - on extension fields # ----------------------------------------------------------------- diff --git a/constantine/math/curves/bls12_381_constants.nim b/constantine/math/curves/bls12_381_constants.nim index 8da486c..0dea433 100644 --- a/constantine/math/curves/bls12_381_constants.nim +++ b/constantine/math/curves/bls12_381_constants.nim @@ -8,7 +8,9 @@ import ../config/curves, - ../io/[io_fields, io_extfields] + ../io/io_extfields + +{.used.} # Curve precomputed parameters # ----------------------------------------------------------------- diff --git a/constantine/math/curves/bls12_381_endomorphisms.nim b/constantine/math/curves/bls12_381_endomorphisms.nim index bec9d39..8139f34 100644 --- a/constantine/math/curves/bls12_381_endomorphisms.nim +++ b/constantine/math/curves/bls12_381_endomorphisms.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/[io_bigints, io_fields] +{.used.} + # BLS12_381 G1 # ------------------------------------------------------------ diff --git a/constantine/math/curves/bls12_381_frobenius.nim b/constantine/math/curves/bls12_381_frobenius.nim index ca1e5fb..e970c9f 100644 --- a/constantine/math/curves/bls12_381_frobenius.nim +++ b/constantine/math/curves/bls12_381_frobenius.nim @@ -11,6 +11,8 @@ import ../extension_fields, ../io/io_extfields +{.used.} + # Frobenius map - on extension fields # ----------------------------------------------------------------- diff --git a/constantine/math/curves/bls12_381_generators.nim b/constantine/math/curves/bls12_381_generators.nim index 59051fa..6673737 100644 --- a/constantine/math/curves/bls12_381_generators.nim +++ b/constantine/math/curves/bls12_381_generators.nim @@ -11,6 +11,8 @@ import ../elliptic/ec_shortweierstrass_affine, ../io/[io_fields, io_extfields] +{.used.} + # Generators # ----------------------------------------------------------------- # https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-pairing-friendly-curves-10#section-4.2.1 diff --git a/constantine/math/curves/bls12_381_hash_to_curve_g1.nim b/constantine/math/curves/bls12_381_hash_to_curve_g1.nim index 639e110..3e1dea8 100644 --- a/constantine/math/curves/bls12_381_hash_to_curve_g1.nim +++ b/constantine/math/curves/bls12_381_hash_to_curve_g1.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/io_fields +{.used.} + # Hash-to-Curve Shallue-van de Woestijne (SVDW) BLS12_381 G1 map # ----------------------------------------------------------------- # Spec: diff --git a/constantine/math/curves/bls12_381_hash_to_curve_g2.nim b/constantine/math/curves/bls12_381_hash_to_curve_g2.nim index e403857..af2c82b 100644 --- a/constantine/math/curves/bls12_381_hash_to_curve_g2.nim +++ b/constantine/math/curves/bls12_381_hash_to_curve_g2.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/[io_fields, io_extfields] +{.used.} + # Hash-to-Curve Shallue-van de Woestijne (SVDW) BLS12_381 G2 map # ----------------------------------------------------------------- # Spec: diff --git a/constantine/math/curves/bls12_381_sqrt_fp2.nim b/constantine/math/curves/bls12_381_sqrt_fp2.nim index 7dcdd7d..28ebb91 100644 --- a/constantine/math/curves/bls12_381_sqrt_fp2.nim +++ b/constantine/math/curves/bls12_381_sqrt_fp2.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/io_extfields +{.used.} + # Square Root Fp2 constants # ----------------------------------------------------------------- const BLS12_381_sqrt_fp2_QNR* = Fp2[BLS12_381].fromHex( diff --git a/constantine/math/curves/bn254_nogami_constants.nim b/constantine/math/curves/bn254_nogami_constants.nim index dd087c6..ab2c44f 100644 --- a/constantine/math/curves/bn254_nogami_constants.nim +++ b/constantine/math/curves/bn254_nogami_constants.nim @@ -8,7 +8,9 @@ import ../config/curves, - ../io/[io_fields, io_extfields] + ../io/io_extfields + +{.used.} # Curve precomputed parameters # ----------------------------------------------------------------- diff --git a/constantine/math/curves/bn254_nogami_endomorphisms.nim b/constantine/math/curves/bn254_nogami_endomorphisms.nim index 00fc212..64a3418 100644 --- a/constantine/math/curves/bn254_nogami_endomorphisms.nim +++ b/constantine/math/curves/bn254_nogami_endomorphisms.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/[io_bigints, io_fields] +{.used.} + # BN254_Nogami G1 # ------------------------------------------------------------ diff --git a/constantine/math/curves/bn254_nogami_frobenius.nim b/constantine/math/curves/bn254_nogami_frobenius.nim index 2adfac8..11548fe 100644 --- a/constantine/math/curves/bn254_nogami_frobenius.nim +++ b/constantine/math/curves/bn254_nogami_frobenius.nim @@ -11,6 +11,8 @@ import ../extension_fields, ../io/io_extfields +{.used.} + # Frobenius map - on extension fields # ----------------------------------------------------------------- diff --git a/constantine/math/curves/bn254_nogami_sqrt.nim b/constantine/math/curves/bn254_nogami_sqrt.nim index 3626e2d..7454c72 100644 --- a/constantine/math/curves/bn254_nogami_sqrt.nim +++ b/constantine/math/curves/bn254_nogami_sqrt.nim @@ -37,8 +37,6 @@ func invsqrt_addchain*(r: var Fp[BN254_Nogami], a: Fp[BN254_Nogami]) {.addchain. r35 {.noInit.}: Fp[BN254_Nogami] r36 {.noInit.}: Fp[BN254_Nogami] r37 {.noInit.}: Fp[BN254_Nogami] - r98 {.noInit.}: Fp[BN254_Nogami] - r263 {.noInit.}: Fp[BN254_Nogami] r10.square_repeated(x11, 7) r10 *= x11 diff --git a/constantine/math/curves/bn254_nogami_sqrt_fp2.nim b/constantine/math/curves/bn254_nogami_sqrt_fp2.nim index c976bd5..6741ac6 100644 --- a/constantine/math/curves/bn254_nogami_sqrt_fp2.nim +++ b/constantine/math/curves/bn254_nogami_sqrt_fp2.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/io_extfields +{.used.} + # Square Root Fp2 constants # ----------------------------------------------------------------- const BN254_Nogami_sqrt_fp2_QNR* = Fp2[BN254_Nogami].fromHex( diff --git a/constantine/math/curves/bn254_nogami_subgroups.nim b/constantine/math/curves/bn254_nogami_subgroups.nim index 2f50504..ce607b1 100644 --- a/constantine/math/curves/bn254_nogami_subgroups.nim +++ b/constantine/math/curves/bn254_nogami_subgroups.nim @@ -43,7 +43,7 @@ func pow_BN254_Nogami_minus_u[ECP: ECP_ShortW[Fp[BN254_Nogami], G1] or ECP_ShortW[Fp2[BN254_Nogami], G2]]( r{.noalias.}: var ECP, P{.noalias.}: ECP - ) {.inline.}= + ) {.inline, used.}= ## Does the scalar multiplication [-u]P ## with u the BN curve parameter pow_BN254_Nogami_abs_u(r, P) @@ -54,7 +54,6 @@ func pow_BN254_Nogami_minus_u[ECP: ECP_ShortW[Fp[BN254_Nogami], G1] or # # ############################################################ -const Cofactor_Eff_BN254_Nogami_G1 = BigInt[1].fromHex"0x1" const Cofactor_Eff_BN254_Nogami_G2 = BigInt[444].fromHex"0xab11da940a5bd10e25327cb22360008556b23c24080002d6845e3404000009a4f95b60000000145460100000000018544800000000000c8" # r = 36x⁴ + 36x³ + 18x² + 6x + 1 # G2.order() = (36x⁴ + 36x³ + 18x² + 6x + 1)(36x⁴ + 36x³ + 30x² + 6x + 1) diff --git a/constantine/math/curves/bn254_snarks_constants.nim b/constantine/math/curves/bn254_snarks_constants.nim index 12540aa..26a04fb 100644 --- a/constantine/math/curves/bn254_snarks_constants.nim +++ b/constantine/math/curves/bn254_snarks_constants.nim @@ -8,7 +8,9 @@ import ../config/curves, - ../io/[io_fields, io_extfields] + ../io/io_extfields + +{.used.} # Curve precomputed parameters # ----------------------------------------------------------------- diff --git a/constantine/math/curves/bn254_snarks_endomorphisms.nim b/constantine/math/curves/bn254_snarks_endomorphisms.nim index 6243e7a..b874d7d 100644 --- a/constantine/math/curves/bn254_snarks_endomorphisms.nim +++ b/constantine/math/curves/bn254_snarks_endomorphisms.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/[io_bigints, io_fields] +{.used.} + # BN254_Snarks G1 # ------------------------------------------------------------ diff --git a/constantine/math/curves/bn254_snarks_frobenius.nim b/constantine/math/curves/bn254_snarks_frobenius.nim index b70ded7..d4c73d9 100644 --- a/constantine/math/curves/bn254_snarks_frobenius.nim +++ b/constantine/math/curves/bn254_snarks_frobenius.nim @@ -11,6 +11,8 @@ import ../extension_fields, ../io/io_extfields +{.used.} + # Frobenius map - on extension fields # ----------------------------------------------------------------- diff --git a/constantine/math/curves/bn254_snarks_generators.nim b/constantine/math/curves/bn254_snarks_generators.nim index a2c024b..fd02e24 100644 --- a/constantine/math/curves/bn254_snarks_generators.nim +++ b/constantine/math/curves/bn254_snarks_generators.nim @@ -11,6 +11,8 @@ import ../elliptic/ec_shortweierstrass_affine, ../io/[io_fields, io_extfields] +{.used.} + # Generators # ----------------------------------------------------------------- # https://github.com/ethereum/EIPs/blob/master/EIPS/eip-197.md diff --git a/constantine/math/curves/bn254_snarks_hash_to_curve_g1.nim b/constantine/math/curves/bn254_snarks_hash_to_curve_g1.nim index af68927..74c045b 100644 --- a/constantine/math/curves/bn254_snarks_hash_to_curve_g1.nim +++ b/constantine/math/curves/bn254_snarks_hash_to_curve_g1.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/io_fields +{.used.} + # Hash-to-Curve Shallue-van de Woestijne BN254_Snarks G1 map # ----------------------------------------------------------------- # Spec: diff --git a/constantine/math/curves/bn254_snarks_hash_to_curve_g2.nim b/constantine/math/curves/bn254_snarks_hash_to_curve_g2.nim index da235b6..f73b449 100644 --- a/constantine/math/curves/bn254_snarks_hash_to_curve_g2.nim +++ b/constantine/math/curves/bn254_snarks_hash_to_curve_g2.nim @@ -8,7 +8,9 @@ import ../config/curves, - ../io/[io_fields, io_extfields] + ../io/io_extfields + +{.used.} # Hash-to-Curve Shallue-van de Woestijne BN254_Snarks G2 map # ----------------------------------------------------------------- diff --git a/constantine/math/curves/bn254_snarks_pairing.nim b/constantine/math/curves/bn254_snarks_pairing.nim index 34807c1..d0f12a4 100644 --- a/constantine/math/curves/bn254_snarks_pairing.nim +++ b/constantine/math/curves/bn254_snarks_pairing.nim @@ -11,8 +11,7 @@ import ../config/curves, ../io/io_bigints, ../extension_fields, - ../elliptic/[ec_shortweierstrass_affine, ec_shortweierstrass_projective], - ../pairing/[cyclotomic_subgroup, miller_loops], + ../pairing/cyclotomic_subgroup, ../isogenies/frobenius # Slow generic implementation diff --git a/constantine/math/curves/bn254_snarks_sqrt_fp2.nim b/constantine/math/curves/bn254_snarks_sqrt_fp2.nim index c03101c..4a19103 100644 --- a/constantine/math/curves/bn254_snarks_sqrt_fp2.nim +++ b/constantine/math/curves/bn254_snarks_sqrt_fp2.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/io_extfields +{.used.} + # Square Root Fp2 constants # ----------------------------------------------------------------- const BN254_Snarks_sqrt_fp2_QNR* = Fp2[BN254_Snarks].fromHex( diff --git a/constantine/math/curves/bn254_snarks_subgroups.nim b/constantine/math/curves/bn254_snarks_subgroups.nim index 1c41bbd..3de212a 100644 --- a/constantine/math/curves/bn254_snarks_subgroups.nim +++ b/constantine/math/curves/bn254_snarks_subgroups.nim @@ -106,7 +106,7 @@ func pow_bn254_snarks_minus_u[ECP: ECP_ShortW[Fp[BN254_Snarks], G1] or ECP_ShortW[Fp2[BN254_Snarks], G2]]( r{.noalias.}: var ECP, P{.noalias.}: ECP - ) {.inline.}= + ) {.inline, used.}= ## Does the scalar multiplication [-u]P ## with the BN curve parameter pow_bn254_snarks_abs_u(r, P) @@ -118,7 +118,6 @@ func pow_bn254_snarks_minus_u[ECP: ECP_ShortW[Fp[BN254_Snarks], G1] or # # ############################################################ -const Cofactor_Eff_BN254_Snarks_G1 = BigInt[1].fromHex"0x1" const Cofactor_Eff_BN254_Snarks_G2 = BigInt[445].fromHex"0x10fdac342d9d118eaade453b741519b8e1d63b3400132e99468a9c2b25de5b5f1bf35b43bcc5da2335a0d8a112d43476616edcfabef338ea" # r = 36x⁴ + 36x³ + 18x² + 6x + 1 # G2.order() = (36x⁴ + 36x³ + 18x² + 6x + 1)(36x⁴ + 36x³ + 30x² + 6x + 1) diff --git a/constantine/math/curves/bw6_761_constants.nim b/constantine/math/curves/bw6_761_constants.nim index 287b882..f38403b 100644 --- a/constantine/math/curves/bw6_761_constants.nim +++ b/constantine/math/curves/bw6_761_constants.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/[io_fields, io_extfields] +{.used.} + # Curve precomputed parameters # ----------------------------------------------------------------- const BW6_761_coefB_G2* = Fp[BW6_761].fromHex( diff --git a/constantine/math/curves/bw6_761_endomorphisms.nim b/constantine/math/curves/bw6_761_endomorphisms.nim index 0887a93..627f38b 100644 --- a/constantine/math/curves/bw6_761_endomorphisms.nim +++ b/constantine/math/curves/bw6_761_endomorphisms.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/[io_bigints, io_fields] +{.used.} + # BW6_761 G1 # ------------------------------------------------------------ diff --git a/constantine/math/curves/bw6_761_frobenius.nim b/constantine/math/curves/bw6_761_frobenius.nim index 1d542ec..ba624b1 100644 --- a/constantine/math/curves/bw6_761_frobenius.nim +++ b/constantine/math/curves/bw6_761_frobenius.nim @@ -11,6 +11,8 @@ import ../extension_fields, ../io/[io_fields, io_extfields] +{.used.} + # Frobenius map - on extension fields # ----------------------------------------------------------------- diff --git a/constantine/math/curves/bw6_761_subgroups.nim b/constantine/math/curves/bw6_761_subgroups.nim index 7271c57..39cfefa 100644 --- a/constantine/math/curves/bw6_761_subgroups.nim +++ b/constantine/math/curves/bw6_761_subgroups.nim @@ -13,8 +13,8 @@ import ../arithmetic, ../extension_fields, ../ec_shortweierstrass, - ../io/io_bigints, - ../isogenies/frobenius + ../io/io_bigints + # ../isogenies/frobenius # ############################################################ # diff --git a/constantine/math/curves/pallas_endomorphisms.nim b/constantine/math/curves/pallas_endomorphisms.nim index b6f9842..6944e69 100644 --- a/constantine/math/curves/pallas_endomorphisms.nim +++ b/constantine/math/curves/pallas_endomorphisms.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/[io_bigints, io_fields] +{.used.} + # Pallas G1 # ------------------------------------------------------------ diff --git a/constantine/math/curves/pallas_subgroups.nim b/constantine/math/curves/pallas_subgroups.nim index f2da647..75d1ab6 100644 --- a/constantine/math/curves/pallas_subgroups.nim +++ b/constantine/math/curves/pallas_subgroups.nim @@ -11,9 +11,7 @@ import ../../platforms/abstractions, ../config/curves, ../arithmetic, - ../extension_fields, - ../ec_shortweierstrass, - ../io/io_bigints + ../ec_shortweierstrass # ############################################################ # @@ -21,8 +19,6 @@ import # # ############################################################ -const Cofactor_Eff_Pallas_G1 = BigInt[1].fromHex"0x1" - func clearCofactorReference*(P: var ECP_ShortW_Prj[Fp[Pallas], G1]) {.inline.} = ## Clear the cofactor of Pallas G1 ## The Pasta curves have a prime-order group so this is a no-op diff --git a/constantine/math/curves/vesta_endomorphisms.nim b/constantine/math/curves/vesta_endomorphisms.nim index 1797aa4..64f4955 100644 --- a/constantine/math/curves/vesta_endomorphisms.nim +++ b/constantine/math/curves/vesta_endomorphisms.nim @@ -10,6 +10,8 @@ import ../config/curves, ../io/[io_bigints, io_fields] +{.used.} + # Vesta G1 # ------------------------------------------------------------ diff --git a/constantine/math/curves/vesta_subgroups.nim b/constantine/math/curves/vesta_subgroups.nim index f2da647..4a62638 100644 --- a/constantine/math/curves/vesta_subgroups.nim +++ b/constantine/math/curves/vesta_subgroups.nim @@ -11,9 +11,7 @@ import ../../platforms/abstractions, ../config/curves, ../arithmetic, - ../extension_fields, - ../ec_shortweierstrass, - ../io/io_bigints + ../ec_shortweierstrass # ############################################################ # @@ -21,10 +19,8 @@ import # # ############################################################ -const Cofactor_Eff_Pallas_G1 = BigInt[1].fromHex"0x1" - -func clearCofactorReference*(P: var ECP_ShortW_Prj[Fp[Pallas], G1]) {.inline.} = - ## Clear the cofactor of Pallas G1 +func clearCofactorReference*(P: var ECP_ShortW_Prj[Fp[Vesta], G1]) {.inline.} = + ## Clear the cofactor of Vesta G1 ## The Pasta curves have a prime-order group so this is a no-op discard @@ -34,7 +30,7 @@ func clearCofactorReference*(P: var ECP_ShortW_Prj[Fp[Pallas], G1]) {.inline.} = # # ############################################################ -func isInSubgroup*(P: ECP_ShortW[Fp[Pallas], G1]): SecretBool {.inline.} = +func isInSubgroup*(P: ECP_ShortW[Fp[Vesta], G1]): SecretBool {.inline.} = ## Returns true if P is in G1 subgroup, i.e. P is a point of order r. ## A point may be on a curve but not on the prime order r subgroup. ## Not checking subgroup exposes a protocol to small subgroup attacks. diff --git a/constantine/math/elliptic/ec_shortweierstrass_jacobian.nim b/constantine/math/elliptic/ec_shortweierstrass_jacobian.nim index 4181e3a..c36c735 100644 --- a/constantine/math/elliptic/ec_shortweierstrass_jacobian.nim +++ b/constantine/math/elliptic/ec_shortweierstrass_jacobian.nim @@ -248,7 +248,7 @@ template sumImpl[F; G: static Subgroup]( # which causes issues when CoefA isn't an int but Fp or Fp2 when CoefA is int: const CoefA_eq_zero = CoefA == 0 - const CoefA_eq_minus3 = CoefA == -3 + const CoefA_eq_minus3 {.used.} = CoefA == -3 else: const CoefA_eq_zero = false const CoefA_eq_minus3 = false diff --git a/constantine/platforms/constant_time/multiplexers.nim b/constantine/platforms/constant_time/multiplexers.nim index 657435d..a202858 100644 --- a/constantine/platforms/constant_time/multiplexers.nim +++ b/constantine/platforms/constant_time/multiplexers.nim @@ -32,10 +32,10 @@ func mux_fallback[T](ctl: CTBool[T], x, y: T): T {.inline.}= ## This is a constant-time operation y xor (-T(ctl) and (x xor y)) -func mux_fallback[T: CTBool](ctl: CTBool, x, y: T): T {.inline.}= +func mux_fallback[T: CTBool](ctl, x, y: T): T {.inline.}= ## result = if ctl: x else: y ## This is a constant-time operation - T(T.T(y) xor (-T.T(ctl) and T.T(x xor y))) + T(T.T(y) xor (-T.T(ctl) and (T.T(x) xor T.T(y)))) func ccopy_fallback[T](ctl: CTBool[T], x: var T, y: T) {.inline.}= ## Conditional copy diff --git a/constantine/platforms/isa/macro_assembler_x86.nim b/constantine/platforms/isa/macro_assembler_x86.nim index 6917bec..8552d23 100644 --- a/constantine/platforms/isa/macro_assembler_x86.nim +++ b/constantine/platforms/isa/macro_assembler_x86.nim @@ -608,12 +608,12 @@ func add*(a: var Assembler_x86, dst: Register, src: Operand) = func adc*(a: var Assembler_x86, dst, src: Operand) = ## Does: dst <- dst + src + carry doAssert dst.desc.constraint in OutputReg + doAssert dst.desc.rm notin {Mem, MemOffsettable, AnyRegOrMem}, + "Using addcarry with a memory destination, this incurs significant performance penalties." + a.codeFragment("adc", src, dst) a.areFlagsClobbered = true - if dst.desc.rm in {Mem, MemOffsettable, AnyRegOrMem}: - {.warning: "Using addcarry with a memory destination, this incurs significant performance penalties.".} - func adc*(a: var Assembler_x86, dst, src: Register) = ## Does: dst <- dst + src + carry a.codeFragment("adc", src, dst) @@ -622,12 +622,12 @@ func adc*(a: var Assembler_x86, dst, src: Register) = func adc*(a: var Assembler_x86, dst: Operand, imm: int) = ## Does: dst <- dst + imm + borrow doAssert dst.desc.constraint in OutputReg + doAssert dst.desc.rm notin {Mem, MemOffsettable, AnyRegOrMem}, + "Using addcarry with a memory destination, this incurs significant performance penalties." + a.codeFragment("adc", imm, dst) a.areFlagsClobbered = true - if dst.desc.rm in {Mem, MemOffsettable, AnyRegOrMem}: - {.warning: "Using addcarry with a memory destination, this incurs significant performance penalties.".} - func adc*(a: var Assembler_x86, dst: Operand, src: Register) = ## Does: dst <- dst + src doAssert dst.desc.constraint in OutputReg @@ -648,21 +648,21 @@ func sub*(a: var Assembler_x86, dst, src: Operand) = func sbb*(a: var Assembler_x86, dst, src: Operand) = ## Does: dst <- dst - src - borrow doAssert dst.desc.constraint in OutputReg + doAssert dst.desc.rm notin {Mem, MemOffsettable, AnyRegOrMem}, + "Using subborrow with a memory destination, this incurs significant performance penalties." + a.codeFragment("sbb", src, dst) a.areFlagsClobbered = true - if dst.desc.rm != Reg: - {.warning: "Using subborrow with a memory destination, this incurs significant performance penalties.".} - func sbb*(a: var Assembler_x86, dst: Operand, imm: int) = ## Does: dst <- dst - imm - borrow doAssert dst.desc.constraint in OutputReg + doAssert dst.desc.rm notin {Mem, MemOffsettable, AnyRegOrMem}, + "Using subborrow with a memory destination, this incurs significant performance penalties." + a.codeFragment("sbb", imm, dst) a.areFlagsClobbered = true - if dst.desc.rm != Reg: - {.warning: "Using subborrow with a memory destination, this incurs significant performance penalties.".} - func sbb*(a: var Assembler_x86, dst: Register, imm: int) = ## Does: dst <- dst - imm - borrow a.codeFragment("sbb", imm, dst) diff --git a/metering/tracer.nim b/metering/tracer.nim index 6bf2149..de34f47 100644 --- a/metering/tracer.nim +++ b/metering/tracer.nim @@ -45,7 +45,7 @@ type when SupportsGetTicks: cumulatedCycles*: int64 -template mtag(tagname: string){.pragma.} +template mtag(tagname: string){.pragma, used.} ## This will allow tagging proc in the future with ## "Fp", "ec", "polynomial"