view test/test_align.h @ 9:6ff0b7a44bb6

generic: add initial support for 256-bit and 512-bit types eventually this could be expanded to add floating point stuff as well
author Paper <paper@tflc.us>
date Mon, 18 Nov 2024 13:52:09 -0500
parents 75ab77f874e2
children 53197dbf4e8e
line wrap: on
line source

static int test_align(void)
{
	int ret = 0;

#define RUN_TEST(sign, csign, bits, size) \
	do { \
		/* allocate the aligned array */ \
		V##csign##INT##bits##x##size##_ALIGNED_ARRAY(vec_arr); \
	\
		/* fill the values */ \
		for (int i = 0; i < V##csign##INT##bits##x##size##_ALIGNED_ARRAY_LENGTH(vec_arr); i++) \
			vec_arr[i] = i; \
	\
		/* try to load it */ \
		v##sign##int##bits##x##size vec = v##sign##int##bits##x##size##_load_aligned(vec_arr); \
	\
		/* now allocate an output array */ \
		V##csign##INT##bits##x##size##_ALIGNED_ARRAY(vec_arr_out); \
	\
		/* try storing it */ \
		v##sign##int##bits##x##size##_store_aligned(vec, vec_arr_out); \
	\
		/* mark success or failure */ \
		ret |= !!memcmp(vec_arr, vec_arr_out, V##csign##INT##bits##x##size##_ALIGNED_ARRAY_LENGTH(vec_arr)); \
	\
		ret |= !V##csign##INT##bits##x##size##_PTR_ALIGNED(vec_arr); \
		ret |= !V##csign##INT##bits##x##size##_PTR_ALIGNED(vec_arr_out); \
	} while (0);

#define RUN_TESTS(bits, size) \
	RUN_TEST( ,  , bits, size) \
	RUN_TEST(u, U, bits, size)

	RUN_TESTS(8, 16)
	RUN_TESTS(16, 8)
	RUN_TESTS(32, 4)
	RUN_TESTS(64, 2)

	RUN_TESTS(8, 32)
	RUN_TESTS(16, 16)
	RUN_TESTS(32, 8)
	RUN_TESTS(64, 4)

#undef RUN_TESTS
#undef RUN_TEST

	return ret;
}