forked from Imagelibrary/rtems
Eric Norum sent in new versions of the inline assembly macros which
do not generate warnings for unitialized variables.
This commit is contained in:
@@ -28,8 +28,6 @@ extern "C" {
|
||||
* in some time critical routines.
|
||||
*/
|
||||
|
||||
#define NO_UNINITIALIZED_WARNINGS
|
||||
|
||||
#include <rtems/score/m68k.h>
|
||||
#ifndef ASM
|
||||
#include <rtems/score/m68ktypes.h>
|
||||
@@ -310,27 +308,9 @@ unsigned32 _CPU_ISR_Get_level( void );
|
||||
#define CPU_USE_GENERIC_BITFIELD_DATA FALSE
|
||||
|
||||
#if ( M68K_HAS_BFFFO == 1 )
|
||||
#ifdef NO_UNINITIALIZED_WARNINGS
|
||||
|
||||
#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
|
||||
{ \
|
||||
register void *__base = (void *)&(_value); \
|
||||
\
|
||||
(_output) = 0; /* avoids warnings */ \
|
||||
asm volatile( "bfffo (%0),#0,#16,%1" \
|
||||
: "=a" (__base), "=d" ((_output)) \
|
||||
: "0" (__base), "1" ((_output)) ) ; \
|
||||
}
|
||||
#else
|
||||
#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
|
||||
{ \
|
||||
register void *__base = (void *)&(_value); \
|
||||
\
|
||||
asm volatile( "bfffo (%0),#0,#16,%1" \
|
||||
: "=a" (__base), "=d" ((_output)) \
|
||||
: "0" (__base), "1" ((_output)) ) ; \
|
||||
}
|
||||
#endif
|
||||
asm volatile( "bfffo (%1),#0,#16,%0" : "=d" (_output), "=a" (&_value));
|
||||
|
||||
#else
|
||||
|
||||
|
||||
@@ -193,15 +193,6 @@ extern "C" {
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If defined, this causes some of the macros to initialize their
|
||||
* variables to zero before doing inline assembly. This gets rid
|
||||
* of compile time warnings at the cost of a little execution time
|
||||
* in some time critical routines.
|
||||
*/
|
||||
|
||||
#define NO_UNINITIALIZED_WARNINGS
|
||||
|
||||
/*
|
||||
* Define the name of the CPU family.
|
||||
*/
|
||||
@@ -210,78 +201,42 @@ extern "C" {
|
||||
|
||||
#ifndef ASM
|
||||
|
||||
#ifdef NO_UNINITIALIZED_WARNINGS
|
||||
#define m68k_disable_interrupts( _level ) \
|
||||
{ \
|
||||
(_level) = 0; /* avoids warnings */ \
|
||||
asm volatile ( "movew %%sr,%0 ; \
|
||||
orw #0x0700,%%sr" \
|
||||
: "=d" ((_level)) : "0" ((_level)) \
|
||||
); \
|
||||
}
|
||||
#else
|
||||
#define m68k_disable_interrupts( _level ) \
|
||||
{ \
|
||||
asm volatile ( "movew %%sr,%0 ; \
|
||||
orw #0x0700,%%sr" \
|
||||
: "=d" ((_level)) : "0" ((_level)) \
|
||||
); \
|
||||
}
|
||||
#endif
|
||||
asm volatile ( "movew %%sr,%0\n\t" \
|
||||
"orw #0x0700,%%sr" \
|
||||
: "=d" (_level))
|
||||
|
||||
#define m68k_enable_interrupts( _level ) \
|
||||
{ \
|
||||
asm volatile ( "movew %0,%%sr " \
|
||||
: "=d" ((_level)) : "0" ((_level)) \
|
||||
); \
|
||||
}
|
||||
asm volatile ( "movew %0,%%sr " : : "d" (_level));
|
||||
|
||||
#define m68k_flash_interrupts( _level ) \
|
||||
{ \
|
||||
asm volatile ( "movew %0,%%sr ; \
|
||||
orw #0x0700,%%sr" \
|
||||
: "=d" ((_level)) : "0" ((_level)) \
|
||||
); \
|
||||
}
|
||||
asm volatile ( "movew %0,%%sr\n\t" \
|
||||
"orw #0x0700,%%sr" \
|
||||
: : "d" (_level))
|
||||
|
||||
#define m68k_get_interrupt_level( _level ) \
|
||||
do { \
|
||||
register unsigned32 _tmpsr = 0; \
|
||||
\
|
||||
asm volatile( "movw %%sr,%0" \
|
||||
: "=d" (_tmpsr) : "0" (_tmpsr) \
|
||||
); \
|
||||
register unsigned32 _tmpsr; \
|
||||
\
|
||||
asm volatile( "movw %%sr,%0" : "=d" (_tmpsr)); \
|
||||
_level = (_tmpsr & 0x0700) >> 8; \
|
||||
} while (0)
|
||||
|
||||
#define m68k_set_interrupt_level( _newlevel ) \
|
||||
{ \
|
||||
register unsigned32 _tmpsr = 0; \
|
||||
\
|
||||
asm volatile( "movw %%sr,%0" \
|
||||
: "=d" (_tmpsr) : "0" (_tmpsr) \
|
||||
); \
|
||||
do { \
|
||||
register unsigned32 _tmpsr; \
|
||||
\
|
||||
asm volatile( "movw %%sr,%0" : "=d" (_tmpsr)); \
|
||||
_tmpsr = (_tmpsr & 0xf8ff) | ((_newlevel) << 8); \
|
||||
\
|
||||
asm volatile( "movw %0,%%sr" \
|
||||
: "=d" (_tmpsr) : "0" (_tmpsr) \
|
||||
); \
|
||||
}
|
||||
asm volatile( "movw %0,%%sr" : : "d" (_tmpsr)); \
|
||||
} while (0)
|
||||
|
||||
#if ( M68K_HAS_VBR == 1 )
|
||||
#define m68k_get_vbr( vbr ) \
|
||||
{ (vbr) = 0; \
|
||||
asm volatile ( "movec %%vbr,%0 " \
|
||||
: "=r" (vbr) : "0" (vbr) ); \
|
||||
}
|
||||
asm volatile ( "movec %%vbr,%0 " : "=r" (vbr))
|
||||
|
||||
#define m68k_set_vbr( vbr ) \
|
||||
{ register m68k_isr *_vbr= (m68k_isr *)(vbr); \
|
||||
asm volatile ( "movec %0,%%vbr " \
|
||||
: "=a" (_vbr) : "0" (_vbr) ); \
|
||||
}
|
||||
asm volatile ( "movec %0,%%vbr " : : "r" (vbr))
|
||||
#else
|
||||
#define m68k_get_vbr( _vbr ) _vbr = (void *)_VBR
|
||||
#define m68k_set_vbr( _vbr )
|
||||
|
||||
Reference in New Issue
Block a user