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}