linux/arch/mips/include/uapi/asm/swab.h
<<
>>
Prefs
   1/*
   2 * This file is subject to the terms and conditions of the GNU General Public
   3 * License.  See the file "COPYING" in the main directory of this archive
   4 * for more details.
   5 *
   6 * Copyright (C) 1996, 99, 2003 by Ralf Baechle
   7 */
   8#ifndef _ASM_SWAB_H
   9#define _ASM_SWAB_H
  10
  11#include <linux/compiler.h>
  12#include <linux/types.h>
  13
  14#define __SWAB_64_THRU_32__
  15
  16#if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)
  17
  18static inline __attribute_const__ __u16 __arch_swab16(__u16 x)
  19{
  20        __asm__(
  21        "       wsbh    %0, %1                  \n"
  22        : "=r" (x)
  23        : "r" (x));
  24
  25        return x;
  26}
  27#define __arch_swab16 __arch_swab16
  28
  29static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
  30{
  31        __asm__(
  32        "       wsbh    %0, %1                  \n"
  33        "       rotr    %0, %0, 16              \n"
  34        : "=r" (x)
  35        : "r" (x));
  36
  37        return x;
  38}
  39#define __arch_swab32 __arch_swab32
  40
  41/*
  42 * Having already checked for MIPS R2, enable the optimized version for
  43 * 64-bit kernel on r2 CPUs.
  44 */
  45#ifdef __mips64
  46static inline __attribute_const__ __u64 __arch_swab64(__u64 x)
  47{
  48        __asm__(
  49        "       dsbh    %0, %1\n"
  50        "       dshd    %0, %0"
  51        : "=r" (x)
  52        : "r" (x));
  53
  54        return x;
  55}
  56#define __arch_swab64 __arch_swab64
  57#endif /* __mips64 */
  58#endif /* MIPS R2 or newer  */
  59#endif /* _ASM_SWAB_H */
  60