|
@@ -0,0 +1,166 @@
|
|
|
|
+#ifndef _INTRINSICS_TEMPLATES_H_
|
|
|
|
+#define _INTRINSICS_TEMPLATES_H_
|
|
|
|
+
|
|
|
|
+/*--------------------------------------------------------------------------------*/
|
|
|
|
+/* Includes */
|
|
|
|
+/*--------------------------------------------------------------------------------*/
|
|
|
|
+
|
|
|
|
+#include "test_templates.h"
|
|
|
|
+#include <string.h> /* memcpy() */
|
|
|
|
+
|
|
|
|
+/*--------------------------------------------------------------------------------*/
|
|
|
|
+/* Group Specific Templates */
|
|
|
|
+/*--------------------------------------------------------------------------------*/
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+* Comparison SNR thresholds for the data types used in transform_tests.
|
|
|
|
+*/
|
|
|
|
+#define INTRINSICS_SNR_THRESHOLD_q63_t 120
|
|
|
|
+#define INTRINSICS_SNR_THRESHOLD_q31_t 95
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+* Compare the outputs from the function under test and the reference
|
|
|
|
+* function using SNR.
|
|
|
|
+*/
|
|
|
|
+#define INTRINSICS_SNR_COMPARE_INTERFACE(block_size, \
|
|
|
|
+ output_type) \
|
|
|
|
+ do \
|
|
|
|
+ { \
|
|
|
|
+ TEST_CONVERT_AND_ASSERT_SNR( \
|
|
|
|
+ intrinsics_output_f32_ref, \
|
|
|
|
+ (output_type##_t *) intrinsics_output_ref, \
|
|
|
|
+ intrinsics_output_f32_fut, \
|
|
|
|
+ (output_type##_t *) intrinsics_output_fut, \
|
|
|
|
+ block_size, \
|
|
|
|
+ output_type, \
|
|
|
|
+ INTRINSICS_SNR_THRESHOLD_##output_type##_t \
|
|
|
|
+ ); \
|
|
|
|
+ } while (0)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/*--------------------------------------------------------------------------------*/
|
|
|
|
+/* TEST Templates */
|
|
|
|
+/*--------------------------------------------------------------------------------*/
|
|
|
|
+
|
|
|
|
+#define INTRINSICS_TEST_TEMPLATE_ELT1(functionName, dataType) \
|
|
|
|
+ \
|
|
|
|
+ JTEST_DEFINE_TEST(functionName##_test, functionName) \
|
|
|
|
+ { \
|
|
|
|
+ uint32_t i; \
|
|
|
|
+ \
|
|
|
|
+ JTEST_COUNT_CYCLES( \
|
|
|
|
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
|
|
|
|
+ { \
|
|
|
|
+ *((dataType##_t*)intrinsics_output_fut + i) = \
|
|
|
|
+ functionName( \
|
|
|
|
+ (dataType##_t)intrinsics_##dataType##_inputs[i]); \
|
|
|
|
+ }); \
|
|
|
|
+ \
|
|
|
|
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
|
|
|
|
+ { \
|
|
|
|
+ *((dataType##_t*)intrinsics_output_ref + i) = \
|
|
|
|
+ ref##functionName( \
|
|
|
|
+ (dataType##_t)intrinsics_##dataType##_inputs[i]); \
|
|
|
|
+ } \
|
|
|
|
+ \
|
|
|
|
+ INTRINSICS_SNR_COMPARE_INTERFACE( \
|
|
|
|
+ INTRINSICS_MAX_LEN, \
|
|
|
|
+ dataType); \
|
|
|
|
+ \
|
|
|
|
+ return JTEST_TEST_PASSED; \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#define INTRINSICS_TEST_TEMPLATE_ELT2(functionName, dataType) \
|
|
|
|
+ \
|
|
|
|
+ JTEST_DEFINE_TEST(functionName##_test, functionName) \
|
|
|
|
+ { \
|
|
|
|
+ uint32_t i; \
|
|
|
|
+ \
|
|
|
|
+ JTEST_COUNT_CYCLES( \
|
|
|
|
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
|
|
|
|
+ { \
|
|
|
|
+ *((dataType##_t*)intrinsics_output_fut + i) = \
|
|
|
|
+ functionName( \
|
|
|
|
+ (dataType##_t)intrinsics_##dataType##_inputs[i] \
|
|
|
|
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i]); \
|
|
|
|
+ }); \
|
|
|
|
+ \
|
|
|
|
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
|
|
|
|
+ { \
|
|
|
|
+ *((dataType##_t*)intrinsics_output_ref + i) = \
|
|
|
|
+ ref##functionName( \
|
|
|
|
+ (dataType##_t)intrinsics_##dataType##_inputs[i] \
|
|
|
|
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i]); \
|
|
|
|
+ } \
|
|
|
|
+ \
|
|
|
|
+ INTRINSICS_SNR_COMPARE_INTERFACE( \
|
|
|
|
+ INTRINSICS_MAX_LEN, \
|
|
|
|
+ dataType); \
|
|
|
|
+ \
|
|
|
|
+ return JTEST_TEST_PASSED; \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#define INTRINSICS_TEST_TEMPLATE_ELT3(functionName, dataType) \
|
|
|
|
+ \
|
|
|
|
+ JTEST_DEFINE_TEST(functionName##_test, functionName) \
|
|
|
|
+ { \
|
|
|
|
+ uint32_t i; \
|
|
|
|
+ \
|
|
|
|
+ JTEST_COUNT_CYCLES( \
|
|
|
|
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
|
|
|
|
+ { \
|
|
|
|
+ *((dataType##_t*)intrinsics_output_fut + i) = \
|
|
|
|
+ functionName( \
|
|
|
|
+ (dataType##_t)intrinsics_##dataType##_inputs[i] \
|
|
|
|
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i] \
|
|
|
|
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i]); \
|
|
|
|
+ }); \
|
|
|
|
+ \
|
|
|
|
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
|
|
|
|
+ { \
|
|
|
|
+ *((dataType##_t*)intrinsics_output_ref + i) = \
|
|
|
|
+ ref##functionName( \
|
|
|
|
+ (dataType##_t)intrinsics_##dataType##_inputs[i] \
|
|
|
|
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i] \
|
|
|
|
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i]); \
|
|
|
|
+ } \
|
|
|
|
+ \
|
|
|
|
+ INTRINSICS_SNR_COMPARE_INTERFACE( \
|
|
|
|
+ INTRINSICS_MAX_LEN, \
|
|
|
|
+ dataType); \
|
|
|
|
+ \
|
|
|
|
+ return JTEST_TEST_PASSED; \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#define INTRINSICS_TEST_TEMPLATE_ELT4(functionName, dataType, dataType2) \
|
|
|
|
+ JTEST_DEFINE_TEST(functionName##_test, functionName) \
|
|
|
|
+ { \
|
|
|
|
+ uint32_t i; \
|
|
|
|
+ \
|
|
|
|
+ JTEST_COUNT_CYCLES( \
|
|
|
|
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
|
|
|
|
+ { \
|
|
|
|
+ *((dataType2##_t*)intrinsics_output_fut + i) = \
|
|
|
|
+ functionName( \
|
|
|
|
+ (dataType##_t)intrinsics_##dataType##_inputs[i] \
|
|
|
|
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i] \
|
|
|
|
+ ,(dataType2##_t)intrinsics_##dataType2##_inputs[i]); \
|
|
|
|
+ }); \
|
|
|
|
+ \
|
|
|
|
+ for(i=0;i<INTRINSICS_MAX_LEN;i++) \
|
|
|
|
+ { \
|
|
|
|
+ *((dataType2##_t*)intrinsics_output_ref + i) = \
|
|
|
|
+ ref##functionName( \
|
|
|
|
+ (dataType##_t)intrinsics_##dataType##_inputs[i] \
|
|
|
|
+ ,(dataType##_t)intrinsics_##dataType##_inputs[i] \
|
|
|
|
+ ,(dataType2##_t)intrinsics_##dataType2##_inputs[i]); \
|
|
|
|
+ } \
|
|
|
|
+ \
|
|
|
|
+ INTRINSICS_SNR_COMPARE_INTERFACE( \
|
|
|
|
+ INTRINSICS_MAX_LEN, \
|
|
|
|
+ dataType2); \
|
|
|
|
+ \
|
|
|
|
+ return JTEST_TEST_PASSED; \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#endif /* _INTRINSICS_TEMPLATES_H_ */
|