blob: 1586eb6fb9b28763626b698896d9e0c789e74827 [file] [log] [blame]
<%!
import vec_test_helpers
%>\
<%def name="test_opivv_opivx(template_helper, src2, src1, rs1, ref_vv, ref_vx)">
<%
src1 = vec_test_helpers.to_carr_str(src1)
src2 = vec_test_helpers.to_carr_str(src2)
ref_vv = vec_test_helpers.to_carr_str(ref_vv)
ref_vx = vec_test_helpers.to_carr_str(ref_vx)
%>\
namespace softrvv_${template_helper.op_code}_test {
namespace {
${insert_variable_init(template_helper, src2, src1, rs1, ref_vv, ref_vx)}
template <typename T>
void assert_vec_elem_eq(int avl, void *test_vector_1, void *test_vector_2) {
T *ptr_vec_1 = reinterpret_cast<T *>(test_vector_1);
T *ptr_vec_2 = reinterpret_cast<T *>(test_vector_2);
for (int idx = 0; idx < avl; idx++) {
ASSERT_EQ(ptr_vec_1[idx], ptr_vec_2[idx]);
}
}
template <typename T>
void assert_vec_mask_eq(int avl, void *test_vector_1, void *test_vector_2) {
uint32_t *ptr_vec_1 = reinterpret_cast<uint32_t *>(test_vector_1);
uint32_t *ptr_vec_2 = reinterpret_cast<uint32_t *>(test_vector_2);
for (int idx = 0; idx < avl; idx++) {
const int bits_in_element = sizeof(uint32_t) * 8;
int eidx = idx / bits_in_element;
int epos = idx % bits_in_element;
uint32_t *e1 = ptr_vec_1 + eidx;
uint32_t *e2 = ptr_vec_2 + eidx;
ASSERT_EQ(*e1 & (1 << epos), *e2 & (1 << epos));
}
}
class SoftRvv${template_helper.op_code.capitalize()}Test : public ::testing::Test {
protected:
void SetUp() override { memset(dest, 0, sizeof(dest)); }
};
${insert_test(template_helper)}\
} // namespace
} // namespace softrvv_${op}_test\
</%def>\
<%def name="insert_variable_init(template_helper, src2, src1, rs1, ref_vv, ref_vx)">
<%
var_types = template_helper.get_var_types()
%>\
${var_types.src1_type} src1[] = {${src1}};
${var_types.src2_type} src2[] = {${src2}};
${var_types.imm_type} rs1 = ${rs1};
const int kAVL = sizeof(src1)/sizeof(src1[0]);
${var_types.dest_type} dest[kAVL];
${var_types.dest_type} ref_vv[kAVL] = {${ref_vv}};
${var_types.dest_type} ref_vx[kAVL] = {${ref_vx}};
</%def>\
<%def name="insert_test(template_helper)">
<%
var_types = template_helper.get_var_types()
datatypes = template_helper.get_softrvv_template_data_type()
%>\
TEST_F(SoftRvv${template_helper.op_code.capitalize()}Test, VV) {
softrvv::${template_helper.op_code}_vv<${datatypes}>(dest, src2, src1, kAVL);\
${insert_check(template_helper, var_types.dest_type, "ref_vv")}\
}
TEST_F(SoftRvv${template_helper.op_code.capitalize()}Test, VX) {
softrvv::${template_helper.op_code}_vx<${datatypes}>(dest, src2, &rs1, kAVL);\
${insert_check(template_helper, var_types.dest_type, "ref_vx")}\
}
</%def>\
<%def name="insert_check(template_helper, dest_type, ref_var)">
% if template_helper.is_destination_mask_register():
assert_vec_mask_eq<${dest_type}>(kAVL, dest, ${ref_var});
% else:
assert_vec_elem_eq<${dest_type}>(kAVL, dest, ${ref_var});
% endif
</%def>\