mirror of
https://github.com/saymrwulf/risc0-curve25519-dalek-source.git
synced 2026-09-05 20:10:35 +00:00
40 lines
906 B
Rust
40 lines
906 B
Rust
// -*- 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 <hdevalence@hdevalence.ca>
|
|
|
|
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));
|
|
}
|
|
|
|
}
|
|
|
|
|