#ifndef __ARM11_IS #ifdef __ghs__ #pragma ghs startnomisra #pragma ghs nowarning 1544 #endif #define __ARM11_IS #ifdef __cplusplus extern "C" { #endif #ifndef __EDG__ typedef int __ghs_c_int__; /* const int argument only */ #endif #if !defined(__ARMPURESAFE) #if defined(__ATTRIBUTES) #define __ARMPURESAFE __attribute__((const,pure)) #else #define __ARMPURESAFE #endif #endif #ifdef __ARM_DSP /* PKHBT, PKHTB : combine the top and bottom halfwords of arguments */ int __PKHBT(int Rn, int Rm, __ghs_c_int__ lslshift) __ARMPURESAFE; int __PKHTB(int Rn, int Rm, __ghs_c_int__ asrshift) __ARMPURESAFE; /* SEL : Select bytes based on GE condition flags */ int __SEL (int Rn, int Rm); int __SEL8 (int Rn, int Rm); /* Deprecated */ int __SEL16(int Rn, int Rm); /* Deprecated */ /* {Q,S,U,SH,UH,UQ}{ADD16, ADD8, ADDSUBX, SUB16, SUB8, SUBADDX} : Parallel add instructions. Add or subtract 4 8 bit or 2 16 bit values.*/ /* Parallel signed saturated add */ signed int __QADD16 (signed int Rn, signed int Rm); signed int __QADD8 (signed int Rn, signed int Rm); signed int __QADDSUBX(signed int Rn, signed int Rm); signed int __QSUB16 (signed int Rn, signed int Rm); signed int __QSUB8 (signed int Rn, signed int Rm); signed int __QSUBADDX(signed int Rn, signed int Rm); /* Parallel signed add */ signed int __SADD16 (signed int Rn, signed int Rm); signed int __SADD8 (signed int Rn, signed int Rm); signed int __SADDSUBX(signed int Rn, signed int Rm); signed int __SSUB16 (signed int Rn, signed int Rm); signed int __SSUB8 (signed int Rn, signed int Rm); signed int __SSUBADDX(signed int Rn, signed int Rm); /* Parallel signed add and halve */ signed int __SHADD16 (signed int Rn, signed int Rm) __ARMPURESAFE; signed int __SHADD8 (signed int Rn, signed int Rm) __ARMPURESAFE; signed int __SHADDSUBX(signed int Rn, signed int Rm) __ARMPURESAFE; signed int __SHSUB16 (signed int Rn, signed int Rm) __ARMPURESAFE; signed int __SHSUB8 (signed int Rn, signed int Rm) __ARMPURESAFE; signed int __SHSUBADDX(signed int Rn, signed int Rm) __ARMPURESAFE; /* Parallel unsigned add */ unsigned int __UADD16 (unsigned int Rn, unsigned int Rm); unsigned int __UADD8 (unsigned int Rn, unsigned int Rm); unsigned int __UADDSUBX(unsigned int Rn, unsigned int Rm); unsigned int __USUB16 (unsigned int Rn, unsigned int Rm); unsigned int __USUB8 (unsigned int Rn, unsigned int Rm); unsigned int __USUBADDX(unsigned int Rn, unsigned int Rm); /* Parallel unsigned add and halve */ unsigned int __UHADD16 (unsigned int Rn, unsigned int Rm) __ARMPURESAFE; unsigned int __UHADD8 (unsigned int Rn, unsigned int Rm) __ARMPURESAFE; unsigned int __UHADDSUBX(unsigned int Rn, unsigned int Rm) __ARMPURESAFE; unsigned int __UHSUB16 (unsigned int Rn, unsigned int Rm) __ARMPURESAFE; unsigned int __UHSUB8 (unsigned int Rn, unsigned int Rm) __ARMPURESAFE; unsigned int __UHSUBADDX(unsigned int Rn, unsigned int Rm) __ARMPURESAFE; /* Parallel unsigned saturated add */ unsigned int __UQADD16 (unsigned int Rn, unsigned int Rm); unsigned int __UQADD8 (unsigned int Rn, unsigned int Rm); unsigned int __UQADDSUBX(unsigned int Rn, unsigned int Rm); unsigned int __UQSUB16 (unsigned int Rn, unsigned int Rm); unsigned int __UQSUB8 (unsigned int Rn, unsigned int Rm); unsigned int __UQSUBADDX(unsigned int Rn, unsigned int Rm); /* {S,U}{ADD16TO32, ADD8TO16, ADD8TO32} : Extract and add */ signed int __SADD16TO32(signed int Rn, signed int Rm, __ghs_c_int__ rorshift); signed int __SADD8TO16 (signed int Rn, signed int Rm, __ghs_c_int__ rorshift); signed int __SADD8TO32 (signed int Rn, signed int Rm, __ghs_c_int__ rorshift); unsigned int __UADD16TO32(unsigned int Rn, unsigned int Rm, __ghs_c_int__ rorshift); unsigned int __UADD8TO16 (unsigned int Rn, unsigned int Rm, __ghs_c_int__ rorshift); unsigned int __UADD8TO32 (unsigned int Rn, unsigned int Rm, __ghs_c_int__ rorshift); /* SMLAD{X}, SMLSD{X} : Parallel 16x16->32 multiply and 32 bit accumulate */ signed int __SMLAD (signed int Rm, signed int Rs, signed int Rn) __ARMPURESAFE; signed int __SMLADX(signed int Rm, signed int Rs, signed int Rn) __ARMPURESAFE; signed int __SMLSD (signed int Rm, signed int Rs, signed int Rn) __ARMPURESAFE; signed int __SMLSDX(signed int Rm, signed int Rs, signed int Rn) __ARMPURESAFE; #if defined(__LLONG_BIT) /* SMLALD{X}, SMLSLD{X} : Parallel 16x16->32 multiply and 64 bit accumulate */ signed long long __SMLALD (signed long long Rd, signed int Rs, signed int Rn) __ARMPURESAFE; signed long long __SMLALDX(signed long long Rd, signed int Rs, signed int Rn) __ARMPURESAFE; signed long long __SMLSLD (signed long long Rd, signed int Rs, signed int Rn) __ARMPURESAFE; signed long long __SMLSLDX(signed long long Rd, signed int Rs, signed int Rn) __ARMPURESAFE; #endif /* SMMLA{R}, SMMLS{R} : Add/sub high of 32x32->64 multiply from accumulate */ signed int __SMMLA (signed int Rm, signed int Rs, signed int Rn) __ARMPURESAFE; signed int __SMMLAR(signed int Rm, signed int Rs, signed int Rn) __ARMPURESAFE; signed int __SMMLS (signed int Rm, signed int Rs, signed int Rn) __ARMPURESAFE; signed int __SMMLSR(signed int Rm, signed int Rs, signed int Rn) __ARMPURESAFE; /* SMMUL{R} : High word of signed 32x32->64 multiply */ signed int __SMMUL (signed int Rm, signed int Rs) __ARMPURESAFE; signed int __SMMULR(signed int Rm, signed int Rs) __ARMPURESAFE; /* SMUAD{X}, SMUSD{X} : Parallel 16x16->32 multiplies added or subtracted */ signed int __SMUAD (signed int Rm, signed int Rs) __ARMPURESAFE; signed int __SMUADX(signed int Rm, signed int Rs) __ARMPURESAFE; signed int __SMUSD (signed int Rm, signed int Rs) __ARMPURESAFE; signed int __SMUSDX(signed int Rm, signed int Rs) __ARMPURESAFE; #if defined(__LLONG_BIT) /* UMAAL: Unsigned Multiply Accumulate Accumulate Long */ unsigned long long __UMAAL(unsigned int RdLo, unsigned int RdHi, unsigned int Rm, unsigned int Rs) __ARMPURESAFE; #endif /* USAD8: The sum of the absolute values of four 8 bit subtractions */ unsigned int __USAD8(unsigned int Rm, unsigned int Rs) __ARMPURESAFE; /* USADA8: The sum of the absolute values of four 8 bit subtractions with accumulate */ unsigned int __USADA8(unsigned int Rm, unsigned int Rs, unsigned int Rn) __ARMPURESAFE; #endif /* REV{sh,16}: reverse bytes/halfwords */ int __REV(int Rm) __ARMPURESAFE; int __REV16(int Rm) __ARMPURESAFE; signed int __REVSH(int Rm) __ARMPURESAFE; #if !defined(__CORE_ARMV6M__) || defined(__THUMB2_AWARE) || defined(__CORE_CORTEXM23__) /* LDREX, STREX: Synchronization primitives */ int __LDREX(const int *Rn); int __STREX(int Rm, int *Rn); /* {LDR,STR}{B,H,D}, CLREX: v6k Synchronization primitives */ unsigned char __LDREXB(const unsigned char *Rn); unsigned short __LDREXH(const unsigned short *Rn); int __STREXB(unsigned char Rm, unsigned char *Rn); int __STREXH(unsigned short Rm, unsigned short *Rn); #if defined(__LLONG_BIT) long long __LDREXD(const long long *Rn); int __STREXD(long long Rm, long long *Rn); #endif void __CLREX(void); /* {S,U}{UNPK16TO32, UNPK8TO16, UNPK8TO32} : Extract and sign/zero extend */ signed int __SUNPK16TO32(signed int Rm, __ghs_c_int__ rorshift) __ARMPURESAFE; signed int __SUNPK8TO32 (signed int Rm, __ghs_c_int__ rorshift) __ARMPURESAFE; unsigned int __UUNPK16TO32(unsigned int Rm, __ghs_c_int__ rorshift) __ARMPURESAFE; unsigned int __UUNPK8TO32 (unsigned int Rm, __ghs_c_int__ rorshift) __ARMPURESAFE; #ifdef __ARM_DSP signed int __SUNPK8TO16 (signed int Rm, __ghs_c_int__ rorshift) __ARMPURESAFE; unsigned int __UUNPK8TO16 (unsigned int Rm, __ghs_c_int__ rorshift) __ARMPURESAFE; #endif /* SSAT, SSAT16, USAT, USAT16 : saturate at arbitrary bit positions. */ signed int __SSAT (__ghs_c_int__ saturate, signed int Rm, __ghs_c_int__ lslshift); signed int __SSATR (__ghs_c_int__ saturate, signed int Rm, __ghs_c_int__ asrshift); unsigned int __USAT (__ghs_c_int__ saturate, signed int Rm, __ghs_c_int__ lslshift); unsigned int __USATR (__ghs_c_int__ saturate, signed int Rm, __ghs_c_int__ asrshift); #ifdef __ARM_DSP unsigned int __USAT16(__ghs_c_int__ saturate, signed int Rm); signed int __SSAT16(__ghs_c_int__ saturate, signed int Rm); #endif /* SETEND: Set endiannes dynamically */ void __SETEND_BE(void); void __SETEND_LE(void); /* RBIT: v6T2 Reverses bit order in 32 bit register */ int __RBIT(int Rm) __ARMPURESAFE; #endif /* V6M_ONLY */ /* v6k hint instructions */ void __SEV(void); void __WFE(void); void __WFI(void); void __YIELD(void); void __DBG(__ghs_c_int__ option); void __CSDB(void); /* CPS: v6 Change Processor State. Modify I, F, A bits and execution mode. * Use mode __CPS_DEFAULT (0) to change flags without altering mode. * Use iflags 0 and non-zero mode to change mode without altering flags. * Or together iflags bits to enable or disable multiple flags. */ void __CPS(__ghs_c_int__ enable, __ghs_c_int__ iflags, __ghs_c_int__ mode); enum { __CPS_DISABLE = 0, /* Disable iflags bits */ __CPS_ENABLE = 1 /* Enable iflags bits */ }; enum { __CPS_F = (1<<0), /* iflags F bit */ __CPS_I = (1<<1), /* iflags I bit */ __CPS_A = (1<<2) /* iflags A bit */ }; enum { __CPS_DEFAULT = 0, /* Do not modify execution mode, only iflags */ __CPS_USER = 0x10, __CPS_FIQ = 0x11, __CPS_IRQ = 0x12, __CPS_SVC = 0x13, __CPS_ABORT = 0x17, __CPS_UNDEFINED = 0x1b, __CPS_SYSTEM = 0x1f }; #ifdef __cplusplus } #endif #ifdef __ghs__ #pragma ghs endnowarning #pragma ghs endnomisra #endif #endif