#ifndef GENERIC_FI_H
#define GENERIC_FI_H

/* Compilers may use another function within the assert macro to exit the
 * program. QAC thus does not see an "exit" function and assumes the
 * function returns, which it does not.
 * The below pragma tells QAC the compiler supplied function does not
 * return.
 */

/* examples - GCC, ICC, BCC 3.1, BCC 5.5, CYGWIN gcc, Watcom 1.6 */
#pragma PRQA_NO_RETURN __assert_fail
#pragma PRQA_NO_RETURN __assert_perror_fail
#pragma PRQA_NO_RETURN __assert

/* SDCC, BCC 5.5, Digital Mars DM 8.4, LCC, Watcom 1.6, Fujitsu F2MM,FR */
#pragma PRQA_NO_RETURN _assert

/* HI-TECH PCCLite */
#pragma PRQA_NO_RETURN _fassert

/* DJGPP, D.J.Delorie gcc DOS port */
#pragma PRQA_NO_RETURN __dj_assert

/* Watcom 1.6, MSVS 08 */
#pragma PRQA_NO_RETURN _wassert
#pragma PRQA_NO_RETURN __wassert
#pragma PRQA_NO_RETURN _assert99
#pragma PRQA_NO_RETURN _wassert99
#pragma PRQA_NO_RETURN __assert99
#pragma PRQA_NO_RETURN __wassert99

/* Renesas M32R compiler */
#pragma PRQA_NO_RETURN _Assert

/* NEC 78K0 series 16bit compiler */
#pragma PRQA_NO_RETURN __assertfail
#pragma PRQA_NO_RETURN __assertfail_n
#pragma PRQA_NO_RETURN __assertfail_f


/* Depending on the code that the compiler maker uses within the assert macro,
 * QAC may issue warnings. It is also possible that when the NDEBUG macro is used
 * to suppress the assertion code, QAC may issue a "no side-effects" warning.
 * To eliminate these, we turn off all warnings for the assert macro.
 */
#pragma PRQA_MACRO_MESSAGES_OFF "assert"


/* Any other items that may be required in a "force-include" file should be placed below. */

int __builtin_add_sat(int, int);
int __builtin_abs(int);
int __builtin_addbitrev(int, int);
int __builtin_avg(int, int);
int __builtin_clip(int, int);
int __builtin_count_ones(int);
int __builtin_fext(int, int);
int __builtin_frmul(int, int);
int __builtin_frmul_sat(int, int);
int __builtin_max(int, int);
int __builtin_min(int, int);
int __builtin_neg_sat(int);
int __builtin_sub_sat(int, int);
float __builtin_conv_RtoF(int);
float __builtin_copysignf(float, float);
float __builtin_fabsf(float);
float __builtin_favgf(float, float);
float __builtin_fclipf(float, float);
float __builtin_fmaxf(float, float);
float __builtin_fminf(float, float);
int __builtin_conv_FtoR(float);
long long __builtin_llabs(long long);
long long __builtin_llavg(long long, long long);
long long __builtin_llclip(long long, long long);
int __builtin_llcount_ones(long long);
long long __builtin_llmax(long long, long long);
long long __builtin_llmin(long long, long long);
int __builtin_abs_2x16(int);
int __builtin_add_2x16(int, int);
int __builtin_add_2x16_sat(int, int);
int __builtin_clip_2x16(int, int);
int __builtin_cmult_fr2x16(int, int);
int __builtin_cmult_i2x16(int, int);
int __builtin_max_2x16(int, int);
int __builtin_min_2x16(int, int);
int __builtin_mult_fr2x16(int, int);
int __builtin_mult_i2x16(int, int);
int __builtin_neg_2x16(int);
int __builtin_sub_2x16(int, int);
int __builtin_sub_2x16_sat(int, int);
int __builtin_sum_2x16(int);
int __builtin_compact_to_fr2x16(long long);
long long __builtin_expand_fr2x16(int);
int __builtin_compact_to_i2x16(long long);
long long __builtin_expand_i2x16(int);
long long __builtin_merge_2x16(int, int);
long long __builtin_abs_4x16(long long);
long long __builtin_add_4x16(long long, long long);
long long __builtin_add_4x16_sat(long long, long long);
long long __builtin_clip_4x16(long long, long long);
long long __builtin_max_4x16(long long, long long);
long long __builtin_min_4x16(long long, long long);
long long __builtin_mult_fr4x16(long long, long long);
long long __builtin_mult_fr4x16_sat(long long, long long);
long long __builtin_mult_i4x16(long long, long long);
long long __builtin_neg_4x16(long long);
long long __builtin_sub_4x16(long long, long long);
long long __builtin_sub_4x16_sat(long long, long long);
int __builtin_sum_4x16(long long);
int __builtin_abs_4x8(int);
int __builtin_add_4x8(int, int);
int __builtin_add_4x8_sat(int, int);
int __builtin_clip_4x8(int, int);
int __builtin_max_4x8(int, int);
int __builtin_min_4x8(int, int);
int __builtin_sub_4x8(int, int);
int __builtin_sub_4x8_sat(int, int);
int __builtin_sum_4x8(int);
long long __builtin_merge_4x8(int, int);
long long __builtin_abs_8x8(long long);
long long __builtin_add_8x8(long long, long long);
long long __builtin_add_8x8_sat(long long, long long);
long long __builtin_clip_8x8(long long, long long);
long long __builtin_max_8x8(long long, long long);
long long __builtin_min_8x8(long long, long long);
long long __builtin_sub_8x8(long long, long long);
long long __builtin_sub_8x8_sat(long long, long long);
int __builtin_sum_8x8(long long);
long long __builtin_compose_64(int hi, int lo);
unsigned long long __builtin_compose_64u(unsigned, unsigned);
long double __builtin_f_compose_64(float, float);
int __builtin_high_32(long long);
unsigned __builtin_high_32u(unsigned long long);
float __builtin_f_high_32(long double);
int __builtin_low_32(long long);
unsigned __builtin_low_32u(unsigned long long);
float __builtin_f_low_32(long double);
int __builtin_high_64(__builtin_quad);
int __builtin_low_64(__builtin_quad);
int __builtin_sysreg_read(int);
long long __builtin_sysreg_read2(int);
void __builtin_sysreg_read4(__builtin_quad);
void * __builtin_alloca_aligned(int, int);
void __builtin_assert(int);

void * __builtin_memcpyDD(void * __a, const void * __b, /**size_t*/unsigned long/*size_t**/  __c);
__pm void * __builtin_memcpyPD(__pm void * __a, const void * __b, /**size_t*/unsigned long/*size_t**/  __c);
void * __builtin_memcpyDP(void * __a, const __pm void * __b, /**size_t*/unsigned long/*size_t**/  __c);
__pm void * __builtin_memcpyPP(__pm void * __a, const __pm void * __b, /**size_t*/unsigned long/*size_t**/  __c);
void * __builtin_memmoveDD(void * __a, const void * __b, /**size_t*/unsigned long/*size_t**/  __c);
__pm void * __builtin_memmovePD(__pm void * __a, const void * __b, /**size_t*/unsigned long/*size_t**/  __c);
void * __builtin_memmoveDP(void * __a, const __pm void * __b, /**size_t*/unsigned long/*size_t**/  __c);
__pm void * __builtin_memmovePP(__pm void * __a, const __pm void * __b, /**size_t*/unsigned long/*size_t**/  __c);
char * __builtin_strcpyDD(char * __a, const char * __b);
__pm char * __builtin_strcpyPD(__pm char * __a, const char * __b);
char * __builtin_strcpyDP(char * __a, const __pm char * __b);
__pm char * __builtin_strcpyPP(__pm char * __a, const __pm char * __b);
/**size_t*/unsigned long/*size_t**/  __builtin_strlenD(const char * __a);
/**size_t*/unsigned long/*size_t**/  __builtin_strlenP(const __pm char * __a);
void * __builtin_va_start(const void * __a, int  __b);
void * __builtin_alloca(/**size_t*/unsigned long/*size_t**/  __a);
void * __builtin_dealloca(/**size_t*/unsigned long/*size_t**/  __a);
int  __builtin_abs(int  __a);
long  __builtin_labs(long  __a);
float  __builtin_fabsf(float  __a);
long double  __builtin_fabs(long double  __a);
int  __builtin_min(int  __a, int  __b);
long  __builtin_lmin(long  __a, long  __b);
float  __builtin_fminf(float  __a, float  __b);
int  __builtin_max(int  __a, int  __b);
long  __builtin_lmax(long  __a, long  __b);
float  __builtin_fmaxf(float  __a, float  __b);
int  __builtin_expected_true(int  __a);
int  __builtin_expected_false(int  __a);
void __builtin_assert(int  __a);
void __builtin_aligned(const void * __a, int  __b);
int  __builtin_funcsize(const void * __a);
/**ptrdiff_t*/int/*ptrdiff_t**/  __builtin_circindex(/**ptrdiff_t*/int/*ptrdiff_t**/  __a, /**ptrdiff_t*/int/*ptrdiff_t**/  __b, /**size_t*/unsigned long/*size_t**/  __c);
void * __builtin_circptr(const void * __a, /**ptrdiff_t*/int/*ptrdiff_t**/  __b, const void * __c, /**size_t*/unsigned long/*size_t**/  __d);
void __builtin_pm_aligned(const __pm void * __a, int  __b);
int  __builtin_misaligned_load32(void * __a);
int  __builtin_misaligned_load32_vol(volatile void * __a);
void __builtin_misaligned_store32(void * __a, int  __b);
void __builtin_misaligned_store32_vol(volatile void * __a, int  __b);
void  __builtin_NOP(void);
int  __builtin_avg(int  __a, int  __b);
long  __builtin_lavg(long  __a, long  __b);
int  __builtin_clip(int  __a, int  __b);
long  __builtin_lclip(long  __a, long  __b);
float  __builtin_favgf(float  __a, float  __b);
float  __builtin_copysignf(float  __a, float  __b);
float  __builtin_fsignf(float  __a, float  __b);
int  __builtin_mantf(float  __a);
int  __builtin_logbf(float  __a);
int  __builtin_conv_fix(float  __a);
float  __builtin_fclipf(float  __a, float  __b);
int  __builtin_LRxLR(int  __a, int  __b);
int  __builtin_fpack(float  __a);
float  __builtin_funpack(int  __a);
unsigned int  __builtin_sysreg_read(int  __a);
void  __builtin_sysreg_write(int  __a, unsigned int  __b);
void  __builtin_sysreg_write_nop(int  __a, unsigned int  __b);
int  __builtin_sysreg_bit_tst(int  __a, unsigned int  __b);
int  __builtin_sysreg_bit_tst_all(int  __a, unsigned int  __b);
int  __builtin_sysreg_bit_xor(int  __a, unsigned int  __b);
void  __builtin_sysreg_bit_set(int  __a, unsigned int  __b);
void  __builtin_sysreg_bit_clr(int  __a, unsigned int  __b);
void  __builtin_sysreg_bit_tgl(int  __a, unsigned int  __b);
void  __builtin_sysreg_bit_set_nop(int  __a, unsigned int  __b);
void  __builtin_sysreg_bit_clr_nop(int  __a, unsigned int  __b);
void  __builtin_sysreg_bit_tgl_nop(int  __a, unsigned int  __b);
long  __builtin_emuclk(void);
void  __builtin_idle(void);
int  __builtin_conv_RtoLR(int  __a);
int  __builtin_conv_LRtoR(int  __a);
float  __builtin_conv_RtoF(int  __a);
int  __builtin_conv_FtoR(float  __a);
int  __builtin_RxR(int  __a, int  __b);
int  __builtin_RxItoI(int  __a, int  __b);
int  __builtin_RxItoR(int  __a, int  __b);
#else
#error "Multiple include"
#endif  /* ifndef GENERIC_FI_H */




