16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2af170c50SDavid Howells #ifndef _ASM_X86_SWAB_H 3af170c50SDavid Howells #define _ASM_X86_SWAB_H 4af170c50SDavid Howells 5af170c50SDavid Howells #include <linux/types.h> 6af170c50SDavid Howells #include <linux/compiler.h> 7af170c50SDavid Howells __arch_swab32(__u32 val)8af170c50SDavid Howellsstatic inline __attribute_const__ __u32 __arch_swab32(__u32 val) 9af170c50SDavid Howells { 10af170c50SDavid Howells asm("bswapl %0" : "=r" (val) : "0" (val)); 11af170c50SDavid Howells return val; 12af170c50SDavid Howells } 13af170c50SDavid Howells #define __arch_swab32 __arch_swab32 14af170c50SDavid Howells __arch_swab64(__u64 val)15af170c50SDavid Howellsstatic inline __attribute_const__ __u64 __arch_swab64(__u64 val) 16af170c50SDavid Howells { 17af170c50SDavid Howells #ifdef __i386__ 18af170c50SDavid Howells union { 19af170c50SDavid Howells struct { 20af170c50SDavid Howells __u32 a; 21af170c50SDavid Howells __u32 b; 22af170c50SDavid Howells } s; 23af170c50SDavid Howells __u64 u; 24af170c50SDavid Howells } v; 25af170c50SDavid Howells v.u = val; 26af170c50SDavid Howells asm("bswapl %0 ; bswapl %1 ; xchgl %0,%1" 27af170c50SDavid Howells : "=r" (v.s.a), "=r" (v.s.b) 28af170c50SDavid Howells : "0" (v.s.a), "1" (v.s.b)); 29af170c50SDavid Howells return v.u; 30af170c50SDavid Howells #else /* __i386__ */ 31af170c50SDavid Howells asm("bswapq %0" : "=r" (val) : "0" (val)); 32af170c50SDavid Howells return val; 33af170c50SDavid Howells #endif 34af170c50SDavid Howells } 35af170c50SDavid Howells #define __arch_swab64 __arch_swab64 36af170c50SDavid Howells 37af170c50SDavid Howells #endif /* _ASM_X86_SWAB_H */ 38