Subversion Repositories dashGPS

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /**************************************************************************//**
  2.  * @file     cmsis_compiler.h
  3.  * @brief    CMSIS compiler generic header file
  4.  * @version  V5.0.4
  5.  * @date     10. January 2018
  6.  ******************************************************************************/
  7. /*
  8.  * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
  9.  *
  10.  * SPDX-License-Identifier: Apache-2.0
  11.  *
  12.  * Licensed under the Apache License, Version 2.0 (the License); you may
  13.  * not use this file except in compliance with the License.
  14.  * You may obtain a copy of the License at
  15.  *
  16.  * www.apache.org/licenses/LICENSE-2.0
  17.  *
  18.  * Unless required by applicable law or agreed to in writing, software
  19.  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
  20.  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  21.  * See the License for the specific language governing permissions and
  22.  * limitations under the License.
  23.  */
  24.  
  25. #ifndef __CMSIS_COMPILER_H
  26. #define __CMSIS_COMPILER_H
  27.  
  28. #include <stdint.h>
  29.  
  30. /*
  31.  * Arm Compiler 4/5
  32.  */
  33. #if   defined ( __CC_ARM )
  34.   #include "cmsis_armcc.h"
  35.  
  36.  
  37. /*
  38.  * Arm Compiler 6 (armclang)
  39.  */
  40. #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
  41.   #include "cmsis_armclang.h"
  42.  
  43.  
  44. /*
  45.  * GNU Compiler
  46.  */
  47. #elif defined ( __GNUC__ )
  48.   #include "cmsis_gcc.h"
  49.  
  50.  
  51. /*
  52.  * IAR Compiler
  53.  */
  54. #elif defined ( __ICCARM__ )
  55.   #include <cmsis_iccarm.h>
  56.  
  57.  
  58. /*
  59.  * TI Arm Compiler
  60.  */
  61. #elif defined ( __TI_ARM__ )
  62.   #include <cmsis_ccs.h>
  63.  
  64.   #ifndef   __ASM
  65.     #define __ASM                                  __asm
  66.   #endif
  67.   #ifndef   __INLINE
  68.     #define __INLINE                               inline
  69.   #endif
  70.   #ifndef   __STATIC_INLINE
  71.     #define __STATIC_INLINE                        static inline
  72.   #endif
  73.   #ifndef   __STATIC_FORCEINLINE
  74.     #define __STATIC_FORCEINLINE                   __STATIC_INLINE
  75.   #endif
  76.   #ifndef   __NO_RETURN
  77.     #define __NO_RETURN                            __attribute__((noreturn))
  78.   #endif
  79.   #ifndef   __USED
  80.     #define __USED                                 __attribute__((used))
  81.   #endif
  82.   #ifndef   __WEAK
  83.     #define __WEAK                                 __attribute__((weak))
  84.   #endif
  85.   #ifndef   __PACKED
  86.     #define __PACKED                               __attribute__((packed))
  87.   #endif
  88.   #ifndef   __PACKED_STRUCT
  89.     #define __PACKED_STRUCT                        struct __attribute__((packed))
  90.   #endif
  91.   #ifndef   __PACKED_UNION
  92.     #define __PACKED_UNION                         union __attribute__((packed))
  93.   #endif
  94.   #ifndef   __UNALIGNED_UINT32        /* deprecated */
  95.     struct __attribute__((packed)) T_UINT32 { uint32_t v; };
  96.     #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)
  97.   #endif
  98.   #ifndef   __UNALIGNED_UINT16_WRITE
  99.     __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
  100.     #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val))
  101.   #endif
  102.   #ifndef   __UNALIGNED_UINT16_READ
  103.     __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
  104.     #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)
  105.   #endif
  106.   #ifndef   __UNALIGNED_UINT32_WRITE
  107.     __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
  108.     #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
  109.   #endif
  110.   #ifndef   __UNALIGNED_UINT32_READ
  111.     __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
  112.     #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)
  113.   #endif
  114.   #ifndef   __ALIGNED
  115.     #define __ALIGNED(x)                           __attribute__((aligned(x)))
  116.   #endif
  117.   #ifndef   __RESTRICT
  118.     #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
  119.     #define __RESTRICT
  120.   #endif
  121.  
  122.  
  123. /*
  124.  * TASKING Compiler
  125.  */
  126. #elif defined ( __TASKING__ )
  127.   /*
  128.    * The CMSIS functions have been implemented as intrinsics in the compiler.
  129.    * Please use "carm -?i" to get an up to date list of all intrinsics,
  130.    * Including the CMSIS ones.
  131.    */
  132.  
  133.   #ifndef   __ASM
  134.     #define __ASM                                  __asm
  135.   #endif
  136.   #ifndef   __INLINE
  137.     #define __INLINE                               inline
  138.   #endif
  139.   #ifndef   __STATIC_INLINE
  140.     #define __STATIC_INLINE                        static inline
  141.   #endif
  142.   #ifndef   __STATIC_FORCEINLINE
  143.     #define __STATIC_FORCEINLINE                   __STATIC_INLINE
  144.   #endif
  145.   #ifndef   __NO_RETURN
  146.     #define __NO_RETURN                            __attribute__((noreturn))
  147.   #endif
  148.   #ifndef   __USED
  149.     #define __USED                                 __attribute__((used))
  150.   #endif
  151.   #ifndef   __WEAK
  152.     #define __WEAK                                 __attribute__((weak))
  153.   #endif
  154.   #ifndef   __PACKED
  155.     #define __PACKED                               __packed__
  156.   #endif
  157.   #ifndef   __PACKED_STRUCT
  158.     #define __PACKED_STRUCT                        struct __packed__
  159.   #endif
  160.   #ifndef   __PACKED_UNION
  161.     #define __PACKED_UNION                         union __packed__
  162.   #endif
  163.   #ifndef   __UNALIGNED_UINT32        /* deprecated */
  164.     struct __packed__ T_UINT32 { uint32_t v; };
  165.     #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)
  166.   #endif
  167.   #ifndef   __UNALIGNED_UINT16_WRITE
  168.     __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
  169.     #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
  170.   #endif
  171.   #ifndef   __UNALIGNED_UINT16_READ
  172.     __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
  173.     #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)
  174.   #endif
  175.   #ifndef   __UNALIGNED_UINT32_WRITE
  176.     __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
  177.     #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
  178.   #endif
  179.   #ifndef   __UNALIGNED_UINT32_READ
  180.     __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
  181.     #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)
  182.   #endif
  183.   #ifndef   __ALIGNED
  184.     #define __ALIGNED(x)              __align(x)
  185.   #endif
  186.   #ifndef   __RESTRICT
  187.     #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
  188.     #define __RESTRICT
  189.   #endif
  190.  
  191.  
  192. /*
  193.  * COSMIC Compiler
  194.  */
  195. #elif defined ( __CSMC__ )
  196.    #include <cmsis_csm.h>
  197.  
  198.  #ifndef   __ASM
  199.     #define __ASM                                  _asm
  200.   #endif
  201.   #ifndef   __INLINE
  202.     #define __INLINE                               inline
  203.   #endif
  204.   #ifndef   __STATIC_INLINE
  205.     #define __STATIC_INLINE                        static inline
  206.   #endif
  207.   #ifndef   __STATIC_FORCEINLINE
  208.     #define __STATIC_FORCEINLINE                   __STATIC_INLINE
  209.   #endif
  210.   #ifndef   __NO_RETURN
  211.     // NO RETURN is automatically detected hence no warning here
  212.     #define __NO_RETURN
  213.   #endif
  214.   #ifndef   __USED
  215.     #warning No compiler specific solution for __USED. __USED is ignored.
  216.     #define __USED
  217.   #endif
  218.   #ifndef   __WEAK
  219.     #define __WEAK                                 __weak
  220.   #endif
  221.   #ifndef   __PACKED
  222.     #define __PACKED                               @packed
  223.   #endif
  224.   #ifndef   __PACKED_STRUCT
  225.     #define __PACKED_STRUCT                        @packed struct
  226.   #endif
  227.   #ifndef   __PACKED_UNION
  228.     #define __PACKED_UNION                         @packed union
  229.   #endif
  230.   #ifndef   __UNALIGNED_UINT32        /* deprecated */
  231.     @packed struct T_UINT32 { uint32_t v; };
  232.     #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)
  233.   #endif
  234.   #ifndef   __UNALIGNED_UINT16_WRITE
  235.     __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
  236.     #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
  237.   #endif
  238.   #ifndef   __UNALIGNED_UINT16_READ
  239.     __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
  240.     #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)
  241.   #endif
  242.   #ifndef   __UNALIGNED_UINT32_WRITE
  243.     __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
  244.     #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
  245.   #endif
  246.   #ifndef   __UNALIGNED_UINT32_READ
  247.     __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
  248.     #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)
  249.   #endif
  250.   #ifndef   __ALIGNED
  251.     #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.
  252.     #define __ALIGNED(x)
  253.   #endif
  254.   #ifndef   __RESTRICT
  255.     #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
  256.     #define __RESTRICT
  257.   #endif
  258.  
  259.  
  260. #else
  261.   #error Unknown compiler.
  262. #endif
  263.  
  264.  
  265. #endif /* __CMSIS_COMPILER_H */
  266.  
  267.