Skip to content

Question: mipp::set<1> (NO_INTRINSICS) is undefined #44

@SpaceView

Description

@SpaceView

In MIPP\tests\src\bitwise_operations\xorb.cpp, I was trying to test this function,


template <typename T>
void test_msk_xorb()
{
	constexpr int N = mipp::N<T>();
	bool inputs1[N], inputs2[N];
	std::mt19937 g;
	std::uniform_int_distribution<uint16_t> dis(0, 1);

	for (auto t = 0; t < 100; t++)
	{
		for (auto i = 0; i < N; i++)
		{
			inputs1[i] = dis(g) ? true : false;
			inputs2[i] = dis(g) ? true : false;
		}

		std::shuffle(inputs1, inputs1 + mipp::N<T>(), g);
		std::shuffle(inputs2, inputs2 + mipp::N<T>(), g);

		mipp::msk m1 = mipp::set<N>(inputs1);
		mipp::msk m2 = mipp::set<N>(inputs2);
		mipp::msk m3 = mipp::xorb<N>(m1, m2);

		mipp::reg r = mipp::toreg<N>(m3);

		for (auto i = 0; i < N; i++)
		{
			bool res = inputs1[i] ^ inputs2[i];

			if (res)
				REQUIRE(mipp::get<T>(r, i) != (T)0);
			else
				REQUIRE(mipp::get<T>(r, i) == (T)res);
		}
	}
}

So I add a few lines into the test line,

TEST_CASE("Binary xor - mipp::Msk", "[mipp::xorb]")
{
#if defined(MIPP_64BIT)
	SECTION("datatype = int64_t") { test_Msk_xorb<int64_t>(); }
#endif
	SECTION("datatype = int32_t") { test_Msk_xorb<int32_t>(); }
#if defined(MIPP_BW)
	SECTION("datatype = int16_t") { test_Msk_xorb<int16_t>(); }
	SECTION("datatype = int8_t") { test_Msk_xorb<int8_t>(); }
#endif

#if defined(MIPP_64BIT)
	SECTION("datatype = int64_t") { test_msk_xorb<int64_t>(); }
#endif
	SECTION("datatype = int32_t") { test_msk_xorb<int32_t>(); }
#if defined(MIPP_BW)
	SECTION("datatype = int16_t") { test_msk_xorb<int16_t>(); }
	SECTION("datatype = int8_t") { test_msk_xorb<int8_t>(); }
#endif
}

However I got the following error info at runtime,

MIPP tests
----------

Instr. type:       NO
Instr. full type:  NO_INTRINSICS
Instr. version:    1
Instr. size:       0 bits
Instr. lanes:      1
64-bit support:    yes
Byte/word support: yes


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
run_tests.exe is a Catch v2.2.2 host application.
Run with -? for options

-------------------------------------------------------------------------------
Binary xor - mipp::Msk
  datatype = int64_t
-------------------------------------------------------------------------------
E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(174)
...............................................................................

E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(174): FAILED:
due to unexpected exception with message:
  mipp::set<1> (NO_INTRINSICS) is undefined!, try to add -mfpu=neon-vfpv4, -
  msse4.2, -mavx, -march=native... at the compile time.

-------------------------------------------------------------------------------
Binary xor - mipp::Msk
  datatype = int32_t
-------------------------------------------------------------------------------
E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(176)
...............................................................................

E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(176): FAILED:
due to unexpected exception with message:
  mipp::set<1> (NO_INTRINSICS) is undefined!, try to add -mfpu=neon-vfpv4, -
  msse4.2, -mavx, -march=native... at the compile time.

-------------------------------------------------------------------------------
Binary xor - mipp::Msk
  datatype = int16_t
-------------------------------------------------------------------------------
E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(178)
...............................................................................

E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(178): FAILED:
due to unexpected exception with message:
  mipp::set<1> (NO_INTRINSICS) is undefined!, try to add -mfpu=neon-vfpv4, -
  msse4.2, -mavx, -march=native... at the compile time.

-------------------------------------------------------------------------------
Binary xor - mipp::Msk
  datatype = int8_t
-------------------------------------------------------------------------------
E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(179)
...............................................................................

E:\vLIBS\MIPP\tests\src\bitwise_operations\xorb.cpp(179): FAILED:
due to unexpected exception with message:
  mipp::set<1> (NO_INTRINSICS) is undefined!, try to add -mfpu=neon-vfpv4, -
  msse4.2, -mavx, -march=native... at the compile time.

===============================================================================
test cases:   123 |   122 passed | 1 failed
assertions: 10353 | 10349 passed | 4 failed

It seems mipp::set<1> is not defined, but in mipp.h I can clearly see that the set function is defined as,

template <typename T> inline reg   set          (const T[nElReg<T>()])            { errorMessage<T>("set");           exit(-1); }
#ifdef _MSC_VER
template <int      N> inline msk   set          (const bool[])                    { errorMessage<N>("set");           exit(-1); }
#else
template <int      N> inline msk   set          (const bool[N])                   { errorMessage<N>("set");           exit(-1); }
#endif

I add the command "-mfpu=neon-vfpv4" to msvc2019 compiler, it seems doesn't help at all.
Could anybody give some explanation about this?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions