// -*- mode: rust; coding: utf-8; -*- // // This file is part of curve25519-dalek. // Copyright (c) 2018 Henry de Valence // See LICENSE for licensing information. // // Authors: // - Henry de Valence use core::ops::{Add, Mul, Neg}; use packed_simd::{i32x8, u32x8, u64x4, IntoBits}; use backend::serial::u64::field::FieldElement51; #[allow(improper_ctypes)] extern "C" { #[link_name = "llvm.x86.avx512.vpmadd52l.uq.256"] fn madd52lo(z: u64x4, x: u64x4, y: u64x4) -> u64x4; #[link_name = "llvm.x86.avx512.vpmadd52h.uq.256"] fn madd52hi(z: u64x4, x: u64x4, y: u64x4) -> u64x4; } #[cfg(test)] mod test { use super::*; #[test] fn vpmadd52luq() { let x = u64x4::splat(2); let y = u64x4::splat(3); let mut z = u64x4::splat(5); z = unsafe { madd52lo(z, x, y) }; assert_eq!(z, u64x4::splat(5 + 2*3)); } }