Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-dev by
cmsis/TARGET_CORTEX_A/cmsis_iccarm.h@181:96ed750bd169, 2018-01-17 (annotated)
- Committer:
- Anna Bridge
- Date:
- Wed Jan 17 15:23:54 2018 +0000
- Revision:
- 181:96ed750bd169
mbed-dev libray. Release version 158
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Anna Bridge |
181:96ed750bd169 | 1 | /**************************************************************************//** |
Anna Bridge |
181:96ed750bd169 | 2 | * @file cmsis_iccarm.h |
Anna Bridge |
181:96ed750bd169 | 3 | * @brief CMSIS compiler ICCARM (IAR compiler) header file |
Anna Bridge |
181:96ed750bd169 | 4 | * @version V5.0.4 |
Anna Bridge |
181:96ed750bd169 | 5 | * @date 01. December 2017 |
Anna Bridge |
181:96ed750bd169 | 6 | ******************************************************************************/ |
Anna Bridge |
181:96ed750bd169 | 7 | |
Anna Bridge |
181:96ed750bd169 | 8 | //------------------------------------------------------------------------------ |
Anna Bridge |
181:96ed750bd169 | 9 | // |
Anna Bridge |
181:96ed750bd169 | 10 | // Copyright (c) 2017 IAR Systems |
Anna Bridge |
181:96ed750bd169 | 11 | // |
Anna Bridge |
181:96ed750bd169 | 12 | // Licensed under the Apache License, Version 2.0 (the "License") |
Anna Bridge |
181:96ed750bd169 | 13 | // you may not use this file except in compliance with the License. |
Anna Bridge |
181:96ed750bd169 | 14 | // You may obtain a copy of the License at |
Anna Bridge |
181:96ed750bd169 | 15 | // http://www.apache.org/licenses/LICENSE-2.0 |
Anna Bridge |
181:96ed750bd169 | 16 | // |
Anna Bridge |
181:96ed750bd169 | 17 | // Unless required by applicable law or agreed to in writing, software |
Anna Bridge |
181:96ed750bd169 | 18 | // distributed under the License is distributed on an "AS IS" BASIS, |
Anna Bridge |
181:96ed750bd169 | 19 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
Anna Bridge |
181:96ed750bd169 | 20 | // See the License for the specific language governing permissions and |
Anna Bridge |
181:96ed750bd169 | 21 | // limitations under the License. |
Anna Bridge |
181:96ed750bd169 | 22 | // |
Anna Bridge |
181:96ed750bd169 | 23 | //------------------------------------------------------------------------------ |
Anna Bridge |
181:96ed750bd169 | 24 | |
Anna Bridge |
181:96ed750bd169 | 25 | |
Anna Bridge |
181:96ed750bd169 | 26 | #ifndef __CMSIS_ICCARM_H__ |
Anna Bridge |
181:96ed750bd169 | 27 | #define __CMSIS_ICCARM_H__ |
Anna Bridge |
181:96ed750bd169 | 28 | |
Anna Bridge |
181:96ed750bd169 | 29 | #ifndef __ICCARM__ |
Anna Bridge |
181:96ed750bd169 | 30 | #error This file should only be compiled by ICCARM |
Anna Bridge |
181:96ed750bd169 | 31 | #endif |
Anna Bridge |
181:96ed750bd169 | 32 | |
Anna Bridge |
181:96ed750bd169 | 33 | #pragma system_include |
Anna Bridge |
181:96ed750bd169 | 34 | |
Anna Bridge |
181:96ed750bd169 | 35 | #define __IAR_FT _Pragma("inline=forced") __intrinsic |
Anna Bridge |
181:96ed750bd169 | 36 | |
Anna Bridge |
181:96ed750bd169 | 37 | #if (__VER__ >= 8000000) |
Anna Bridge |
181:96ed750bd169 | 38 | #define __ICCARM_V8 1 |
Anna Bridge |
181:96ed750bd169 | 39 | #else |
Anna Bridge |
181:96ed750bd169 | 40 | #define __ICCARM_V8 0 |
Anna Bridge |
181:96ed750bd169 | 41 | #endif |
Anna Bridge |
181:96ed750bd169 | 42 | |
Anna Bridge |
181:96ed750bd169 | 43 | #pragma language=extended |
Anna Bridge |
181:96ed750bd169 | 44 | |
Anna Bridge |
181:96ed750bd169 | 45 | #ifndef __ALIGNED |
Anna Bridge |
181:96ed750bd169 | 46 | #if __ICCARM_V8 |
Anna Bridge |
181:96ed750bd169 | 47 | #define __ALIGNED(x) __attribute__((aligned(x))) |
Anna Bridge |
181:96ed750bd169 | 48 | #elif (__VER__ >= 7080000) |
Anna Bridge |
181:96ed750bd169 | 49 | /* Needs IAR language extensions */ |
Anna Bridge |
181:96ed750bd169 | 50 | #define __ALIGNED(x) __attribute__((aligned(x))) |
Anna Bridge |
181:96ed750bd169 | 51 | #else |
Anna Bridge |
181:96ed750bd169 | 52 | #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. |
Anna Bridge |
181:96ed750bd169 | 53 | #define __ALIGNED(x) |
Anna Bridge |
181:96ed750bd169 | 54 | #endif |
Anna Bridge |
181:96ed750bd169 | 55 | #endif |
Anna Bridge |
181:96ed750bd169 | 56 | |
Anna Bridge |
181:96ed750bd169 | 57 | |
Anna Bridge |
181:96ed750bd169 | 58 | /* Define compiler macros for CPU architecture, used in CMSIS 5. |
Anna Bridge |
181:96ed750bd169 | 59 | */ |
Anna Bridge |
181:96ed750bd169 | 60 | #if __ARM_ARCH_7A__ |
Anna Bridge |
181:96ed750bd169 | 61 | /* Macro already defined */ |
Anna Bridge |
181:96ed750bd169 | 62 | #else |
Anna Bridge |
181:96ed750bd169 | 63 | #if defined(__ARM7A__) |
Anna Bridge |
181:96ed750bd169 | 64 | #define __ARM_ARCH_7A__ 1 |
Anna Bridge |
181:96ed750bd169 | 65 | #endif |
Anna Bridge |
181:96ed750bd169 | 66 | #endif |
Anna Bridge |
181:96ed750bd169 | 67 | |
Anna Bridge |
181:96ed750bd169 | 68 | #ifndef __ASM |
Anna Bridge |
181:96ed750bd169 | 69 | #define __ASM __asm |
Anna Bridge |
181:96ed750bd169 | 70 | #endif |
Anna Bridge |
181:96ed750bd169 | 71 | |
Anna Bridge |
181:96ed750bd169 | 72 | #ifndef __INLINE |
Anna Bridge |
181:96ed750bd169 | 73 | #define __INLINE inline |
Anna Bridge |
181:96ed750bd169 | 74 | #endif |
Anna Bridge |
181:96ed750bd169 | 75 | |
Anna Bridge |
181:96ed750bd169 | 76 | #ifndef __NO_RETURN |
Anna Bridge |
181:96ed750bd169 | 77 | #if __ICCARM_V8 |
Anna Bridge |
181:96ed750bd169 | 78 | #define __NO_RETURN __attribute__((__noreturn__)) |
Anna Bridge |
181:96ed750bd169 | 79 | #else |
Anna Bridge |
181:96ed750bd169 | 80 | #define __NO_RETURN _Pragma("object_attribute=__noreturn") |
Anna Bridge |
181:96ed750bd169 | 81 | #endif |
Anna Bridge |
181:96ed750bd169 | 82 | #endif |
Anna Bridge |
181:96ed750bd169 | 83 | |
Anna Bridge |
181:96ed750bd169 | 84 | #ifndef __PACKED |
Anna Bridge |
181:96ed750bd169 | 85 | /* Needs IAR language extensions */ |
Anna Bridge |
181:96ed750bd169 | 86 | #if __ICCARM_V8 |
Anna Bridge |
181:96ed750bd169 | 87 | #define __PACKED __attribute__((packed, aligned(1))) |
Anna Bridge |
181:96ed750bd169 | 88 | #else |
Anna Bridge |
181:96ed750bd169 | 89 | #define __PACKED __packed |
Anna Bridge |
181:96ed750bd169 | 90 | #endif |
Anna Bridge |
181:96ed750bd169 | 91 | #endif |
Anna Bridge |
181:96ed750bd169 | 92 | |
Anna Bridge |
181:96ed750bd169 | 93 | #ifndef __PACKED_STRUCT |
Anna Bridge |
181:96ed750bd169 | 94 | /* Needs IAR language extensions */ |
Anna Bridge |
181:96ed750bd169 | 95 | #if __ICCARM_V8 |
Anna Bridge |
181:96ed750bd169 | 96 | #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) |
Anna Bridge |
181:96ed750bd169 | 97 | #else |
Anna Bridge |
181:96ed750bd169 | 98 | #define __PACKED_STRUCT __packed struct |
Anna Bridge |
181:96ed750bd169 | 99 | #endif |
Anna Bridge |
181:96ed750bd169 | 100 | #endif |
Anna Bridge |
181:96ed750bd169 | 101 | |
Anna Bridge |
181:96ed750bd169 | 102 | #ifndef __PACKED_UNION |
Anna Bridge |
181:96ed750bd169 | 103 | /* Needs IAR language extensions */ |
Anna Bridge |
181:96ed750bd169 | 104 | #if __ICCARM_V8 |
Anna Bridge |
181:96ed750bd169 | 105 | #define __PACKED_UNION union __attribute__((packed, aligned(1))) |
Anna Bridge |
181:96ed750bd169 | 106 | #else |
Anna Bridge |
181:96ed750bd169 | 107 | #define __PACKED_UNION __packed union |
Anna Bridge |
181:96ed750bd169 | 108 | #endif |
Anna Bridge |
181:96ed750bd169 | 109 | #endif |
Anna Bridge |
181:96ed750bd169 | 110 | |
Anna Bridge |
181:96ed750bd169 | 111 | #ifndef __RESTRICT |
Anna Bridge |
181:96ed750bd169 | 112 | #define __RESTRICT restrict |
Anna Bridge |
181:96ed750bd169 | 113 | #endif |
Anna Bridge |
181:96ed750bd169 | 114 | |
Anna Bridge |
181:96ed750bd169 | 115 | #ifndef __STATIC_INLINE |
Anna Bridge |
181:96ed750bd169 | 116 | #define __STATIC_INLINE static inline |
Anna Bridge |
181:96ed750bd169 | 117 | #endif |
Anna Bridge |
181:96ed750bd169 | 118 | |
Anna Bridge |
181:96ed750bd169 | 119 | #ifndef __FORCEINLINE |
Anna Bridge |
181:96ed750bd169 | 120 | #define __FORCEINLINE _Pragma("inline=forced") |
Anna Bridge |
181:96ed750bd169 | 121 | #endif |
Anna Bridge |
181:96ed750bd169 | 122 | |
Anna Bridge |
181:96ed750bd169 | 123 | #ifndef __STATIC_FORCEINLINE |
Anna Bridge |
181:96ed750bd169 | 124 | #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE |
Anna Bridge |
181:96ed750bd169 | 125 | #endif |
Anna Bridge |
181:96ed750bd169 | 126 | |
Anna Bridge |
181:96ed750bd169 | 127 | #ifndef CMSIS_DEPRECATED |
Anna Bridge |
181:96ed750bd169 | 128 | #define CMSIS_DEPRECATED __attribute__((deprecated)) |
Anna Bridge |
181:96ed750bd169 | 129 | #endif |
Anna Bridge |
181:96ed750bd169 | 130 | |
Anna Bridge |
181:96ed750bd169 | 131 | #ifndef __UNALIGNED_UINT16_READ |
Anna Bridge |
181:96ed750bd169 | 132 | #pragma language=save |
Anna Bridge |
181:96ed750bd169 | 133 | #pragma language=extended |
Anna Bridge |
181:96ed750bd169 | 134 | __IAR_FT uint16_t __iar_uint16_read(void const *ptr) |
Anna Bridge |
181:96ed750bd169 | 135 | { |
Anna Bridge |
181:96ed750bd169 | 136 | return *(__packed uint16_t*)(ptr); |
Anna Bridge |
181:96ed750bd169 | 137 | } |
Anna Bridge |
181:96ed750bd169 | 138 | #pragma language=restore |
Anna Bridge |
181:96ed750bd169 | 139 | #define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) |
Anna Bridge |
181:96ed750bd169 | 140 | #endif |
Anna Bridge |
181:96ed750bd169 | 141 | |
Anna Bridge |
181:96ed750bd169 | 142 | |
Anna Bridge |
181:96ed750bd169 | 143 | #ifndef __UNALIGNED_UINT16_WRITE |
Anna Bridge |
181:96ed750bd169 | 144 | #pragma language=save |
Anna Bridge |
181:96ed750bd169 | 145 | #pragma language=extended |
Anna Bridge |
181:96ed750bd169 | 146 | __IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) |
Anna Bridge |
181:96ed750bd169 | 147 | { |
Anna Bridge |
181:96ed750bd169 | 148 | *(__packed uint16_t*)(ptr) = val;; |
Anna Bridge |
181:96ed750bd169 | 149 | } |
Anna Bridge |
181:96ed750bd169 | 150 | #pragma language=restore |
Anna Bridge |
181:96ed750bd169 | 151 | #define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) |
Anna Bridge |
181:96ed750bd169 | 152 | #endif |
Anna Bridge |
181:96ed750bd169 | 153 | |
Anna Bridge |
181:96ed750bd169 | 154 | #ifndef __UNALIGNED_UINT32_READ |
Anna Bridge |
181:96ed750bd169 | 155 | #pragma language=save |
Anna Bridge |
181:96ed750bd169 | 156 | #pragma language=extended |
Anna Bridge |
181:96ed750bd169 | 157 | __IAR_FT uint32_t __iar_uint32_read(void const *ptr) |
Anna Bridge |
181:96ed750bd169 | 158 | { |
Anna Bridge |
181:96ed750bd169 | 159 | return *(__packed uint32_t*)(ptr); |
Anna Bridge |
181:96ed750bd169 | 160 | } |
Anna Bridge |
181:96ed750bd169 | 161 | #pragma language=restore |
Anna Bridge |
181:96ed750bd169 | 162 | #define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) |
Anna Bridge |
181:96ed750bd169 | 163 | #endif |
Anna Bridge |
181:96ed750bd169 | 164 | |
Anna Bridge |
181:96ed750bd169 | 165 | #ifndef __UNALIGNED_UINT32_WRITE |
Anna Bridge |
181:96ed750bd169 | 166 | #pragma language=save |
Anna Bridge |
181:96ed750bd169 | 167 | #pragma language=extended |
Anna Bridge |
181:96ed750bd169 | 168 | __IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) |
Anna Bridge |
181:96ed750bd169 | 169 | { |
Anna Bridge |
181:96ed750bd169 | 170 | *(__packed uint32_t*)(ptr) = val;; |
Anna Bridge |
181:96ed750bd169 | 171 | } |
Anna Bridge |
181:96ed750bd169 | 172 | #pragma language=restore |
Anna Bridge |
181:96ed750bd169 | 173 | #define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) |
Anna Bridge |
181:96ed750bd169 | 174 | #endif |
Anna Bridge |
181:96ed750bd169 | 175 | |
Anna Bridge |
181:96ed750bd169 | 176 | #if 0 |
Anna Bridge |
181:96ed750bd169 | 177 | #ifndef __UNALIGNED_UINT32 /* deprecated */ |
Anna Bridge |
181:96ed750bd169 | 178 | #pragma language=save |
Anna Bridge |
181:96ed750bd169 | 179 | #pragma language=extended |
Anna Bridge |
181:96ed750bd169 | 180 | __packed struct __iar_u32 { uint32_t v; }; |
Anna Bridge |
181:96ed750bd169 | 181 | #pragma language=restore |
Anna Bridge |
181:96ed750bd169 | 182 | #define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v) |
Anna Bridge |
181:96ed750bd169 | 183 | #endif |
Anna Bridge |
181:96ed750bd169 | 184 | #endif |
Anna Bridge |
181:96ed750bd169 | 185 | |
Anna Bridge |
181:96ed750bd169 | 186 | #ifndef __USED |
Anna Bridge |
181:96ed750bd169 | 187 | #if __ICCARM_V8 |
Anna Bridge |
181:96ed750bd169 | 188 | #define __USED __attribute__((used)) |
Anna Bridge |
181:96ed750bd169 | 189 | #else |
Anna Bridge |
181:96ed750bd169 | 190 | #define __USED _Pragma("__root") |
Anna Bridge |
181:96ed750bd169 | 191 | #endif |
Anna Bridge |
181:96ed750bd169 | 192 | #endif |
Anna Bridge |
181:96ed750bd169 | 193 | |
Anna Bridge |
181:96ed750bd169 | 194 | #ifndef __WEAK |
Anna Bridge |
181:96ed750bd169 | 195 | #if __ICCARM_V8 |
Anna Bridge |
181:96ed750bd169 | 196 | #define __WEAK __attribute__((weak)) |
Anna Bridge |
181:96ed750bd169 | 197 | #else |
Anna Bridge |
181:96ed750bd169 | 198 | #define __WEAK _Pragma("__weak") |
Anna Bridge |
181:96ed750bd169 | 199 | #endif |
Anna Bridge |
181:96ed750bd169 | 200 | #endif |
Anna Bridge |
181:96ed750bd169 | 201 | |
Anna Bridge |
181:96ed750bd169 | 202 | |
Anna Bridge |
181:96ed750bd169 | 203 | #ifndef __ICCARM_INTRINSICS_VERSION__ |
Anna Bridge |
181:96ed750bd169 | 204 | #define __ICCARM_INTRINSICS_VERSION__ 0 |
Anna Bridge |
181:96ed750bd169 | 205 | #endif |
Anna Bridge |
181:96ed750bd169 | 206 | |
Anna Bridge |
181:96ed750bd169 | 207 | #if __ICCARM_INTRINSICS_VERSION__ == 2 |
Anna Bridge |
181:96ed750bd169 | 208 | |
Anna Bridge |
181:96ed750bd169 | 209 | #if defined(__CLZ) |
Anna Bridge |
181:96ed750bd169 | 210 | #undef __CLZ |
Anna Bridge |
181:96ed750bd169 | 211 | #endif |
Anna Bridge |
181:96ed750bd169 | 212 | #if defined(__REVSH) |
Anna Bridge |
181:96ed750bd169 | 213 | #undef __REVSH |
Anna Bridge |
181:96ed750bd169 | 214 | #endif |
Anna Bridge |
181:96ed750bd169 | 215 | #if defined(__RBIT) |
Anna Bridge |
181:96ed750bd169 | 216 | #undef __RBIT |
Anna Bridge |
181:96ed750bd169 | 217 | #endif |
Anna Bridge |
181:96ed750bd169 | 218 | #if defined(__SSAT) |
Anna Bridge |
181:96ed750bd169 | 219 | #undef __SSAT |
Anna Bridge |
181:96ed750bd169 | 220 | #endif |
Anna Bridge |
181:96ed750bd169 | 221 | #if defined(__USAT) |
Anna Bridge |
181:96ed750bd169 | 222 | #undef __USAT |
Anna Bridge |
181:96ed750bd169 | 223 | #endif |
Anna Bridge |
181:96ed750bd169 | 224 | |
Anna Bridge |
181:96ed750bd169 | 225 | #include "iccarm_builtin.h" |
Anna Bridge |
181:96ed750bd169 | 226 | |
Anna Bridge |
181:96ed750bd169 | 227 | #define __enable_irq __iar_builtin_enable_interrupt |
Anna Bridge |
181:96ed750bd169 | 228 | #define __disable_irq __iar_builtin_disable_interrupt |
Anna Bridge |
181:96ed750bd169 | 229 | #define __enable_fault_irq __iar_builtin_enable_fiq |
Anna Bridge |
181:96ed750bd169 | 230 | #define __disable_fault_irq __iar_builtin_disable_fiq |
Anna Bridge |
181:96ed750bd169 | 231 | #define __arm_rsr __iar_builtin_rsr |
Anna Bridge |
181:96ed750bd169 | 232 | #define __arm_wsr __iar_builtin_wsr |
Anna Bridge |
181:96ed750bd169 | 233 | |
Anna Bridge |
181:96ed750bd169 | 234 | #if __FPU_PRESENT |
Anna Bridge |
181:96ed750bd169 | 235 | #define __get_FPSCR() (__arm_rsr("FPSCR")) |
Anna Bridge |
181:96ed750bd169 | 236 | #else |
Anna Bridge |
181:96ed750bd169 | 237 | #define __get_FPSCR() ( 0 ) |
Anna Bridge |
181:96ed750bd169 | 238 | #endif |
Anna Bridge |
181:96ed750bd169 | 239 | |
Anna Bridge |
181:96ed750bd169 | 240 | #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", VALUE)) |
Anna Bridge |
181:96ed750bd169 | 241 | |
Anna Bridge |
181:96ed750bd169 | 242 | #define __get_CPSR() (__arm_rsr("CPSR")) |
Anna Bridge |
181:96ed750bd169 | 243 | #define __get_mode() (__get_CPSR() & 0x1FU) |
Anna Bridge |
181:96ed750bd169 | 244 | |
Anna Bridge |
181:96ed750bd169 | 245 | #define __set_CPSR(VALUE) (__arm_wsr("CPSR", (VALUE))) |
Anna Bridge |
181:96ed750bd169 | 246 | #define __set_mode(VALUE) (__arm_wsr("CPSR_c", (VALUE))) |
Anna Bridge |
181:96ed750bd169 | 247 | |
Anna Bridge |
181:96ed750bd169 | 248 | |
Anna Bridge |
181:96ed750bd169 | 249 | #define __get_FPEXC() (__arm_rsr("FPEXC")) |
Anna Bridge |
181:96ed750bd169 | 250 | #define __set_FPEXC(VALUE) (__arm_wsr("FPEXC", VALUE)) |
Anna Bridge |
181:96ed750bd169 | 251 | |
Anna Bridge |
181:96ed750bd169 | 252 | #define __get_CP(cp, op1, RT, CRn, CRm, op2) \ |
Anna Bridge |
181:96ed750bd169 | 253 | ((RT) = __arm_rsr("p" # cp ":" # op1 ":c" # CRn ":c" # CRm ":" # op2)) |
Anna Bridge |
181:96ed750bd169 | 254 | |
Anna Bridge |
181:96ed750bd169 | 255 | #define __set_CP(cp, op1, RT, CRn, CRm, op2) \ |
Anna Bridge |
181:96ed750bd169 | 256 | (__arm_wsr("p" # cp ":" # op1 ":c" # CRn ":c" # CRm ":" # op2, (RT))) |
Anna Bridge |
181:96ed750bd169 | 257 | |
Anna Bridge |
181:96ed750bd169 | 258 | #define __get_CP64(cp, op1, Rt, CRm) \ |
Anna Bridge |
181:96ed750bd169 | 259 | __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) |
Anna Bridge |
181:96ed750bd169 | 260 | |
Anna Bridge |
181:96ed750bd169 | 261 | #define __set_CP64(cp, op1, Rt, CRm) \ |
Anna Bridge |
181:96ed750bd169 | 262 | __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) |
Anna Bridge |
181:96ed750bd169 | 263 | |
Anna Bridge |
181:96ed750bd169 | 264 | #include "cmsis_cp15.h" |
Anna Bridge |
181:96ed750bd169 | 265 | |
Anna Bridge |
181:96ed750bd169 | 266 | #define __NOP __iar_builtin_no_operation |
Anna Bridge |
181:96ed750bd169 | 267 | |
Anna Bridge |
181:96ed750bd169 | 268 | #define __CLZ __iar_builtin_CLZ |
Anna Bridge |
181:96ed750bd169 | 269 | #define __CLREX __iar_builtin_CLREX |
Anna Bridge |
181:96ed750bd169 | 270 | |
Anna Bridge |
181:96ed750bd169 | 271 | #define __DMB __iar_builtin_DMB |
Anna Bridge |
181:96ed750bd169 | 272 | #define __DSB __iar_builtin_DSB |
Anna Bridge |
181:96ed750bd169 | 273 | #define __ISB __iar_builtin_ISB |
Anna Bridge |
181:96ed750bd169 | 274 | |
Anna Bridge |
181:96ed750bd169 | 275 | #define __LDREXB __iar_builtin_LDREXB |
Anna Bridge |
181:96ed750bd169 | 276 | #define __LDREXH __iar_builtin_LDREXH |
Anna Bridge |
181:96ed750bd169 | 277 | #define __LDREXW __iar_builtin_LDREX |
Anna Bridge |
181:96ed750bd169 | 278 | |
Anna Bridge |
181:96ed750bd169 | 279 | #define __RBIT __iar_builtin_RBIT |
Anna Bridge |
181:96ed750bd169 | 280 | #define __REV __iar_builtin_REV |
Anna Bridge |
181:96ed750bd169 | 281 | #define __REV16 __iar_builtin_REV16 |
Anna Bridge |
181:96ed750bd169 | 282 | |
Anna Bridge |
181:96ed750bd169 | 283 | __IAR_FT int16_t __REVSH(int16_t val) |
Anna Bridge |
181:96ed750bd169 | 284 | { |
Anna Bridge |
181:96ed750bd169 | 285 | return (int16_t) __iar_builtin_REVSH(val); |
Anna Bridge |
181:96ed750bd169 | 286 | } |
Anna Bridge |
181:96ed750bd169 | 287 | |
Anna Bridge |
181:96ed750bd169 | 288 | #define __ROR __iar_builtin_ROR |
Anna Bridge |
181:96ed750bd169 | 289 | #define __RRX __iar_builtin_RRX |
Anna Bridge |
181:96ed750bd169 | 290 | |
Anna Bridge |
181:96ed750bd169 | 291 | #define __SEV __iar_builtin_SEV |
Anna Bridge |
181:96ed750bd169 | 292 | |
Anna Bridge |
181:96ed750bd169 | 293 | #define __SSAT __iar_builtin_SSAT |
Anna Bridge |
181:96ed750bd169 | 294 | |
Anna Bridge |
181:96ed750bd169 | 295 | #define __STREXB __iar_builtin_STREXB |
Anna Bridge |
181:96ed750bd169 | 296 | #define __STREXH __iar_builtin_STREXH |
Anna Bridge |
181:96ed750bd169 | 297 | #define __STREXW __iar_builtin_STREX |
Anna Bridge |
181:96ed750bd169 | 298 | |
Anna Bridge |
181:96ed750bd169 | 299 | #define __USAT __iar_builtin_USAT |
Anna Bridge |
181:96ed750bd169 | 300 | |
Anna Bridge |
181:96ed750bd169 | 301 | #define __WFE __iar_builtin_WFE |
Anna Bridge |
181:96ed750bd169 | 302 | #define __WFI __iar_builtin_WFI |
Anna Bridge |
181:96ed750bd169 | 303 | |
Anna Bridge |
181:96ed750bd169 | 304 | #define __SADD8 __iar_builtin_SADD8 |
Anna Bridge |
181:96ed750bd169 | 305 | #define __QADD8 __iar_builtin_QADD8 |
Anna Bridge |
181:96ed750bd169 | 306 | #define __SHADD8 __iar_builtin_SHADD8 |
Anna Bridge |
181:96ed750bd169 | 307 | #define __UADD8 __iar_builtin_UADD8 |
Anna Bridge |
181:96ed750bd169 | 308 | #define __UQADD8 __iar_builtin_UQADD8 |
Anna Bridge |
181:96ed750bd169 | 309 | #define __UHADD8 __iar_builtin_UHADD8 |
Anna Bridge |
181:96ed750bd169 | 310 | #define __SSUB8 __iar_builtin_SSUB8 |
Anna Bridge |
181:96ed750bd169 | 311 | #define __QSUB8 __iar_builtin_QSUB8 |
Anna Bridge |
181:96ed750bd169 | 312 | #define __SHSUB8 __iar_builtin_SHSUB8 |
Anna Bridge |
181:96ed750bd169 | 313 | #define __USUB8 __iar_builtin_USUB8 |
Anna Bridge |
181:96ed750bd169 | 314 | #define __UQSUB8 __iar_builtin_UQSUB8 |
Anna Bridge |
181:96ed750bd169 | 315 | #define __UHSUB8 __iar_builtin_UHSUB8 |
Anna Bridge |
181:96ed750bd169 | 316 | #define __SADD16 __iar_builtin_SADD16 |
Anna Bridge |
181:96ed750bd169 | 317 | #define __QADD16 __iar_builtin_QADD16 |
Anna Bridge |
181:96ed750bd169 | 318 | #define __SHADD16 __iar_builtin_SHADD16 |
Anna Bridge |
181:96ed750bd169 | 319 | #define __UADD16 __iar_builtin_UADD16 |
Anna Bridge |
181:96ed750bd169 | 320 | #define __UQADD16 __iar_builtin_UQADD16 |
Anna Bridge |
181:96ed750bd169 | 321 | #define __UHADD16 __iar_builtin_UHADD16 |
Anna Bridge |
181:96ed750bd169 | 322 | #define __SSUB16 __iar_builtin_SSUB16 |
Anna Bridge |
181:96ed750bd169 | 323 | #define __QSUB16 __iar_builtin_QSUB16 |
Anna Bridge |
181:96ed750bd169 | 324 | #define __SHSUB16 __iar_builtin_SHSUB16 |
Anna Bridge |
181:96ed750bd169 | 325 | #define __USUB16 __iar_builtin_USUB16 |
Anna Bridge |
181:96ed750bd169 | 326 | #define __UQSUB16 __iar_builtin_UQSUB16 |
Anna Bridge |
181:96ed750bd169 | 327 | #define __UHSUB16 __iar_builtin_UHSUB16 |
Anna Bridge |
181:96ed750bd169 | 328 | #define __SASX __iar_builtin_SASX |
Anna Bridge |
181:96ed750bd169 | 329 | #define __QASX __iar_builtin_QASX |
Anna Bridge |
181:96ed750bd169 | 330 | #define __SHASX __iar_builtin_SHASX |
Anna Bridge |
181:96ed750bd169 | 331 | #define __UASX __iar_builtin_UASX |
Anna Bridge |
181:96ed750bd169 | 332 | #define __UQASX __iar_builtin_UQASX |
Anna Bridge |
181:96ed750bd169 | 333 | #define __UHASX __iar_builtin_UHASX |
Anna Bridge |
181:96ed750bd169 | 334 | #define __SSAX __iar_builtin_SSAX |
Anna Bridge |
181:96ed750bd169 | 335 | #define __QSAX __iar_builtin_QSAX |
Anna Bridge |
181:96ed750bd169 | 336 | #define __SHSAX __iar_builtin_SHSAX |
Anna Bridge |
181:96ed750bd169 | 337 | #define __USAX __iar_builtin_USAX |
Anna Bridge |
181:96ed750bd169 | 338 | #define __UQSAX __iar_builtin_UQSAX |
Anna Bridge |
181:96ed750bd169 | 339 | #define __UHSAX __iar_builtin_UHSAX |
Anna Bridge |
181:96ed750bd169 | 340 | #define __USAD8 __iar_builtin_USAD8 |
Anna Bridge |
181:96ed750bd169 | 341 | #define __USADA8 __iar_builtin_USADA8 |
Anna Bridge |
181:96ed750bd169 | 342 | #define __SSAT16 __iar_builtin_SSAT16 |
Anna Bridge |
181:96ed750bd169 | 343 | #define __USAT16 __iar_builtin_USAT16 |
Anna Bridge |
181:96ed750bd169 | 344 | #define __UXTB16 __iar_builtin_UXTB16 |
Anna Bridge |
181:96ed750bd169 | 345 | #define __UXTAB16 __iar_builtin_UXTAB16 |
Anna Bridge |
181:96ed750bd169 | 346 | #define __SXTB16 __iar_builtin_SXTB16 |
Anna Bridge |
181:96ed750bd169 | 347 | #define __SXTAB16 __iar_builtin_SXTAB16 |
Anna Bridge |
181:96ed750bd169 | 348 | #define __SMUAD __iar_builtin_SMUAD |
Anna Bridge |
181:96ed750bd169 | 349 | #define __SMUADX __iar_builtin_SMUADX |
Anna Bridge |
181:96ed750bd169 | 350 | #define __SMMLA __iar_builtin_SMMLA |
Anna Bridge |
181:96ed750bd169 | 351 | #define __SMLAD __iar_builtin_SMLAD |
Anna Bridge |
181:96ed750bd169 | 352 | #define __SMLADX __iar_builtin_SMLADX |
Anna Bridge |
181:96ed750bd169 | 353 | #define __SMLALD __iar_builtin_SMLALD |
Anna Bridge |
181:96ed750bd169 | 354 | #define __SMLALDX __iar_builtin_SMLALDX |
Anna Bridge |
181:96ed750bd169 | 355 | #define __SMUSD __iar_builtin_SMUSD |
Anna Bridge |
181:96ed750bd169 | 356 | #define __SMUSDX __iar_builtin_SMUSDX |
Anna Bridge |
181:96ed750bd169 | 357 | #define __SMLSD __iar_builtin_SMLSD |
Anna Bridge |
181:96ed750bd169 | 358 | #define __SMLSDX __iar_builtin_SMLSDX |
Anna Bridge |
181:96ed750bd169 | 359 | #define __SMLSLD __iar_builtin_SMLSLD |
Anna Bridge |
181:96ed750bd169 | 360 | #define __SMLSLDX __iar_builtin_SMLSLDX |
Anna Bridge |
181:96ed750bd169 | 361 | #define __SEL __iar_builtin_SEL |
Anna Bridge |
181:96ed750bd169 | 362 | #define __QADD __iar_builtin_QADD |
Anna Bridge |
181:96ed750bd169 | 363 | #define __QSUB __iar_builtin_QSUB |
Anna Bridge |
181:96ed750bd169 | 364 | #define __PKHBT __iar_builtin_PKHBT |
Anna Bridge |
181:96ed750bd169 | 365 | #define __PKHTB __iar_builtin_PKHTB |
Anna Bridge |
181:96ed750bd169 | 366 | |
Anna Bridge |
181:96ed750bd169 | 367 | #else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ |
Anna Bridge |
181:96ed750bd169 | 368 | |
Anna Bridge |
181:96ed750bd169 | 369 | #if !__FPU_PRESENT |
Anna Bridge |
181:96ed750bd169 | 370 | #define __get_FPSCR __cmsis_iar_get_FPSR_not_active |
Anna Bridge |
181:96ed750bd169 | 371 | #endif |
Anna Bridge |
181:96ed750bd169 | 372 | |
Anna Bridge |
181:96ed750bd169 | 373 | #ifdef __INTRINSICS_INCLUDED |
Anna Bridge |
181:96ed750bd169 | 374 | #error intrinsics.h is already included previously! |
Anna Bridge |
181:96ed750bd169 | 375 | #endif |
Anna Bridge |
181:96ed750bd169 | 376 | |
Anna Bridge |
181:96ed750bd169 | 377 | #include <intrinsics.h> |
Anna Bridge |
181:96ed750bd169 | 378 | |
Anna Bridge |
181:96ed750bd169 | 379 | #if !__FPU_PRESENT |
Anna Bridge |
181:96ed750bd169 | 380 | #define __get_FPSCR() (0) |
Anna Bridge |
181:96ed750bd169 | 381 | #endif |
Anna Bridge |
181:96ed750bd169 | 382 | |
Anna Bridge |
181:96ed750bd169 | 383 | #pragma diag_suppress=Pe940 |
Anna Bridge |
181:96ed750bd169 | 384 | #pragma diag_suppress=Pe177 |
Anna Bridge |
181:96ed750bd169 | 385 | |
Anna Bridge |
181:96ed750bd169 | 386 | #define __enable_irq __enable_interrupt |
Anna Bridge |
181:96ed750bd169 | 387 | #define __disable_irq __disable_interrupt |
Anna Bridge |
181:96ed750bd169 | 388 | #define __enable_fault_irq __enable_fiq |
Anna Bridge |
181:96ed750bd169 | 389 | #define __disable_fault_irq __disable_fiq |
Anna Bridge |
181:96ed750bd169 | 390 | #define __NOP __no_operation |
Anna Bridge |
181:96ed750bd169 | 391 | |
Anna Bridge |
181:96ed750bd169 | 392 | #define __get_xPSR __get_PSR |
Anna Bridge |
181:96ed750bd169 | 393 | |
Anna Bridge |
181:96ed750bd169 | 394 | __IAR_FT void __set_mode(uint32_t mode) |
Anna Bridge |
181:96ed750bd169 | 395 | { |
Anna Bridge |
181:96ed750bd169 | 396 | __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); |
Anna Bridge |
181:96ed750bd169 | 397 | } |
Anna Bridge |
181:96ed750bd169 | 398 | |
Anna Bridge |
181:96ed750bd169 | 399 | __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) |
Anna Bridge |
181:96ed750bd169 | 400 | { |
Anna Bridge |
181:96ed750bd169 | 401 | return __LDREX((unsigned long *)ptr); |
Anna Bridge |
181:96ed750bd169 | 402 | } |
Anna Bridge |
181:96ed750bd169 | 403 | |
Anna Bridge |
181:96ed750bd169 | 404 | __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) |
Anna Bridge |
181:96ed750bd169 | 405 | { |
Anna Bridge |
181:96ed750bd169 | 406 | return __STREX(value, (unsigned long *)ptr); |
Anna Bridge |
181:96ed750bd169 | 407 | } |
Anna Bridge |
181:96ed750bd169 | 408 | |
Anna Bridge |
181:96ed750bd169 | 409 | |
Anna Bridge |
181:96ed750bd169 | 410 | __IAR_FT uint32_t __RRX(uint32_t value) |
Anna Bridge |
181:96ed750bd169 | 411 | { |
Anna Bridge |
181:96ed750bd169 | 412 | uint32_t result; |
Anna Bridge |
181:96ed750bd169 | 413 | __ASM("RRX %0, %1" : "=r"(result) : "r" (value) : "cc"); |
Anna Bridge |
181:96ed750bd169 | 414 | return(result); |
Anna Bridge |
181:96ed750bd169 | 415 | } |
Anna Bridge |
181:96ed750bd169 | 416 | |
Anna Bridge |
181:96ed750bd169 | 417 | |
Anna Bridge |
181:96ed750bd169 | 418 | __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) |
Anna Bridge |
181:96ed750bd169 | 419 | { |
Anna Bridge |
181:96ed750bd169 | 420 | return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); |
Anna Bridge |
181:96ed750bd169 | 421 | } |
Anna Bridge |
181:96ed750bd169 | 422 | |
Anna Bridge |
181:96ed750bd169 | 423 | __IAR_FT uint32_t __get_FPEXC(void) |
Anna Bridge |
181:96ed750bd169 | 424 | { |
Anna Bridge |
181:96ed750bd169 | 425 | #if (__FPU_PRESENT == 1) |
Anna Bridge |
181:96ed750bd169 | 426 | uint32_t result; |
Anna Bridge |
181:96ed750bd169 | 427 | __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); |
Anna Bridge |
181:96ed750bd169 | 428 | return(result); |
Anna Bridge |
181:96ed750bd169 | 429 | #else |
Anna Bridge |
181:96ed750bd169 | 430 | return(0); |
Anna Bridge |
181:96ed750bd169 | 431 | #endif |
Anna Bridge |
181:96ed750bd169 | 432 | } |
Anna Bridge |
181:96ed750bd169 | 433 | |
Anna Bridge |
181:96ed750bd169 | 434 | __IAR_FT void __set_FPEXC(uint32_t fpexc) |
Anna Bridge |
181:96ed750bd169 | 435 | { |
Anna Bridge |
181:96ed750bd169 | 436 | #if (__FPU_PRESENT == 1) |
Anna Bridge |
181:96ed750bd169 | 437 | __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); |
Anna Bridge |
181:96ed750bd169 | 438 | #endif |
Anna Bridge |
181:96ed750bd169 | 439 | } |
Anna Bridge |
181:96ed750bd169 | 440 | |
Anna Bridge |
181:96ed750bd169 | 441 | |
Anna Bridge |
181:96ed750bd169 | 442 | #define __get_CP(cp, op1, Rt, CRn, CRm, op2) \ |
Anna Bridge |
181:96ed750bd169 | 443 | __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) |
Anna Bridge |
181:96ed750bd169 | 444 | #define __set_CP(cp, op1, Rt, CRn, CRm, op2) \ |
Anna Bridge |
181:96ed750bd169 | 445 | __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) |
Anna Bridge |
181:96ed750bd169 | 446 | #define __get_CP64(cp, op1, Rt, CRm) \ |
Anna Bridge |
181:96ed750bd169 | 447 | __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) |
Anna Bridge |
181:96ed750bd169 | 448 | #define __set_CP64(cp, op1, Rt, CRm) \ |
Anna Bridge |
181:96ed750bd169 | 449 | __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) |
Anna Bridge |
181:96ed750bd169 | 450 | |
Anna Bridge |
181:96ed750bd169 | 451 | #include "cmsis_cp15.h" |
Anna Bridge |
181:96ed750bd169 | 452 | |
Anna Bridge |
181:96ed750bd169 | 453 | #endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ |
Anna Bridge |
181:96ed750bd169 | 454 | |
Anna Bridge |
181:96ed750bd169 | 455 | #define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) |
Anna Bridge |
181:96ed750bd169 | 456 | |
Anna Bridge |
181:96ed750bd169 | 457 | |
Anna Bridge |
181:96ed750bd169 | 458 | __IAR_FT uint32_t __get_SP_usr(void) |
Anna Bridge |
181:96ed750bd169 | 459 | { |
Anna Bridge |
181:96ed750bd169 | 460 | uint32_t cpsr; |
Anna Bridge |
181:96ed750bd169 | 461 | uint32_t result; |
Anna Bridge |
181:96ed750bd169 | 462 | __ASM volatile( |
Anna Bridge |
181:96ed750bd169 | 463 | "MRS %0, cpsr \n" |
Anna Bridge |
181:96ed750bd169 | 464 | "CPS #0x1F \n" // no effect in USR mode |
Anna Bridge |
181:96ed750bd169 | 465 | "MOV %1, sp \n" |
Anna Bridge |
181:96ed750bd169 | 466 | "MSR cpsr_c, %2 \n" // no effect in USR mode |
Anna Bridge |
181:96ed750bd169 | 467 | "ISB" : "=r"(cpsr), "=r"(result) : "r"(cpsr) : "memory" |
Anna Bridge |
181:96ed750bd169 | 468 | ); |
Anna Bridge |
181:96ed750bd169 | 469 | return result; |
Anna Bridge |
181:96ed750bd169 | 470 | } |
Anna Bridge |
181:96ed750bd169 | 471 | |
Anna Bridge |
181:96ed750bd169 | 472 | __IAR_FT void __set_SP_usr(uint32_t topOfProcStack) |
Anna Bridge |
181:96ed750bd169 | 473 | { |
Anna Bridge |
181:96ed750bd169 | 474 | uint32_t cpsr; |
Anna Bridge |
181:96ed750bd169 | 475 | __ASM volatile( |
Anna Bridge |
181:96ed750bd169 | 476 | "MRS %0, cpsr \n" |
Anna Bridge |
181:96ed750bd169 | 477 | "CPS #0x1F \n" // no effect in USR mode |
Anna Bridge |
181:96ed750bd169 | 478 | "MOV sp, %1 \n" |
Anna Bridge |
181:96ed750bd169 | 479 | "MSR cpsr_c, %2 \n" // no effect in USR mode |
Anna Bridge |
181:96ed750bd169 | 480 | "ISB" : "=r"(cpsr) : "r" (topOfProcStack), "r"(cpsr) : "memory" |
Anna Bridge |
181:96ed750bd169 | 481 | ); |
Anna Bridge |
181:96ed750bd169 | 482 | } |
Anna Bridge |
181:96ed750bd169 | 483 | |
Anna Bridge |
181:96ed750bd169 | 484 | #define __get_mode() (__get_CPSR() & 0x1FU) |
Anna Bridge |
181:96ed750bd169 | 485 | |
Anna Bridge |
181:96ed750bd169 | 486 | __STATIC_INLINE |
Anna Bridge |
181:96ed750bd169 | 487 | void __FPU_Enable(void) |
Anna Bridge |
181:96ed750bd169 | 488 | { |
Anna Bridge |
181:96ed750bd169 | 489 | __ASM volatile( |
Anna Bridge |
181:96ed750bd169 | 490 | //Permit access to VFP/NEON, registers by modifying CPACR |
Anna Bridge |
181:96ed750bd169 | 491 | " MRC p15,0,R1,c1,c0,2 \n" |
Anna Bridge |
181:96ed750bd169 | 492 | " ORR R1,R1,#0x00F00000 \n" |
Anna Bridge |
181:96ed750bd169 | 493 | " MCR p15,0,R1,c1,c0,2 \n" |
Anna Bridge |
181:96ed750bd169 | 494 | |
Anna Bridge |
181:96ed750bd169 | 495 | //Ensure that subsequent instructions occur in the context of VFP/NEON access permitted |
Anna Bridge |
181:96ed750bd169 | 496 | " ISB \n" |
Anna Bridge |
181:96ed750bd169 | 497 | |
Anna Bridge |
181:96ed750bd169 | 498 | //Enable VFP/NEON |
Anna Bridge |
181:96ed750bd169 | 499 | " VMRS R1,FPEXC \n" |
Anna Bridge |
181:96ed750bd169 | 500 | " ORR R1,R1,#0x40000000 \n" |
Anna Bridge |
181:96ed750bd169 | 501 | " VMSR FPEXC,R1 \n" |
Anna Bridge |
181:96ed750bd169 | 502 | |
Anna Bridge |
181:96ed750bd169 | 503 | //Initialise VFP/NEON registers to 0 |
Anna Bridge |
181:96ed750bd169 | 504 | " MOV R2,#0 \n" |
Anna Bridge |
181:96ed750bd169 | 505 | |
Anna Bridge |
181:96ed750bd169 | 506 | //Initialise D16 registers to 0 |
Anna Bridge |
181:96ed750bd169 | 507 | " VMOV D0, R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 508 | " VMOV D1, R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 509 | " VMOV D2, R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 510 | " VMOV D3, R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 511 | " VMOV D4, R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 512 | " VMOV D5, R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 513 | " VMOV D6, R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 514 | " VMOV D7, R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 515 | " VMOV D8, R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 516 | " VMOV D9, R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 517 | " VMOV D10,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 518 | " VMOV D11,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 519 | " VMOV D12,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 520 | " VMOV D13,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 521 | " VMOV D14,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 522 | " VMOV D15,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 523 | |
Anna Bridge |
181:96ed750bd169 | 524 | #ifdef __ARM_ADVANCED_SIMD__ |
Anna Bridge |
181:96ed750bd169 | 525 | //Initialise D32 registers to 0 |
Anna Bridge |
181:96ed750bd169 | 526 | " VMOV D16,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 527 | " VMOV D17,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 528 | " VMOV D18,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 529 | " VMOV D19,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 530 | " VMOV D20,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 531 | " VMOV D21,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 532 | " VMOV D22,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 533 | " VMOV D23,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 534 | " VMOV D24,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 535 | " VMOV D25,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 536 | " VMOV D26,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 537 | " VMOV D27,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 538 | " VMOV D28,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 539 | " VMOV D29,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 540 | " VMOV D30,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 541 | " VMOV D31,R2,R2 \n" |
Anna Bridge |
181:96ed750bd169 | 542 | #endif |
Anna Bridge |
181:96ed750bd169 | 543 | |
Anna Bridge |
181:96ed750bd169 | 544 | //Initialise FPSCR to a known state |
Anna Bridge |
181:96ed750bd169 | 545 | " VMRS R2,FPSCR \n" |
Anna Bridge |
181:96ed750bd169 | 546 | " MOV32 R3,#0x00086060 \n" //Mask off all bits that do not have to be preserved. Non-preserved bits can/should be zero. |
Anna Bridge |
181:96ed750bd169 | 547 | " AND R2,R2,R3 \n" |
Anna Bridge |
181:96ed750bd169 | 548 | " VMSR FPSCR,R2 \n"); |
Anna Bridge |
181:96ed750bd169 | 549 | } |
Anna Bridge |
181:96ed750bd169 | 550 | |
Anna Bridge |
181:96ed750bd169 | 551 | |
Anna Bridge |
181:96ed750bd169 | 552 | |
Anna Bridge |
181:96ed750bd169 | 553 | #undef __IAR_FT |
Anna Bridge |
181:96ed750bd169 | 554 | #undef __ICCARM_V8 |
Anna Bridge |
181:96ed750bd169 | 555 | |
Anna Bridge |
181:96ed750bd169 | 556 | #pragma diag_default=Pe940 |
Anna Bridge |
181:96ed750bd169 | 557 | #pragma diag_default=Pe177 |
Anna Bridge |
181:96ed750bd169 | 558 | |
Anna Bridge |
181:96ed750bd169 | 559 | #endif /* __CMSIS_ICCARM_H__ */ |