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(
 56        module: *const MODULE,
 57        res_size: u64,
 58        a_size: u64,
 59        nrows: u64,
 60        ncols: u64,
 61    ) -> u64;
 62}
 63
 64unsafe extern "C" {
 65    pub unsafe fn vmp_apply_dft_to_dft(
 66        module: *const MODULE,
 67        res: *mut VEC_ZNX_DFT,
 68        res_size: u64,
 69        a_dft: *const VEC_ZNX_DFT,
 70        a_size: u64,
 71        pmat: *const VMP_PMAT,
 72        nrows: u64,
 73        ncols: u64,
 74        tmp_space: *mut u8,
 75    );
 76}
 77
 78unsafe extern "C" {
 79    pub unsafe fn vmp_apply_dft_to_dft_add(
 80        module: *const MODULE,
 81        res: *mut VEC_ZNX_DFT,
 82        res_size: u64,
 83        a_dft: *const VEC_ZNX_DFT,
 84        a_size: u64,
 85        pmat: *const VMP_PMAT,
 86        nrows: u64,
 87        ncols: u64,
 88        tmp_space: *mut u8,
 89    );
 90}
 91
 92unsafe extern "C" {
 93    pub unsafe fn vmp_apply_dft_to_dft_tmp_bytes(
 94        module: *const MODULE,
 95        res_size: u64,
 96        a_size: u64,
 97        nrows: u64,
 98        ncols: u64,
 99    ) -> u64;
100}
101
102unsafe extern "C" {
103    pub unsafe fn vmp_prepare_contiguous(
104        module: *const MODULE,
105        pmat: *mut VMP_PMAT,
106        mat: *const i64,
107        nrows: u64,
108        ncols: u64,
109        tmp_space: *mut u8,
110    );
111}
112
113unsafe extern "C" {
114    pub unsafe fn vmp_prepare_dblptr(
115        module: *const MODULE,
116        pmat: *mut VMP_PMAT,
117        mat: *const *const i64,
118        nrows: u64,
119        ncols: u64,
120        tmp_space: *mut u8,
121    );
122}
123
124unsafe extern "C" {
125    pub unsafe fn vmp_prepare_row(
126        module: *const MODULE,
127        pmat: *mut VMP_PMAT,
128        row: *const i64,
129        row_i: u64,
130        nrows: u64,
131        ncols: u64,
132        tmp_space: *mut u8,
133    );
134}
135
136unsafe extern "C" {
137    pub unsafe fn vmp_prepare_row_dft(
138        module: *const MODULE,
139        pmat: *mut VMP_PMAT,
140        row: *const VEC_ZNX_DFT,
141        row_i: u64,
142        nrows: u64,
143        ncols: u64,
144    );
145}
146
147unsafe extern "C" {
148    pub unsafe fn vmp_extract_row_dft(
149        module: *const MODULE,
150        res: *mut VEC_ZNX_DFT,
151        pmat: *const VMP_PMAT,
152        row_i: u64,
153        nrows: u64,
154        ncols: u64,
155    );
156}
157
158unsafe extern "C" {
159    pub unsafe fn vmp_extract_row(
160        module: *const MODULE,
161        res: *mut VEC_ZNX_BIG,
162        pmat: *const VMP_PMAT,
163        row_i: u64,
164        nrows: u64,
165        ncols: u64,
166    );
167}
168
169unsafe extern "C" {
170    pub unsafe fn vmp_prepare_tmp_bytes(module: *const MODULE, nrows: u64, ncols: u64) -> u64;
171}