// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #ifdef __AVX__ #include #endif #include #include template void CheckedRun(F&& fn) { #ifdef __AVX__ __m256i xmm0 = _mm256_set_epi32(0, 0, 0, 0, 0, 0, 0, 0); __m256i xmm1 = _mm256_set_epi32(1, 1, 0, 0, 0, 0, 0, 1); __m256i xmm2 = _mm256_set_epi32(2, 2, 0, 0, 0, 0, 0, 2); __m256i xmm3 = _mm256_set_epi32(3, 3, 0, 0, 0, 0, 0, 3); __m256i xmm4 = _mm256_set_epi32(4, 4, 0, 0, 0, 0, 0, 4); __m256i xmm5 = _mm256_set_epi32(4, 4, 0, 0, 0, 0, 0, 5); __m256i xmm6 = _mm256_set_epi32(4, 4, 0, 0, 0, 0, 0, 6); __m256i xmm7 = _mm256_set_epi32(4, 4, 0, 0, 0, 0, 0, 7); __m256i xmm8 = _mm256_set_epi32(4, 4, 0, 0, 0, 0, 0, 8); __m256i xmm9 = _mm256_set_epi32(4, 4, 0, 0, 0, 0, 0, 9); __m256i xmm10 = _mm256_set_epi32(4, 4, 0, 0, 0, 0, 0, 10); __m256i xmm11 = _mm256_set_epi32(4, 4, 0, 0, 0, 0, 0, 11); asm volatile("" : "+x"(xmm0), "+x"(xmm1), "+x"(xmm2), "+x"(xmm3) , "+x"(xmm4), "+x"(xmm5), "+x"(xmm6), "+x"(xmm7) , "+x"(xmm8), "+x"(xmm9), "+x"(xmm10), "+x"(xmm11) : ); fn(); asm volatile("" : "+x"(xmm0), "+x"(xmm1), "+x"(xmm2), "+x"(xmm3) , "+x"(xmm4), "+x"(xmm5), "+x"(xmm6), "+x"(xmm7) , "+x"(xmm8), "+x"(xmm9), "+x"(xmm10), "+x"(xmm11) : ); CHECK(std::bit_cast(xmm0[0]) == 0); CHECK(std::bit_cast(xmm1[0]) == 1); CHECK(std::bit_cast(xmm2[0]) == 2); CHECK(std::bit_cast(xmm3[0]) == 3); CHECK(std::bit_cast(xmm4[0]) == 4); CHECK(std::bit_cast(xmm5[0]) == 5); CHECK(std::bit_cast(xmm6[0]) == 6); CHECK(std::bit_cast(xmm7[0]) == 7); CHECK(std::bit_cast(xmm8[0]) == 8); CHECK(std::bit_cast(xmm9[0]) == 9); CHECK(std::bit_cast(xmm10[0]) == 10); CHECK(std::bit_cast(xmm11[0]) == 11); #else fn(); #endif }