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.
|
* in some time critical routines.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define NO_UNINITIALIZED_WARNINGS
|
|
||||||
|
|
||||||
#include <rtems/score/m68k.h>
|
#include <rtems/score/m68k.h>
|
||||||
#ifndef ASM
|
#ifndef ASM
|
||||||
#include <rtems/score/m68ktypes.h>
|
#include <rtems/score/m68ktypes.h>
|
||||||
@@ -310,27 +308,9 @@ unsigned32 _CPU_ISR_Get_level( void );
|
|||||||
#define CPU_USE_GENERIC_BITFIELD_DATA FALSE
|
#define CPU_USE_GENERIC_BITFIELD_DATA FALSE
|
||||||
|
|
||||||
#if ( M68K_HAS_BFFFO == 1 )
|
#if ( M68K_HAS_BFFFO == 1 )
|
||||||
#ifdef NO_UNINITIALIZED_WARNINGS
|
|
||||||
|
|
||||||
#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
|
#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
|
||||||
{ \
|
asm volatile( "bfffo (%1),#0,#16,%0" : "=d" (_output), "=a" (&_value));
|
||||||
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
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|||||||
@@ -193,15 +193,6 @@ extern "C" {
|
|||||||
|
|
||||||
#endif
|
#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.
|
* Define the name of the CPU family.
|
||||||
*/
|
*/
|
||||||
@@ -210,78 +201,42 @@ extern "C" {
|
|||||||
|
|
||||||
#ifndef ASM
|
#ifndef ASM
|
||||||
|
|
||||||
#ifdef NO_UNINITIALIZED_WARNINGS
|
|
||||||
#define m68k_disable_interrupts( _level ) \
|
#define m68k_disable_interrupts( _level ) \
|
||||||
{ \
|
asm volatile ( "movew %%sr,%0\n\t" \
|
||||||
(_level) = 0; /* avoids warnings */ \
|
"orw #0x0700,%%sr" \
|
||||||
asm volatile ( "movew %%sr,%0 ; \
|
: "=d" (_level))
|
||||||
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
|
|
||||||
|
|
||||||
#define m68k_enable_interrupts( _level ) \
|
#define m68k_enable_interrupts( _level ) \
|
||||||
{ \
|
asm volatile ( "movew %0,%%sr " : : "d" (_level));
|
||||||
asm volatile ( "movew %0,%%sr " \
|
|
||||||
: "=d" ((_level)) : "0" ((_level)) \
|
|
||||||
); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define m68k_flash_interrupts( _level ) \
|
#define m68k_flash_interrupts( _level ) \
|
||||||
{ \
|
asm volatile ( "movew %0,%%sr\n\t" \
|
||||||
asm volatile ( "movew %0,%%sr ; \
|
"orw #0x0700,%%sr" \
|
||||||
orw #0x0700,%%sr" \
|
: : "d" (_level))
|
||||||
: "=d" ((_level)) : "0" ((_level)) \
|
|
||||||
); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define m68k_get_interrupt_level( _level ) \
|
#define m68k_get_interrupt_level( _level ) \
|
||||||
do { \
|
do { \
|
||||||
register unsigned32 _tmpsr = 0; \
|
register unsigned32 _tmpsr; \
|
||||||
\
|
|
||||||
asm volatile( "movw %%sr,%0" \
|
|
||||||
: "=d" (_tmpsr) : "0" (_tmpsr) \
|
|
||||||
); \
|
|
||||||
\
|
\
|
||||||
|
asm volatile( "movw %%sr,%0" : "=d" (_tmpsr)); \
|
||||||
_level = (_tmpsr & 0x0700) >> 8; \
|
_level = (_tmpsr & 0x0700) >> 8; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define m68k_set_interrupt_level( _newlevel ) \
|
#define m68k_set_interrupt_level( _newlevel ) \
|
||||||
{ \
|
do { \
|
||||||
register unsigned32 _tmpsr = 0; \
|
register unsigned32 _tmpsr; \
|
||||||
\
|
|
||||||
asm volatile( "movw %%sr,%0" \
|
|
||||||
: "=d" (_tmpsr) : "0" (_tmpsr) \
|
|
||||||
); \
|
|
||||||
\
|
\
|
||||||
|
asm volatile( "movw %%sr,%0" : "=d" (_tmpsr)); \
|
||||||
_tmpsr = (_tmpsr & 0xf8ff) | ((_newlevel) << 8); \
|
_tmpsr = (_tmpsr & 0xf8ff) | ((_newlevel) << 8); \
|
||||||
\
|
asm volatile( "movw %0,%%sr" : : "d" (_tmpsr)); \
|
||||||
asm volatile( "movw %0,%%sr" \
|
} while (0)
|
||||||
: "=d" (_tmpsr) : "0" (_tmpsr) \
|
|
||||||
); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#if ( M68K_HAS_VBR == 1 )
|
#if ( M68K_HAS_VBR == 1 )
|
||||||
#define m68k_get_vbr( vbr ) \
|
#define m68k_get_vbr( vbr ) \
|
||||||
{ (vbr) = 0; \
|
asm volatile ( "movec %%vbr,%0 " : "=r" (vbr))
|
||||||
asm volatile ( "movec %%vbr,%0 " \
|
|
||||||
: "=r" (vbr) : "0" (vbr) ); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define m68k_set_vbr( vbr ) \
|
#define m68k_set_vbr( vbr ) \
|
||||||
{ register m68k_isr *_vbr= (m68k_isr *)(vbr); \
|
asm volatile ( "movec %0,%%vbr " : : "r" (vbr))
|
||||||
asm volatile ( "movec %0,%%vbr " \
|
|
||||||
: "=a" (_vbr) : "0" (_vbr) ); \
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
#define m68k_get_vbr( _vbr ) _vbr = (void *)_VBR
|
#define m68k_get_vbr( _vbr ) _vbr = (void *)_VBR
|
||||||
#define m68k_set_vbr( _vbr )
|
#define m68k_set_vbr( _vbr )
|
||||||
|
|||||||
Reference in New Issue
Block a user