/* * Copyright 2011 The LibYuv Project Authors. All rights reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree.
*/
#ifdef LIBYUV_USE_ABSL_FLAGS
ABSL_FLAG(int32_t, libyuv_width, 0, "width of test image.");
ABSL_FLAG(int32_t, libyuv_height, 0, "height of test image.");
ABSL_FLAG(int32_t, libyuv_repeat, 0, "number of times to repeat test.");
ABSL_FLAG(int32_t,
libyuv_flags,
0, "cpu flags for reference code. 1 = C, -1 = SIMD");
ABSL_FLAG(int32_t,
libyuv_cpu_info,
0, "cpu flags for benchmark code. 1 = C, -1 = SIMD"); #else // Disable command line parameters if absl/flags disabled. staticconst int32_t FLAGS_libyuv_width = 0; staticconst int32_t FLAGS_libyuv_height = 0; staticconst int32_t FLAGS_libyuv_repeat = 0; staticconst int32_t FLAGS_libyuv_flags = 0; staticconst int32_t FLAGS_libyuv_cpu_info = 0; #endif
#ifdef LIBYUV_USE_ABSL_FLAGS #define LIBYUV_GET_FLAG(f) absl::GetFlag(f) #else #define LIBYUV_GET_FLAG(f) f #endif
// Test environment variable for disabling CPU features. Any non-zero value // to disable. Zero ignored to make it easy to set the variable on/off. #if !defined(__native_client__) && !defined(_M_ARM) static LIBYUV_BOOL TestEnv(constchar* name) { constchar* var = getenv(name); if (var) { if (var[0] != '0') { return LIBYUV_TRUE;
}
} return LIBYUV_FALSE;
} #else// nacl does not support getenv(). static LIBYUV_BOOL TestEnv(constchar*) { return LIBYUV_FALSE;
} #endif
staticint TestCpuEnv(int cpu_info) { #ifdefined(__arm__) || defined(__aarch64__) if (TestEnv("LIBYUV_DISABLE_NEON")) {
cpu_info &= ~libyuv::kCpuHasNEON;
} #endif #ifdefined(__aarch64__) if (TestEnv("LIBYUV_DISABLE_NEON_DOTPROD")) {
cpu_info &= ~libyuv::kCpuHasNeonDotProd;
} if (TestEnv("LIBYUV_DISABLE_NEON_I8MM")) {
cpu_info &= ~libyuv::kCpuHasNeonI8MM;
} if (TestEnv("LIBYUV_DISABLE_SVE")) {
cpu_info &= ~libyuv::kCpuHasSVE;
} if (TestEnv("LIBYUV_DISABLE_SVE2")) {
cpu_info &= ~libyuv::kCpuHasSVE2;
} if (TestEnv("LIBYUV_DISABLE_SME")) {
cpu_info &= ~libyuv::kCpuHasSME;
} #endif #ifdefined(__mips__) && defined(__linux__) if (TestEnv("LIBYUV_DISABLE_MSA")) {
cpu_info &= ~libyuv::kCpuHasMSA;
} #endif #ifdefined(__longarch__) && defined(__linux__) if (TestEnv("LIBYUV_DISABLE_LSX")) {
cpu_info &= ~libyuv::kCpuHasLSX;
} #endif #ifdefined(__longarch__) && defined(__linux__) if (TestEnv("LIBYUV_DISABLE_LASX")) {
cpu_info &= ~libyuv::kCpuHasLASX;
} #endif #ifdefined(__riscv) && defined(__linux__) if (TestEnv("LIBYUV_DISABLE_RVV")) {
cpu_info &= ~libyuv::kCpuHasRVV;
} #endif #if !defined(__pnacl__) && !defined(__CLR_VER) && \
(defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || \ defined(_M_IX86)) if (TestEnv("LIBYUV_DISABLE_X86")) {
cpu_info &= ~libyuv::kCpuHasX86;
} if (TestEnv("LIBYUV_DISABLE_SSE2")) {
cpu_info &= ~libyuv::kCpuHasSSE2;
} if (TestEnv("LIBYUV_DISABLE_SSSE3")) {
cpu_info &= ~libyuv::kCpuHasSSSE3;
} if (TestEnv("LIBYUV_DISABLE_SSE41")) {
cpu_info &= ~libyuv::kCpuHasSSE41;
} if (TestEnv("LIBYUV_DISABLE_SSE42")) {
cpu_info &= ~libyuv::kCpuHasSSE42;
} if (TestEnv("LIBYUV_DISABLE_AVX")) {
cpu_info &= ~libyuv::kCpuHasAVX;
} if (TestEnv("LIBYUV_DISABLE_AVX2")) {
cpu_info &= ~libyuv::kCpuHasAVX2;
} if (TestEnv("LIBYUV_DISABLE_ERMS")) {
cpu_info &= ~libyuv::kCpuHasERMS;
} if (TestEnv("LIBYUV_DISABLE_FMA3")) {
cpu_info &= ~libyuv::kCpuHasFMA3;
} if (TestEnv("LIBYUV_DISABLE_F16C")) {
cpu_info &= ~libyuv::kCpuHasF16C;
} if (TestEnv("LIBYUV_DISABLE_AVX512BW")) {
cpu_info &= ~libyuv::kCpuHasAVX512BW;
} if (TestEnv("LIBYUV_DISABLE_AVX512VL")) {
cpu_info &= ~libyuv::kCpuHasAVX512VL;
} if (TestEnv("LIBYUV_DISABLE_AVX512VNNI")) {
cpu_info &= ~libyuv::kCpuHasAVX512VNNI;
} if (TestEnv("LIBYUV_DISABLE_AVX512VBMI")) {
cpu_info &= ~libyuv::kCpuHasAVX512VBMI;
} if (TestEnv("LIBYUV_DISABLE_AVX512VBMI2")) {
cpu_info &= ~libyuv::kCpuHasAVX512VBMI2;
} if (TestEnv("LIBYUV_DISABLE_AVX512VBITALG")) {
cpu_info &= ~libyuv::kCpuHasAVX512VBITALG;
} if (TestEnv("LIBYUV_DISABLE_AVX10")) {
cpu_info &= ~libyuv::kCpuHasAVX10;
} if (TestEnv("LIBYUV_DISABLE_AVXVNNI")) {
cpu_info &= ~libyuv::kCpuHasAVXVNNI;
} if (TestEnv("LIBYUV_DISABLE_AVXVNNIINT8")) {
cpu_info &= ~libyuv::kCpuHasAVXVNNIINT8;
} if (TestEnv("LIBYUV_DISABLE_AMXINT8")) {
cpu_info &= ~libyuv::kCpuHasAMXINT8;
} #endif if (TestEnv("LIBYUV_DISABLE_ASM")) {
cpu_info = libyuv::kCpuInitialized;
} return cpu_info;
}
// For quicker unittests, default is 128 x 72. But when benchmarking, // default to 720p. Allow size to specify. // Set flags to -1 for benchmarking to avoid slower C code.
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.