summaryrefslogtreecommitdiff
path: root/src/gf_w8.c
diff options
context:
space:
mode:
authorBassam Tabbara <bassam@symform.com>2016-09-02 17:19:04 -0700
committerBassam Tabbara <bassam@symform.com>2016-09-13 12:24:25 -0700
commit87f0d4395dbfe0ae559e964668b71f85819378a0 (patch)
tree3566aad3cb41128a71a1a3f8602e181accdafdf2 /src/gf_w8.c
parent22352ca094e242d7c93a2ed822f89a07eeb34c1a (diff)
downloadgf-complete-87f0d4395dbfe0ae559e964668b71f85819378a0.tar.gz
Add support for printing functions selected in gf_init
There is currently no way to figure out which functions were selected during gf_init and as a result of SIMD options. This is not even possible in gdb since most functions are static. This commit adds a new macro SET_FUNCTION that records the name of the function selected during init inside the gf_internal structure. This macro only works when DEBUG_FUNCTIONS is defined during compile. Otherwise the code works exactly as it did before this change. The names of selected functions will be used during testing of SIMD runtime detection. All calls such as: gf->multiply.w32 = gf_w16_shift_multiply; need to be replaced with the following: SET_FUNCTION(gf,multiply,w32,gf_w16_shift_multiply) Also added a new flag to tools/gf_methods that will print the names of functions selected during gf_init.
Diffstat (limited to 'src/gf_w8.c')
-rw-r--r--src/gf_w8.c132
1 files changed, 66 insertions, 66 deletions
diff --git a/src/gf_w8.c b/src/gf_w8.c
index 276799f..81a0eba 100644
--- a/src/gf_w8.c
+++ b/src/gf_w8.c
@@ -514,14 +514,14 @@ int gf_w8_cfm_init(gf_t *gf)
h = (gf_internal_t *) gf->scratch;
if ((0xe0 & h->prim_poly) == 0){
- gf->multiply.w32 = gf_w8_clm_multiply_2;
- gf->multiply_region.w32 = gf_w8_clm_multiply_region_from_single_2;
+ SET_FUNCTION(gf,multiply,w32,gf_w8_clm_multiply_2)
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_clm_multiply_region_from_single_2)
}else if ((0xc0 & h->prim_poly) == 0){
- gf->multiply.w32 = gf_w8_clm_multiply_3;
- gf->multiply_region.w32 = gf_w8_clm_multiply_region_from_single_3;
+ SET_FUNCTION(gf,multiply,w32,gf_w8_clm_multiply_3)
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_clm_multiply_region_from_single_3)
}else if ((0x80 & h->prim_poly) == 0){
- gf->multiply.w32 = gf_w8_clm_multiply_4;
- gf->multiply_region.w32 = gf_w8_clm_multiply_region_from_single_4;
+ SET_FUNCTION(gf,multiply,w32,gf_w8_clm_multiply_4)
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_clm_multiply_region_from_single_4)
}else{
return 0;
}
@@ -537,7 +537,7 @@ int gf_w8_cfm_init(gf_t *gf)
static
int gf_w8_shift_init(gf_t *gf)
{
- gf->multiply.w32 = gf_w8_shift_multiply; /* The others will be set automatically */
+ SET_FUNCTION(gf,multiply,w32,gf_w8_shift_multiply) /* The others will be set automatically */
return 1;
}
@@ -809,20 +809,20 @@ int gf_w8_log_init(gf_t *gf)
} while (i != 1);
if (h->mult_type == GF_MULT_LOG_TABLE) {
- gf->inverse.w32 = gf_w8_log_inverse;
- gf->divide.w32 = gf_w8_log_divide;
- gf->multiply.w32 = gf_w8_log_multiply;
- gf->multiply_region.w32 = gf_w8_log_multiply_region;
+ SET_FUNCTION(gf,inverse,w32,gf_w8_log_inverse)
+ SET_FUNCTION(gf,divide,w32,gf_w8_log_divide)
+ SET_FUNCTION(gf,multiply,w32,gf_w8_log_multiply)
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_log_multiply_region)
} else if (h->mult_type == GF_MULT_LOG_ZERO) {
- gf->inverse.w32 = gf_w8_logzero_small_inverse;
- gf->divide.w32 = gf_w8_logzero_small_divide;
- gf->multiply.w32 = gf_w8_logzero_small_multiply;
- gf->multiply_region.w32 = gf_w8_logzero_multiply_region;
+ SET_FUNCTION(gf,inverse,w32,gf_w8_logzero_small_inverse)
+ SET_FUNCTION(gf,divide,w32,gf_w8_logzero_small_divide)
+ SET_FUNCTION(gf,multiply,w32,gf_w8_logzero_small_multiply)
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_logzero_multiply_region)
} else {
- gf->inverse.w32 = gf_w8_logzero_inverse;
- gf->divide.w32 = gf_w8_logzero_divide;
- gf->multiply.w32 = gf_w8_logzero_multiply;
- gf->multiply_region.w32 = gf_w8_logzero_multiply_region;
+ SET_FUNCTION(gf,inverse,w32,gf_w8_logzero_inverse)
+ SET_FUNCTION(gf,divide,w32,gf_w8_logzero_divide)
+ SET_FUNCTION(gf,multiply,w32,gf_w8_logzero_multiply)
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_logzero_multiply_region)
}
return 1;
}
@@ -1102,19 +1102,19 @@ int gf_w8_split_init(gf_t *gf)
}
}
- gf->multiply.w32 = gf_w8_split_multiply;
+ SET_FUNCTION(gf,multiply,w32,gf_w8_split_multiply)
#if defined(INTEL_SSSE3) || defined(ARM_NEON)
if (h->region_type & GF_REGION_NOSIMD)
- gf->multiply_region.w32 = gf_w8_split_multiply_region;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_split_multiply_region)
else
#if defined(INTEL_SSSE3)
- gf->multiply_region.w32 = gf_w8_split_multiply_region_sse;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_split_multiply_region_sse)
#elif defined(ARM_NEON)
gf_w8_neon_split_init(gf);
#endif
#else
- gf->multiply_region.w32 = gf_w8_split_multiply_region;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_split_multiply_region)
if(h->region_type & GF_REGION_SIMD)
return 0;
#endif
@@ -1201,29 +1201,29 @@ int gf_w8_table_init(gf_t *gf)
}
}
- gf->inverse.w32 = NULL; /* Will set from divide */
+ SET_FUNCTION(gf,inverse,w32,NULL) /* Will set from divide */
switch (scase) {
case 0:
- gf->divide.w32 = gf_w8_table_divide;
- gf->multiply.w32 = gf_w8_table_multiply;
- gf->multiply_region.w32 = gf_w8_table_multiply_region;
+ SET_FUNCTION(gf,divide,w32,gf_w8_table_divide)
+ SET_FUNCTION(gf,multiply,w32,gf_w8_table_multiply)
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_table_multiply_region)
break;
case 1:
- gf->divide.w32 = gf_w8_double_table_divide;
- gf->multiply.w32 = gf_w8_double_table_multiply;
- gf->multiply_region.w32 = gf_w8_double_table_multiply_region;
+ SET_FUNCTION(gf,divide,w32,gf_w8_double_table_divide)
+ SET_FUNCTION(gf,multiply,w32,gf_w8_double_table_multiply)
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_double_table_multiply_region)
break;
case 2:
- gf->divide.w32 = gf_w8_double_table_lazy_divide;
- gf->multiply.w32 = gf_w8_double_table_lazy_multiply;
- gf->multiply_region.w32 = gf_w8_double_table_multiply_region;
+ SET_FUNCTION(gf,divide,w32,gf_w8_double_table_lazy_divide)
+ SET_FUNCTION(gf,multiply,w32,gf_w8_double_table_lazy_multiply)
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_double_table_multiply_region)
break;
case 3:
#if defined(INTEL_SSSE3) || defined(ARM_NEON)
- gf->divide.w32 = gf_w8_default_divide;
- gf->multiply.w32 = gf_w8_default_multiply;
+ SET_FUNCTION(gf,divide,w32,gf_w8_default_divide)
+ SET_FUNCTION(gf,multiply,w32,gf_w8_default_multiply)
#if defined(INTEL_SSSE3)
- gf->multiply_region.w32 = gf_w8_split_multiply_region_sse;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_split_multiply_region_sse)
#elif defined(ARM_NEON)
gf_w8_neon_split_init(gf);
#endif
@@ -1472,18 +1472,18 @@ int gf_w8_composite_init(gf_t *gf)
cd->mult_table = gf_w4_get_mult_table(h->base_gf);
if (h->region_type & GF_REGION_ALTMAP) {
- gf->multiply_region.w32 = gf_w8_composite_multiply_region_alt;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_composite_multiply_region_alt)
} else {
- gf->multiply_region.w32 = gf_w8_composite_multiply_region;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_composite_multiply_region)
}
if (cd->mult_table == NULL) {
- gf->multiply.w32 = gf_w8_composite_multiply_recursive;
+ SET_FUNCTION(gf,multiply,w32,gf_w8_composite_multiply_recursive)
} else {
- gf->multiply.w32 = gf_w8_composite_multiply_inline;
+ SET_FUNCTION(gf,multiply,w32,gf_w8_composite_multiply_inline)
}
- gf->divide.w32 = NULL;
- gf->inverse.w32 = gf_w8_composite_inverse;
+ SET_FUNCTION(gf,divide,w32,NULL)
+ SET_FUNCTION(gf,inverse,w32,gf_w8_composite_inverse)
return 1;
}
@@ -2190,26 +2190,26 @@ int gf_w8_bytwo_init(gf_t *gf)
}
if (h->mult_type == GF_MULT_BYTWO_p) {
- gf->multiply.w32 = gf_w8_bytwo_p_multiply;
+ SET_FUNCTION(gf,multiply,w32,gf_w8_bytwo_p_multiply)
#ifdef INTEL_SSE2
if (h->region_type & GF_REGION_NOSIMD)
- gf->multiply_region.w32 = gf_w8_bytwo_p_nosse_multiply_region;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_bytwo_p_nosse_multiply_region)
else
- gf->multiply_region.w32 = gf_w8_bytwo_p_sse_multiply_region;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_bytwo_p_sse_multiply_region)
#else
- gf->multiply_region.w32 = gf_w8_bytwo_p_nosse_multiply_region;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_bytwo_p_nosse_multiply_region)
if(h->region_type & GF_REGION_SIMD)
return 0;
#endif
} else {
- gf->multiply.w32 = gf_w8_bytwo_b_multiply;
+ SET_FUNCTION(gf,multiply,w32,gf_w8_bytwo_b_multiply)
#ifdef INTEL_SSE2
if (h->region_type & GF_REGION_NOSIMD)
- gf->multiply_region.w32 = gf_w8_bytwo_b_nosse_multiply_region;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_bytwo_b_nosse_multiply_region)
else
- gf->multiply_region.w32 = gf_w8_bytwo_b_sse_multiply_region;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_bytwo_b_sse_multiply_region)
#else
- gf->multiply_region.w32 = gf_w8_bytwo_b_nosse_multiply_region;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_bytwo_b_nosse_multiply_region)
if(h->region_type & GF_REGION_SIMD)
return 0;
#endif
@@ -2304,11 +2304,11 @@ int gf_w8_init(gf_t *gf)
h->prim_poly |= 0x100;
}
- gf->multiply.w32 = NULL;
- gf->divide.w32 = NULL;
- gf->inverse.w32 = NULL;
- gf->multiply_region.w32 = NULL;
- gf->extract_word.w32 = gf_w8_extract_word;
+ SET_FUNCTION(gf,multiply,w32,NULL)
+ SET_FUNCTION(gf,divide,w32,NULL)
+ SET_FUNCTION(gf,inverse,w32,NULL)
+ SET_FUNCTION(gf,multiply_region,w32,NULL)
+ SET_FUNCTION(gf,extract_word,w32,gf_w8_extract_word)
switch(h->mult_type) {
case GF_MULT_DEFAULT:
@@ -2326,31 +2326,31 @@ int gf_w8_init(gf_t *gf)
}
if (h->divide_type == GF_DIVIDE_EUCLID) {
- gf->divide.w32 = gf_w8_divide_from_inverse;
- gf->inverse.w32 = gf_w8_euclid;
+ SET_FUNCTION(gf,divide,w32,gf_w8_divide_from_inverse)
+ SET_FUNCTION(gf,inverse,w32,gf_w8_euclid)
} else if (h->divide_type == GF_DIVIDE_MATRIX) {
- gf->divide.w32 = gf_w8_divide_from_inverse;
- gf->inverse.w32 = gf_w8_matrix;
+ SET_FUNCTION(gf,divide,w32,gf_w8_divide_from_inverse)
+ SET_FUNCTION(gf,inverse,w32,gf_w8_matrix)
}
if (gf->divide.w32 == NULL) {
- gf->divide.w32 = gf_w8_divide_from_inverse;
- if (gf->inverse.w32 == NULL) gf->inverse.w32 = gf_w8_euclid;
+ SET_FUNCTION(gf,divide,w32,gf_w8_divide_from_inverse)
+ if (gf->inverse.w32 == NULL) SET_FUNCTION(gf,inverse,w32,gf_w8_euclid)
}
- if (gf->inverse.w32 == NULL) gf->inverse.w32 = gf_w8_inverse_from_divide;
+ if (gf->inverse.w32 == NULL) SET_FUNCTION(gf,inverse,w32,gf_w8_inverse_from_divide)
if (h->mult_type == GF_MULT_COMPOSITE && (h->region_type & GF_REGION_ALTMAP)) {
- gf->extract_word.w32 = gf_w8_composite_extract_word;
+ SET_FUNCTION(gf,extract_word,w32,gf_w8_composite_extract_word)
}
if (h->region_type == GF_REGION_CAUCHY) {
- gf->multiply_region.w32 = gf_wgen_cauchy_region;
- gf->extract_word.w32 = gf_wgen_extract_word;
+ SET_FUNCTION(gf,multiply_region,w32,gf_wgen_cauchy_region)
+ SET_FUNCTION(gf,extract_word,w32,gf_wgen_extract_word)
}
if (gf->multiply_region.w32 == NULL) {
- gf->multiply_region.w32 = gf_w8_multiply_region_from_single;
+ SET_FUNCTION(gf,multiply_region,w32,gf_w8_multiply_region_from_single)
}
return 1;