EWARMのCMSISのバグ

環境はwindows8 64bit + EWARM v6.21
http://jr1wfhbbs.at.webry.info/201109/article_1.html
intrinsics.hの定義がcore_cm3.hの定義と衝突しているっぽかったので
intrinsics.hを修正した。
修正後のintrinsics.h

/**************************************************
 *
 * This file declares the ARM intrinsic inline functions.
 *
 * Copyright 1999-2006 IAR Systems. All rights reserved.
 *
 * $Revision: 42979 $
 *
 **************************************************/

#ifndef __INTRINSICS_INCLUDED
#define __INTRINSICS_INCLUDED

#include <ycheck.h>

#ifndef _SYSTEM_BUILD
  #pragma system_include
#endif

/*
 * Check that the correct C compiler is used.
 */

#if ((__TID__ >> 8) & 0x007F) != 79
#error "File intrinsics.h can only be used together with iccarm."
#endif

#ifdef __cplusplus
extern "C" {
#endif

#pragma language=save
#pragma language=extended

__intrinsic void    __no_operation(void);

__intrinsic void    __disable_interrupt(void);
__intrinsic void    __enable_interrupt(void);

typedef unsigned long __istate_t;

__intrinsic __istate_t __get_interrupt_state(void);
__intrinsic void __set_interrupt_state(__istate_t);

#ifdef __ARM_PROFILE_M__

/* System control access for Cortex-M cores */
__intrinsic unsigned long __get_PSR( void );
__intrinsic unsigned long __get_IPSR( void );
__intrinsic uint32_t __get_MSP( void );
__intrinsic void          __set_MSP( uint32_t);
__intrinsic uint32_t __get_PSP( void );
__intrinsic void          __set_PSP( uint32_t );
__intrinsic unsigned long __get_PRIMASK( void );
__intrinsic void          __set_PRIMASK( unsigned long );
__intrinsic unsigned long __get_CONTROL( void );
__intrinsic void          __set_CONTROL( unsigned long );

#ifdef __ARM7__

/* These are only available for v7M */
__intrinsic unsigned long __get_FAULTMASK( void );
__intrinsic void          __set_FAULTMASK(unsigned long);
__intrinsic unsigned long __get_BASEPRI( void );
__intrinsic void          __set_BASEPRI( unsigned long );

#endif /* __ARM7__ */
#else /* __ARM_PROFILE_M__ */

/* "Old" style intrerrupt control routines */
__intrinsic void __disable_irq(void);
__intrinsic void __enable_irq(void);
#endif /* __ARM_PROFILE_M__ */

__intrinsic void __disable_fiq(void);
__intrinsic void __enable_fiq(void);


/* ARM-mode intrinsics */

__intrinsic unsigned long __SWP( unsigned long, unsigned long * );
__intrinsic unsigned char __SWPB( unsigned char, unsigned char * );

typedef unsigned long __ul;

#define __cpid  unsigned __constrange(0,15)
#define __cpreg unsigned __constrange(0,15)
#define __cpopc unsigned __constrange(0,8)

/*  Co-processor access */
__intrinsic void          __MCR( __cpid coproc, __cpopc opcode_1, __ul src,
                                 __cpreg CRn, __cpreg CRm, __cpopc opcode_2 );
__intrinsic unsigned long __MRC( __cpid coproc, __cpopc opcode_1, 
                                 __cpreg CRn, __cpreg CRm, __cpopc opcode_2 );
__intrinsic void          __MCR2( __cpid coproc, __cpopc opcode_1, __ul src,
                                  __cpreg CRn, __cpreg CRm, __cpopc opcode_2 );
__intrinsic unsigned long __MRC2( __cpid coproc, __cpopc opcode_1, 
                                  __cpreg CRn, __cpreg CRm, __cpopc opcode_2 );

/* Load coprocessor register. */
__intrinsic void __LDC( __cpid coproc, __cpreg CRn, __ul const *src);
__intrinsic void __LDCL( __cpid coproc, __cpreg CRn, __ul const *src);
__intrinsic void __LDC2( __cpid coproc, __cpreg CRn, __ul const *src);
__intrinsic void __LDC2L( __cpid coproc, __cpreg CRn, __ul const *src);

/* Store coprocessor register. */
__intrinsic void __STC( __cpid coproc, __cpreg CRn, __ul *dst);
__intrinsic void __STCL( __cpid coproc, __cpreg CRn, __ul *dst);
__intrinsic void __STC2( __cpid coproc, __cpreg CRn, __ul *dst);
__intrinsic void __STC2L( __cpid coproc, __cpreg CRn, __ul *dst);

/* Load coprocessor register (noindexed version with coprocessor option). */
__intrinsic void __LDC_noidx( __cpid coproc, __cpreg CRn, __ul const *src,
                              unsigned __constrange(0,255) option);

__intrinsic void __LDCL_noidx( __cpid coproc, __cpreg CRn, __ul const *src,
                               unsigned __constrange(0,255) option);

__intrinsic void __LDC2_noidx( __cpid coproc, __cpreg CRn, __ul const *src,
                               unsigned __constrange(0,255) option);

__intrinsic void __LDC2L_noidx( __cpid coproc, __cpreg CRn, __ul const *src,
                                unsigned __constrange(0,255) option);

/* Store coprocessor register (version with coprocessor option). */
__intrinsic void __STC_noidx( __cpid coproc, __cpreg CRn, __ul *dst,
                              unsigned __constrange(0,255) option);

__intrinsic void __STCL_noidx( __cpid coproc, __cpreg CRn, __ul *dst,
                               unsigned __constrange(0,255) option);

__intrinsic void __STC2_noidx( __cpid coproc, __cpreg CRn, __ul *dst,
                               unsigned __constrange(0,255) option);

__intrinsic void __STC2L_noidx( __cpid coproc, __cpreg CRn, __ul *dst,
                                unsigned __constrange(0,255) option);

#ifdef __ARM_PROFILE_M__
/* Status register access, v7M: */
__intrinsic unsigned long __get_APSR( void );
__intrinsic void          __set_APSR( unsigned long );
#else /* __ARM_PROFILE_M__ */
/* Status register access */
__intrinsic unsigned long __get_CPSR( void );
__intrinsic void          __set_CPSR( unsigned long );
#endif /* __ARM_PROFILE_M__ */

/* Architecture v5T, CLZ is also available in Thumb mode for Thumb2 cores */
__intrinsic unsigned char __CLZ( unsigned long );

/* Architecture v5TE */
#if !defined(__ARM_PROFILE_M__) || defined(__ARM_MEDIA__)
__intrinsic signed long __QADD( signed long, signed long );
__intrinsic signed long __QDADD( signed long, signed long );
__intrinsic signed long __QSUB( signed long, signed long );
__intrinsic signed long __QDSUB( signed long, signed long );

__intrinsic signed long __QDOUBLE( signed long );

__intrinsic int         __QFlag( void );
__intrinsic void __reset_Q_flag( void );
#endif

__intrinsic int         __QCFlag( void );
__intrinsic void __reset_QC_flag( void );

__intrinsic signed long __SMUL( signed short, signed short );

/* Architecture v6, REV and REVSH are also available in thumb mode */
__intrinsic unsigned long __REV( unsigned long );
__intrinsic signed long __REVSH( short );

__intrinsic uint32_t __REV16( uint16_t);
__intrinsic uint32_t __RBIT( uint32_t);

__intrinsic unsigned char  __LDREXB( unsigned char * );
__intrinsic unsigned short __LDREXH( unsigned short * );
__intrinsic unsigned long  __LDREX ( unsigned long * );
__intrinsic unsigned long long __LDREXD( unsigned long long * );

__intrinsic uint32_t __STREXB( unsigned char, unsigned char * );
__intrinsic uint32_t __STREXH( unsigned short, unsigned short * );
__intrinsic unsigned long  __STREX ( unsigned long, unsigned long * );
__intrinsic unsigned long  __STREXD( unsigned long long, unsigned long long * );

__intrinsic void __CLREX( void );

__intrinsic void __SEV( void );
__intrinsic void __WFE( void );
__intrinsic void __WFI( void );
__intrinsic void __YIELD( void );

__intrinsic void __PLI( void const * );
__intrinsic void __PLD( void const * );
__intrinsic void __PLDW( void const * );

__intrinsic unsigned long __SSAT     (unsigned long val, 
                                      unsigned int __constrange( 1, 32 ) sat );
__intrinsic unsigned long __USAT     (unsigned long val, 
                                      unsigned int __constrange( 0, 31 ) sat );


#ifdef __ARM_MEDIA__

/* Architecture v6 Media instructions.... */
__intrinsic unsigned long __SEL( unsigned long op1, unsigned long op2 );

__intrinsic unsigned long __SADD8    (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __SADD16   (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __SSUB8    (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __SSUB16   (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __SADDSUBX (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __SSUBADDX (unsigned long pair1, unsigned long pair2);

__intrinsic unsigned long __SHADD8   (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __SHADD16  (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __SHSUB8   (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __SHSUB16  (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __SHADDSUBX(unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __SHSUBADDX(unsigned long pair1, unsigned long pair2);

__intrinsic unsigned long __QADD8    (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __QADD16   (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __QSUB8    (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __QSUB16   (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __QADDSUBX (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __QSUBADDX (unsigned long pair1, unsigned long pair2);

__intrinsic unsigned long __UADD8    (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __UADD16   (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __USUB8    (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __USUB16   (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __UADDSUBX (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __USUBADDX (unsigned long pair1, unsigned long pair2);

__intrinsic unsigned long __UHADD8   (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __UHADD16  (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __UHSUB8   (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __UHSUB16  (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __UHADDSUBX(unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __UHSUBADDX(unsigned long pair1, unsigned long pair2);

__intrinsic unsigned long __UQADD8   (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __UQADD16  (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __UQSUB8   (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __UQSUB16  (unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __UQADDSUBX(unsigned long pair1, unsigned long pair2);
__intrinsic unsigned long __UQSUBADDX(unsigned long pair1, unsigned long pair2);

__intrinsic unsigned long __USAD8(unsigned long x, unsigned long y );
__intrinsic unsigned long __USADA8(unsigned long x, unsigned long y,
                                   unsigned long acc );

__intrinsic unsigned long __SSAT16   (unsigned long pair, 
                                      unsigned int __constrange( 1, 16 ) sat );
__intrinsic unsigned long __USAT16   (unsigned long pair, 
                                      unsigned int __constrange( 0, 15 ) sat );

__intrinsic unsigned long __SMUAD(unsigned long x, unsigned long y);
__intrinsic unsigned long __SMUSD(unsigned long x, unsigned long y);
__intrinsic unsigned long __SMUADX(unsigned long x, unsigned long y);
__intrinsic unsigned long __SMUSDX(unsigned long x, unsigned long y);

__intrinsic unsigned long __SMLAD(unsigned long x, unsigned long y, unsigned long sum);
__intrinsic unsigned long __SMLSD(unsigned long x, unsigned long y, unsigned long sum);
__intrinsic unsigned long __SMLADX(unsigned long x, unsigned long y, unsigned long sum);
__intrinsic unsigned long __SMLSDX(unsigned long x, unsigned long y, unsigned long sum);

__intrinsic unsigned long long __SMLALD ( unsigned long pair1,
                                          unsigned long pair2,
                                          unsigned long long acc );   

__intrinsic unsigned long long __SMLALDX( unsigned long pair1,
                                          unsigned long pair2,
                                          unsigned long long acc );   

__intrinsic unsigned long long __SMLSLD ( unsigned long pair1,
                                          unsigned long pair2,
                                          unsigned long long acc );   

__intrinsic unsigned long long __SMLSLDX( unsigned long pair1,
                                          unsigned long pair2,
                                          unsigned long long acc );   
                                           
__intrinsic unsigned long __PKHBT(unsigned long x,
                                  unsigned long y,
                                  unsigned __constrange(0,31) count);
__intrinsic unsigned long __PKHTB(unsigned long x,
                                  unsigned long y,
                                  unsigned __constrange(0,32) count);

__intrinsic unsigned long __SMLABB(unsigned long x,
                                   unsigned long y,
                                   unsigned long acc);
__intrinsic unsigned long __SMLABT(unsigned long x,
                                   unsigned long y,
                                   unsigned long acc);
__intrinsic unsigned long __SMLATB(unsigned long x,
                                   unsigned long y,
                                   unsigned long acc);
__intrinsic unsigned long __SMLATT(unsigned long x,
                                   unsigned long y,
                                   unsigned long acc);
__intrinsic unsigned long __SMLAWB(unsigned long x,
                                   unsigned long y,
                                   unsigned long acc);
__intrinsic unsigned long __SMLAWT(unsigned long x,
                                   unsigned long y,
                                   unsigned long acc);

__intrinsic unsigned long __SMMLA (unsigned long x,
                                   unsigned long y,
                                   unsigned long acc);
__intrinsic unsigned long __SMMLAR(unsigned long x,
                                   unsigned long y,
                                   unsigned long acc);
__intrinsic unsigned long __SMMLS (unsigned long x,
                                   unsigned long y,
                                   unsigned long acc);
__intrinsic unsigned long __SMMLSR(unsigned long x,
                                   unsigned long y,
                                   unsigned long acc);
__intrinsic unsigned long __SMMUL (unsigned long x, unsigned long y);
__intrinsic unsigned long __SMMULR(unsigned long x, unsigned long y);

__intrinsic unsigned long __SMULBB(unsigned long x, unsigned long y);
__intrinsic unsigned long __SMULBT(unsigned long x, unsigned long y);
__intrinsic unsigned long __SMULTB(unsigned long x, unsigned long y);
__intrinsic unsigned long __SMULTT(unsigned long x, unsigned long y);
__intrinsic unsigned long __SMULWB(unsigned long x, unsigned long y);
__intrinsic unsigned long __SMULWT(unsigned long x, unsigned long y);

__intrinsic unsigned long __SXTAB (unsigned long x, unsigned long y);
__intrinsic unsigned long __SXTAH (unsigned long x, unsigned long y);
__intrinsic unsigned long __UXTAB (unsigned long x, unsigned long y);
__intrinsic unsigned long __UXTAH (unsigned long x, unsigned long y);

__intrinsic unsigned long long __UMAAL(unsigned long x,
                                       unsigned long y,
                                       unsigned long a,
                                       unsigned long b);

__intrinsic unsigned long long __SMLALBB(unsigned long x,
                                         unsigned long y,
                                         unsigned long long acc);
__intrinsic unsigned long long __SMLALBT(unsigned long x,
                                         unsigned long y,
                                         unsigned long long acc);
__intrinsic unsigned long long __SMLALTB(unsigned long x,
                                         unsigned long y,
                                         unsigned long long acc);
__intrinsic unsigned long long __SMLALTT(unsigned long x,
                                         unsigned long y,
                                         unsigned long long acc);

__intrinsic unsigned long __UXTB16(unsigned long x);
__intrinsic unsigned long __UXTAB16(unsigned long acc, unsigned long x);

__intrinsic unsigned long __SXTB16(unsigned long x);
__intrinsic unsigned long __SXTAB16(unsigned long acc, unsigned long x);

/*
 * The following intrinsic function aliases are supplied due to instruction
 * set changes made by ARM. All previous mnemonics of the form *ADDSUBX or
 * *SUBADDX have been changed into *ASX and *SAX, respectively.
 * For increased readability and consistency, the suggested intrinsic
 * functions to use are the new short form versions defined below.
 */

#define __SASX  __SADDSUBX
#define __SSAX  __SSUBADDX
#define __SHASX __SHADDSUBX
#define __SHSAX __SHSUBADDX
#define __QASX  __QADDSUBX
#define __QSAX  __QSUBADDX

#define __UASX  __UADDSUBX
#define __USAX  __USUBADDX
#define __UHASX __UHADDSUBX
#define __UHSAX __UHSUBADDX
#define __UQASX __UQADDSUBX
#define __UQSAX __UQSUBADDX
#endif /* __ARM_MEDIA__ */

/* Architecture v7 instructions.... */
__intrinsic void __DMB(void);
__intrinsic void __DSB(void);
__intrinsic void __ISB(void);

#define __fabs(x)  fabs(x)
#define __fabsf(x) fabsf(x)

#pragma language=restore

#ifdef __cplusplus
}
#endif

#endif  /* __INTRINSICS_INCLUDED */