arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/backend/src/implementation/cpu_spqlios/ffi/vmp.rs
backend/src/implementation/cpu_spqlios/ffi/vmp.rsRaw
  1use crate::implementation::cpu_spqlios::ffi::{module::MODULE, vec_znx_dft::VEC_ZNX_DFT};
  2
  3#[repr(C)]
  4#[derive(Debug, Copy, Clone)]
  5pub struct vmp_pmat_t {
  6    _unused: [u8; 0],
  7}
  8
  9// [rows][cols] = [#Decomposition][#Limbs]
 10pub type VMP_PMAT = vmp_pmat_t;
 11
 12unsafe extern "C" {
 13    pub unsafe fn bytes_of_vmp_pmat(module: *const MODULE, nrows: u64, ncols: u64) -> u64;
 14}
 15unsafe extern "C" {
 16    pub unsafe fn new_vmp_pmat(module: *const MODULE, nrows: u64, ncols: u64) -> *mut VMP_PMAT;
 17}
 18unsafe extern "C" {
 19    pub unsafe fn delete_vmp_pmat(res: *mut VMP_PMAT);
 20}
 21
 22unsafe extern "C" {
 23    pub unsafe fn vmp_apply_dft(
 24        module: *const MODULE,
 25        res: *mut VEC_ZNX_DFT,
 26        res_size: u64,
 27        a: *const i64,
 28        a_size: u64,
 29        a_sl: u64,
 30        pmat: *const VMP_PMAT,
 31        nrows: u64,
 32        ncols: u64,
 33        tmp_space: *mut u8,
 34    );
 35}
 36
 37unsafe extern "C" {
 38    pub unsafe fn vmp_apply_dft_add(
 39        module: *const MODULE,
 40        res: *mut VEC_ZNX_DFT,
 41        res_size: u64,
 42        a: *const i64,
 43        a_size: u64,
 44        a_sl: u64,
 45        pmat: *const VMP_PMAT,
 46        nrows: u64,
 47        ncols: u64,
 48        pmat_scale: u64,
 49        tmp_space: *mut u8,
 50    );
 51}
 52
 53unsafe extern "C" {
 54    pub unsafe fn vmp_apply_dft_tmp_bytes(module: *const MODULE, res_size: u64, a_size: u64, nrows: u64, ncols: u64) -> u64;
 55}
 56
 57unsafe extern "C" {
 58    pub unsafe fn vmp_apply_dft_to_dft(
 59        module: *const MODULE,
 60        res: *mut VEC_ZNX_DFT,
 61        res_size: u64,
 62        a_dft: *const VEC_ZNX_DFT,
 63        a_size: u64,
 64        pmat: *const VMP_PMAT,
 65        nrows: u64,
 66        ncols: u64,
 67        tmp_space: *mut u8,
 68    );
 69}
 70
 71unsafe extern "C" {
 72    pub unsafe fn vmp_apply_dft_to_dft_add(
 73        module: *const MODULE,
 74        res: *mut VEC_ZNX_DFT,
 75        res_size: u64,
 76        a_dft: *const VEC_ZNX_DFT,
 77        a_size: u64,
 78        pmat: *const VMP_PMAT,
 79        nrows: u64,
 80        ncols: u64,
 81        pmat_scale: u64,
 82        tmp_space: *mut u8,
 83    );
 84}
 85
 86unsafe extern "C" {
 87    pub unsafe fn vmp_apply_dft_to_dft_tmp_bytes(
 88        module: *const MODULE,
 89        res_size: u64,
 90        a_size: u64,
 91        nrows: u64,
 92        ncols: u64,
 93    ) -> u64;
 94}
 95
 96unsafe extern "C" {
 97    pub unsafe fn vmp_prepare_contiguous(
 98        module: *const MODULE,
 99        pmat: *mut VMP_PMAT,
100        mat: *const i64,
101        nrows: u64,
102        ncols: u64,
103        tmp_space: *mut u8,
104    );
105}
106
107unsafe extern "C" {
108    pub unsafe fn vmp_prepare_contiguous_dft(module: *const MODULE, pmat: *mut VMP_PMAT, mat: *const f64, nrows: u64, ncols: u64);
109}
110
111unsafe extern "C" {
112    pub unsafe fn vmp_prepare_tmp_bytes(module: *const MODULE, nrows: u64, ncols: u64) -> u64;
113}