power_functions.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /* power_functions.h -- POWER implementations for arch-specific functions.
  2. * Copyright (C) 2020 Matheus Castanho <msc@linux.ibm.com>, IBM
  3. * Copyright (C) 2021 Mika T. Lindqvist <postmaster@raasu.org>
  4. * For conditions of distribution and use, see copyright notice in zlib.h
  5. */
  6. #ifndef POWER_FUNCTIONS_H_
  7. #define POWER_FUNCTIONS_H_
  8. #ifdef PPC_VMX
  9. uint32_t adler32_vmx(uint32_t adler, const uint8_t *buf, size_t len);
  10. void slide_hash_vmx(deflate_state *s);
  11. #endif
  12. #ifdef POWER8_VSX
  13. uint32_t adler32_power8(uint32_t adler, const uint8_t *buf, size_t len);
  14. uint32_t chunksize_power8(void);
  15. uint8_t* chunkmemset_safe_power8(uint8_t *out, unsigned dist, unsigned len, unsigned left);
  16. uint32_t crc32_power8(uint32_t crc, const uint8_t *buf, size_t len);
  17. void slide_hash_power8(deflate_state *s);
  18. void inflate_fast_power8(PREFIX3(stream) *strm, uint32_t start);
  19. #endif
  20. #ifdef POWER9
  21. uint32_t compare256_power9(const uint8_t *src0, const uint8_t *src1);
  22. uint32_t longest_match_power9(deflate_state *const s, Pos cur_match);
  23. uint32_t longest_match_slow_power9(deflate_state *const s, Pos cur_match);
  24. #endif
  25. #ifdef DISABLE_RUNTIME_CPU_DETECTION
  26. // Power - VMX
  27. # if defined(PPC_VMX) && defined(__ALTIVEC__)
  28. # undef native_adler32
  29. # define native_adler32 adler32_vmx
  30. # undef native_slide_hash
  31. # define native_slide_hash slide_hash_vmx
  32. # endif
  33. // Power8 - VSX
  34. # if defined(POWER8_VSX) && defined(_ARCH_PWR8) && defined(__VSX__)
  35. # undef native_adler32
  36. # define native_adler32 adler32_power8
  37. # undef native_chunkmemset_safe
  38. # define native_chunkmemset_safe chunkmemset_safe_power8
  39. # undef native_chunksize
  40. # define native_chunksize chunksize_power8
  41. # undef native_inflate_fast
  42. # define native_inflate_fast inflate_fast_power8
  43. # undef native_slide_hash
  44. # define native_slide_hash slide_hash_power8
  45. # endif
  46. # if defined(POWER8_VSX_CRC32) && defined(_ARCH_PWR8) && defined(__VSX__)
  47. # undef native_crc32
  48. # define native_crc32 crc32_power8
  49. # endif
  50. // Power9
  51. # if defined(POWER9) && defined(_ARCH_PWR9)
  52. # undef native_compare256
  53. # define native_compare256 compare256_power9
  54. # undef native_longest_match
  55. # define native_longest_match longest_match_power9
  56. # undef native_longest_match_slow
  57. # define native_longest_match_slow longest_match_slow_power9
  58. # endif
  59. #endif
  60. #endif /* POWER_FUNCTIONS_H_ */