endian.h
上传用户:poi891205
上传日期:2013-07-15
资源大小:9745k
文件大小:2k
源码类别:

DVD

开发平台:

C/C++

  1. #ifndef __ENDIAN_H
  2. #define __ENDIAN_H
  3. #define BIT_L2M(x) ( (((x)&0x01)<<7) | (((x)&0x02)<<5) | 
  4.   (((x)&0x04)<<3) | (((x)&0x08)<<1) | 
  5.   (((x)&0x10)>>1) | (((x)&0x20)>>3) | 
  6.   (((x)&0x40)>>5) | (((x)&0x80)>>7))
  7. #define ADR_L2M(x) (((x)&(~0x07)) | (7-((x)&0x07)))
  8. //
  9. // SWAP
  10. //
  11. // AABB   BBAA
  12. // AABBCCDD DDCCBBAA
  13. //
  14. #define SWAP16(x) (((x)&0x0ff)<<8 | ((x)>>8))
  15. #define SWAP32(x) ( (((UINT32)x           ) >> 24)
  16. | (((UINT32)x&0x00ff0000) >>  8)
  17. | (((UINT32)x<<8) & 0x00ff0000)
  18. | (((UINT32)x ) << 24))
  19. //
  20. //
  21. extern  void __wbe32(void *, UINT32);
  22. extern  void __wbe16(void *, UINT32);
  23. extern  void __wle32(void *, UINT32);
  24. extern  void __wle16(void *, UINT32);
  25. extern  UINT32 __lbe32(void *);
  26. extern  UINT32 __lbe16(void *);
  27. extern  UINT32 __lle32(void *);
  28. extern  UINT32 __lle16(void *);
  29. #if defined(__MIPSEL__)
  30. #define SYSTEM_ENDIAN_LITTLE
  31. #elif defined(__MIPSEB__)
  32. #define SYSTEM_ENDIAN_BIG
  33. #else
  34. #error "please define endian"
  35. #endif
  36. #define wbe32(p,d) __wbe32(p,d)
  37. #define wbe16(p,d) __wbe16(p,d)
  38. #define lbe32(p) __lbe32(p)
  39. #define lbe16(p) __lbe16(p)
  40. #define wle32(p,d) __wle32(p,d)
  41. #define wle16(p,d) __wle16(p,d)
  42. #define lle32(p) __lle32(p)
  43. #define lle16(p) __lle16(p)
  44. #define lbe8(p) (*(UINT8 *)p)
  45. #define lle8(p) (*(UINT8 *)p)
  46. #if 0
  47. #if defined(SYSTEM_ENDIAN_LITTLE)
  48. //
  49. // LITTLE endian
  50. //
  51. #define wbe32(p,d) __wbe32(p,d)
  52. #define wbe16(p,d) __wbe16(p,d)
  53. #define lbe32(p) __lbe32(p)
  54. #define lbe16(p) __lbe16(p)
  55. #define lbe8(p) (*(UINT8 *)p)
  56. #define wle32(p,d) (*(UINT32 *)p = d)
  57. #define wle16(p,d) (*(UINT16 *)p = d)
  58. #define lle32(p) (*(UINT32 *)p)
  59. #define lle16(p) (*(UINT16 *)p)
  60. #define lle8(p) (*(UINT8 *)p)
  61. #elif defined(SYSTEM_ENDIAN_BIG)
  62. //
  63. // BIG endian
  64. //
  65. #define wbe32(p,d) (*(UINT32 *)p = d)
  66. #define wbe16(p,d) (*(UINT16 *)p = d)
  67. #define lbe32(p) (*(UINT32 *)p)
  68. #define lbe16(p) (*(UINT16 *)p)
  69. #define lbe8(p) (*(UINT8 *)p)
  70. #define wle32(p,d) __wle32(p,d)
  71. #define wle16(p,d) __wle16(p,d)
  72. #define lle32(p) __lle32(p)
  73. #define lle16(p) __lle16(p)
  74. #define lle8(p) (*(UINT8 *)p)
  75. #endif
  76. #endif
  77. #endif/*__ENDIAN_H*/