opencv

Форк
0
/
slide_hash_neon.c 
46 строк · 1.3 Кб
1
/* slide_hash_neon.c -- Optimized hash table shifting for ARM with support for NEON instructions
2
 * Copyright (C) 2017-2020 Mika T. Lindqvist
3
 *
4
 * Authors:
5
 * Mika T. Lindqvist <postmaster@raasu.org>
6
 * Jun He <jun.he@arm.com>
7
 *
8
 * For conditions of distribution and use, see copyright notice in zlib.h
9
 */
10

11
#ifdef ARM_NEON
12
#include "neon_intrins.h"
13
#include "../../zbuild.h"
14
#include "../../deflate.h"
15

16
/* SIMD version of hash_chain rebase */
17
static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize) {
18
    Z_REGISTER uint16x8_t v;
19
    uint16x8x4_t p0, p1;
20
    Z_REGISTER size_t n;
21

22
    size_t size = entries*sizeof(table[0]);
23
    Assert((size % sizeof(uint16x8_t) * 8 == 0), "hash table size err");
24

25
    Assert(sizeof(Pos) == 2, "Wrong Pos size");
26
    v = vdupq_n_u16(wsize);
27

28
    n = size / (sizeof(uint16x8_t) * 8);
29
    do {
30
        p0 = vld1q_u16_x4(table);
31
        p1 = vld1q_u16_x4(table+32);
32
        vqsubq_u16_x4_x1(p0, p0, v);
33
        vqsubq_u16_x4_x1(p1, p1, v);
34
        vst1q_u16_x4(table, p0);
35
        vst1q_u16_x4(table+32, p1);
36
        table += 64;
37
    } while (--n);
38
}
39

40
Z_INTERNAL void slide_hash_neon(deflate_state *s) {
41
    unsigned int wsize = s->w_size;
42

43
    slide_hash_chain(s->head, HASH_SIZE, wsize);
44
    slide_hash_chain(s->prev, wsize, wsize);
45
}
46
#endif
47

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

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

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

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