1/* 2 * Copyright (C) 2011 Texas Instruments Incorporated 3 * Author: Mark Salter <msalter@redhat.com> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 2 as 7 * published by the Free Software Foundation. 8 */ 9#ifndef _ASM_C6X_SWAB_H 10#define _ASM_C6X_SWAB_H 11 12static inline __attribute_const__ __u16 __c6x_swab16(__u16 val) 13{ 14 asm("swap4 .l1 %0,%0\n" : "+a"(val)); 15 return val; 16} 17 18static inline __attribute_const__ __u32 __c6x_swab32(__u32 val) 19{ 20 asm("swap4 .l1 %0,%0\n" 21 "swap2 .l1 %0,%0\n" 22 : "+a"(val)); 23 return val; 24} 25 26static inline __attribute_const__ __u64 __c6x_swab64(__u64 val) 27{ 28 asm(" swap2 .s1 %p0,%P0\n" 29 "|| swap2 .l1 %P0,%p0\n" 30 " swap4 .l1 %p0,%p0\n" 31 " swap4 .l1 %P0,%P0\n" 32 : "+a"(val)); 33 return val; 34} 35 36static inline __attribute_const__ __u32 __c6x_swahw32(__u32 val) 37{ 38 asm("swap2 .l1 %0,%0\n" : "+a"(val)); 39 return val; 40} 41 42static inline __attribute_const__ __u32 __c6x_swahb32(__u32 val) 43{ 44 asm("swap4 .l1 %0,%0\n" : "+a"(val)); 45 return val; 46} 47 48#define __arch_swab16 __c6x_swab16 49#define __arch_swab32 __c6x_swab32 50#define __arch_swab64 __c6x_swab64 51#define __arch_swahw32 __c6x_swahw32 52#define __arch_swahb32 __c6x_swahb32 53 54#endif /* _ASM_C6X_SWAB_H */ 55