1 /* chunkset_power8.c -- VSX inline functions to copy small data chunks.
2 * For conditions of distribution and use, see copyright notice in zlib.h
3 */
4
5 #ifdef POWER8_VSX_CHUNKSET
6 #include <altivec.h>
7 #include "../../zbuild.h"
8
9 typedef vector unsigned char chunk_t;
10
11 #define CHUNK_SIZE 16
12
13 #define HAVE_CHUNKMEMSET_2
14 #define HAVE_CHUNKMEMSET_4
15 #define HAVE_CHUNKMEMSET_8
16
chunkmemset_2(uint8_t * from,chunk_t * chunk)17 static inline void chunkmemset_2(uint8_t *from, chunk_t *chunk) {
18 uint16_t tmp;
19 zmemcpy_2(&tmp, from);
20 *chunk = (vector unsigned char)vec_splats(tmp);
21 }
22
chunkmemset_4(uint8_t * from,chunk_t * chunk)23 static inline void chunkmemset_4(uint8_t *from, chunk_t *chunk) {
24 uint32_t tmp;
25 zmemcpy_4(&tmp, from);
26 *chunk = (vector unsigned char)vec_splats(tmp);
27 }
28
chunkmemset_8(uint8_t * from,chunk_t * chunk)29 static inline void chunkmemset_8(uint8_t *from, chunk_t *chunk) {
30 uint64_t tmp;
31 zmemcpy_8(&tmp, from);
32 *chunk = (vector unsigned char)vec_splats(tmp);
33 }
34
35 #define CHUNKSIZE chunksize_power8
36 #define CHUNKCOPY chunkcopy_power8
37 #define CHUNKCOPY_SAFE chunkcopy_safe_power8
38 #define CHUNKUNROLL chunkunroll_power8
39 #define CHUNKMEMSET chunkmemset_power8
40 #define CHUNKMEMSET_SAFE chunkmemset_safe_power8
41
loadchunk(uint8_t const * s,chunk_t * chunk)42 static inline void loadchunk(uint8_t const *s, chunk_t *chunk) {
43 *chunk = vec_xl(0, s);
44 }
45
storechunk(uint8_t * out,chunk_t * chunk)46 static inline void storechunk(uint8_t *out, chunk_t *chunk) {
47 vec_xst(*chunk, 0, out);
48 }
49
50 #include "chunkset_tpl.h"
51
52 #endif
53