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}