diff options
author | Darren Hsieh <darren.hsieh@sifive.com> | 2023-04-01 07:11:11 -0700 |
---|---|---|
committer | libyuv LUCI CQ <libyuv-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-04-06 15:58:29 +0000 |
commit | aa47d668d8c531b0e4e775b236d25b3ad08372f0 (patch) | |
tree | 5560098a50850ea20cb3745dfe79a6ea45f9157c /unit_test | |
parent | ec48e4328eac1f137dc6eff8d6f1dd38810fe583 (diff) | |
download | libyuv-aa47d668d8c531b0e4e775b236d25b3ad08372f0.tar.gz |
Add riscv cpu info detection.
* Supports:
* The standard single-letter Vector detection.
* Vector fp16 detection.
Signed-off-by: Darren Hsieh <darren.hsieh@sifive.com>
Change-Id: Ia7ee1bd8ec1a990f1b2b1700805942e99c0aa87b
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4401738
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: Frank Barchard <fbarchard@chromium.org>
Diffstat (limited to 'unit_test')
-rw-r--r-- | unit_test/cpu_test.cc | 37 | ||||
-rw-r--r-- | unit_test/testdata/riscv64.txt | 4 | ||||
-rw-r--r-- | unit_test/testdata/riscv64_rvv.txt | 4 | ||||
-rw-r--r-- | unit_test/testdata/riscv64_rvv_zvfh.txt | 4 | ||||
-rw-r--r-- | unit_test/unit_test.cc | 5 |
5 files changed, 54 insertions, 0 deletions
diff --git a/unit_test/cpu_test.cc b/unit_test/cpu_test.cc index 080778f5..3bd159f7 100644 --- a/unit_test/cpu_test.cc +++ b/unit_test/cpu_test.cc @@ -27,6 +27,14 @@ TEST_F(LibYUVBaseTest, TestCpuHas) { int has_neon = TestCpuFlag(kCpuHasNEON); printf("Has NEON %d\n", has_neon); #endif +#if defined(__riscv) && defined(__linux__) + int has_riscv = TestCpuFlag(kCpuHasRISCV); + printf("Has RISCV %d\n", has_riscv); + int has_rvv = TestCpuFlag(kCpuHasRVV); + printf("Has RVV %d\n", has_rvv); + int has_rvvzvfh = TestCpuFlag(kCpuHasRVVZVFH); + printf("Has RVVZVFH %d\n", has_rvvzvfh); +#endif int has_x86 = TestCpuFlag(kCpuHasX86); int has_sse2 = TestCpuFlag(kCpuHasSSE2); int has_ssse3 = TestCpuFlag(kCpuHasSSSE3); @@ -164,6 +172,9 @@ TEST_F(LibYUVBaseTest, TestCompilerMacros) { #ifdef _WIN32 printf("_WIN32 %d\n", _WIN32); #endif +#ifdef __riscv + printf("__riscv %d\n", __riscv); +#endif #ifdef GG_LONGLONG printf("GG_LONGLONG %d\n", GG_LONGLONG); #endif @@ -264,6 +275,32 @@ TEST_F(LibYUVBaseTest, TestLinuxMipsMsa) { } } +TEST_F(LibYUVBaseTest, TestLinuxRVV) { + if (FileExists("../../unit_test/testdata/riscv64.txt")) { + printf("Note: testing to load \"../../unit_test/testdata/riscv64.txt\"\n"); + + EXPECT_EQ(0, RiscvCpuCaps("../../unit_test/testdata/riscv64.txt")); + EXPECT_EQ(kCpuHasRVV, + RiscvCpuCaps("../../unit_test/testdata/riscv64_rvv.txt")); + EXPECT_EQ(kCpuHasRVV | kCpuHasRVVZVFH, + RiscvCpuCaps("../../unit_test/testdata/riscv64_rvv_zvfh.txt")); + } else { + printf( + "WARNING: unable to load " + "\"../../unit_test/testdata/riscv64.txt\"\n"); + } +#if defined(__linux__) && defined(__riscv) + if (FileExists("/proc/cpuinfo")) { + if (!(kCpuHasRVV & RiscvCpuCaps("/proc/cpuinfo"))) { + // This can happen on RVV emulator but /proc/cpuinfo is from host. + printf("WARNING: RVV build enabled but CPU does not have RVV\n"); + } + } else { + printf("WARNING: unable to load \"/proc/cpuinfo\"\n"); + } +#endif +} + // TODO(fbarchard): Fix clangcl test of cpuflags. #ifdef _MSC_VER TEST_F(LibYUVBaseTest, DISABLED_TestSetCpuFlags) { diff --git a/unit_test/testdata/riscv64.txt b/unit_test/testdata/riscv64.txt new file mode 100644 index 00000000..fbb4200f --- /dev/null +++ b/unit_test/testdata/riscv64.txt @@ -0,0 +1,4 @@ +processor : 0 +hart : 1 +isa : rv64imac +mmu : sv48
\ No newline at end of file diff --git a/unit_test/testdata/riscv64_rvv.txt b/unit_test/testdata/riscv64_rvv.txt new file mode 100644 index 00000000..af1b3f36 --- /dev/null +++ b/unit_test/testdata/riscv64_rvv.txt @@ -0,0 +1,4 @@ +processor : 0 +hart : 1 +isa : rv64imafdcv +mmu : sv48
\ No newline at end of file diff --git a/unit_test/testdata/riscv64_rvv_zvfh.txt b/unit_test/testdata/riscv64_rvv_zvfh.txt new file mode 100644 index 00000000..c416c1af --- /dev/null +++ b/unit_test/testdata/riscv64_rvv_zvfh.txt @@ -0,0 +1,4 @@ +processor : 0 +hart : 1 +isa : rv64imafdcv_zfh_zvfh +mmu : sv48
\ No newline at end of file diff --git a/unit_test/unit_test.cc b/unit_test/unit_test.cc index 61145a46..b66ebfab 100644 --- a/unit_test/unit_test.cc +++ b/unit_test/unit_test.cc @@ -88,6 +88,11 @@ int TestCpuEnv(int cpu_info) { cpu_info &= ~libyuv::kCpuHasLASX; } #endif +#if defined(__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)) |