27#ifndef __CMSIS_ARMCLANG_H
28#define __CMSIS_ARMCLANG_H
30#pragma clang system_header
37 #define __INLINE __inline
39#ifndef __STATIC_INLINE
40 #define __STATIC_INLINE static __inline
42#ifndef __STATIC_FORCEINLINE
43 #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline
46 #define __NO_RETURN __attribute__((__noreturn__))
49 #define __USED __attribute__((used))
52 #define __WEAK __attribute__((weak))
55 #define __PACKED __attribute__((packed, aligned(1)))
57#ifndef __PACKED_STRUCT
58 #define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))
61 #define __PACKED_UNION union __attribute__((packed, aligned(1)))
63#ifndef __UNALIGNED_UINT32
64 #pragma clang diagnostic push
65 #pragma clang diagnostic ignored "-Wpacked"
68 #pragma clang diagnostic pop
69 #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
71#ifndef __UNALIGNED_UINT16_WRITE
72 #pragma clang diagnostic push
73 #pragma clang diagnostic ignored "-Wpacked"
75 __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
76 #pragma clang diagnostic pop
77 #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
79#ifndef __UNALIGNED_UINT16_READ
80 #pragma clang diagnostic push
81 #pragma clang diagnostic ignored "-Wpacked"
83 __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
84 #pragma clang diagnostic pop
85 #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
87#ifndef __UNALIGNED_UINT32_WRITE
88 #pragma clang diagnostic push
89 #pragma clang diagnostic ignored "-Wpacked"
91 __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
92 #pragma clang diagnostic pop
93 #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
95#ifndef __UNALIGNED_UINT32_READ
96 #pragma clang diagnostic push
97 #pragma clang diagnostic ignored "-Wpacked"
99 __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
100 #pragma clang diagnostic pop
101 #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
104 #define __ALIGNED(x) __attribute__((aligned(x)))
107 #define __RESTRICT __restrict
109#ifndef __COMPILER_BARRIER
110 #define __COMPILER_BARRIER() __ASM volatile("":::"memory")
113 #define __NO_INIT __attribute__ ((section (".bss.noinit")))
116 #define __ALIAS(x) __attribute__ ((alias(x)))
122#ifndef __PROGRAM_START
123#define __PROGRAM_START __main
127#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit
131#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base
134#ifndef __VECTOR_TABLE
135#define __VECTOR_TABLE __Vectors
138#ifndef __VECTOR_TABLE_ATTRIBUTE
139#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET")))
142#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
144#define __STACK_SEAL Image$$STACKSEAL$$ZI$$Base
147#ifndef __TZ_STACK_SEAL_SIZE
148#define __TZ_STACK_SEAL_SIZE 8U
151#ifndef __TZ_STACK_SEAL_VALUE
152#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL
156__STATIC_FORCEINLINE
void __TZ_set_STACKSEAL_S (uint32_t* stackTop) {
157 *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE;
171#if defined (__thumb__) && !defined (__thumb2__)
172#define __CMSIS_GCC_OUT_REG(r) "=l" (r)
173#define __CMSIS_GCC_RW_REG(r) "+l" (r)
174#define __CMSIS_GCC_USE_REG(r) "l" (r)
176#define __CMSIS_GCC_OUT_REG(r) "=r" (r)
177#define __CMSIS_GCC_RW_REG(r) "+r" (r)
178#define __CMSIS_GCC_USE_REG(r) "r" (r)
185#define __NOP __builtin_arm_nop
191#define __WFI __builtin_arm_wfi
199#define __WFE __builtin_arm_wfe
206#define __SEV __builtin_arm_sev
215#define __ISB() __builtin_arm_isb(0xF)
222#define __DSB() __builtin_arm_dsb(0xF)
230#define __DMB() __builtin_arm_dmb(0xF)
239#define __REV(value) __builtin_bswap32(value)
248#define __REV16(value) __ROR(__REV(value), 16)
257#define __REVSH(value) (int16_t)__builtin_bswap16(value)
267__STATIC_FORCEINLINE uint32_t
__ROR(uint32_t op1, uint32_t op2)
274 return (op1 >> op2) | (op1 << (32U - op2));
285#define __BKPT(value) __ASM volatile ("bkpt "#value)
294#define __RBIT __builtin_arm_rbit
302__STATIC_FORCEINLINE uint8_t
__CLZ(uint32_t value)
317 return __builtin_clz(value);
321#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
322 (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
323 (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
324 (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \
325 (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) )
333#define __LDREXB (uint8_t)__builtin_arm_ldrex
342#define __LDREXH (uint16_t)__builtin_arm_ldrex
351#define __LDREXW (uint32_t)__builtin_arm_ldrex
362#define __STREXB (uint32_t)__builtin_arm_strex
373#define __STREXH (uint32_t)__builtin_arm_strex
384#define __STREXW (uint32_t)__builtin_arm_strex
391#define __CLREX __builtin_arm_clrex
400#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
401 (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
402 (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
403 (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) )
412#define __SSAT __builtin_arm_ssat
422#define __USAT __builtin_arm_usat
432__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value)
436 __ASM
volatile (
"rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );
447__STATIC_FORCEINLINE uint8_t __LDRBT(
volatile uint8_t *ptr)
451 __ASM
volatile (
"ldrbt %0, %1" :
"=r" (result) :
"Q" (*ptr) );
452 return ((uint8_t) result);
462__STATIC_FORCEINLINE uint16_t __LDRHT(
volatile uint16_t *ptr)
466 __ASM
volatile (
"ldrht %0, %1" :
"=r" (result) :
"Q" (*ptr) );
467 return ((uint16_t) result);
477__STATIC_FORCEINLINE uint32_t __LDRT(
volatile uint32_t *ptr)
481 __ASM
volatile (
"ldrt %0, %1" :
"=r" (result) :
"Q" (*ptr) );
492__STATIC_FORCEINLINE
void __STRBT(uint8_t value,
volatile uint8_t *ptr)
494 __ASM
volatile (
"strbt %1, %0" :
"=Q" (*ptr) :
"r" ((uint32_t)value) );
504__STATIC_FORCEINLINE
void __STRHT(uint16_t value,
volatile uint16_t *ptr)
506 __ASM
volatile (
"strht %1, %0" :
"=Q" (*ptr) :
"r" ((uint32_t)value) );
516__STATIC_FORCEINLINE
void __STRT(uint32_t value,
volatile uint32_t *ptr)
518 __ASM
volatile (
"strt %1, %0" :
"=Q" (*ptr) :
"r" (value) );
533__STATIC_FORCEINLINE int32_t
__SSAT(int32_t val, uint32_t sat)
535 if ((sat >= 1U) && (sat <= 32U))
537 const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);
538 const int32_t min = -1 - max ;
558__STATIC_FORCEINLINE uint32_t
__USAT(int32_t val, uint32_t sat)
562 const uint32_t max = ((1U << sat) - 1U);
563 if (val > (int32_t)max)
572 return (uint32_t)val;
581#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
582 (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \
583 (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) )
591__STATIC_FORCEINLINE uint8_t __LDAB(
volatile uint8_t *ptr)
595 __ASM
volatile (
"ldab %0, %1" :
"=r" (result) :
"Q" (*ptr) :
"memory" );
596 return ((uint8_t) result);
606__STATIC_FORCEINLINE uint16_t __LDAH(
volatile uint16_t *ptr)
610 __ASM
volatile (
"ldah %0, %1" :
"=r" (result) :
"Q" (*ptr) :
"memory" );
611 return ((uint16_t) result);
621__STATIC_FORCEINLINE uint32_t __LDA(
volatile uint32_t *ptr)
625 __ASM
volatile (
"lda %0, %1" :
"=r" (result) :
"Q" (*ptr) :
"memory" );
636__STATIC_FORCEINLINE
void __STLB(uint8_t value,
volatile uint8_t *ptr)
638 __ASM
volatile (
"stlb %1, %0" :
"=Q" (*ptr) :
"r" ((uint32_t)value) :
"memory" );
648__STATIC_FORCEINLINE
void __STLH(uint16_t value,
volatile uint16_t *ptr)
650 __ASM
volatile (
"stlh %1, %0" :
"=Q" (*ptr) :
"r" ((uint32_t)value) :
"memory" );
660__STATIC_FORCEINLINE
void __STL(uint32_t value,
volatile uint32_t *ptr)
662 __ASM
volatile (
"stl %1, %0" :
"=Q" (*ptr) :
"r" ((uint32_t)value) :
"memory" );
672#define __LDAEXB (uint8_t)__builtin_arm_ldaex
681#define __LDAEXH (uint16_t)__builtin_arm_ldaex
690#define __LDAEX (uint32_t)__builtin_arm_ldaex
701#define __STLEXB (uint32_t)__builtin_arm_stlex
712#define __STLEXH (uint32_t)__builtin_arm_stlex
723#define __STLEX (uint32_t)__builtin_arm_stlex
743#ifndef __ARM_COMPAT_H
746 __ASM
volatile (
"cpsie i" : : :
"memory");
756#ifndef __ARM_COMPAT_H
759 __ASM
volatile (
"cpsid i" : : :
"memory");
773 __ASM
volatile (
"MRS %0, control" :
"=r" (result) );
778#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
784__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(
void)
788 __ASM
volatile (
"MRS %0, control_ns" :
"=r" (result) );
801 __ASM
volatile (
"MSR control, %0" : :
"r" (control) :
"memory");
806#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
812__STATIC_FORCEINLINE
void __TZ_set_CONTROL_NS(uint32_t control)
814 __ASM
volatile (
"MSR control_ns, %0" : :
"r" (control) :
"memory");
829 __ASM
volatile (
"MRS %0, ipsr" :
"=r" (result) );
843 __ASM
volatile (
"MRS %0, apsr" :
"=r" (result) );
857 __ASM
volatile (
"MRS %0, xpsr" :
"=r" (result) );
867__STATIC_FORCEINLINE uint32_t
__get_PSP(
void)
871 __ASM
volatile (
"MRS %0, psp" :
"=r" (result) );
876#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
882__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(
void)
886 __ASM
volatile (
"MRS %0, psp_ns" :
"=r" (result) );
897__STATIC_FORCEINLINE
void __set_PSP(uint32_t topOfProcStack)
899 __ASM
volatile (
"MSR psp, %0" : :
"r" (topOfProcStack) : );
903#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
909__STATIC_FORCEINLINE
void __TZ_set_PSP_NS(uint32_t topOfProcStack)
911 __ASM
volatile (
"MSR psp_ns, %0" : :
"r" (topOfProcStack) : );
921__STATIC_FORCEINLINE uint32_t
__get_MSP(
void)
925 __ASM
volatile (
"MRS %0, msp" :
"=r" (result) );
930#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
936__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(
void)
940 __ASM
volatile (
"MRS %0, msp_ns" :
"=r" (result) );
951__STATIC_FORCEINLINE
void __set_MSP(uint32_t topOfMainStack)
953 __ASM
volatile (
"MSR msp, %0" : :
"r" (topOfMainStack) : );
957#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
963__STATIC_FORCEINLINE
void __TZ_set_MSP_NS(uint32_t topOfMainStack)
965 __ASM
volatile (
"MSR msp_ns, %0" : :
"r" (topOfMainStack) : );
970#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
976__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(
void)
980 __ASM
volatile (
"MRS %0, sp_ns" :
"=r" (result) );
990__STATIC_FORCEINLINE
void __TZ_set_SP_NS(uint32_t topOfStack)
992 __ASM
volatile (
"MSR sp_ns, %0" : :
"r" (topOfStack) : );
1006 __ASM
volatile (
"MRS %0, primask" :
"=r" (result) );
1011#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
1017__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(
void)
1021 __ASM
volatile (
"MRS %0, primask_ns" :
"=r" (result) );
1034 __ASM
volatile (
"MSR primask, %0" : :
"r" (priMask) :
"memory");
1038#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
1044__STATIC_FORCEINLINE
void __TZ_set_PRIMASK_NS(uint32_t priMask)
1046 __ASM
volatile (
"MSR primask_ns, %0" : :
"r" (priMask) :
"memory");
1051#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
1052 (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
1053 (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
1054 (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) )
1060__STATIC_FORCEINLINE
void __enable_fault_irq(
void)
1062 __ASM
volatile (
"cpsie f" : : :
"memory");
1071__STATIC_FORCEINLINE
void __disable_fault_irq(
void)
1073 __ASM
volatile (
"cpsid f" : : :
"memory");
1082__STATIC_FORCEINLINE uint32_t __get_BASEPRI(
void)
1086 __ASM
volatile (
"MRS %0, basepri" :
"=r" (result) );
1091#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
1097__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(
void)
1101 __ASM
volatile (
"MRS %0, basepri_ns" :
"=r" (result) );
1112__STATIC_FORCEINLINE
void __set_BASEPRI(uint32_t basePri)
1114 __ASM
volatile (
"MSR basepri, %0" : :
"r" (basePri) :
"memory");
1118#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
1124__STATIC_FORCEINLINE
void __TZ_set_BASEPRI_NS(uint32_t basePri)
1126 __ASM
volatile (
"MSR basepri_ns, %0" : :
"r" (basePri) :
"memory");
1137__STATIC_FORCEINLINE
void __set_BASEPRI_MAX(uint32_t basePri)
1139 __ASM
volatile (
"MSR basepri_max, %0" : :
"r" (basePri) :
"memory");
1148__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(
void)
1152 __ASM
volatile (
"MRS %0, faultmask" :
"=r" (result) );
1157#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
1163__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(
void)
1167 __ASM
volatile (
"MRS %0, faultmask_ns" :
"=r" (result) );
1178__STATIC_FORCEINLINE
void __set_FAULTMASK(uint32_t faultMask)
1180 __ASM
volatile (
"MSR faultmask, %0" : :
"r" (faultMask) :
"memory");
1184#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
1190__STATIC_FORCEINLINE
void __TZ_set_FAULTMASK_NS(uint32_t faultMask)
1192 __ASM
volatile (
"MSR faultmask_ns, %0" : :
"r" (faultMask) :
"memory");
1202#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
1203 (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \
1204 (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) )
1215__STATIC_FORCEINLINE uint32_t __get_PSPLIM(
void)
1217#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
1218 (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \
1219 (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
1224 __ASM
volatile (
"MRS %0, psplim" :
"=r" (result) );
1229#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))
1239__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(
void)
1241#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
1242 (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) )
1247 __ASM
volatile (
"MRS %0, psplim_ns" :
"=r" (result) );
1263__STATIC_FORCEINLINE
void __set_PSPLIM(uint32_t ProcStackPtrLimit)
1265#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
1266 (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \
1267 (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
1269 (void)ProcStackPtrLimit;
1271 __ASM
volatile (
"MSR psplim, %0" : :
"r" (ProcStackPtrLimit));
1276#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
1286__STATIC_FORCEINLINE
void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit)
1288#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
1289 (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) )
1291 (void)ProcStackPtrLimit;
1293 __ASM
volatile (
"MSR psplim_ns, %0\n" : :
"r" (ProcStackPtrLimit));
1307__STATIC_FORCEINLINE uint32_t __get_MSPLIM(
void)
1309#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
1310 (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \
1311 (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
1316 __ASM
volatile (
"MRS %0, msplim" :
"=r" (result) );
1322#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
1331__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(
void)
1333#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
1334 (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) )
1339 __ASM
volatile (
"MRS %0, msplim_ns" :
"=r" (result) );
1354__STATIC_FORCEINLINE
void __set_MSPLIM(uint32_t MainStackPtrLimit)
1356#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
1357 (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \
1358 (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))
1360 (void)MainStackPtrLimit;
1362 __ASM
volatile (
"MSR msplim, %0" : :
"r" (MainStackPtrLimit));
1367#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
1376__STATIC_FORCEINLINE
void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit)
1378#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \
1379 (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) )
1381 (void)MainStackPtrLimit;
1383 __ASM
volatile (
"MSR msplim_ns, %0" : :
"r" (MainStackPtrLimit));
1397#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
1398 (defined (__FPU_USED ) && (__FPU_USED == 1U)) )
1399#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr
1401#define __get_FPSCR() ((uint32_t)0U)
1409#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
1410 (defined (__FPU_USED ) && (__FPU_USED == 1U)) )
1411#define __set_FPSCR __builtin_arm_set_fpscr
1413#define __set_FPSCR(fpscr) ((void)(fpscr))
1426#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1))
1428#define __SADD8 __builtin_arm_sadd8
1429#define __QADD8 __builtin_arm_qadd8
1430#define __SHADD8 __builtin_arm_shadd8
1431#define __UADD8 __builtin_arm_uadd8
1432#define __UQADD8 __builtin_arm_uqadd8
1433#define __UHADD8 __builtin_arm_uhadd8
1434#define __SSUB8 __builtin_arm_ssub8
1435#define __QSUB8 __builtin_arm_qsub8
1436#define __SHSUB8 __builtin_arm_shsub8
1437#define __USUB8 __builtin_arm_usub8
1438#define __UQSUB8 __builtin_arm_uqsub8
1439#define __UHSUB8 __builtin_arm_uhsub8
1440#define __SADD16 __builtin_arm_sadd16
1441#define __QADD16 __builtin_arm_qadd16
1442#define __SHADD16 __builtin_arm_shadd16
1443#define __UADD16 __builtin_arm_uadd16
1444#define __UQADD16 __builtin_arm_uqadd16
1445#define __UHADD16 __builtin_arm_uhadd16
1446#define __SSUB16 __builtin_arm_ssub16
1447#define __QSUB16 __builtin_arm_qsub16
1448#define __SHSUB16 __builtin_arm_shsub16
1449#define __USUB16 __builtin_arm_usub16
1450#define __UQSUB16 __builtin_arm_uqsub16
1451#define __UHSUB16 __builtin_arm_uhsub16
1452#define __SASX __builtin_arm_sasx
1453#define __QASX __builtin_arm_qasx
1454#define __SHASX __builtin_arm_shasx
1455#define __UASX __builtin_arm_uasx
1456#define __UQASX __builtin_arm_uqasx
1457#define __UHASX __builtin_arm_uhasx
1458#define __SSAX __builtin_arm_ssax
1459#define __QSAX __builtin_arm_qsax
1460#define __SHSAX __builtin_arm_shsax
1461#define __USAX __builtin_arm_usax
1462#define __UQSAX __builtin_arm_uqsax
1463#define __UHSAX __builtin_arm_uhsax
1464#define __USAD8 __builtin_arm_usad8
1465#define __USADA8 __builtin_arm_usada8
1466#define __SSAT16 __builtin_arm_ssat16
1467#define __USAT16 __builtin_arm_usat16
1468#define __UXTB16 __builtin_arm_uxtb16
1469#define __UXTAB16 __builtin_arm_uxtab16
1470#define __SXTB16 __builtin_arm_sxtb16
1471#define __SXTAB16 __builtin_arm_sxtab16
1472#define __SMUAD __builtin_arm_smuad
1473#define __SMUADX __builtin_arm_smuadx
1474#define __SMLAD __builtin_arm_smlad
1475#define __SMLADX __builtin_arm_smladx
1476#define __SMLALD __builtin_arm_smlald
1477#define __SMLALDX __builtin_arm_smlaldx
1478#define __SMUSD __builtin_arm_smusd
1479#define __SMUSDX __builtin_arm_smusdx
1480#define __SMLSD __builtin_arm_smlsd
1481#define __SMLSDX __builtin_arm_smlsdx
1482#define __SMLSLD __builtin_arm_smlsld
1483#define __SMLSLDX __builtin_arm_smlsldx
1484#define __SEL __builtin_arm_sel
1485#define __QADD __builtin_arm_qadd
1486#define __QSUB __builtin_arm_qsub
1488#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \
1489 ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) )
1491#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \
1492 ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) )
1494#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2))
1496#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3))
1498__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3)
1502 __ASM
volatile (
"smmla %0, %1, %2, %3" :
"=r" (result):
"r" (op1),
"r" (op2),
"r" (op3) );
__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat)
Signed Saturate.
#define __CLZ
Count leading zeros.
__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat)
Unsigned Saturate.
#define __ROR
Rotate Right in unsigned value (32 bit)
#define __ISB()
Instruction Synchronization Barrier.
__STATIC_INLINE void __set_CONTROL(uint32_t control)
Set Control Register.
__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)
Set Main Stack Pointer.
__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack)
Set Process Stack Pointer.
__STATIC_FORCEINLINE void __disable_irq(void)
Disable IRQ Interrupts.
__STATIC_INLINE uint32_t __get_PRIMASK(void)
Get Priority Mask.
__STATIC_INLINE uint32_t __get_MSP(void)
Get Main Stack Pointer.
__STATIC_INLINE uint32_t __get_CONTROL(void)
Enable IRQ Interrupts.
__STATIC_INLINE uint32_t __get_PSP(void)
Get Process Stack Pointer.
__STATIC_INLINE uint32_t __get_APSR(void)
Get APSR Register.
#define __get_xPSR
Get xPSR Register.
__STATIC_FORCEINLINE void __enable_irq(void)
Enable IRQ Interrupts.
__STATIC_INLINE uint32_t __get_IPSR(void)
Get IPSR Register.
__STATIC_INLINE void __set_PRIMASK(uint32_t priMask)
Set Priority Mask.
void __attribute__((noreturn))(*rom_reset_usb_boot_fn)(uint32_t
Reboot the device into BOOTSEL mode.