slide_ppc_tpl.h 828 B

12345678910111213141516171819202122232425262728293031
  1. /* Optimized slide_hash for PowerPC processors
  2. * Copyright (C) 2017-2021 Mika T. Lindqvist <postmaster@raasu.org>
  3. * For conditions of distribution and use, see copyright notice in zlib.h
  4. */
  5. #include <altivec.h>
  6. #include "zbuild.h"
  7. #include "deflate.h"
  8. static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize) {
  9. const vector unsigned short vmx_wsize = vec_splats(wsize);
  10. Pos *p = table;
  11. do {
  12. vector unsigned short value, result;
  13. value = vec_ld(0, p);
  14. result = vec_subs(value, vmx_wsize);
  15. vec_st(result, 0, p);
  16. p += 8;
  17. entries -= 8;
  18. } while (entries > 0);
  19. }
  20. void Z_INTERNAL SLIDE_PPC(deflate_state *s) {
  21. uint16_t wsize = s->w_size;
  22. slide_hash_chain(s->head, HASH_SIZE, wsize);
  23. slide_hash_chain(s->prev, wsize, wsize);
  24. }