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}