Skip to content

crypto: Fold the pairing line coefficients into one function - #1639

Draft
chfast wants to merge 1 commit into
masterfrom
crypto/dedup-line-coefficients
Draft

crypto: Fold the pairing line coefficients into one function#1639
chfast wants to merge 1 commit into
masterfrom
crypto/dedup-line-coefficients

Conversation

@chfast

@chfast chfast commented Aug 10, 2026

Copy link
Copy Markdown
Member

lin_func and lin_func_and_add computed the same line coefficients:
t[0] = (x0 − U2)·z0³ is −H·z0³ for H = U2 − x0, and t[1] and t[2] match
term for term. Make lin_func the single implementation, returning the H
and R terms the addition needs, so lin_func_and_add contributes only the
point update; z0² and z0³ drop out of it because Z3 = H·z0. Its doc
comment described an addition it does not perform and a P2 parameter that
exists in neither function.

Draft because of a codegen risk: the operation counts are unchanged, but
the naive form regresses about 0.3% since the 128-byte LineTerms return
blocks optimization. always_inline on lin_func brings it back to neutral.
That makes the attribute load-bearing, which is worth a closer look before
a readability change lands on this path.

🤖 Generated with Claude Code

lin_func and lin_func_and_add computed the same line coefficients: t[0] =
(x0 − U2)·z0³ is −H·z0³ for H = U2 − x0, and t[1] and t[2] match term for term.
Make lin_func the single implementation, returning the H and R terms the addition
needs so lin_func_and_add only adds the point update; z0² and z0³ are no longer
needed there since Z3 = H·z0. Its doc comment was a copy of lin_func_and_add's,
describing an addition lin_func does not perform and a P2 parameter neither
function has. The always_inline is load-bearing: without it the struct return
costs about 0.3%, with it the change is instruction-neutral.
@codecov

codecov Bot commented Aug 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.71%. Comparing base (155eb66) to head (a2bd508).
⚠️ Report is 1 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1639      +/-   ##
==========================================
- Coverage   97.71%   97.71%   -0.01%     
==========================================
  Files         171      171              
  Lines       15607    15597      -10     
  Branches     3610     3610              
==========================================
- Hits        15251    15241      -10     
  Misses        269      269              
  Partials       87       87              
Flag Coverage Δ
eest-develop 88.60% <100.00%> (-0.02%) ⬇️
eest-develop-gmp 26.48% <100.00%> (-0.05%) ⬇️
eest-legacy 17.17% <0.00%> (+0.01%) ⬆️
eest-libsecp256k1 28.78% <100.00%> (-0.05%) ⬇️
eest-stable 88.60% <100.00%> (-0.02%) ⬇️
evmone-unittests 93.42% <100.00%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
core 96.09% <100.00%> (-0.01%) ⬇️
tooling 91.92% <ø> (ø)
tests 99.80% <ø> (ø)
Files with missing lines Coverage Δ
lib/evmone_precompiles/pairing/bn254/utils.hpp 100.00% <100.00%> (ø)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant