Fix AVX2 and AVX-512 builds (#419)

Build was broken by 5758b8c.
This adds a regression test to CI so it doesn't happen again
This commit is contained in:
Michael Rosenberg 2022-10-28 13:10:44 -04:00 committed by GitHub
parent 3a94bf8a8e
commit 8fa201639a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 69 additions and 63 deletions

View file

@ -26,13 +26,19 @@ jobs:
- uses: dtolnay/rust-toolchain@stable
- run: cargo test --no-default-features --features "std u64_backend"
test-simd:
name: Test simd backend (nightly)
build-simd:
name: Build simd backend (nightly)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@nightly
- run: cargo test --no-default-features --features "std simd_backend"
# Build with AVX2 features, then with AVX512 features
- env:
RUSTFLAGS: "-C target_feature=+avx2"
run: cargo build --no-default-features --features "std simd_backend"
- env:
RUSTFLAGS: "-C target_feature=+avx512ifma"
run: cargo build --no-default-features --features "std simd_backend"
test-defaults-serde:
name: Test default feature selection and serde

View file

@ -13,9 +13,9 @@
use packed_simd::u32x8;
use backend::vector::avx2::edwards::{CachedPoint, ExtendedPoint};
use backend::vector::avx2::field::FieldElement2625x4;
use window::NafLookupTable8;
use crate::backend::vector::avx2::edwards::{CachedPoint, ExtendedPoint};
use crate::backend::vector::avx2::field::FieldElement2625x4;
use crate::window::NafLookupTable8;
/// The identity element as an `ExtendedPoint`.
pub(crate) static EXTENDEDPOINT_IDENTITY: ExtendedPoint = ExtendedPoint(FieldElement2625x4([

View file

@ -41,10 +41,10 @@ use core::ops::{Add, Neg, Sub};
use subtle::Choice;
use subtle::ConditionallySelectable;
use edwards;
use window::{LookupTable, NafLookupTable5, NafLookupTable8};
use crate::edwards;
use crate::window::{LookupTable, NafLookupTable5, NafLookupTable8};
use traits::Identity;
use crate::traits::Identity;
use super::constants;
use super::field::{FieldElement2625x4, Lanes, Shuffle};
@ -330,7 +330,7 @@ mod test {
use super::*;
fn serial_add(P: edwards::EdwardsPoint, Q: edwards::EdwardsPoint) -> edwards::EdwardsPoint {
use backend::serial::u64::field::FieldElement51;
use crate::backend::serial::u64::field::FieldElement51;
let (X1, Y1, Z1, T1) = (P.X, P.Y, P.Z, P.T);
let (X2, Y2, Z2, T2) = (Q.X, Q.Y, Q.Z, Q.T);
@ -420,8 +420,8 @@ mod test {
#[test]
fn vector_addition_vs_serial_addition_vs_edwards_extendedpoint() {
use constants;
use scalar::Scalar;
use crate::constants;
use crate::scalar::Scalar;
println!("Testing id +- id");
let P = edwards::EdwardsPoint::identity();
@ -507,8 +507,8 @@ mod test {
#[test]
fn vector_doubling_vs_serial_doubling_vs_edwards_extendedpoint() {
use constants;
use scalar::Scalar;
use crate::constants;
use crate::scalar::Scalar;
println!("Testing [2]id");
let P = edwards::EdwardsPoint::identity();
@ -525,8 +525,8 @@ mod test {
#[test]
fn basepoint_odd_lookup_table_verify() {
use constants;
use backend::vector::avx2::constants::{BASEPOINT_ODD_LOOKUP_TABLE};
use crate::constants;
use crate::backend::vector::avx2::constants::{BASEPOINT_ODD_LOOKUP_TABLE};
let basepoint_odd_table = NafLookupTable8::<CachedPoint>::from(&constants::ED25519_BASEPOINT_POINT);
println!("basepoint_odd_lookup_table = {:?}", basepoint_odd_table);

View file

@ -43,8 +43,10 @@ const D_LANES64: u8 = 0b11_00_00_00;
use core::ops::{Add, Mul, Neg};
use packed_simd::{i32x8, u32x8, u64x4, IntoBits};
use backend::vector::avx2::constants::{P_TIMES_16_HI, P_TIMES_16_LO, P_TIMES_2_HI, P_TIMES_2_LO};
use backend::serial::u64::field::FieldElement51;
use crate::backend::vector::avx2::constants::{
P_TIMES_16_HI, P_TIMES_16_LO, P_TIMES_2_HI, P_TIMES_2_LO,
};
use crate::backend::serial::u64::field::FieldElement51;
/// Unpack 32-bit lanes into 64-bit lanes:
/// ```ascii,no_run

View file

@ -11,7 +11,7 @@
use packed_simd::u64x4;
use window::NafLookupTable8;
use crate::window::NafLookupTable8;
use super::edwards::{CachedPoint, ExtendedPoint};
use super::field::{F51x4Reduced, F51x4Unreduced};

View file

@ -9,15 +9,15 @@
#![allow(non_snake_case)]
use traits::Identity;
use crate::traits::Identity;
use std::ops::{Add, Neg, Sub};
use subtle::Choice;
use subtle::ConditionallySelectable;
use edwards;
use window::{LookupTable, NafLookupTable5, NafLookupTable8};
use crate::edwards;
use crate::window::{LookupTable, NafLookupTable5, NafLookupTable8};
use super::constants;
use super::field::{F51x4Reduced, F51x4Unreduced, Lanes, Shuffle};
@ -258,8 +258,8 @@ mod test {
#[test]
fn vector_addition_vs_serial_addition_vs_edwards_extendedpoint() {
use constants;
use scalar::Scalar;
use crate::constants;
use crate::scalar::Scalar;
println!("Testing id +- id");
let P = edwards::EdwardsPoint::identity();
@ -297,8 +297,8 @@ mod test {
#[test]
fn vector_doubling_vs_serial_doubling_vs_edwards_extendedpoint() {
use constants;
use scalar::Scalar;
use crate::constants;
use crate::scalar::Scalar;
println!("Testing [2]id");
let P = edwards::EdwardsPoint::identity();

View file

@ -14,7 +14,7 @@
use core::ops::{Add, Mul, Neg};
use packed_simd::{u64x4, IntoBits};
use backend::serial::u64::field::FieldElement51;
use crate::backend::serial::u64::field::FieldElement51;
/// A wrapper around `vpmadd52luq` that works on `u64x4`.
#[inline(always)]

View file

@ -11,13 +11,13 @@
use core::borrow::Borrow;
use backend::vector::{CachedPoint, ExtendedPoint};
use edwards::EdwardsPoint;
use scalar::Scalar;
use traits::{Identity, VartimeMultiscalarMul};
use crate::backend::vector::{CachedPoint, ExtendedPoint};
use crate::edwards::EdwardsPoint;
use crate::scalar::Scalar;
use crate::traits::{Identity, VartimeMultiscalarMul};
#[allow(unused_imports)]
use prelude::*;
use crate::prelude::*;
/// Implements a version of Pippenger's algorithm.
///
@ -50,9 +50,7 @@ impl VartimeMultiscalarMul for Pippenger {
// Collect optimized scalars and points in a buffer for repeated access
// (scanning the whole collection per each digit position).
let scalars = scalars
.into_iter()
.map(|s| s.borrow().to_radix_2w(w));
let scalars = scalars.into_iter().map(|s| s.borrow().to_radix_2w(w));
let points = points
.into_iter()
@ -127,8 +125,8 @@ impl VartimeMultiscalarMul for Pippenger {
#[cfg(test)]
mod test {
use super::*;
use constants;
use scalar::Scalar;
use crate::constants;
use crate::scalar::Scalar;
#[test]
fn test_vartime_pippenger() {

View file

@ -13,15 +13,15 @@
use core::borrow::Borrow;
use backend::vector::{CachedPoint, ExtendedPoint};
use edwards::EdwardsPoint;
use scalar::Scalar;
use traits::Identity;
use traits::VartimePrecomputedMultiscalarMul;
use window::{NafLookupTable5, NafLookupTable8};
use crate::backend::vector::{CachedPoint, ExtendedPoint};
use crate::edwards::EdwardsPoint;
use crate::scalar::Scalar;
use crate::traits::Identity;
use crate::traits::VartimePrecomputedMultiscalarMul;
use crate::window::{NafLookupTable5, NafLookupTable8};
#[allow(unused_imports)]
use prelude::*;
use crate::prelude::*;
pub struct VartimePrecomputedStraus {

View file

@ -15,14 +15,14 @@ use core::borrow::Borrow;
use zeroize::Zeroizing;
use backend::vector::{CachedPoint, ExtendedPoint};
use edwards::EdwardsPoint;
use scalar::Scalar;
use window::{LookupTable, NafLookupTable5};
use traits::{Identity, MultiscalarMul, VartimeMultiscalarMul};
use crate::backend::vector::{CachedPoint, ExtendedPoint};
use crate::edwards::EdwardsPoint;
use crate::scalar::Scalar;
use crate::window::{LookupTable, NafLookupTable5};
use crate::traits::{Identity, MultiscalarMul, VartimeMultiscalarMul};
#[allow(unused_imports)]
use prelude::*;
use crate::prelude::*;
/// Multiscalar multiplication using interleaved window / Straus'
/// method. See the `Straus` struct in the serial backend for more

View file

@ -1,10 +1,10 @@
#![allow(non_snake_case)]
use backend::vector::{CachedPoint, ExtendedPoint};
use edwards::EdwardsPoint;
use scalar::Scalar;
use traits::Identity;
use window::LookupTable;
use crate::backend::vector::{CachedPoint, ExtendedPoint};
use crate::edwards::EdwardsPoint;
use crate::scalar::Scalar;
use crate::traits::Identity;
use crate::window::LookupTable;
/// Perform constant-time, variable-base scalar multiplication.
pub fn mul(point: &EdwardsPoint, scalar: &Scalar) -> EdwardsPoint {

View file

@ -11,12 +11,12 @@
#![allow(non_snake_case)]
use backend::vector::BASEPOINT_ODD_LOOKUP_TABLE;
use backend::vector::{CachedPoint, ExtendedPoint};
use edwards::EdwardsPoint;
use scalar::Scalar;
use traits::Identity;
use window::NafLookupTable5;
use crate::backend::vector::BASEPOINT_ODD_LOOKUP_TABLE;
use crate::backend::vector::{CachedPoint, ExtendedPoint};
use crate::edwards::EdwardsPoint;
use crate::scalar::Scalar;
use crate::traits::Identity;
use crate::window::NafLookupTable5;
/// Compute \\(aA + bB\\) in variable time, where \\(B\\) is the Ed25519 basepoint.
pub fn mul(a: &Scalar, A: &EdwardsPoint, b: &Scalar) -> EdwardsPoint {

View file

@ -148,7 +148,7 @@ use crate::backend::serial::scalar_mul;
feature = "simd_backend",
any(target_feature = "avx2", target_feature = "avx512ifma")
))]
use backend::vector::scalar_mul;
use crate::backend::vector::scalar_mul;
// ------------------------------------------------------------------------
// Compressed points

View file

@ -202,7 +202,7 @@ use crate::backend::serial::scalar_mul;
feature = "simd_backend",
any(target_feature = "avx2", target_feature = "avx512ifma")
))]
use backend::vector::scalar_mul;
use crate::backend::vector::scalar_mul;
// ------------------------------------------------------------------------
// Compressed points