Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/mips/include/uapi/asm/swab.h
26495 views
1
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2
/*
3
* This file is subject to the terms and conditions of the GNU General Public
4
* License. See the file "COPYING" in the main directory of this archive
5
* for more details.
6
*
7
* Copyright (C) 1996, 99, 2003 by Ralf Baechle
8
*/
9
#ifndef _ASM_SWAB_H
10
#define _ASM_SWAB_H
11
12
#include <linux/compiler.h>
13
#include <linux/types.h>
14
15
#define __SWAB_64_THRU_32__
16
17
#if !defined(__mips16) && \
18
((defined(__mips_isa_rev) && (__mips_isa_rev >= 2)) || \
19
defined(_MIPS_ARCH_LOONGSON3A))
20
21
static inline __attribute_const__ __u16 __arch_swab16(__u16 x)
22
{
23
__asm__(
24
" .set push \n"
25
" .set arch=mips32r2 \n"
26
" wsbh %0, %1 \n"
27
" .set pop \n"
28
: "=r" (x)
29
: "r" (x));
30
31
return x;
32
}
33
#define __arch_swab16 __arch_swab16
34
35
static inline __attribute_const__ __u32 __arch_swab32(__u32 x)
36
{
37
__asm__(
38
" .set push \n"
39
" .set arch=mips32r2 \n"
40
" wsbh %0, %1 \n"
41
" rotr %0, %0, 16 \n"
42
" .set pop \n"
43
: "=r" (x)
44
: "r" (x));
45
46
return x;
47
}
48
#define __arch_swab32 __arch_swab32
49
50
/*
51
* Having already checked for MIPS R2, enable the optimized version for
52
* 64-bit kernel on r2 CPUs.
53
*/
54
#ifdef __mips64
55
static inline __attribute_const__ __u64 __arch_swab64(__u64 x)
56
{
57
__asm__(
58
" .set push \n"
59
" .set arch=mips64r2 \n"
60
" dsbh %0, %1 \n"
61
" dshd %0, %0 \n"
62
" .set pop \n"
63
: "=r" (x)
64
: "r" (x));
65
66
return x;
67
}
68
#define __arch_swab64 __arch_swab64
69
#endif /* __mips64 */
70
#endif /* (not __mips16) and (MIPS R2 or newer or Loongson 3A) */
71
#endif /* _ASM_SWAB_H */
72
73