Sha256: c53af0eaa8a13861469b2ac3560e935fce179daec53165b590975743558a9200

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 KB

Contents

/*
 * matchfinder_neon.h - matchfinding routines optimized for ARM NEON (Advanced
 * SIMD) instructions
 */

#include <arm_neon.h>

static forceinline bool
matchfinder_init_neon(mf_pos_t *data, size_t size)
{
	int16x8_t v, *p;
	size_t n;

	if (size % sizeof(int16x8_t) * 4)
		return false;

	STATIC_ASSERT(sizeof(mf_pos_t) == 2);
	v = (int16x8_t) {
		MATCHFINDER_INITVAL, MATCHFINDER_INITVAL, MATCHFINDER_INITVAL,
		MATCHFINDER_INITVAL, MATCHFINDER_INITVAL, MATCHFINDER_INITVAL,
		MATCHFINDER_INITVAL, MATCHFINDER_INITVAL,
	};
	p = (int16x8_t *)data;
	n = size / (sizeof(int16x8_t) * 4);
	do {
		p[0] = v;
		p[1] = v;
		p[2] = v;
		p[3] = v;
		p += 4;
	} while (--n);
	return true;
}

static forceinline bool
matchfinder_rebase_neon(mf_pos_t *data, size_t size)
{
	int16x8_t v, *p;
	size_t n;

	if ((size % sizeof(int16x8_t) * 4 != 0))
		return false;

	STATIC_ASSERT(sizeof(mf_pos_t) == 2);
	v = (int16x8_t) {
		(u16)-MATCHFINDER_WINDOW_SIZE, (u16)-MATCHFINDER_WINDOW_SIZE,
		(u16)-MATCHFINDER_WINDOW_SIZE, (u16)-MATCHFINDER_WINDOW_SIZE,
		(u16)-MATCHFINDER_WINDOW_SIZE, (u16)-MATCHFINDER_WINDOW_SIZE,
		(u16)-MATCHFINDER_WINDOW_SIZE, (u16)-MATCHFINDER_WINDOW_SIZE,
	};
	p = (int16x8_t *)data;
	n = size / (sizeof(int16x8_t) * 4);
	do {
		p[0] = vqaddq_s16(p[0], v);
		p[1] = vqaddq_s16(p[1], v);
		p[2] = vqaddq_s16(p[2], v);
		p[3] = vqaddq_s16(p[3], v);
		p += 4;
	} while (--n);
	return true;
}

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
libdeflate-0.1.1 ext/libdeflate/libdeflate/lib/matchfinder_neon.h
libdeflate-0.1.0 ext/libdeflate/libdeflate/lib/matchfinder_neon.h