mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 13:16:44 +01:00
spqlios basic wrapper
This commit is contained in:
66
spqlios/lib/test/testlib/ntt120_layouts.cpp
Normal file
66
spqlios/lib/test/testlib/ntt120_layouts.cpp
Normal file
@@ -0,0 +1,66 @@
|
||||
#include "ntt120_layouts.h"
|
||||
|
||||
mod_q120x2::mod_q120x2() {}
|
||||
mod_q120x2::mod_q120x2(const mod_q120& a, const mod_q120& b) {
|
||||
value[0] = a;
|
||||
value[1] = b;
|
||||
}
|
||||
mod_q120x2::mod_q120x2(q120x2b* addr) {
|
||||
uint64_t* p = (uint64_t*)addr;
|
||||
value[0] = mod_q120::from_q120b(p);
|
||||
value[1] = mod_q120::from_q120b(p + 4);
|
||||
}
|
||||
|
||||
ntt120_vec_znx_dft_layout::ntt120_vec_znx_dft_layout(uint64_t n, uint64_t size)
|
||||
: nn(n), //
|
||||
size(size), //
|
||||
data((VEC_ZNX_DFT*)alloc64(n * size * 4 * sizeof(uint64_t))) {}
|
||||
|
||||
mod_q120x2 ntt120_vec_znx_dft_layout::get_copy_zext(uint64_t idx, uint64_t blk) {
|
||||
return mod_q120x2(get_blk(idx, blk));
|
||||
}
|
||||
q120x2b* ntt120_vec_znx_dft_layout::get_blk(uint64_t idx, uint64_t blk) {
|
||||
REQUIRE_DRAMATICALLY(idx < size, "idx overflow");
|
||||
REQUIRE_DRAMATICALLY(blk < nn / 2, "blk overflow");
|
||||
uint64_t* d = (uint64_t*)data;
|
||||
return (q120x2b*)(d + 4 * nn * idx + 8 * blk);
|
||||
}
|
||||
ntt120_vec_znx_dft_layout::~ntt120_vec_znx_dft_layout() { spqlios_free(data); }
|
||||
q120_nttvec ntt120_vec_znx_dft_layout::get_copy_zext(uint64_t idx) {
|
||||
int64_t* d = (int64_t*)data;
|
||||
if (idx < size) {
|
||||
return q120_nttvec(nn, (q120b*)(d + idx * nn * 4));
|
||||
} else {
|
||||
return q120_nttvec::zero(nn);
|
||||
}
|
||||
}
|
||||
void ntt120_vec_znx_dft_layout::set(uint64_t idx, const q120_nttvec& value) {
|
||||
REQUIRE_DRAMATICALLY(idx < size, "index overflow: " << idx << " / " << size);
|
||||
q120b* dest_addr = (q120b*)((int64_t*)data + idx * nn * 4);
|
||||
value.save_as(dest_addr);
|
||||
}
|
||||
void ntt120_vec_znx_dft_layout::fill_random() {
|
||||
for (uint64_t i = 0; i < size; ++i) {
|
||||
set(i, q120_nttvec::random(nn));
|
||||
}
|
||||
}
|
||||
thash ntt120_vec_znx_dft_layout::content_hash() const { return test_hash(data, nn * size * 4 * sizeof(int64_t)); }
|
||||
ntt120_vec_znx_big_layout::ntt120_vec_znx_big_layout(uint64_t n, uint64_t size)
|
||||
: nn(n), //
|
||||
size(size),
|
||||
data((VEC_ZNX_BIG*)alloc64(n * size * sizeof(__int128_t))) {}
|
||||
|
||||
znx_i128 ntt120_vec_znx_big_layout::get_copy(uint64_t index) const { return znx_i128(nn, get_addr(index)); }
|
||||
znx_i128 ntt120_vec_znx_big_layout::get_copy_zext(uint64_t index) const {
|
||||
if (index < size) {
|
||||
return znx_i128(nn, get_addr(index));
|
||||
} else {
|
||||
return znx_i128::zero(nn);
|
||||
}
|
||||
}
|
||||
__int128* ntt120_vec_znx_big_layout::get_addr(uint64_t index) const {
|
||||
REQUIRE_DRAMATICALLY(index < size, "index overflow: " << index << " / " << size);
|
||||
return (__int128_t*)data + index * nn;
|
||||
}
|
||||
void ntt120_vec_znx_big_layout::set(uint64_t index, const znx_i128& value) { value.save_as(get_addr(index)); }
|
||||
ntt120_vec_znx_big_layout::~ntt120_vec_znx_big_layout() { spqlios_free(data); }
|
||||
Reference in New Issue
Block a user