cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

swab.h (1532B)


      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
     21static 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
     35static 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
     55static 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 */