opencv

Форк
0
/
chunkset_sse2.c 
56 строк · 1.3 Кб
1
/* chunkset_sse2.c -- SSE2 inline functions to copy small data chunks.
2
 * For conditions of distribution and use, see copyright notice in zlib.h
3
 */
4

5
#include "zbuild.h"
6

7
#ifdef X86_SSE2
8
#include <immintrin.h>
9

10
typedef __m128i chunk_t;
11

12
#define CHUNK_SIZE 16
13

14
#define HAVE_CHUNKMEMSET_2
15
#define HAVE_CHUNKMEMSET_4
16
#define HAVE_CHUNKMEMSET_8
17

18
static inline void chunkmemset_2(uint8_t *from, chunk_t *chunk) {
19
    int16_t tmp;
20
    memcpy(&tmp, from, sizeof(tmp));
21
    *chunk = _mm_set1_epi16(tmp);
22
}
23

24
static inline void chunkmemset_4(uint8_t *from, chunk_t *chunk) {
25
    int32_t tmp;
26
    memcpy(&tmp, from, sizeof(tmp));
27
    *chunk = _mm_set1_epi32(tmp);
28
}
29

30
static inline void chunkmemset_8(uint8_t *from, chunk_t *chunk) {
31
    int64_t tmp;
32
    memcpy(&tmp, from, sizeof(tmp));
33
    *chunk = _mm_set1_epi64x(tmp);
34
}
35

36
static inline void loadchunk(uint8_t const *s, chunk_t *chunk) {
37
    *chunk = _mm_loadu_si128((__m128i *)s);
38
}
39

40
static inline void storechunk(uint8_t *out, chunk_t *chunk) {
41
    _mm_storeu_si128((__m128i *)out, *chunk);
42
}
43

44
#define CHUNKSIZE        chunksize_sse2
45
#define CHUNKCOPY        chunkcopy_sse2
46
#define CHUNKUNROLL      chunkunroll_sse2
47
#define CHUNKMEMSET      chunkmemset_sse2
48
#define CHUNKMEMSET_SAFE chunkmemset_safe_sse2
49

50
#include "chunkset_tpl.h"
51

52
#define INFLATE_FAST     inflate_fast_sse2
53

54
#include "inffast_tpl.h"
55

56
#endif
57

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.