Add `uninline-portable` feature

This commit is contained in:
Tomas Krnak 2022-08-17 17:39:04 +02:00
parent 682a0e65b8
commit 378f5cfd08
4 changed files with 15 additions and 10 deletions

View File

@ -6,6 +6,10 @@ and this project adheres to Rust's notion of
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- `uninline-portable` feature flag, which disables inlining of some functions.
This is useful for tiny microchips (such as ARM Cortex-M0), where inlining
can hurt performance and blow up binary size.
## [0.4.0] - 2022-05-05
### Changed

View File

@ -64,3 +64,4 @@ bits = ["ff/bits"]
gpu = ["alloc", "ec-gpu"]
sqrt-table = ["alloc", "lazy_static"]
repr-c = []
uninline-portable = []

View File

@ -293,7 +293,7 @@ impl Fp {
}
/// Squares this element.
#[inline]
#[cfg_attr(inline, not(feature = "uninline-portable"))]
pub const fn square(&self) -> Fp {
let (r1, carry) = mac(0, self.0[0], self.0[1], 0);
let (r2, carry) = mac(0, self.0[0], self.0[2], carry);
@ -373,7 +373,7 @@ impl Fp {
}
/// Multiplies `rhs` by `self`, returning the result.
#[inline]
#[cfg_attr(inline, not(feature = "uninline-portable"))]
pub const fn mul(&self, rhs: &Self) -> Self {
// Schoolbook multiplication
@ -401,7 +401,7 @@ impl Fp {
}
/// Subtracts `rhs` from `self`, returning the result.
#[inline]
#[cfg_attr(inline, not(feature = "uninline-portable"))]
pub const fn sub(&self, rhs: &Self) -> Self {
let (d0, borrow) = sbb(self.0[0], rhs.0[0], 0);
let (d1, borrow) = sbb(self.0[1], rhs.0[1], borrow);
@ -419,7 +419,7 @@ impl Fp {
}
/// Adds `rhs` to `self`, returning the result.
#[inline]
#[cfg_attr(inline, not(feature = "uninline-portable"))]
pub const fn add(&self, rhs: &Self) -> Self {
let (d0, carry) = adc(self.0[0], rhs.0[0], 0);
let (d1, carry) = adc(self.0[1], rhs.0[1], carry);
@ -432,7 +432,7 @@ impl Fp {
}
/// Negates `self`.
#[inline]
#[cfg_attr(inline, not(feature = "uninline-portable"))]
pub const fn neg(&self) -> Self {
// Subtract `self` from `MODULUS` to negate. Ignore the final
// borrow because it cannot underflow; self is guaranteed to

View File

@ -293,7 +293,7 @@ impl Fq {
}
/// Squares this element.
#[inline]
#[cfg_attr(inline, not(feature = "uninline-portable"))]
pub const fn square(&self) -> Fq {
let (r1, carry) = mac(0, self.0[0], self.0[1], 0);
let (r2, carry) = mac(0, self.0[0], self.0[2], carry);
@ -373,7 +373,7 @@ impl Fq {
}
/// Multiplies `rhs` by `self`, returning the result.
#[inline]
#[cfg_attr(inline, not(feature = "uninline-portable"))]
pub const fn mul(&self, rhs: &Self) -> Self {
// Schoolbook multiplication
@ -401,7 +401,7 @@ impl Fq {
}
/// Subtracts `rhs` from `self`, returning the result.
#[inline]
#[cfg_attr(inline, not(feature = "uninline-portable"))]
pub const fn sub(&self, rhs: &Self) -> Self {
let (d0, borrow) = sbb(self.0[0], rhs.0[0], 0);
let (d1, borrow) = sbb(self.0[1], rhs.0[1], borrow);
@ -419,7 +419,7 @@ impl Fq {
}
/// Adds `rhs` to `self`, returning the result.
#[inline]
#[cfg_attr(inline, not(feature = "uninline-portable"))]
pub const fn add(&self, rhs: &Self) -> Self {
let (d0, carry) = adc(self.0[0], rhs.0[0], 0);
let (d1, carry) = adc(self.0[1], rhs.0[1], carry);
@ -432,7 +432,7 @@ impl Fq {
}
/// Negates `self`.
#[inline]
#[cfg_attr(inline, not(feature = "uninline-portable"))]
pub const fn neg(&self) -> Self {
// Subtract `self` from `MODULUS` to negate. Ignore the final
// borrow because it cannot underflow; self is guaranteed to