home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-s390 / byteorder.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.7 KB  |  132 lines

  1. #ifndef _S390_BYTEORDER_H
  2. #define _S390_BYTEORDER_H
  3.  
  4. /*
  5.  *  include/asm-s390/byteorder.h
  6.  *
  7.  *  S390 version
  8.  *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
  9.  *    Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
  10.  */
  11.  
  12. #include <asm/types.h>
  13.  
  14. #ifdef __GNUC__
  15.  
  16. #ifdef __s390x__
  17. static __inline__ __u64 ___arch__swab64p(const __u64 *x)
  18. {
  19.     __u64 result;
  20.  
  21.     __asm__ __volatile__ (
  22.         "   lrvg %0,%1"
  23.         : "=d" (result) : "m" (*x) );
  24.     return result;
  25. }
  26.  
  27. static __inline__ __u64 ___arch__swab64(__u64 x)
  28. {
  29.     __u64 result;
  30.  
  31.     __asm__ __volatile__ (
  32.         "   lrvgr %0,%1"
  33.         : "=d" (result) : "d" (x) );
  34.     return result;
  35. }
  36.  
  37. static __inline__ void ___arch__swab64s(__u64 *x)
  38. {
  39.     *x = ___arch__swab64p(x);
  40. }
  41. #endif /* __s390x__ */
  42.  
  43. static __inline__ __u32 ___arch__swab32p(const __u32 *x)
  44. {
  45.     __u32 result;
  46.     
  47.     __asm__ __volatile__ (
  48. #ifndef __s390x__
  49.         "        icm   %0,8,3(%1)\n"
  50.         "        icm   %0,4,2(%1)\n"
  51.         "        icm   %0,2,1(%1)\n"
  52.         "        ic    %0,0(%1)"
  53.         : "=&d" (result) : "a" (x), "m" (*x) : "cc" );
  54. #else /* __s390x__ */
  55.         "   lrv  %0,%1"
  56.         : "=d" (result) : "m" (*x) );
  57. #endif /* __s390x__ */
  58.     return result;
  59. }
  60.  
  61. static __inline__ __u32 ___arch__swab32(__u32 x)
  62. {
  63. #ifndef __s390x__
  64.     return ___arch__swab32p(&x);
  65. #else /* __s390x__ */
  66.     __u32 result;
  67.     
  68.     __asm__ __volatile__ (
  69.         "   lrvr  %0,%1"
  70.         : "=d" (result) : "d" (x) );
  71.     return result;
  72. #endif /* __s390x__ */
  73. }
  74.  
  75. static __inline__ void ___arch__swab32s(__u32 *x)
  76. {
  77.     *x = ___arch__swab32p(x);
  78. }
  79.  
  80. static __inline__ __u16 ___arch__swab16p(const __u16 *x)
  81. {
  82.     __u16 result;
  83.     
  84.     __asm__ __volatile__ (
  85. #ifndef __s390x__
  86.         "        icm   %0,2,1(%1)\n"
  87.         "        ic    %0,0(%1)\n"
  88.         : "=&d" (result) : "a" (x), "m" (*x) : "cc" );
  89. #else /* __s390x__ */
  90.         "   lrvh %0,%1"
  91.         : "=d" (result) : "m" (*x) );
  92. #endif /* __s390x__ */
  93.     return result;
  94. }
  95.  
  96. static __inline__ __u16 ___arch__swab16(__u16 x)
  97. {
  98.     return ___arch__swab16p(&x);
  99. }
  100.  
  101. static __inline__ void ___arch__swab16s(__u16 *x)
  102. {
  103.     *x = ___arch__swab16p(x);
  104. }
  105.  
  106. #ifdef __s390x__
  107. #define __arch__swab64(x) ___arch__swab64(x)
  108. #define __arch__swab64p(x) ___arch__swab64p(x)
  109. #define __arch__swab64s(x) ___arch__swab64s(x)
  110. #endif /* __s390x__ */
  111. #define __arch__swab32(x) ___arch__swab32(x)
  112. #define __arch__swab16(x) ___arch__swab16(x)
  113. #define __arch__swab32p(x) ___arch__swab32p(x)
  114. #define __arch__swab16p(x) ___arch__swab16p(x)
  115. #define __arch__swab32s(x) ___arch__swab32s(x)
  116. #define __arch__swab16s(x) ___arch__swab16s(x)
  117.  
  118. #ifndef __s390x__
  119. #if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
  120. #  define __BYTEORDER_HAS_U64__
  121. #  define __SWAB_64_THRU_32__
  122. #endif
  123. #else /* __s390x__ */
  124. #define __BYTEORDER_HAS_U64__
  125. #endif /* __s390x__ */
  126.  
  127. #endif /* __GNUC__ */
  128.  
  129. #include <linux/byteorder/big_endian.h>
  130.  
  131. #endif /* _S390_BYTEORDER_H */
  132.