tests:vle_vse: extend test converage to e16 and e32 Change-Id: Iead1b1e965018b0d351879635670828cb68fe1ab
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b98912a..e3644c5 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt
@@ -118,7 +118,7 @@ LINKOPTS -Xlinker --defsym=__itcm_length__=128K TIMEOUT - 500 + 40 ) vec_cc_test(
diff --git a/tests/vle_vse_test.cpp b/tests/vle_vse_test.cpp index 457490f..5542b29 100644 --- a/tests/vle_vse_test.cpp +++ b/tests/vle_vse_test.cpp
@@ -1,5 +1,5 @@ #include <riscv_vector.h> -#include <springbok_intrinsics.h> +#include <springbok.h> #include <stddef.h> #include "pw_unit_test/framework.h" @@ -19,23 +19,63 @@ int32_t avl = AVLS[i]; int vlmax; int vl; - std::tie(vlmax, vl) = vector_test_setup<uint8_t>( - lmul, avl, {test_vector_1, test_vector_2}); + switch (sew) { + case SEW_E8: + std::tie(vlmax, vl) = vector_test_setup<uint8_t>( + lmul, avl, {test_vector_1, test_vector_2}); + break; + case SEW_E16: + std::tie(vlmax, vl) = vector_test_setup<uint16_t>( + lmul, avl, {test_vector_1, test_vector_2}); + break; + case SEW_E32: + std::tie(vlmax, vl) = vector_test_setup<uint32_t>( + lmul, avl, {test_vector_1, test_vector_2}); + break; + default: { + LOG_ERROR("Not supported SEW"); + ASSERT_TRUE(false); + break; + } + } + if (avl > vlmax) { continue; } - fill_random_vector<uint8_t>(test_vector_1, vl); + LOG_DEBUG("vl: %d", vl); // load c-array values into vector // TODO(gkielian): utilize intrinsics for vle if (use_intrinsic) { } else { - __asm__ volatile("vle8.v v0, (%0)" : : "r"(test_vector_1)); - - // 2) store the vector back into memory (into result c-array) - __asm__ volatile("vse8.v v0, (%0)" : : "r"(test_vector_2)); + switch (sew) { + case SEW_E8: { + fill_random_vector<uint8_t>(test_vector_1, vl); + __asm__ volatile("vle8.v v0, (%0)" : : "r"(test_vector_1)); + __asm__ volatile("vse8.v v0, (%0)" : : "r"(test_vector_2)); + assert_vec_elem_eq<uint8_t>(vl, test_vector_1, test_vector_2); + break; + } + case SEW_E16: { + fill_random_vector<uint16_t>( + reinterpret_cast<uint16_t *>(test_vector_1), vl); + __asm__ volatile("vle16.v v0, (%0)" : : "r"(test_vector_1)); + __asm__ volatile("vse16.v v0, (%0)" : : "r"(test_vector_2)); + assert_vec_elem_eq<uint16_t>(vl, test_vector_1, test_vector_2); + break; + } + case SEW_E32: { + fill_random_vector<uint32_t>( + reinterpret_cast<uint32_t *>(test_vector_1), vl); + __asm__ volatile("vle32.v v0, (%0)" : : "r"(test_vector_1)); + __asm__ volatile("vse32.v v0, (%0)" : : "r"(test_vector_2)); + assert_vec_elem_eq<uint32_t>(vl, test_vector_1, test_vector_2); + break; + } + default: + break; + } } - assert_vec_elem_eq<uint8_t>(vl, test_vector_1, test_vector_2); } } @@ -55,5 +95,37 @@ vlevse_test(VSEW::SEW_E8, VLMUL::LMUL_M8, false); } +TEST(VleVseTest, vle16vse16_e16m1) { + vlevse_test(VSEW::SEW_E16, VLMUL::LMUL_M1, false); +} + +TEST(VleVseTest, vle16vse16_e16m2) { + vlevse_test(VSEW::SEW_E16, VLMUL::LMUL_M2, false); +} + +TEST(VleVseTest, vle16vse16_e16m4) { + vlevse_test(VSEW::SEW_E16, VLMUL::LMUL_M4, false); +} + +TEST(VleVseTest, vle16vse16_e16m8) { + vlevse_test(VSEW::SEW_E16, VLMUL::LMUL_M8, false); +} + +TEST(VleVseTest, vle32vse32_e32m1) { + vlevse_test(VSEW::SEW_E32, VLMUL::LMUL_M1, false); +} + +TEST(VleVseTest, vle32vse32_e32m2) { + vlevse_test(VSEW::SEW_E32, VLMUL::LMUL_M2, false); +} + +TEST(VleVseTest, vle32vse32_e32m4) { + vlevse_test(VSEW::SEW_E32, VLMUL::LMUL_M4, false); +} + +TEST(VleVseTest, vle32vse32_e32m8) { + vlevse_test(VSEW::SEW_E32, VLMUL::LMUL_M8, false); +} + } // namespace } // namespace vle_vse_test