Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: Add testing tool to print var in u8 array #23

Merged
merged 1 commit into from
Nov 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 105 additions & 0 deletions tests/common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -312,4 +312,109 @@ result_t validate_float_error(float64x2_t a, double d0, double d1, double err) {
return TEST_SUCCESS;
}

void print_64_bits_u8_arr(char *var_name, const uint8_t *u) {
printf("%s0: %3u, %s1: %3u, %s2: %3u, %s3: %3u, %s4: %3u, %s5: %3u, %s6: %3u, %s7: %3u\n", var_name, u[0], var_name,
u[1], var_name, u[2], var_name, u[3], var_name, u[4], var_name, u[5], var_name, u[6], var_name, u[7]);
}
void print_128_bits_u8_arr(char *var_name, const uint8_t *u) {
printf(
"%s0: %3u, %s1: %3u, %s2: %3u, %s3: %3u, %s4: %3u, %s5: %3u, %s6: %3u, %s7: %3u, %s8: %3u, %s9: %3u, %s10: %3u, "
"%s11: %3u, "
"%s12: %3u, %s13: "
"%3u, %s14: %3u, %s15: %3u\n",
var_name, u[0], var_name, u[1], var_name, u[2], var_name, u[3], var_name, u[4], var_name, u[5], var_name, u[6],
var_name, u[7], var_name, u[8], var_name, u[9], var_name, u[10], var_name, u[11], var_name, u[12], var_name,
u[13], var_name, u[14], var_name, u[15]);
}

void print_64_bits_in_u8(char *var_name, uint8_t u0, uint8_t u1, uint8_t u2, uint8_t u3, uint8_t u4, uint8_t u5,
uint8_t u6, uint8_t u7) {
uint8_t a[] = {u0, u1, u2, u3, u4, u5, u6, u7};
const uint8_t *u = (const uint8_t *)&a;
print_64_bits_u8_arr(var_name, u);
}
void print_64_bits_in_u8(char *var_name, int8_t i0, int8_t i1, int8_t i2, int8_t i3, int8_t i4, int8_t i5, int8_t i6,
int8_t i7) {
int8_t a[] = {i0, i1, i2, i3, i4, i5, i6, i7};
const uint8_t *u = (const uint8_t *)&a;
print_64_bits_u8_arr(var_name, u);
}
void print_64_bits_in_u8(char *var_name, uint16_t u0, uint16_t u1, uint16_t u2, uint16_t u3) {
uint16_t a[] = {u0, u1, u2, u3};
const uint8_t *u = (const uint8_t *)&a;
print_64_bits_u8_arr(var_name, u);
}
void print_64_bits_in_u8(char *var_name, int16_t i0, int16_t i1, int16_t i2, int16_t i3) {
int16_t a[] = {i0, i1, i2, i3};
const uint8_t *u = (const uint8_t *)&a;
print_64_bits_u8_arr(var_name, u);
}
void print_64_bits_in_u8(char *var_name, uint32_t u0, uint32_t u1) {
uint32_t a[] = {u0, u1};
const uint8_t *u = (const uint8_t *)&a;
print_64_bits_u8_arr(var_name, u);
}
void print_64_bits_in_u8(char *var_name, int32_t i0, int32_t i1) {
int32_t a[] = {i0, i1};
const uint8_t *u = (const uint8_t *)&a;
print_64_bits_u8_arr(var_name, u);
}
void print_64_bits_in_u8(char *var_name, uint64_t u0) {
uint64_t a[] = {u0};
const uint8_t *u = (const uint8_t *)&a;
print_64_bits_u8_arr(var_name, u);
}
void print_64_bits_in_u8(char *var_name, int64_t i0) {
int64_t a[] = {i0};
const uint8_t *u = (const uint8_t *)&a;
print_64_bits_u8_arr(var_name, u);
}

void print_128_bits_in_u8(char *var_name, uint8_t u0, uint8_t u1, uint8_t u2, uint8_t u3, uint8_t u4, uint8_t u5,
uint8_t u6, uint8_t u7, uint8_t u8, uint8_t u9, uint8_t u10, uint8_t u11, uint8_t u12,
uint8_t u13, uint8_t u14, uint8_t u15) {
uint8_t a[] = {u0, u1, u2, u3, u4, u5, u6, u7, u8, u9, u10, u11, u12, u13, u14, u15};
const uint8_t *u = (const uint8_t *)&a;
print_128_bits_u8_arr(var_name, u);
}
void print_128_bits_in_u8(char *var_name, int8_t i0, int8_t i1, int8_t i2, int8_t i3, int8_t i4, int8_t i5, int8_t i6,
int8_t i7, int8_t i8, int8_t i9, int8_t i10, int8_t i11, int8_t i12, int8_t i13, int8_t i14,
int8_t i15) {
int8_t a[] = {i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15};
const uint8_t *u = (const uint8_t *)&a;
print_128_bits_u8_arr(var_name, u);
}
void print_128_bits_in_u8(char *var_name, uint16_t u0, uint16_t u1, uint16_t u2, uint16_t u3, uint16_t u4, uint16_t u5,
uint16_t u6, uint16_t u7) {
uint16_t a[] = {u0, u1, u2, u3, u4, u5, u6, u7};
const uint8_t *u = (const uint8_t *)&a;
print_128_bits_u8_arr(var_name, u);
}
void print_128_bits_in_u8(char *var_name, int16_t i0, int16_t i1, int16_t i2, int16_t i3, int16_t i4, int16_t i5,
int16_t i6, int16_t i7) {
int16_t a[] = {i0, i1, i2, i3, i4, i5, i6, i7};
const uint8_t *u = (const uint8_t *)&a;
print_128_bits_u8_arr(var_name, u);
}
void print_128_bits_in_u8(char *var_name, uint32_t u0, uint32_t u1, uint32_t u2, uint32_t u3) {
uint32_t a[] = {u0, u1, u2, u3};
const uint8_t *u = (const uint8_t *)&a;
print_128_bits_u8_arr(var_name, u);
}
void print_128_bits_in_u8(char *var_name, int32_t i0, int32_t i1, int32_t i2, int32_t i3) {
int32_t a[] = {i0, i1, i2, i3};
const uint8_t *u = (const uint8_t *)&a;
print_128_bits_u8_arr(var_name, u);
}
void print_128_bits_in_u8(char *var_name, uint64_t u0, uint64_t u1) {
uint64_t a[] = {u0, u1};
const uint8_t *u = (const uint8_t *)&a;
print_128_bits_u8_arr(var_name, u);
}
void print_128_bits_in_u8(char *var_name, int64_t i0, int64_t i1) {
int64_t a[] = {i0, i1};
const uint8_t *u = (const uint8_t *)&a;
print_128_bits_u8_arr(var_name, u);
}

} // namespace NEON2RVV
140 changes: 140 additions & 0 deletions tests/common.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#ifndef NEON2RVV_COMMON_H
#define NEON2RVV_COMMON_H

#include <stdio.h>
#include <cstdint>

#if defined(__riscv) || defined(__riscv__)
Expand Down Expand Up @@ -37,6 +38,89 @@ typedef union ALIGN_STRUCT(16) SIMDVec {
return TEST_FAIL;

namespace NEON2RVV {

// A replica of typedefs in neon2rvv.h. This is only to make implementing tests easier.
#if __riscv_v_min_vlen == 128
// 64bit width vector register
typedef vint8mf2_t int8x8_t;
typedef vint16mf2_t int16x4_t;
typedef vint32mf2_t int32x2_t;
typedef vint64m1_t int64x1_t;
typedef vuint8mf2_t uint8x8_t;
typedef vuint16mf2_t uint16x4_t;
typedef vuint32mf2_t uint32x2_t;
typedef vuint64m1_t uint64x1_t;
typedef vfloat32mf2_t float32x2_t;
typedef vfloat64m1_t float64x1_t;
// 128bit width vector register
typedef vint8m1_t int8x16_t;
typedef vint16m1_t int16x8_t;
typedef vint32m1_t int32x4_t;
typedef vint64m1_t int64x2_t;
typedef vuint8m1_t uint8x16_t;
typedef vuint16m1_t uint16x8_t;
typedef vuint32m1_t uint32x4_t;
typedef vuint64m1_t uint64x2_t;
typedef vfloat32m1_t float32x4_t;
typedef vfloat64m1_t float64x2_t;

// FIXME wrong typedefs, just for passing compilation
typedef vint8mf2x2_t int8x8x2_t;
typedef vuint8mf2x2_t uint8x8x2_t;
typedef vint8m2_t int8x16x2_t;
typedef vuint8m2_t uint8x16x2_t;
typedef vint8m4_t int8x16x3_t;
typedef vuint8m4_t uint8x16x3_t;
typedef vint8m4_t int8x16x4_t;
typedef vuint8m4_t uint8x16x4_t;
typedef vint8m4_t int8x8x3_t;
typedef vuint8m4_t uint8x8x3_t;
typedef vint8m4_t int8x8x4_t;
typedef vuint8m4_t uint8x8x4_t;
typedef vint16m2_t int16x4x2_t;
typedef vuint16m2_t uint16x4x2_t;
typedef vint16m4_t int16x4x3_t;
typedef vuint16m4_t uint16x4x3_t;
typedef vint16m4_t int16x4x4_t;
typedef vuint16m4_t uint16x4x4_t;
typedef vint16m2_t int16x8x2_t;
typedef vuint16m2_t uint16x8x2_t;
typedef vint16m4_t int16x8x3_t;
typedef vuint16m4_t uint16x8x3_t;
typedef vint16m4_t int16x8x4_t;
typedef vuint16m4_t uint16x8x4_t;
typedef vint32m2_t int32x2x2_t;
typedef vuint32m2_t uint32x2x2_t;
typedef vint32m4_t int32x2x3_t;
typedef vuint32m4_t uint32x2x3_t;
typedef vint32m4_t int32x2x4_t;
typedef vuint32m4_t uint32x2x4_t;
typedef vint32m4_t int32x2x4_t;
typedef vuint32m4_t uint32x2x4_t;
typedef vint32m2_t int32x4x2_t;
typedef vuint32m2_t uint32x4x2_t;
typedef vint32m4_t int32x4x3_t;
typedef vuint32m4_t uint32x4x3_t;
typedef vint32m4_t int32x4x4_t;
typedef vuint32m4_t uint32x4x4_t;
typedef vfloat32m2_t float32x2x2_t;
typedef vfloat32m4_t float32x2x3_t;
typedef vfloat32m4_t float32x2x4_t;
typedef vfloat32m2_t float32x4x2_t;
typedef vfloat32m4_t float32x4x3_t;
typedef vfloat32m4_t float32x4x4_t;
typedef vint64m2_t int64x1x2_t;
typedef vuint64m2_t uint64x1x2_t;
typedef vint64m4_t int64x1x3_t;
typedef vuint64m4_t uint64x1x3_t;
typedef vint64m4_t int64x1x4_t;
typedef vuint64m4_t uint64x1x4_t;
#elif __riscv_v_min_vlen == 256
#elif __riscv_v_min_vlen == 512
#else
// typedef for other VLEN
#endif

enum result_t {
TEST_SUCCESS = 1,
TEST_FAIL = 0,
Expand Down Expand Up @@ -78,6 +162,12 @@ result_t validate_int8(int8x16_t a, int8_t i0, int8_t i1, int8_t i2, int8_t i3,
result_t validate_uint8(uint8x16_t a, uint8_t u0, uint8_t u1, uint8_t u2, uint8_t u3, uint8_t u4, uint8_t u5,
uint8_t u6, uint8_t u7, uint8_t u8, uint8_t u9, uint8_t u10, uint8_t u11, uint8_t u12,
uint8_t u13, uint8_t u14, uint8_t u15);
result_t validate_int8(int8x8x2_t a, int8_t i0, int8_t i1, int8_t i2, int8_t i3, int8_t i4, int8_t i5, int8_t i6,
int8_t i7, int8_t i8, int8_t i9, int8_t i10, int8_t i11, int8_t i12, int8_t i13, int8_t i14,
int8_t i15);
result_t validate_uint8(uint8x8x2_t a, uint8_t u0, uint8_t u1, uint8_t u2, uint8_t u3, uint8_t u4, uint8_t u5,
uint8_t u6, uint8_t u7, uint8_t u8, uint8_t u9, uint8_t u10, uint8_t u11, uint8_t u12,
uint8_t u13, uint8_t u14, uint8_t u15);
result_t validate_int8(int8x8_t a, int8_t i0, int8_t i1, int8_t i2, int8_t i3, int8_t i4, int8_t i5, int8_t i6,
int8_t i7);
result_t validate_uint8(uint8x8_t a, uint8_t u0, uint8_t u1, uint8_t u2, uint8_t u3, uint8_t u4, uint8_t u5, uint8_t u6,
Expand All @@ -90,6 +180,56 @@ result_t validate_float_epsilon(float32x4_t a, float f0, float f1, float f2, flo
result_t validate_float_error(float32x4_t a, float f0, float f1, float f2, float f3, float err);
result_t validate_double(float64x2_t a, double d0, double d1);
result_t validate_float_error(float64x2_t a, double d0, double d1, double err);

void print_64_bits_u8_arr(char *var_name, const uint8_t *u);
void print_128_bits_u8_arr(char *var_name, const uint8_t *u);

void print_64_bits_in_u8(char *var_name, uint8_t u0, uint8_t u1, uint8_t u2, uint8_t u3, uint8_t u4, uint8_t u5,
uint8_t u6, uint8_t u7);
void print_64_bits_in_u8(char *var_name, int8_t i0, int8_t i1, int8_t i2, int8_t i3, int8_t i4, int8_t i5, int8_t i6,
int8_t i7);
void print_64_bits_in_u8(char *var_name, uint16_t u0, uint16_t u1, uint16_t u2, uint16_t u3);
void print_64_bits_in_u8(char *var_name, int16_t i0, int16_t i1, int16_t i2, int16_t i3);
void print_64_bits_in_u8(char *var_name, uint32_t u0, uint32_t u1);
void print_64_bits_in_u8(char *var_name, int32_t i0, int32_t i1);
void print_64_bits_in_u8(char *var_name, uint64_t u0);
void print_64_bits_in_u8(char *var_name, int64_t i0);
template <typename T>
void print_64_bits_in_u8(char *var_name, T a) {
const uint8_t *u = (const uint8_t *)&a;
print_64_bits_u8_arr(var_name, u);
}
template <typename T>
void print_64_bits_in_u8(char *var_name, T *a) {
const uint8_t *u = (const uint8_t *)a;
print_64_bits_u8_arr(var_name, u);
}

void print_128_bits_in_u8(char *var_name, uint8_t u0, uint8_t u1, uint8_t u2, uint8_t u3, uint8_t u4, uint8_t u5,
uint8_t u6, uint8_t u7, uint8_t u8, uint8_t u9, uint8_t u10, uint8_t u11, uint8_t u12,
uint8_t u13, uint8_t u14, uint8_t u15);
void print_128_bits_in_u8(char *var_name, int8_t i0, int8_t i1, int8_t i2, int8_t i3, int8_t i4, int8_t i5, int8_t i6,
int8_t i7, int8_t i8, int8_t i9, int8_t i10, int8_t i11, int8_t i12, int8_t i13, int8_t i14,
int8_t i15);
void print_128_bits_in_u8(char *var_name, uint16_t u0, uint16_t u1, uint16_t u2, uint16_t u3, uint16_t u4, uint16_t u5,
uint16_t u6, uint16_t u7);
void print_128_bits_in_u8(char *var_name, int16_t i0, int16_t i1, int16_t i2, int16_t i3, int16_t i4, int16_t i5,
int16_t i6, int16_t i7);
void print_128_bits_in_u8(char *var_name, uint32_t u0, uint32_t u1, uint32_t u2, uint32_t u3);
void print_128_bits_in_u8(char *var_name, int32_t i0, int32_t i1, int32_t i2, int32_t i3);
void print_128_bits_in_u8(char *var_name, uint64_t u0, uint64_t u1);
void print_128_bits_in_u8(char *var_name, int64_t i0, int64_t i1);
template <typename T>
void print_128_bits_in_u8(char *var_name, T a) {
const uint8_t *u = (const uint8_t *)&a;
print_128_bits_u8_arr(var_name, u);
}
template <typename T>
void print_128_bits_in_u8(char *var_name, T *a) {
const uint8_t *u = (const uint8_t *)a;
print_128_bits_u8_arr(var_name, u);
}

} // namespace NEON2RVV

#endif // NEON2RVV_COMMON_H