summaryrefslogtreecommitdiffstats
path: root/cpukit/score/cpu/arm/rtems/score/cpu.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/cpu/arm/rtems/score/cpu.h')
-rw-r--r--cpukit/score/cpu/arm/rtems/score/cpu.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/cpukit/score/cpu/arm/rtems/score/cpu.h b/cpukit/score/cpu/arm/rtems/score/cpu.h
index f03ff2baab..cf99701e9c 100644
--- a/cpukit/score/cpu/arm/rtems/score/cpu.h
+++ b/cpukit/score/cpu/arm/rtems/score/cpu.h
@@ -512,7 +512,26 @@ SCORE_EXTERN Context_Control_fp _CPU_Null_fp_context;
* Disable all interrupts for an RTEMS critical section. The previous
* level is returned in _level.
*/
+#if (defined(__THUMB_INTERWORK__) || defined(__thumb__))
+extern unsigned int _CPU_ISR_Disable_Thumb(void) __attribute__ ((naked));
+extern void _CPU_ISR_Enable_Thumb( int ) __attribute__ ((naked));
+extern void _CPU_ISR_Flash_Thumb(int) __attribute__ ((naked));
+extern void _CPU_ISR_Set_level_Thumb(int ) __attribute__ ((naked));
+extern uint32_t _CPU_ISR_Get_level_Thumb(void ) __attribute__ ((naked));
+
+#define _CPU_ISR_Disable(_level) \
+ (_level) = _CPU_ISR_Disable_Thumb()
+
+#define _CPU_ISR_Enable(a) _CPU_ISR_Enable_Thumb(a)
+
+#define _CPU_ISR_Flash(a) _CPU_ISR_Flash_Thumb(a)
+
+#define _CPU_ISR_Set_level(a) _CPU_ISR_Set_level_Thumb(a)
+
+#define _CPU_ISR_Get_level(a) _CPU_ISR_Get_level_Thumb(a)
+
+#else /*For ARM mode*/
#define _CPU_ISR_Disable( _level ) \
{ \
int reg; \
@@ -575,6 +594,7 @@ SCORE_EXTERN Context_Control_fp _CPU_Null_fp_context;
: "0" (reg), "r" (new_level)); \
}
+#endif /*(defined(__THUMB_INTERWORK__) || defined(__thumb__))*/
uint32_t _CPU_ISR_Get_level( void );