root/arch/sh/include/uapi/asm/swab.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. __arch_swab32
  2. __arch_swab16
  3. __arch_swab64

   1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
   2 #ifndef __ASM_SH_SWAB_H
   3 #define __ASM_SH_SWAB_H
   4 
   5 /*
   6  * Copyright (C) 1999  Niibe Yutaka
   7  * Copyright (C) 2000, 2001  Paolo Alberelli
   8  */
   9 #include <linux/compiler.h>
  10 #include <linux/types.h>
  11 #include <asm-generic/swab.h>
  12 
  13 static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
  14 {
  15         __asm__(
  16 #ifdef __SH5__
  17                 "byterev        %1, %0\n\t"
  18                 "shari          %0, 32, %0"
  19 #else
  20                 "swap.b         %1, %0\n\t"
  21                 "swap.w         %0, %0\n\t"
  22                 "swap.b         %0, %0"
  23 #endif
  24                 : "=r" (x)
  25                 : "r" (x));
  26 
  27         return x;
  28 }
  29 #define __arch_swab32 __arch_swab32
  30 
  31 static inline __attribute_const__ __u16 __arch_swab16(__u16 x)
  32 {
  33         __asm__(
  34 #ifdef __SH5__
  35                 "byterev        %1, %0\n\t"
  36                 "shari          %0, 32, %0"
  37 #else
  38                 "swap.b         %1, %0"
  39 #endif
  40                 : "=r" (x)
  41                 :  "r" (x));
  42 
  43         return x;
  44 }
  45 #define __arch_swab16 __arch_swab16
  46 
  47 static inline __u64 __arch_swab64(__u64 val)
  48 {
  49         union {
  50                 struct { __u32 a,b; } s;
  51                 __u64 u;
  52         } v, w;
  53         v.u = val;
  54         w.s.b = __arch_swab32(v.s.a);
  55         w.s.a = __arch_swab32(v.s.b);
  56         return w.u;
  57 }
  58 #define __arch_swab64 __arch_swab64
  59 
  60 #endif /* __ASM_SH_SWAB_H */

/* [<][>][^][v][top][bottom][index][help] */