1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */ 2819833afSPeter Tyser /* 3819833afSPeter Tyser * Copyright (C) 1996, 99, 2003 by Ralf Baechle 4819833afSPeter Tyser */ 5819833afSPeter Tyser #ifndef _ASM_BYTEORDER_H 6819833afSPeter Tyser #define _ASM_BYTEORDER_H 7819833afSPeter Tyser 8819833afSPeter Tyser #include <asm/types.h> 9819833afSPeter Tyser 10819833afSPeter Tyser #ifdef __GNUC__ 11819833afSPeter Tyser 12819833afSPeter Tyser #ifdef CONFIG_CPU_MIPSR2 13819833afSPeter Tyser 14819833afSPeter Tyser static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x) 15819833afSPeter Tyser { 16819833afSPeter Tyser __asm__( 17819833afSPeter Tyser " wsbh %0, %1 \n" 18819833afSPeter Tyser : "=r" (x) 19819833afSPeter Tyser : "r" (x)); 20819833afSPeter Tyser 21819833afSPeter Tyser return x; 22819833afSPeter Tyser } 23819833afSPeter Tyser #define __arch__swab16(x) ___arch__swab16(x) 24819833afSPeter Tyser 25819833afSPeter Tyser static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x) 26819833afSPeter Tyser { 27819833afSPeter Tyser __asm__( 28819833afSPeter Tyser " wsbh %0, %1 \n" 29819833afSPeter Tyser " rotr %0, %0, 16 \n" 30819833afSPeter Tyser : "=r" (x) 31819833afSPeter Tyser : "r" (x)); 32819833afSPeter Tyser 33819833afSPeter Tyser return x; 34819833afSPeter Tyser } 35819833afSPeter Tyser #define __arch__swab32(x) ___arch__swab32(x) 36819833afSPeter Tyser 37819833afSPeter Tyser #ifdef CONFIG_CPU_MIPS64_R2 38819833afSPeter Tyser 39819833afSPeter Tyser static __inline__ __attribute_const__ __u64 ___arch__swab64(__u64 x) 40819833afSPeter Tyser { 41819833afSPeter Tyser __asm__( 42819833afSPeter Tyser " dsbh %0, %1 \n" 43819833afSPeter Tyser " dshd %0, %0 \n" 44819833afSPeter Tyser " drotr %0, %0, 32 \n" 45819833afSPeter Tyser : "=r" (x) 46819833afSPeter Tyser : "r" (x)); 47819833afSPeter Tyser 48819833afSPeter Tyser return x; 49819833afSPeter Tyser } 50819833afSPeter Tyser 51819833afSPeter Tyser #define __arch__swab64(x) ___arch__swab64(x) 52819833afSPeter Tyser 53819833afSPeter Tyser #endif /* CONFIG_CPU_MIPS64_R2 */ 54819833afSPeter Tyser 55819833afSPeter Tyser #endif /* CONFIG_CPU_MIPSR2 */ 56819833afSPeter Tyser 57819833afSPeter Tyser #if !defined(__STRICT_ANSI__) || defined(__KERNEL__) 58819833afSPeter Tyser # define __BYTEORDER_HAS_U64__ 59819833afSPeter Tyser # define __SWAB_64_THRU_32__ 60819833afSPeter Tyser #endif 61819833afSPeter Tyser 62819833afSPeter Tyser #endif /* __GNUC__ */ 63819833afSPeter Tyser 64819833afSPeter Tyser #if defined(__MIPSEB__) 65819833afSPeter Tyser # include <linux/byteorder/big_endian.h> 66819833afSPeter Tyser #elif defined(__MIPSEL__) 67819833afSPeter Tyser # include <linux/byteorder/little_endian.h> 68819833afSPeter Tyser #else 69819833afSPeter Tyser # error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???" 70819833afSPeter Tyser #endif 71819833afSPeter Tyser 72819833afSPeter Tyser #endif /* _ASM_BYTEORDER_H */ 73