forked from Imagelibrary/rtems
arm: Move inline functions
This commit is contained in:
@@ -20,6 +20,8 @@
|
|||||||
* http://www.rtems.com/license/LICENSE.
|
* http://www.rtems.com/license/LICENSE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <rtems/score/armv4.h>
|
||||||
|
|
||||||
#include <bsp.h>
|
#include <bsp.h>
|
||||||
#include <bsp/irq.h>
|
#include <bsp/irq.h>
|
||||||
#include <bsp/irq-generic.h>
|
#include <bsp/irq-generic.h>
|
||||||
|
|||||||
@@ -55,6 +55,40 @@ void _ARMV4_Exception_irq_default( void );
|
|||||||
|
|
||||||
void _ARMV4_Exception_fiq_default( void );
|
void _ARMV4_Exception_fiq_default( void );
|
||||||
|
|
||||||
|
static inline uint32_t arm_status_irq_enable( void )
|
||||||
|
{
|
||||||
|
uint32_t arm_switch_reg;
|
||||||
|
uint32_t psr;
|
||||||
|
|
||||||
|
RTEMS_COMPILER_MEMORY_BARRIER();
|
||||||
|
|
||||||
|
__asm__ volatile (
|
||||||
|
ARM_SWITCH_TO_ARM
|
||||||
|
"mrs %[psr], cpsr\n"
|
||||||
|
"bic %[arm_switch_reg], %[psr], #0x80\n"
|
||||||
|
"msr cpsr, %[arm_switch_reg]\n"
|
||||||
|
ARM_SWITCH_BACK
|
||||||
|
: [arm_switch_reg] "=&r" (arm_switch_reg), [psr] "=&r" (psr)
|
||||||
|
);
|
||||||
|
|
||||||
|
return psr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void arm_status_restore( uint32_t psr )
|
||||||
|
{
|
||||||
|
ARM_SWITCH_REGISTERS;
|
||||||
|
|
||||||
|
__asm__ volatile (
|
||||||
|
ARM_SWITCH_TO_ARM
|
||||||
|
"msr cpsr, %[psr]\n"
|
||||||
|
ARM_SWITCH_BACK
|
||||||
|
: ARM_SWITCH_OUTPUT
|
||||||
|
: [psr] "r" (psr)
|
||||||
|
);
|
||||||
|
|
||||||
|
RTEMS_COMPILER_MEMORY_BARRIER();
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* ARM_MULTILIB_ARCH_V4 */
|
#endif /* ARM_MULTILIB_ARCH_V4 */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -503,40 +503,6 @@ typedef enum {
|
|||||||
ARM_EXCEPTION_MAKE_ENUM_32_BIT = 0xffffffff
|
ARM_EXCEPTION_MAKE_ENUM_32_BIT = 0xffffffff
|
||||||
} Arm_symbolic_exception_name;
|
} Arm_symbolic_exception_name;
|
||||||
|
|
||||||
static inline uint32_t arm_status_irq_enable( void )
|
|
||||||
{
|
|
||||||
uint32_t arm_switch_reg;
|
|
||||||
uint32_t psr;
|
|
||||||
|
|
||||||
RTEMS_COMPILER_MEMORY_BARRIER();
|
|
||||||
|
|
||||||
__asm__ volatile (
|
|
||||||
ARM_SWITCH_TO_ARM
|
|
||||||
"mrs %[psr], cpsr\n"
|
|
||||||
"bic %[arm_switch_reg], %[psr], #0x80\n"
|
|
||||||
"msr cpsr, %[arm_switch_reg]\n"
|
|
||||||
ARM_SWITCH_BACK
|
|
||||||
: [arm_switch_reg] "=&r" (arm_switch_reg), [psr] "=&r" (psr)
|
|
||||||
);
|
|
||||||
|
|
||||||
return psr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void arm_status_restore( uint32_t psr )
|
|
||||||
{
|
|
||||||
ARM_SWITCH_REGISTERS;
|
|
||||||
|
|
||||||
__asm__ volatile (
|
|
||||||
ARM_SWITCH_TO_ARM
|
|
||||||
"msr cpsr, %[psr]\n"
|
|
||||||
ARM_SWITCH_BACK
|
|
||||||
: ARM_SWITCH_OUTPUT
|
|
||||||
: [psr] "r" (psr)
|
|
||||||
);
|
|
||||||
|
|
||||||
RTEMS_COMPILER_MEMORY_BARRIER();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
Reference in New Issue
Block a user