#ifndef PRL_DIAB_FI_H
#define PRL_DIAB_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.
 */
#pragma PRQA_NO_RETURN __assert

/* 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. */
void *__alloca(int);
void *alloca(int);
int __builtin_expect(long exp, long c);

#ifdef __ppc
void __builtin_prefetch(void *, ...);
int __ff0(unsigned int);
int __ff0ll(unsigned long long);
int __ff1(unsigned int);
int __ff1ll(unsigned long long);
int __fpscr();
int __wait(void);
#endif

#ifdef __tc
int __ff0(unsigned int);
int __ff0ll(unsigned long long);
int __ff1(unsigned int);
int __ff1ll(unsigned long long);
int abs(int);
long labs(long);
#endif

#ifdef __arm
int __ffi(int var);
long long __mar(long long);
int __mia(int a, int b);
int __miabb(int a, int b);
int __miabt(int a, int b);
int __miaph(int a, int b);
int __miatb(int a, int b);
int __miatt(int a,int b);
long long __mra(void);
int __qadd(int a, int b);
int __qdadd(int a, int b);
int __qdsub(int a, int b);
int __qsub(int a, int b);
int __smlabb(int a, int b, int c);
int __smlabt(int a, int b, int c);
long long __smlalbb(long long a, int b, int c);
long long __smlalbt(long long a, int b, int c);
long long __smlaltb(long long a, int b, int c);
long long __smlaltt(long long a, int b, int c);
int __smlatb(int a, int b, int c);
int __smlatt(int a, int b, int c);
int __smlawb(int a, int b, int c);
int __smlawt(int a, int b, int c);
int __smulbb(int a, int b);
int __smulbt(int a, int b);
int __smultb(int a, int b);
int __smultt(int a, int b);
int __smulwb(int a, int b);
int __smulwt(int a, int b);
#endif

#ifdef __SPE__
typedef struct { unsigned short _f[4]; } __ev64_u16__;
typedef struct { short _f[4]; } __ev64_s16__;
typedef struct { unsigned int _f[2]; } __ev64_u32__;
typedef struct { int _f[2]; } __ev64_s32__;
typedef struct { unsigned long long _f[1]; } __ev64_u64__;
typedef struct { long long _f[1]; } __ev64_s64__;
typedef struct { float _f[2]; } __ev64_fs__;
typedef union {
  __ev64_u16__ _u16;
  __ev64_s16__ _s16;
  __ev64_u32__ _u32;
  __ev64_s32__ _s32;
  __ev64_u64__ _u64;
  __ev64_s64__ _s64;
  __ev64_fs__ _fs;
} __ev64_opaque__;
#endif

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