diff options
Diffstat (limited to 'c/src/lib/libbsp/powerpc/ppcn_60x/startup/swap.c')
-rw-r--r-- | c/src/lib/libbsp/powerpc/ppcn_60x/startup/swap.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/powerpc/ppcn_60x/startup/swap.c b/c/src/lib/libbsp/powerpc/ppcn_60x/startup/swap.c new file mode 100644 index 0000000000..58b3e13dbb --- /dev/null +++ b/c/src/lib/libbsp/powerpc/ppcn_60x/startup/swap.c @@ -0,0 +1,64 @@ +/* + * COPYRIGHT (c) 1998 by Radstone Technology + * + * + * THIS FILE IS PROVIDED TO YOU, THE USER, "AS IS", WITHOUT WARRANTY OF ANY + * KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK + * AS TO THE QUALITY AND PERFORMANCE OF ALL CODE IN THIS FILE IS WITH YOU. + * + * You are hereby granted permission to use, copy, modify, and distribute + * this file, provided that this notice, plus the above copyright notice + * and disclaimer, appears in all copies. Radstone Technology will provide + * no support for this code. + * + */ + +#include <rtems.h> + +/* + * JRS - February 20, 1998 + * + * There is a swap32 in each port. So this should be removed. + * + * Adding a swap16 to the port would be useful. + * + * The end of all this would be to remove this file. + */ + +inline unsigned int Swap32( + unsigned32 ulValue +) +{ + unsigned32 ulSwapped; + + asm volatile( + "rlwimi %0,%1,8,24,31;" + "rlwimi %0,%1,24,16,23;" + "rlwimi %0,%1,8,8,15;" + "rlwimi %0,%1,24,0,7;" : + + "=&r" ((ulSwapped)) : + "r" ((ulValue)) + ); + + return( ulSwapped ); +} + +inline unsigned int Swap16( + unsigned16 usValue +) +{ + unsigned16 usSwapped; + + asm volatile( + "rlwimi %0,%1,24,24,31;" + "rlwimi %0,%1,8,16,23;" : + + "=&r" ((usSwapped)) : + "r" ((usValue)) + ); + + return( usSwapped ); +} + |