return result;
 }
 
-#define BITS_PER_FRACTIONAL_PART \
-       32
 
 #define FRACTIONAL_PART_MASK \
-       ((1ULL << BITS_PER_FRACTIONAL_PART) - 1)
+       ((1ULL << FIXED31_32_BITS_PER_FRACTIONAL_PART) - 1)
 
 #define GET_INTEGER_PART(x) \
-       ((x) >> BITS_PER_FRACTIONAL_PART)
+       ((x) >> FIXED31_32_BITS_PER_FRACTIONAL_PART)
 
 #define GET_FRACTIONAL_PART(x) \
        (FRACTIONAL_PART_MASK & (x))
 
        /* determine fractional part */
        {
-               uint32_t i = BITS_PER_FRACTIONAL_PART;
+               uint32_t i = FIXED31_32_BITS_PER_FRACTIONAL_PART;
 
                do {
                        remainder <<= 1;
        return res;
 }
 
-struct fixed31_32 dal_fixed31_32_from_int(
+struct fixed31_32 dal_fixed31_32_from_int_nonconst(
        int64_t arg)
 {
        struct fixed31_32 res;
 
        ASSERT((LONG_MIN <= arg) && (arg <= LONG_MAX));
 
-       res.value = arg << BITS_PER_FRACTIONAL_PART;
+       res.value = arg << FIXED31_32_BITS_PER_FRACTIONAL_PART;
 
        return res;
 }
 
        ASSERT(res.value <= LONG_MAX);
 
-       res.value <<= BITS_PER_FRACTIONAL_PART;
+       res.value <<= FIXED31_32_BITS_PER_FRACTIONAL_PART;
 
        tmp = arg1_int * arg2_fra;
 
 
        tmp = arg1_fra * arg2_fra;
 
-       tmp = (tmp >> BITS_PER_FRACTIONAL_PART) +
+       tmp = (tmp >> FIXED31_32_BITS_PER_FRACTIONAL_PART) +
                (tmp >= (uint64_t)dal_fixed31_32_half.value);
 
        ASSERT(tmp <= (uint64_t)(LLONG_MAX - res.value));
 
        ASSERT(res.value <= LONG_MAX);
 
-       res.value <<= BITS_PER_FRACTIONAL_PART;
+       res.value <<= FIXED31_32_BITS_PER_FRACTIONAL_PART;
 
        tmp = arg_int * arg_fra;
 
 
        tmp = arg_fra * arg_fra;
 
-       tmp = (tmp >> BITS_PER_FRACTIONAL_PART) +
+       tmp = (tmp >> FIXED31_32_BITS_PER_FRACTIONAL_PART) +
                (tmp >= (uint64_t)dal_fixed31_32_half.value);
 
        ASSERT(tmp <= (uint64_t)(LLONG_MAX - res.value));
        /* 4. make space for fractional part to be filled in after integer */
        result <<= fractional_bits;
        /* 5. shrink fixed point fractional part to of fractional_bits width*/
-       fractional_part >>= BITS_PER_FRACTIONAL_PART - fractional_bits;
+       fractional_part >>= FIXED31_32_BITS_PER_FRACTIONAL_PART - fractional_bits;
        /* 6. merge the result */
        return result | fractional_part;
 }
 
 
 #include "os_types.h"
 
+#define FIXED31_32_BITS_PER_FRACTIONAL_PART 32
+
 /*
  * @brief
  * Arithmetic operations on real numbers
  * @brief
  * result = arg
  */
-struct fixed31_32 dal_fixed31_32_from_int(
-       int64_t arg);
+struct fixed31_32 dal_fixed31_32_from_int_nonconst(int64_t arg);
+static inline struct fixed31_32 dal_fixed31_32_from_int(int64_t arg)
+{
+       if (__builtin_constant_p(arg)) {
+               struct fixed31_32 res;
+               BUILD_BUG_ON((LONG_MIN > arg) || (arg > LONG_MAX));
+               res.value = arg << FIXED31_32_BITS_PER_FRACTIONAL_PART;
+               return res;
+       } else
+               return dal_fixed31_32_from_int_nonconst(arg);
+}
 
 /*
  * @brief