v1
This commit is contained in:
133
thirdparty/sse2neon/SSE2NEONTEST.h
vendored
Normal file
133
thirdparty/sse2neon/SSE2NEONTEST.h
vendored
Normal file
@@ -0,0 +1,133 @@
|
||||
#ifndef SSE2NEONTEST_H
|
||||
#define SSE2NEONTEST_H
|
||||
|
||||
// SSE2NEONTEST performs a set of 'unit tests' making sure that each SSE call
|
||||
// provides the output we expect. If this fires an assert, then something didn't match up.
|
||||
namespace SSE2NEON
|
||||
{
|
||||
|
||||
// Currently 39 SSE intrinsics have unit tests fully implemented and verified.
|
||||
// There are an additional 56 intrinsics which do not yet have a unit
|
||||
// test implementation and, therefore, should not be considered fully
|
||||
// verified at this time. These will be implemented as soon as possible.
|
||||
// Note: The way unit tests are implemented is that 10,000 random floating point
|
||||
// and integer vec4 numbers are generated as sample data.
|
||||
//
|
||||
// A short C implementation of every intrinsic is implemented and compared to the
|
||||
// actual expected results from the corresponding SSE intrinsic against all of the
|
||||
// 10,000 randomized input vectors.
|
||||
// When running on ARM, then the results are compared to the NEON approximate version.
|
||||
enum InstructionTest
|
||||
{
|
||||
IT_MM_SETZERO_SI128, // Unit test implemented and verified as fully working
|
||||
IT_MM_SETZERO_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_SET1_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_SET_PS1, // Unit test implemented and verified as fully working
|
||||
IT_MM_SET_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_SET1_EPI32, // Unit test implemented and verified as fully working
|
||||
IT_MM_SET_EPI32, // Unit test implemented and verified as fully working
|
||||
IT_MM_STORE_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_SHUFFLE_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_LOAD1_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_ANDNOT_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_ANDNOT_SI128, // Unit test implemented and verified as fully working
|
||||
IT_MM_AND_SI128, // Unit test implemented and verified as fully working
|
||||
IT_MM_AND_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_OR_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_OR_SI128, // Unit test implemented and verified as fully working
|
||||
IT_MM_MOVEMASK_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_MOVEMASK_EPI8, // Unit test implemented and verified as fully working
|
||||
IT_MM_SUB_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_SUB_EPI32, // Unit test implemented and verified as fully working
|
||||
IT_MM_ADD_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_ADD_EPI32, // Unit test implemented and verified as fully working
|
||||
IT_MM_MULLO_EPI16, // Unit test implemented and verified as fully working
|
||||
IT_MM_MUL_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_RCP_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_MAX_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_MIN_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_MIN_EPI16, // Unit test implemented and verified as fully working
|
||||
IT_MM_MULHI_EPI16, // Unit test implemented and verified as fully working
|
||||
IT_MM_CMPLT_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_CMPGT_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_CMPGE_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_CMPLE_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_CMPEQ_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_CMPLT_EPI32, // Unit test implemented and verified as fully working
|
||||
IT_MM_CMPGT_EPI32, // Unit test implemented and verified as fully working
|
||||
IT_MM_CVTTPS_EPI32, // Unit test implemented and verified as fully working
|
||||
IT_MM_CVTEPI32_PS, // Unit test implemented and verified as fully working
|
||||
IT_MM_CVTPS_EPI32, // Unit test implemented and verified as fully working
|
||||
IT_MM_CVTSS_F32, // Unit test *not yet implemented*
|
||||
IT_MM_SETR_PS, // Unit test *not yet implemented*
|
||||
IT_MM_STOREU_PS, // Unit test *not yet implemented*
|
||||
IT_MM_STORE_SI128, // Unit test *not yet implemented*
|
||||
IT_MM_STORE_SS, // Unit test *not yet implemented*
|
||||
IT_MM_STOREL_EPI64, // Unit test *not yet implemented*
|
||||
IT_MM_LOAD_PS, // Unit test *not yet implemented*
|
||||
IT_MM_LOADU_PS, // Unit test *not yet implemented*
|
||||
IT_MM_LOAD_SS, // Unit test *not yet implemented*
|
||||
IT_MM_CMPNEQ_PS, // Unit test *not yet implemented*
|
||||
IT_MM_XOR_PS, // Unit test *not yet implemented*
|
||||
IT_MM_XOR_SI128, // Unit test *not yet implemented*
|
||||
IT_MM_SHUFFLE_EPI32_DEFAULT, // Unit test *not yet implemented*
|
||||
IT_MM_SHUFFLE_EPI32_FUNCTION, // Unit test *not yet implemented*
|
||||
IT_MM_SHUFFLE_EPI32_SPLAT, // Unit test *not yet implemented*
|
||||
IT_MM_SHUFFLE_EPI32_SINGLE, // Unit test *not yet implemented*
|
||||
IT_MM_SHUFFLEHI_EPI16_FUNCTION, // Unit test *not yet implemented*
|
||||
IT_MM_ADD_SS, // Unit test *not yet implemented*
|
||||
IT_MM_ADD_EPI16, // Unit test *not yet implemented*
|
||||
IT_MM_MULLO_EPI32, // Unit test *not yet implemented*
|
||||
IT_MM_DIV_PS, // Unit test *not yet implemented*
|
||||
IT_MM_DIV_SS, // Unit test *not yet implemented*
|
||||
IT_MM_SQRT_PS, // Unit test *not yet implemented*
|
||||
IT_MM_SQRT_SS, // Unit test *not yet implemented*
|
||||
IT_MM_RSQRT_PS, // Unit test *not yet implemented*
|
||||
IT_MM_MAX_SS, // Unit test *not yet implemented*
|
||||
IT_MM_MIN_SS, // Unit test *not yet implemented*
|
||||
IT_MM_MAX_EPI32, // Unit test *not yet implemented*
|
||||
IT_MM_MIN_EPI32, // Unit test *not yet implemented*
|
||||
IT_MM_HADD_PS, // Unit test *not yet implemented*
|
||||
IT_MM_CMPORD_PS, // Unit test *not yet implemented*
|
||||
IT_MM_COMILT_SS, // Unit test *not yet implemented*
|
||||
IT_MM_COMIGT_SS, // Unit test *not yet implemented*
|
||||
IT_MM_COMILE_SS, // Unit test *not yet implemented*
|
||||
IT_MM_COMIGE_SS, // Unit test *not yet implemented*
|
||||
IT_MM_COMIEQ_SS, // Unit test *not yet implemented*
|
||||
IT_MM_COMINEQ_SS, // Unit test *not yet implemented*
|
||||
IT_MM_CVTSI128_SI32, // Unit test *not yet implemented*
|
||||
IT_MM_CVTSI32_SI128, // Unit test *not yet implemented*
|
||||
IT_MM_CASTPS_SI128, // Unit test *not yet implemented*
|
||||
IT_MM_CASTSI128_PS, // Unit test *not yet implemented*
|
||||
IT_MM_LOAD_SI128, // Unit test *not yet implemented*
|
||||
IT_MM_PACKS_EPI16, // Unit test *not yet implemented*
|
||||
IT_MM_PACKUS_EPI16, // Unit test *not yet implemented*
|
||||
IT_MM_PACKS_EPI32, // Unit test *not yet implemented*
|
||||
IT_MM_UNPACKLO_EPI8, // Unit test *not yet implemented*
|
||||
IT_MM_UNPACKLO_EPI16, // Unit test *not yet implemented*
|
||||
IT_MM_UNPACKLO_EPI32, // Unit test *not yet implemented*
|
||||
IT_MM_UNPACKLO_PS, // Unit test *not yet implemented*
|
||||
IT_MM_UNPACKHI_PS, // Unit test *not yet implemented*
|
||||
IT_MM_UNPACKHI_EPI8, // Unit test *not yet implemented*
|
||||
IT_MM_UNPACKHI_EPI16, // Unit test *not yet implemented*
|
||||
IT_MM_UNPACKHI_EPI32, // Unit test *not yet implemented*
|
||||
IT_MM_SFENCE, // Unit test *not yet implemented*
|
||||
IT_MM_STREAM_SI128, // Unit test *not yet implemented*
|
||||
IT_MM_CLFLUSH, // Unit test *not yet implemented*
|
||||
IT_LAST
|
||||
};
|
||||
|
||||
class SSE2NEONTest
|
||||
{
|
||||
public:
|
||||
static SSE2NEONTest* create(void); // create the test.
|
||||
static const char *getInstructionTestString(InstructionTest test);
|
||||
|
||||
// Run test of this instruction; return true if it passed, false if it failed
|
||||
virtual bool runTest(InstructionTest test) = 0;
|
||||
virtual void release(void) = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user