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