erasure_code: add AVX2 3vect mad with GFNI implementation

Signed-off-by: Marcel Cornu <marcel.d.cornu@intel.com>
This commit is contained in:
Marcel Cornu
2023-12-13 13:09:00 +00:00
committed by Pablo de Lara
parent a139dd7302
commit 22b7f33d68
4 changed files with 294 additions and 9 deletions

View File

@@ -277,6 +277,8 @@ extern void gf_vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gf
unsigned char *src, unsigned char *dest);
extern void gf_2vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gftbls,
unsigned char *src, unsigned char **dest);
extern void gf_3vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gftbls,
unsigned char *src, unsigned char **dest);
void ec_init_tables_gfni(int k, int rows, unsigned char *a, unsigned char *g_tbls)
{
@@ -380,17 +382,22 @@ void ec_encode_data_update_avx2_gfni(int len, int k, int rows, int vec_i,
unsigned char *g_tbls, unsigned char *data,
unsigned char **coding)
{
while (rows >= 2) {
gf_2vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, coding);
g_tbls += 2 * k * 8;
coding += 2;
rows -= 2;
while (rows >= 3) {
gf_3vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, coding);
g_tbls += 3 * k * 8;
coding += 3;
rows -= 3;
}
while (rows) {
switch (rows) {
case 2:
gf_2vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, coding);
break;
case 1:
gf_vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, *coding);
g_tbls += k * 8;
coding++;
rows--;
break;
case 0:
default:
break;
}
}