arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/base2k/src/ffi/vmp.rs
base2k/src/ffi/vmp.rsRaw
  1use crate::ffi::module::MODULE;
  2use crate::ffi::vec_znx_big::VEC_ZNX_BIG;
  3use crate::ffi::vec_znx_dft::VEC_ZNX_DFT;
  4
  5#[repr(C)]
  6#[derive(Debug, Copy, Clone)]
  7pub struct vmp_pmat_t {
  8    _unused: [u8; 0],
  9}
 10
 11// [rows][cols] = [#Decomposition][#Limbs]
 12pub type VMP_PMAT = vmp_pmat_t;
 13
 14unsafe extern "C" {
 15    pub unsafe fn bytes_of_vmp_pmat(module: *const MODULE, nrows: u64, ncols: u64) -> u64;
 16}
 17unsafe extern "C" {
 18    pub unsafe fn new_vmp_pmat(module: *const MODULE, nrows: u64, ncols: u64) -> *mut VMP_PMAT;
 19}
 20unsafe extern "C" {
 21    pub unsafe fn delete_vmp_pmat(res: *mut VMP_PMAT);
 22}
 23
 24unsafe extern "C" {
 25    pub unsafe fn vmp_apply_dft(
 26        module: *const MODULE,
 27        res: *mut VEC_ZNX_DFT,
 28        res_size: u64,
 29        a: *const i64,
 30        a_size: u64,
 31        a_sl: u64,
 32        pmat: *const VMP_PMAT,
 33        nrows: u64,
 34        ncols: u64,
 35        tmp_space: *mut u8,
 36    );
 37}
 38
 39unsafe extern "C" {
 40    pub unsafe fn vmp_apply_dft_add(
 41        module: *const MODULE,
 42        res: *mut VEC_ZNX_DFT,
 43        res_size: u64,
 44        a: *const i64,
 45        a_size: u64,
 46        a_sl: u64,
 47        pmat: *const VMP_PMAT,
 48        nrows: u64,
 49        ncols: u64,
 50        tmp_space: *mut u8,
 51    );
 52}
 53
 54unsafe extern "C" {
 55    pub unsafe fn vmp_apply_dft_tmp_bytes(module: *const MODULE, res_size: u64, a_size: u64, nrows: u64, ncols: u64) -> u64;
 56}
 57
 58unsafe extern "C" {
 59    pub unsafe fn vmp_apply_dft_to_dft(
 60        module: *const MODULE,
 61        res: *mut VEC_ZNX_DFT,
 62        res_size: u64,
 63        a_dft: *const VEC_ZNX_DFT,
 64        a_size: u64,
 65        pmat: *const VMP_PMAT,
 66        nrows: u64,
 67        ncols: u64,
 68        tmp_space: *mut u8,
 69    );
 70}
 71
 72unsafe extern "C" {
 73    pub unsafe fn vmp_apply_dft_to_dft_add(
 74        module: *const MODULE,
 75        res: *mut VEC_ZNX_DFT,
 76        res_size: u64,
 77        a_dft: *const VEC_ZNX_DFT,
 78        a_size: u64,
 79        pmat: *const VMP_PMAT,
 80        nrows: u64,
 81        ncols: 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_dblptr(
109        module: *const MODULE,
110        pmat: *mut VMP_PMAT,
111        mat: *const *const i64,
112        nrows: u64,
113        ncols: u64,
114        tmp_space: *mut u8,
115    );
116}
117
118unsafe extern "C" {
119    pub unsafe fn vmp_prepare_row(
120        module: *const MODULE,
121        pmat: *mut VMP_PMAT,
122        row: *const i64,
123        row_i: u64,
124        nrows: u64,
125        ncols: u64,
126        tmp_space: *mut u8,
127    );
128}
129
130unsafe extern "C" {
131    pub unsafe fn vmp_prepare_row_dft(
132        module: *const MODULE,
133        pmat: *mut VMP_PMAT,
134        row: *const VEC_ZNX_DFT,
135        row_i: u64,
136        nrows: u64,
137        ncols: u64,
138    );
139}
140
141unsafe extern "C" {
142    pub unsafe fn vmp_extract_row_dft(
143        module: *const MODULE,
144        res: *mut VEC_ZNX_DFT,
145        pmat: *const VMP_PMAT,
146        row_i: u64,
147        nrows: u64,
148        ncols: u64,
149    );
150}
151
152unsafe extern "C" {
153    pub unsafe fn vmp_extract_row(
154        module: *const MODULE,
155        res: *mut VEC_ZNX_BIG,
156        pmat: *const VMP_PMAT,
157        row_i: u64,
158        nrows: u64,
159        ncols: u64,
160    );
161}
162
163unsafe extern "C" {
164    pub unsafe fn vmp_prepare_tmp_bytes(module: *const MODULE, nrows: u64, ncols: u64) -> u64;
165}