Added swap of unsigned16

This commit is contained in:
Joel Sherrill
1998-04-27 16:10:16 +00:00
parent eac9871aa2
commit b0aba4c46b
11 changed files with 69 additions and 3 deletions

View File

@@ -961,7 +961,11 @@ void _CPU_Context_restore_fp(
*/
#define CPU_swap_u32( value ) \
((value&0xff) << 24) | (((value >> 8)&0xff) << 16) | (((value >> 16)&0xff) << 8) | ((value>>24)&0xff)
((value&0xff) << 24) | (((value >> 8)&0xff) << 16) | \
(((value >> 16)&0xff) << 8) | ((value>>24)&0xff)
#define CPU_swap_u16( value ) \
(((value&0xff) << 8) | ((value >> 8)&0xff))
#ifdef __cplusplus
}

View File

@@ -599,6 +599,9 @@ CPU_swap_u32(unsigned32 value)
return( swapped );
}
#define CPU_swap_u16( value ) \
(((value&0xff) << 8) | ((value >> 8)&0xff))
#endif /* ! ASM */
#ifdef __cplusplus

View File

@@ -165,10 +165,26 @@ static inline unsigned int i386_swap_U32(
unsigned int value
)
{
unsigned long lout;
asm volatile( "rorw $8,%%ax;"
"rorl $16,%0;"
"rorw $8,%%ax" : "=a" (value) : "0" (value) );
return( value );
"rorw $8,%%ax" : "=a" (lout) : "0" (value) );
/* this should be better for i486dx and above */
/*
__asm__ volatile( "bswap %0" : "=r" (lout) : "0" (lin));
*/
return( lout );
}
static inline unsigned int i386_swap_U16(
unsigned int value
)
{
unsigned short sout;
__asm__ volatile( "rorw $8,%0" : "=r" (sout) : "0" (value));
return (sout);
}
/*
@@ -439,6 +455,7 @@ void i386_Install_idt(
#define get_gs() i386_get_gs()
#define CPU_swap_u32( _value ) i386_swap_U32( _value )
#define CPU_swap_u16( _value ) i386_swap_U16( _value )
/* i80x86 I/O instructions */

View File

@@ -255,6 +255,9 @@ static inline unsigned int CPU_swap_u32(
return( swapped );
}
#define CPU_swap_u16( value ) \
(((value&0xff) << 8) | ((value >> 8)&0xff))
#ifdef __cplusplus
}
#endif

View File

@@ -243,6 +243,17 @@ static inline unsigned int m68k_swap_u32(
return( swapped );
}
static inline unsigned int m68k_swap_u16(
unsigned int value
)
{
unsigned short swapped = value;
asm volatile( "rorw #8,%0" : "=d" (swapped) : "0" (swapped) );
return( swapped );
}
/* XXX this is only valid for some m68k family members and should be fixed */
#define m68k_enable_caching() \
@@ -252,6 +263,7 @@ static inline unsigned int m68k_swap_u32(
}
#define CPU_swap_u32( value ) m68k_swap_u32( value )
#define CPU_swap_u16( value ) m68k_swap_u16( value )
#endif /* !ASM */

View File

@@ -941,6 +941,9 @@ static inline unsigned int CPU_swap_u32(
return( swapped );
}
#define CPU_swap_u16( value ) \
(((value&0xff) << 8) | ((value >> 8)&0xff))
/*
* Miscellaneous prototypes
*

View File

@@ -859,6 +859,9 @@ static inline unsigned int CPU_swap_u32(
return( swapped );
}
#define CPU_swap_u16( value ) \
(((value&0xff) << 8) | ((value >> 8)&0xff))
#ifdef __cplusplus
}
#endif

View File

@@ -1091,6 +1091,9 @@ static inline unsigned int CPU_swap_u32(
return( swapped );
}
#define CPU_swap_u16( value ) \
(((value&0xff) << 8) | ((value >> 8)&0xff))
#ifdef __cplusplus
}
#endif

View File

@@ -134,7 +134,19 @@ static inline unsigned int sh_swap_u32(
return( swapped );
}
static inline unsigned int sh_swap_u32(
unsigned int value
)
{
register unsigned int swapped ;
asm volatile ( "swap.b %1,%0 : "=r" (swapped) : "r" (value) );
return( swapped );
}
#define CPU_swap_u32( value ) sh_swap_u32( value )
#define CPU_swap_u16( value ) sh_swap_u16( value )
/*
* Simple spin delay in microsecond units for device drivers.

View File

@@ -994,6 +994,9 @@ static inline unsigned int CPU_swap_u32(
return( swapped );
}
#define CPU_swap_u16( value ) \
(((value&0xff) << 8) | ((value >> 8)&0xff))
#endif ASM
#ifdef __cplusplus

View File

@@ -991,6 +991,9 @@ static inline unsigned int CPU_swap_u32(
return( swapped );
}
#define CPU_swap_u16( value ) \
(((value&0xff) << 8) | ((value >> 8)&0xff))
/*
* Special Purpose Routines to hide the use of UNIX system calls.
*/