#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.
 */

/* support for GCC builtin fucntions */
int __builtin_constant_p(int );
int __builtin_expect(int , int );
int __builtin_return_address(int level);
int __builtin_frame_address(int level);

int __abs16_sat(int src);
void __add(int *m, int b); 
long __addcu(long src1, unsigned int src2);
void __addl(long *m, long b);
void __and(int *m, int b);
void __dec(int *m);
unsigned int __disable_interrupts( );
unsigned int __enable_interrupts( );
void __inc(int *m);
long __IQ(long double A, int N);
long __IQmpy(long A, long B, int N);
long  __IQsat(long A, long max, long min);
long  __IQxmpy(long A, long B, int N);
int __mov_byte(int *src, unsigned int n);
long __mpy(int src1, int src2);
long __mpyb(int src1, unsigned int src2);
long __mpy_mov_t(int src1, int src2, int *dst2);
unsigned long __mpyu(unsigned int src2, unsigned int srt2);
long __mpyxu(int src1, unsigned int src2);
long  __norm32(long src, int *shift);
long long  __norm64(long long src, int *shift);
void __or(int *m, int b);
long __qmpy32(long src32a, long src32b, int q);
long __qmpy32by16(long src32, int src16, int q);
void __restore_interrupts(unsigned int val);
long __rol(long src);
long __ror(long src);
void *__rpt_mov_imm(void *dst, int src, int count);
void *__rpt_mov_imm_far(void *dst, int src, int count);
int __rpt_norm_inc(long src, int dst, int count);
int __rpt_norm_dec(long src, int dst, int count);
long __rpt_rol(long src, int count);
long __rpt_ror(long src, int count);
long __rpt_subcu(long dst, int src, int count);
long __sat(long src);
long __sat32(long src, long limit);
long __sathigh16(long src, int limit);
long __satlow16(long src);
long __sbbu(long src1, unsigned int src2);
void __sub(int *m, int b);
long __subcu(long src1, int src2);
void __subl(long *m, long b);
void __subr(int *m, int b);
void __subrl(long *m, long b);
int __tbit(int src, int bit);
void __xor(int *m, int b);
double _einvf32(double x);
double _eisqrtf32(double x);


#else
#error "Multiple include"
#endif  /* ifndef GENERIC_FI_H */




