byteorder.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef _S390_BYTEORDER_H
  2. #define _S390_BYTEORDER_H
  3. /*
  4.  *  include/asm-s390/byteorder.h
  5.  *
  6.  *  S390 version
  7.  *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
  8.  *    Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
  9.  */
  10. #include <asm/types.h>
  11. #ifdef __GNUC__
  12. static __inline__ __const__ __u64 ___arch__swab64(__u64 x)
  13. {
  14.   __u64 result;
  15.   __asm__ __volatile__ (
  16.           "   lrvg %0,%1"
  17.           : "=&d" (result) : "m" (x) );
  18.   return result;
  19. }
  20. static __inline__ __const__ __u64 ___arch__swab64p(__u64 *x)
  21. {
  22.   __u64 result;
  23.   __asm__ __volatile__ (
  24.           "   lrvg %0,%1"
  25.           : "=d" (result) : "m" (*x) );
  26.   return result;
  27. }
  28. static __inline__ void ___arch__swab64s(__u64 *x)
  29. {
  30.   __asm__ __volatile__ (
  31.           "   lrvg 0,%0n"
  32.   "   stg  0,%0"
  33.           : "+m" (*x) : : "0");
  34. }
  35. static __inline__ __const__ __u32 ___arch__swab32(__u32 x)
  36. {
  37.   __u32 result;
  38.   __asm__ __volatile__ (
  39.           "   lrv  %0,%1"
  40.           : "=&d" (result) : "m" (x) );
  41.   return result;
  42. }
  43. static __inline__ __const__ __u32 ___arch__swab32p(__u32 *x)
  44. {
  45.   __u32 result;
  46.   __asm__ __volatile__ (
  47.           "   lrv  %0,%1"
  48.           : "=d" (result) : "m" (*x) );
  49.   return result;
  50. }
  51. static __inline__ void ___arch__swab32s(__u32 *x)
  52. {
  53.   __asm__ __volatile__ (
  54.           "   lrv  0,%0n"
  55.   "   st   0,%0"
  56.           : "+m" (*x) : : "0" );
  57. }
  58. static __inline__ __const__ __u16 ___arch__swab16(__u16 x)
  59. {
  60.   __u16 result;
  61.   __asm__ __volatile__ (
  62.           "   lrvh %0,%1"
  63.           : "=d" (result) : "m" (x) );
  64.   return result;
  65. }
  66. static __inline__ __const__ __u16 ___arch__swab16p(__u16 *x)
  67. {
  68.   __u16 result;
  69.   __asm__ __volatile__ (
  70.           "   lrvh %0,%1"
  71.           : "=d" (result) : "m" (*x) );
  72.   return result;
  73. }
  74. static __inline__ void ___arch__swab16s(__u16 *x)
  75. {
  76.   __asm__ __volatile__ (
  77.           "   lrvh 0,%0n"
  78.   "   sth  0,%0"
  79.           : "+m" (*x) : : "0" );
  80. }
  81. #define __arch__swab64(x) ___arch__swab64(x)
  82. #define __arch__swab32(x) ___arch__swab32(x)
  83. #define __arch__swab16(x) ___arch__swab16(x)
  84. #define __arch__swab64p(x) ___arch__swab64p(x)
  85. #define __arch__swab32p(x) ___arch__swab32p(x)
  86. #define __arch__swab16p(x) ___arch__swab16p(x)
  87. #define __arch__swab64s(x) ___arch__swab64s(x)
  88. #define __arch__swab32s(x) ___arch__swab32s(x)
  89. #define __arch__swab16s(x) ___arch__swab16s(x)
  90. #define __BYTEORDER_HAS_U64__
  91. #endif /* __GNUC__ */
  92. #include <linux/byteorder/big_endian.h>
  93. #endif /* _S390_BYTEORDER_H */