| Index: Source/wtf/SaturatedArithmetic.h
|
| diff --git a/Source/wtf/SaturatedArithmetic.h b/Source/wtf/SaturatedArithmetic.h
|
| index ff4ecb3619ec9c15f0def09274a2eaa29134dc21..9cc561e8a8c7511721e9935ca81511b8ba2b5f76 100644
|
| --- a/Source/wtf/SaturatedArithmetic.h
|
| +++ b/Source/wtf/SaturatedArithmetic.h
|
| @@ -86,13 +86,18 @@ inline int getMinSaturatedSetResultForTesting(int FractionalShift)
|
| return std::numeric_limits<int>::min();
|
| }
|
|
|
| -ALWAYS_INLINE int saturatedSet(int value, int FractionalShift)
|
| +template<size_t saturate, size_t fractionalShift>
|
| +ALWAYS_INLINE int saturatedSetSigned(int value)
|
| {
|
| + // This function is implemented as a template to make a common interface
|
| + // for this and the ARM version, which will only compile under all compilers
|
| + // if it is implemented as a template specialized with constants.
|
| +
|
| const int intMaxForLayoutUnit =
|
| - std::numeric_limits<int>::max() >> FractionalShift;
|
| + std::numeric_limits<int>::max() >> fractionalShift;
|
|
|
| const int intMinForLayoutUnit =
|
| - std::numeric_limits<int>::min() >> FractionalShift;
|
| + std::numeric_limits<int>::min() >> fractionalShift;
|
|
|
| if (value > intMaxForLayoutUnit)
|
| return std::numeric_limits<int>::max();
|
| @@ -100,19 +105,23 @@ ALWAYS_INLINE int saturatedSet(int value, int FractionalShift)
|
| if (value < intMinForLayoutUnit)
|
| return std::numeric_limits<int>::min();
|
|
|
| - return value << FractionalShift;
|
| + return value << fractionalShift;
|
| }
|
|
|
| -
|
| -ALWAYS_INLINE int saturatedSet(unsigned value, int FractionalShift)
|
| +template<size_t saturate, size_t fractionalShift>
|
| +ALWAYS_INLINE int saturatedSetUnsigned(unsigned value)
|
| {
|
| + // This function is implemented as a template to make a common interface
|
| + // for this and the ARM version, which will only compile under all compilers
|
| + // if it is implemented as a template specialized with constants.
|
| +
|
| const unsigned intMaxForLayoutUnit =
|
| - std::numeric_limits<int>::max() >> FractionalShift;
|
| + std::numeric_limits<int>::max() >> fractionalShift;
|
|
|
| if (value >= intMaxForLayoutUnit)
|
| return std::numeric_limits<int>::max();
|
|
|
| - return value << FractionalShift;
|
| + return value << fractionalShift;
|
| }
|
|
|
| #endif // CPU(ARM) && COMPILER(GCC)
|
|
|