| 
				
			 | 
			
			
				
				@@ -1,22 +1,47 @@ 
			 | 
		
		
	
		
			
			| 
				1
			 | 
			
				1
			 | 
			
			
				
				 #ifndef _BITS_BYTESWAP_H 
			 | 
		
		
	
		
			
			| 
				2
			 | 
			
				2
			 | 
			
			
				
				 #define _BITS_BYTESWAP_H 
			 | 
		
		
	
		
			
			| 
				3
			 | 
			
				3
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				4
			 | 
			
			
				
				+/** @file 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				5
			 | 
			
			
				
				+ * 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				6
			 | 
			
			
				
				+ * Byte-order swapping functions 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				7
			 | 
			
			
				
				+ * 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				8
			 | 
			
			
				
				+ */ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				9
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				10
			 | 
			
			
				
				+#include <stdint.h> 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				11
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				12
			 | 
			
			
				
				+FILE_LICENCE ( GPL2_OR_LATER ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				13
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				4
			 | 
			
				14
			 | 
			
			
				
				 static inline __attribute__ (( always_inline, const )) uint16_t 
			 | 
		
		
	
		
			
			| 
				5
			 | 
			
				15
			 | 
			
			
				
				 __bswap_variable_16 ( uint16_t x ) { 
			 | 
		
		
	
		
			
			| 
				6
			 | 
			
				16
			 | 
			
			
				
				 	__asm__ ( "xchgb %b0,%h0" : "=Q" ( x ) : "0" ( x ) ); 
			 | 
		
		
	
		
			
			| 
				7
			 | 
			
				17
			 | 
			
			
				
				 	return x; 
			 | 
		
		
	
		
			
			| 
				8
			 | 
			
				18
			 | 
			
			
				
				 } 
			 | 
		
		
	
		
			
			| 
				9
			 | 
			
				19
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				20
			 | 
			
			
				
				+static inline __attribute__ (( always_inline )) void 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				21
			 | 
			
			
				
				+__bswap_16s ( uint16_t *x ) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				22
			 | 
			
			
				
				+	__asm__ ( "rorw $8, %0" : "=g" ( *x ) : "0" ( *x ) ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				23
			 | 
			
			
				
				+} 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				24
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				10
			 | 
			
				25
			 | 
			
			
				
				 static inline __attribute__ (( always_inline, const )) uint32_t 
			 | 
		
		
	
		
			
			| 
				11
			 | 
			
				26
			 | 
			
			
				
				 __bswap_variable_32 ( uint32_t x ) { 
			 | 
		
		
	
		
			
			| 
				12
			 | 
			
				27
			 | 
			
			
				
				 	__asm__ ( "bswapl %k0" : "=r" ( x ) : "0" ( x ) ); 
			 | 
		
		
	
		
			
			| 
				13
			 | 
			
				28
			 | 
			
			
				
				 	return x; 
			 | 
		
		
	
		
			
			| 
				14
			 | 
			
				29
			 | 
			
			
				
				 } 
			 | 
		
		
	
		
			
			| 
				15
			 | 
			
				30
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				31
			 | 
			
			
				
				+static inline __attribute__ (( always_inline )) void 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				32
			 | 
			
			
				
				+__bswap_32s ( uint32_t *x ) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				33
			 | 
			
			
				
				+	__asm__ ( "bswapl %k0" : "=r" ( *x ) : "0" ( *x ) ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				34
			 | 
			
			
				
				+} 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				35
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				16
			 | 
			
				36
			 | 
			
			
				
				 static inline __attribute__ (( always_inline, const )) uint64_t 
			 | 
		
		
	
		
			
			| 
				17
			 | 
			
				37
			 | 
			
			
				
				 __bswap_variable_64 ( uint64_t x ) { 
			 | 
		
		
	
		
			
			| 
				18
			 | 
			
				38
			 | 
			
			
				
				 	__asm__ ( "bswapq %q0" : "=r" ( x ) : "0" ( x ) ); 
			 | 
		
		
	
		
			
			| 
				19
			 | 
			
				39
			 | 
			
			
				
				 	return x; 
			 | 
		
		
	
		
			
			| 
				20
			 | 
			
				40
			 | 
			
			
				
				 } 
			 | 
		
		
	
		
			
			| 
				21
			 | 
			
				41
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				42
			 | 
			
			
				
				+static inline __attribute__ (( always_inline )) void 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				43
			 | 
			
			
				
				+__bswap_64s ( uint64_t *x ) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				44
			 | 
			
			
				
				+	__asm__ ( "bswapq %q0" : "=r" ( *x ) : "0" ( *x ) ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				45
			 | 
			
			
				
				+} 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				46
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				22
			 | 
			
				47
			 | 
			
			
				
				 #endif /* _BITS_BYTESWAP_H */ 
			 |