typedef signed long long HOST_WIDE_INT; #define HOST_BITS_PER_WIDE_INT (8 * sizeof(HOST_WIDE_INT)) #define HOST_WIDE_INT_C(X) X ## LL #define HOST_WIDE_INT_UC(X) HOST_WIDE_INT_C (X ## U) #define HOST_WIDE_INT_1 HOST_WIDE_INT_C (1) #define HOST_WIDE_INT_1U HOST_WIDE_INT_UC (1) #define HOST_WIDE_INT_M1 HOST_WIDE_INT_C (-1) #define HOST_WIDE_INT_M1U HOST_WIDE_INT_UC (-1) #define gcc_checking_assert(test) HOST_WIDE_INT sext_hwi (HOST_WIDE_INT src, unsigned int prec) { if (prec == HOST_BITS_PER_WIDE_INT) return src; else { gcc_checking_assert (prec < HOST_BITS_PER_WIDE_INT); HOST_WIDE_INT sign_mask = HOST_WIDE_INT_1 << (prec - 1); HOST_WIDE_INT value_mask = (HOST_WIDE_INT_1U << prec) - HOST_WIDE_INT_1U; return (((src & value_mask) ^ sign_mask) - sign_mask); } }