generic_functions.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /* generic_functions.h -- generic C implementations for arch-specific functions.
  2. * For conditions of distribution and use, see copyright notice in zlib.h
  3. */
  4. #ifndef GENERIC_FUNCTIONS_H_
  5. #define GENERIC_FUNCTIONS_H_
  6. #include "zendian.h"
  7. Z_INTERNAL uint32_t crc32_fold_reset_c(crc32_fold *crc);
  8. Z_INTERNAL void crc32_fold_copy_c(crc32_fold *crc, uint8_t *dst, const uint8_t *src, size_t len);
  9. Z_INTERNAL void crc32_fold_c(crc32_fold *crc, const uint8_t *src, size_t len, uint32_t init_crc);
  10. Z_INTERNAL uint32_t crc32_fold_final_c(crc32_fold *crc);
  11. Z_INTERNAL uint32_t adler32_fold_copy_c(uint32_t adler, uint8_t *dst, const uint8_t *src, size_t len);
  12. typedef uint32_t (*adler32_func)(uint32_t adler, const uint8_t *buf, size_t len);
  13. typedef uint32_t (*compare256_func)(const uint8_t *src0, const uint8_t *src1);
  14. typedef uint32_t (*crc32_func)(uint32_t crc32, const uint8_t *buf, size_t len);
  15. uint32_t adler32_c(uint32_t adler, const uint8_t *buf, size_t len);
  16. uint32_t chunksize_c(void);
  17. uint8_t* chunkmemset_safe_c(uint8_t *out, unsigned dist, unsigned len, unsigned left);
  18. void inflate_fast_c(PREFIX3(stream) *strm, uint32_t start);
  19. uint32_t PREFIX(crc32_braid)(uint32_t crc, const uint8_t *buf, size_t len);
  20. uint32_t compare256_c(const uint8_t *src0, const uint8_t *src1);
  21. #if defined(UNALIGNED_OK) && BYTE_ORDER == LITTLE_ENDIAN
  22. uint32_t compare256_unaligned_16(const uint8_t *src0, const uint8_t *src1);
  23. # ifdef HAVE_BUILTIN_CTZ
  24. uint32_t compare256_unaligned_32(const uint8_t *src0, const uint8_t *src1);
  25. # endif
  26. # if defined(UNALIGNED64_OK) && defined(HAVE_BUILTIN_CTZLL)
  27. uint32_t compare256_unaligned_64(const uint8_t *src0, const uint8_t *src1);
  28. # endif
  29. #endif
  30. typedef void (*slide_hash_func)(deflate_state *s);
  31. void slide_hash_c(deflate_state *s);
  32. uint32_t longest_match_c(deflate_state *const s, Pos cur_match);
  33. # if defined(UNALIGNED_OK) && BYTE_ORDER == LITTLE_ENDIAN
  34. uint32_t longest_match_unaligned_16(deflate_state *const s, Pos cur_match);
  35. # ifdef HAVE_BUILTIN_CTZ
  36. uint32_t longest_match_unaligned_32(deflate_state *const s, Pos cur_match);
  37. # endif
  38. # if defined(UNALIGNED64_OK) && defined(HAVE_BUILTIN_CTZLL)
  39. uint32_t longest_match_unaligned_64(deflate_state *const s, Pos cur_match);
  40. # endif
  41. # endif
  42. uint32_t longest_match_slow_c(deflate_state *const s, Pos cur_match);
  43. # if defined(UNALIGNED_OK) && BYTE_ORDER == LITTLE_ENDIAN
  44. uint32_t longest_match_slow_unaligned_16(deflate_state *const s, Pos cur_match);
  45. uint32_t longest_match_slow_unaligned_32(deflate_state *const s, Pos cur_match);
  46. # ifdef UNALIGNED64_OK
  47. uint32_t longest_match_slow_unaligned_64(deflate_state *const s, Pos cur_match);
  48. # endif
  49. # endif
  50. // Select generic implementation for longest_match, longest_match_slow, longest_match_slow functions.
  51. #if defined(UNALIGNED_OK) && BYTE_ORDER == LITTLE_ENDIAN
  52. # if defined(UNALIGNED64_OK) && defined(HAVE_BUILTIN_CTZLL)
  53. # define longest_match_generic longest_match_unaligned_64
  54. # define longest_match_slow_generic longest_match_slow_unaligned_64
  55. # define compare256_generic compare256_unaligned_64
  56. # elif defined(HAVE_BUILTIN_CTZ)
  57. # define longest_match_generic longest_match_unaligned_32
  58. # define longest_match_slow_generic longest_match_slow_unaligned_32
  59. # define compare256_generic compare256_unaligned_32
  60. # else
  61. # define longest_match_generic longest_match_unaligned_16
  62. # define longest_match_slow_generic longest_match_slow_unaligned_16
  63. # define compare256_generic compare256_unaligned_16
  64. # endif
  65. #else
  66. # define longest_match_generic longest_match_c
  67. # define longest_match_slow_generic longest_match_slow_c
  68. # define compare256_generic compare256_c
  69. #endif
  70. #ifdef DISABLE_RUNTIME_CPU_DETECTION
  71. // Generic code
  72. # define native_adler32 adler32_c
  73. # define native_adler32_fold_copy adler32_fold_copy_c
  74. # define native_chunkmemset_safe chunkmemset_safe_c
  75. # define native_chunksize chunksize_c
  76. # define native_crc32 PREFIX(crc32_braid)
  77. # define native_crc32_fold crc32_fold_c
  78. # define native_crc32_fold_copy crc32_fold_copy_c
  79. # define native_crc32_fold_final crc32_fold_final_c
  80. # define native_crc32_fold_reset crc32_fold_reset_c
  81. # define native_inflate_fast inflate_fast_c
  82. # define native_slide_hash slide_hash_c
  83. # define native_longest_match longest_match_generic
  84. # define native_longest_match_slow longest_match_slow_generic
  85. # define native_compare256 compare256_generic
  86. #endif
  87. #endif