Compute Library
18.05
|
#include "helpers.h"
Go to the source code of this file.
Macros | |
#define | ASYMM_ROUNDING_DIVIDE_BY_POW2_IMPL(size) |
Correctly-rounded-to-nearest division by a power-of-two. More... | |
#define | ASYMM_MULT_IMPL(size) |
Product of two numbers, interpreting them as fixed-point values in the interval [-1, 1), rounding to the nearest value, and saturating -1 * -1 to the maximum value. More... | |
#define | ASYMM_EXP_ON_INTERVAL_BETWEEN_NEGATIVE_ONE_QUARTER_AND_0_EXCL_IMPL(size) |
Calculates \( exp(x) \) for x in [-1/4, 0). More... | |
#define | ASYMM_SELECT_USING_MASK_IMPL(size) |
Each bit of the result is set to the corresponding bit of either then_val or else_val depending on whether the corresponding bit of if_mask is set. More... | |
#define | ASYMM_MASK_IF_ZERO_IMPL(size) |
For each element of input vector, the corresponding bits of the result item are set if the input item is zero. More... | |
#define | ASYMM_MASK_IF_NON_ZERO_IMPL(size) |
For each element of input vector, the corresponding bits of the result item are set if the input item is non-zero. More... | |
#define | EXP_BARREL_SHIFTER_IMPL(size) |
#define | ASYMM_EXP_ON_NEGATIVE_VALUES_IMPL(size) |
Calculates \( exp(x) \) for x < 0. More... | |
#define | ASYMM_SATURATING_ROUNDING_MULT_BY_POW2_IMPL(size) |
Calculates the product of a integer value by a power of two, with either a positive exponent (equivalent to an arithmetic left shift, saturating) or a negative exponent (equivalent to an arithmetic right shift, rounding to nearest). More... | |
#define | ASYMM_ROUNDING_HALF_SUM_IMPL(size) |
Calculates (a+b)/2, rounded to the nearest integer. More... | |
#define | ASYMM_ONE_OVER_ONE_PLUS_X_FOR_X_IN_0_1_IMPL(size) |
Calculates \( 1 / (1 + x) \) for x in (0, 1). More... | |
#define | ASYMM_RESCALE_IMPL(size) |
Considering the integer value as fixed-point, change the number of integer bits and update value accordingly. More... | |
#define | ASYMM_ROUNDING_DIVIDE_BY_POW2(x, exponent, size) asymm_rounding_divide_by_POW2_##size(x, exponent) |
#define | ASYMM_MULT(a, b, size) asymm_mult##size(a, b) |
#define | ASYMM_MULT_BY_QUANT_MULTIPLIER_LESS_THAN_ONE(x, quantized_multiplier, right_shift, size) ASYMM_ROUNDING_DIVIDE_BY_POW2(ASYMM_MULT(x, quantized_multiplier, size), right_shift, size) |
#define | ASYMM_EXP_ON_INTERVAL_BETWEEN_NEGATIVE_ONE_QUARTER_AND_0_EXCL(a, size) asymm_exp_on_interval_between_negative_one_quarter_and_0_excl##size(a) |
#define | ASYMM_SELECT_USING_MASK(if_mask, then_val, else_val, size) asymm_select_using_mask##size(if_mask, then_val, else_val) |
#define | ASYMM_MASK_IF_ZERO(a, size) asymm_mask_if_zero##size(a) |
#define | ASYMM_MASK_IF_NON_ZERO(a, size) asymm_mask_if_non_zero##size(a) |
#define | EXP_BARREL_SHIFTER(result, exponent, fp_multiplier, k_integer_bits, k_fractional_bits, remainder, size) exp_barrel_shifter##size(result, exponent, fp_multiplier, k_integer_bits, k_fractional_bits, remainder) |
#define | ASYMM_EXP_ON_NEGATIVE_VALUES(a, k_integer_bits, size) asymm_exp_on_negative_values##size(a, k_integer_bits) |
#define | ASYMM_ONE_OVER_ONE_PLUS_X_FOR_X_IN_0_1(a, size) asymm_one_over_one_plus_x_for_x_in_0_1##size(a) |
#define | ASYMM_SATURATING_ROUNDING_MULT_BY_POW2(x, exponent, size) asymm_saturating_rounding_mult_by_pow2##size(x, exponent) |
#define | ASYMM_ROUNDING_HALF_SUM(a, b, size) asymm_rounding_half_sum##size(a, b) |
#define | ASYMM_RESCALE(value, src_integer_bits, dst_integer_bits, size) asymm_rescale##size(value, src_integer_bits, dst_integer_bits) |
Functions | |
int2 | asymm_rounding_divide_by_POW2_2 (int2 x, int exponent) |
int4 | asymm_rounding_divide_by_POW2_4 (int4 x, int exponent) |
int8 | asymm_rounding_divide_by_POW2_8 (int8 x, int exponent) |
int16 | asymm_rounding_divide_by_POW2_16 (int16 x, int exponent) |
int2 | asymm_mult2 (int2 a, int2 b) |
int4 | asymm_mult4 (int4 a, int4 b) |
int8 | asymm_mult8 (int8 a, int8 b) |
int16 | asymm_mult16 (int16 a, int16 b) |
int2 | asymm_exp_on_interval_between_negative_one_quarter_and_0_excl2 (int2 a) |
int4 | asymm_exp_on_interval_between_negative_one_quarter_and_0_excl4 (int4 a) |
int8 | asymm_exp_on_interval_between_negative_one_quarter_and_0_excl8 (int8 a) |
int16 | asymm_exp_on_interval_between_negative_one_quarter_and_0_excl16 (int16 a) |
int2 | asymm_select_using_mask2 (int2 if_mask, int2 then_val, int2 else_val) |
int4 | asymm_select_using_mask4 (int4 if_mask, int4 then_val, int4 else_val) |
int8 | asymm_select_using_mask8 (int8 if_mask, int8 then_val, int8 else_val) |
int16 | asymm_select_using_mask16 (int16 if_mask, int16 then_val, int16 else_val) |
int2 | asymm_mask_if_zero2 (int2 a) |
int4 | asymm_mask_if_zero4 (int4 a) |
int8 | asymm_mask_if_zero8 (int8 a) |
int16 | asymm_mask_if_zero16 (int16 a) |
int2 | asymm_mask_if_non_zero2 (int2 a) |
int4 | asymm_mask_if_non_zero4 (int4 a) |
int8 | asymm_mask_if_non_zero8 (int8 a) |
int16 | asymm_mask_if_non_zero16 (int16 a) |
int2 | exp_barrel_shifter2 (int2 result, int exponent, int fp_multiplier, int k_integer_bits, int k_fractional_bits, int2 remainder) |
int4 | exp_barrel_shifter4 (int4 result, int exponent, int fp_multiplier, int k_integer_bits, int k_fractional_bits, int4 remainder) |
int8 | exp_barrel_shifter8 (int8 result, int exponent, int fp_multiplier, int k_integer_bits, int k_fractional_bits, int8 remainder) |
int16 | exp_barrel_shifter16 (int16 result, int exponent, int fp_multiplier, int k_integer_bits, int k_fractional_bits, int16 remainder) |
int2 | asymm_exp_on_negative_values2 (int2 a, int k_integer_bits) |
int4 | asymm_exp_on_negative_values4 (int4 a, int k_integer_bits) |
int8 | asymm_exp_on_negative_values8 (int8 a, int k_integer_bits) |
int16 | asymm_exp_on_negative_values16 (int16 a, int k_integer_bits) |
int2 | asymm_saturating_rounding_mult_by_pow22 (int2 x, int exponent) |
int4 | asymm_saturating_rounding_mult_by_pow24 (int4 x, int exponent) |
int8 | asymm_saturating_rounding_mult_by_pow28 (int8 x, int exponent) |
int16 | asymm_saturating_rounding_mult_by_pow216 (int16 x, int exponent) |
int2 | asymm_rounding_half_sum2 (int2 a, int2 b) |
int4 | asymm_rounding_half_sum4 (int4 a, int4 b) |
int8 | asymm_rounding_half_sum8 (int8 a, int8 b) |
int16 | asymm_rounding_half_sum16 (int16 a, int16 b) |
int2 | asymm_one_over_one_plus_x_for_x_in_0_12 (int2 a) |
int4 | asymm_one_over_one_plus_x_for_x_in_0_14 (int4 a) |
int8 | asymm_one_over_one_plus_x_for_x_in_0_18 (int8 a) |
int16 | asymm_one_over_one_plus_x_for_x_in_0_116 (int16 a) |
int2 | asymm_rescale2 (int2 value, int src_integer_bits, int dst_integer_bits) |
int4 | asymm_rescale4 (int4 value, int src_integer_bits, int dst_integer_bits) |
int8 | asymm_rescale8 (int8 value, int src_integer_bits, int dst_integer_bits) |
int16 | asymm_rescale16 (int16 value, int src_integer_bits, int dst_integer_bits) |
#define ASYMM_EXP_ON_INTERVAL_BETWEEN_NEGATIVE_ONE_QUARTER_AND_0_EXCL | ( | a, | |
size | |||
) | asymm_exp_on_interval_between_negative_one_quarter_and_0_excl##size(a) |
Definition at line 299 of file helpers_asymm.h.
#define ASYMM_EXP_ON_INTERVAL_BETWEEN_NEGATIVE_ONE_QUARTER_AND_0_EXCL_IMPL | ( | size | ) |
Calculates \( exp(x) \) for x in [-1/4, 0).
[in] | size | Size of vector. |
Definition at line 77 of file helpers_asymm.h.
#define ASYMM_EXP_ON_NEGATIVE_VALUES | ( | a, | |
k_integer_bits, | |||
size | |||
) | asymm_exp_on_negative_values##size(a, k_integer_bits) |
Definition at line 304 of file helpers_asymm.h.
#define ASYMM_EXP_ON_NEGATIVE_VALUES_IMPL | ( | size | ) |
Calculates \( exp(x) \) for x < 0.
[in] | size | Size of vector. |
Definition at line 164 of file helpers_asymm.h.
#define ASYMM_MASK_IF_NON_ZERO | ( | a, | |
size | |||
) | asymm_mask_if_non_zero##size(a) |
Definition at line 302 of file helpers_asymm.h.
#define ASYMM_MASK_IF_NON_ZERO_IMPL | ( | size | ) |
For each element of input vector, the corresponding bits of the result item are set if the input item is non-zero.
[in] | size | Size of vector. |
a
is non zero. Definition at line 136 of file helpers_asymm.h.
#define ASYMM_MASK_IF_ZERO | ( | a, | |
size | |||
) | asymm_mask_if_zero##size(a) |
Definition at line 301 of file helpers_asymm.h.
#define ASYMM_MASK_IF_ZERO_IMPL | ( | size | ) |
For each element of input vector, the corresponding bits of the result item are set if the input item is zero.
[in] | size | Size of vector. |
a
is zero. Definition at line 121 of file helpers_asymm.h.
#define ASYMM_MULT | ( | a, | |
b, | |||
size | |||
) | asymm_mult##size(a, b) |
Definition at line 296 of file helpers_asymm.h.
#define ASYMM_MULT_BY_QUANT_MULTIPLIER_LESS_THAN_ONE | ( | x, | |
quantized_multiplier, | |||
right_shift, | |||
size | |||
) | ASYMM_ROUNDING_DIVIDE_BY_POW2(ASYMM_MULT(x, quantized_multiplier, size), right_shift, size) |
Definition at line 297 of file helpers_asymm.h.
Referenced by output_stage_quantized().
#define ASYMM_MULT_IMPL | ( | size | ) |
Product of two numbers, interpreting them as fixed-point values in the interval [-1, 1), rounding to the nearest value, and saturating -1 * -1 to the maximum value.
[in] | size | Size of vector. |
Definition at line 54 of file helpers_asymm.h.
#define ASYMM_ONE_OVER_ONE_PLUS_X_FOR_X_IN_0_1 | ( | a, | |
size | |||
) | asymm_one_over_one_plus_x_for_x_in_0_1##size(a) |
Definition at line 305 of file helpers_asymm.h.
#define ASYMM_ONE_OVER_ONE_PLUS_X_FOR_X_IN_0_1_IMPL | ( | size | ) |
Calculates \( 1 / (1 + x) \) for x in (0, 1).
[in] | size | Size of vector. |
Definition at line 258 of file helpers_asymm.h.
#define ASYMM_RESCALE | ( | value, | |
src_integer_bits, | |||
dst_integer_bits, | |||
size | |||
) | asymm_rescale##size(value, src_integer_bits, dst_integer_bits) |
Definition at line 308 of file helpers_asymm.h.
#define ASYMM_RESCALE_IMPL | ( | size | ) |
Considering the integer value as fixed-point, change the number of integer bits and update value accordingly.
[in] | size | Size of vector. |
Definition at line 288 of file helpers_asymm.h.
#define ASYMM_ROUNDING_DIVIDE_BY_POW2 | ( | x, | |
exponent, | |||
size | |||
) | asymm_rounding_divide_by_POW2_##size(x, exponent) |
Definition at line 295 of file helpers_asymm.h.
#define ASYMM_ROUNDING_DIVIDE_BY_POW2_IMPL | ( | size | ) |
Correctly-rounded-to-nearest division by a power-of-two.
[in] | size | Size of vector. |
Definition at line 35 of file helpers_asymm.h.
#define ASYMM_ROUNDING_HALF_SUM | ( | a, | |
b, | |||
size | |||
) | asymm_rounding_half_sum##size(a, b) |
Definition at line 307 of file helpers_asymm.h.
#define ASYMM_ROUNDING_HALF_SUM_IMPL | ( | size | ) |
Calculates (a+b)/2, rounded to the nearest integer.
Equivalent to VRHADD in the ARM NEON instruction set.
[in] | size | Size of vector. |
Definition at line 236 of file helpers_asymm.h.
#define ASYMM_SATURATING_ROUNDING_MULT_BY_POW2 | ( | x, | |
exponent, | |||
size | |||
) | asymm_saturating_rounding_mult_by_pow2##size(x, exponent) |
Definition at line 306 of file helpers_asymm.h.
#define ASYMM_SATURATING_ROUNDING_MULT_BY_POW2_IMPL | ( | size | ) |
Calculates the product of a integer value by a power of two, with either a positive exponent (equivalent to an arithmetic left shift, saturating) or a negative exponent (equivalent to an arithmetic right shift, rounding to nearest).
[in] | size | Size of vector. |
Definition at line 207 of file helpers_asymm.h.
#define ASYMM_SELECT_USING_MASK | ( | if_mask, | |
then_val, | |||
else_val, | |||
size | |||
) | asymm_select_using_mask##size(if_mask, then_val, else_val) |
Definition at line 300 of file helpers_asymm.h.
#define ASYMM_SELECT_USING_MASK_IMPL | ( | size | ) |
Each bit of the result is set to the corresponding bit of either then_val or else_val depending on whether the corresponding bit of if_mask is set.
Equivalent to the VBSL instruction in ARM NEON.
[in] | size | Size of vector. |
then_val
or from else_val
depending on corresponding bit in if_mask
is set or not. Definition at line 108 of file helpers_asymm.h.
#define EXP_BARREL_SHIFTER | ( | result, | |
exponent, | |||
fp_multiplier, | |||
k_integer_bits, | |||
k_fractional_bits, | |||
remainder, | |||
size | |||
) | exp_barrel_shifter##size(result, exponent, fp_multiplier, k_integer_bits, k_fractional_bits, remainder) |
Definition at line 303 of file helpers_asymm.h.
#define EXP_BARREL_SHIFTER_IMPL | ( | size | ) |
Definition at line 144 of file helpers_asymm.h.
|
inline |
Definition at line 323 of file helpers_asymm.h.
|
inline |
Definition at line 320 of file helpers_asymm.h.
|
inline |
Definition at line 321 of file helpers_asymm.h.
|
inline |
Definition at line 322 of file helpers_asymm.h.
|
inline |
Definition at line 348 of file helpers_asymm.h.
|
inline |
Definition at line 345 of file helpers_asymm.h.
|
inline |
Definition at line 346 of file helpers_asymm.h.
|
inline |
Definition at line 347 of file helpers_asymm.h.
|
inline |
Definition at line 338 of file helpers_asymm.h.
|
inline |
Definition at line 335 of file helpers_asymm.h.
|
inline |
Definition at line 336 of file helpers_asymm.h.
|
inline |
Definition at line 337 of file helpers_asymm.h.
|
inline |
Definition at line 333 of file helpers_asymm.h.
|
inline |
Definition at line 330 of file helpers_asymm.h.
|
inline |
Definition at line 331 of file helpers_asymm.h.
|
inline |
Definition at line 332 of file helpers_asymm.h.
|
inline |
Definition at line 318 of file helpers_asymm.h.
|
inline |
Definition at line 315 of file helpers_asymm.h.
|
inline |
Definition at line 316 of file helpers_asymm.h.
|
inline |
Definition at line 317 of file helpers_asymm.h.
|
inline |
Definition at line 363 of file helpers_asymm.h.
|
inline |
Definition at line 360 of file helpers_asymm.h.
|
inline |
Definition at line 361 of file helpers_asymm.h.
|
inline |
Definition at line 362 of file helpers_asymm.h.
|
inline |
Definition at line 368 of file helpers_asymm.h.
|
inline |
Definition at line 365 of file helpers_asymm.h.
|
inline |
Definition at line 366 of file helpers_asymm.h.
|
inline |
Definition at line 367 of file helpers_asymm.h.
|
inline |
Definition at line 313 of file helpers_asymm.h.
|
inline |
Definition at line 310 of file helpers_asymm.h.
|
inline |
Definition at line 311 of file helpers_asymm.h.
|
inline |
Definition at line 312 of file helpers_asymm.h.
|
inline |
Definition at line 358 of file helpers_asymm.h.
|
inline |
Definition at line 355 of file helpers_asymm.h.
|
inline |
Definition at line 356 of file helpers_asymm.h.
|
inline |
Definition at line 357 of file helpers_asymm.h.
|
inline |
Definition at line 353 of file helpers_asymm.h.
|
inline |
Definition at line 350 of file helpers_asymm.h.
|
inline |
Definition at line 351 of file helpers_asymm.h.
|
inline |
Definition at line 352 of file helpers_asymm.h.
|
inline |
Definition at line 328 of file helpers_asymm.h.
|
inline |
Definition at line 325 of file helpers_asymm.h.
|
inline |
Definition at line 326 of file helpers_asymm.h.
|
inline |
Definition at line 327 of file helpers_asymm.h.
|
inline |
Definition at line 343 of file helpers_asymm.h.
|
inline |
Definition at line 340 of file helpers_asymm.h.
|
inline |
Definition at line 341 of file helpers_asymm.h.
|
inline |
Definition at line 342 of file helpers_asymm.h.