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