LCOV - code coverage report
Current view: top level - arch/x86/include/asm - swab.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 4 4 100.0 %
Date: 2017-01-25 Functions: 2 2 100.0 %

          Line data    Source code
       1             : #ifndef _ASM_X86_SWAB_H
       2             : #define _ASM_X86_SWAB_H
       3             : 
       4             : #include <linux/types.h>
       5             : #include <linux/compiler.h>
       6             : 
       7             : static inline __attribute_const__ __u32 __arch_swab32(__u32 val)
       8             : {
       9             : #ifdef __i386__
      10             : # ifdef CONFIG_X86_BSWAP
      11             :         asm("bswap %0" : "=r" (val) : "0" (val));
      12             : # else
      13             :         asm("xchgb %b0,%h0\n\t"       /* swap lower bytes     */
      14             :             "rorl $16,%0\n\t" /* swap words           */
      15             :             "xchgb %b0,%h0"   /* swap higher bytes    */
      16             :             : "=q" (val)
      17             :             : "0" (val));
      18             : # endif
      19             : 
      20             : #else /* __i386__ */
      21         119 :         asm("bswapl %0"
      22             :             : "=r" (val)
      23             :             : "0" (val));
      24             : #endif
      25         119 :         return val;
      26             : }
      27             : #define __arch_swab32 __arch_swab32
      28             : 
      29             : static inline __attribute_const__ __u64 __arch_swab64(__u64 val)
      30             : {
      31             : #ifdef __i386__
      32             :         union {
      33             :                 struct {
      34             :                         __u32 a;
      35             :                         __u32 b;
      36             :                 } s;
      37             :                 __u64 u;
      38             :         } v;
      39             :         v.u = val;
      40             : # ifdef CONFIG_X86_BSWAP
      41             :         asm("bswapl %0 ; bswapl %1 ; xchgl %0,%1"
      42             :             : "=r" (v.s.a), "=r" (v.s.b)
      43             :             : "0" (v.s.a), "1" (v.s.b));
      44             : # else
      45             :         v.s.a = __arch_swab32(v.s.a);
      46             :         v.s.b = __arch_swab32(v.s.b);
      47             :         asm("xchgl %0,%1"
      48             :             : "=r" (v.s.a), "=r" (v.s.b)
      49             :             : "0" (v.s.a), "1" (v.s.b));
      50             : # endif
      51             :         return v.u;
      52             : #else /* __i386__ */
      53          21 :         asm("bswapq %0"
      54             :             : "=r" (val)
      55             :             : "0" (val));
      56          21 :         return val;
      57             : #endif
      58             : }
      59             : #define __arch_swab64 __arch_swab64
      60             : 
      61             : #endif /* _ASM_X86_SWAB_H */

Generated by: LCOV version 1.10