|
|
|
@@ -54,9 +54,9 @@ int MultiplyByQuantizedMultiplier(int32_t value, int32_t multiplier, int32_t lef |
|
|
|
return RoundingDivideByPOT(SaturatingRoundingDoublingHighMul(value * (1 << left_shift), multiplier), -right_shift); |
|
|
|
} |
|
|
|
|
|
|
|
inline int FractionsBits(int integer_bits) { return 8 * sizeof(int32_t) - 1 - integer_bits; } |
|
|
|
int FractionsBits(int integer_bits) { return 8 * sizeof(int32_t) - 1 - integer_bits; } |
|
|
|
|
|
|
|
inline int FixedPoint_One(int integer_bits, int fractions_bits) { |
|
|
|
int FixedPoint_One(int integer_bits, int fractions_bits) { |
|
|
|
return (integer_bits == 0 ? INT32_MAX : ((1) << (uint32_t)(integer_bits == 0 ? 0 : fractions_bits))); |
|
|
|
} |
|
|
|
|
|
|
|
@@ -65,23 +65,23 @@ int RoundingHalfSum(int32_t a, int32_t b) { |
|
|
|
return (int32_t)((sum + (sum > 0 ? 1 : -1)) / 2); |
|
|
|
} |
|
|
|
|
|
|
|
inline int32_t BitAnd(int32_t a, int32_t b) { return (uint32_t)a & (uint32_t)b; } |
|
|
|
int32_t BitAnd(int32_t a, int32_t b) { return (uint32_t)a & (uint32_t)b; } |
|
|
|
|
|
|
|
inline int32_t BitOr(int32_t a, int32_t b) { return (uint32_t)a | (uint32_t)b; } |
|
|
|
int32_t BitOr(int32_t a, int32_t b) { return (uint32_t)a | (uint32_t)b; } |
|
|
|
|
|
|
|
inline int32_t BitXor(int32_t a, int32_t b) { return (uint32_t)a ^ (uint32_t)b; } |
|
|
|
int32_t BitXor(int32_t a, int32_t b) { return (uint32_t)a ^ (uint32_t)b; } |
|
|
|
|
|
|
|
inline int32_t BitNot(int32_t a) { return ~(uint32_t)a; } |
|
|
|
int32_t BitNot(int32_t a) { return ~(uint32_t)a; } |
|
|
|
|
|
|
|
inline int BitsSelect(int mask, int bound, int val) { return BitXor(BitAnd(mask, bound), BitAnd(BitNot(mask), val)); } |
|
|
|
int BitsSelect(int mask, int bound, int val) { return BitXor(BitAnd(mask, bound), BitAnd(BitNot(mask), val)); } |
|
|
|
|
|
|
|
inline int ConstantPOT(int fractional_bits, int exponent) { return (1 << (uint32_t)(fractional_bits + exponent)); } |
|
|
|
int ConstantPOT(int fractional_bits, int exponent) { return (1 << (uint32_t)(fractional_bits + exponent)); } |
|
|
|
|
|
|
|
inline int32_t MaskIfNonZero(int32_t a) { return a ? BitNot(0) : 0; } |
|
|
|
int32_t MaskIfNonZero(int32_t a) { return a ? BitNot(0) : 0; } |
|
|
|
|
|
|
|
inline int32_t MaskIfZero(int32_t a) { return MaskIfNonZero(!a); } |
|
|
|
int32_t MaskIfZero(int32_t a) { return MaskIfNonZero(!a); } |
|
|
|
|
|
|
|
inline int32_t MaskIfLessThan(int32_t a, int32_t b) { return MaskIfNonZero((a < b)); } |
|
|
|
int32_t MaskIfLessThan(int32_t a, int32_t b) { return MaskIfNonZero((a < b)); } |
|
|
|
|
|
|
|
int CountLeadingZeroBits(uint32_t x) { |
|
|
|
#if defined(__GUNC__) |
|
|
|
|