Skip to content

Commit 55a64f8

Browse files
committed
Merge branch 'main' into add-native-riscv-ci
2 parents 988d618 + 909ceeb commit 55a64f8

File tree

8 files changed

+4918
-4427
lines changed

8 files changed

+4918
-4427
lines changed

.github/workflows/github_actions.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ jobs:
1919
- name: run tests
2020
run: |
2121
export PATH=$PATH:/opt/riscv/bin
22-
sh scripts/cross-test.sh qemu
22+
export SIMULATOR_TYPE=qemu
23+
export ENABLE_TEST_ALL=true
24+
sh scripts/cross-test.sh
2325
2426
host_riscv:
2527
runs-on: ubuntu-20.04
@@ -45,7 +47,8 @@ jobs:
4547
uses: actions/checkout@v3.2.0
4648
- name: build artifact
4749
run: |
48-
make test
50+
export ENABLE_TEST_ALL=true
51+
make ENABLE_TEST_ALL=${ENABLE_TEST_ALL} test
4952
5053
coding_style:
5154
runs-on: ubuntu-22.04

Makefile

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ ifndef CXX
66
override CXX = g++
77
endif
88

9+
ifndef ENABLE_TEST_ALL
10+
DEFINED_FLAGS =
11+
else
12+
DEFINED_FLAGS = -DENABLE_TEST_ALL
13+
endif
14+
915
ifndef CROSS_COMPILE
1016
uname_result := $(shell uname -m)
1117
ifeq ($(uname_result),$(filter $(uname_result),riscv64))
@@ -52,13 +58,14 @@ LDFLAGS += -lm
5258
OBJS = \
5359
tests/binding.o \
5460
tests/common.o \
61+
tests/debug_tools.o \
5562
tests/impl.o \
5663
tests/main.o
5764
deps := $(OBJS:%.o=%.o.d)
5865

5966
.SUFFIXES: .o .cpp
6067
.cpp.o:
61-
$(CXX) -o $@ $(CXXFLAGS) -c -MMD -MF $@.d $<
68+
$(CXX) -o $@ $(CXXFLAGS) $(DEFINED_FLAGS) -c -MMD -MF $@.d $<
6269

6370
EXEC = tests/main
6471

scripts/cross-test.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ fi
1010
set -x
1111

1212
make clean
13-
make CROSS_COMPILE=riscv64-unknown-elf- SIMULATOR_TYPE=$1 test || exit 1 # riscv64
13+
make CROSS_COMPILE=riscv64-unknown-elf- SIMULATOR_TYPE=${SIMULATOR_TYPE} ENABLE_TEST_ALL=${ENABLE_TEST_ALL} test || exit 1 # riscv64

sse2rvv.h

Lines changed: 1563 additions & 3084 deletions
Large diffs are not rendered by default.

tests/debug_tools.cpp

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
#include "debug_tools.h"
2+
#include <cmath>
3+
#include <cstdint>
4+
5+
namespace SSE2RVV {
6+
7+
#if defined(__clang__)
8+
#define INT64_ESCAPE "%20lld"
9+
#define UINT64_ESCAPE "%20llu"
10+
#else
11+
#define INT64_ESCAPE "%20ld"
12+
#define UINT64_ESCAPE "%20lu"
13+
#endif
14+
15+
void print_64_bits_u8_arr(const char *var_name, const uint8_t *u) {
16+
printf("%s0: %3u, %s1: %3u, %s2: %3u, %s3: %3u, %s4: %3u, %s5: %3u, %s6: "
17+
"%3u, %s7: %3u\n",
18+
var_name, u[0], var_name, u[1], var_name, u[2], var_name, u[3],
19+
var_name, u[4], var_name, u[5], var_name, u[6], var_name, u[7]);
20+
}
21+
void print_64_bits_s8_arr(const char *var_name, const int8_t *u) {
22+
printf("%s0: %3d, %s1: %3d, %s2: %3d, %s3: %3d, %s4: %3d, %s5: %3d, %s6: "
23+
"%3d, %s7: %3d\n",
24+
var_name, u[0], var_name, u[1], var_name, u[2], var_name, u[3],
25+
var_name, u[4], var_name, u[5], var_name, u[6], var_name, u[7]);
26+
}
27+
void print_64_bits_u16_arr(const char *var_name, const uint16_t *u) {
28+
printf("%s0: %5u, %s1: %5u, %s2: %5u, %s3: %5u\n", var_name, u[0], var_name,
29+
u[1], var_name, u[2], var_name, u[3]);
30+
}
31+
void print_64_bits_s16_arr(const char *var_name, const int16_t *u) {
32+
printf("%s0: %5d, %s1: %5d, %s2: %5d, %s3: %5d\n", var_name, u[0], var_name,
33+
u[1], var_name, u[2], var_name, u[3]);
34+
}
35+
void print_64_bits_u32_arr(const char *var_name, const uint32_t *u) {
36+
printf("%s0: %10u, %s1: %10u\n", var_name, u[0], var_name, u[1]);
37+
}
38+
void print_64_bits_s32_arr(const char *var_name, const int32_t *u) {
39+
printf("%s0: %10d, %s1: %10d\n", var_name, u[0], var_name, u[1]);
40+
}
41+
void print_64_bits_u64_arr(const char *var_name, const uint64_t *u) {
42+
printf("%s0: " UINT64_ESCAPE "\n", var_name, u[0]);
43+
}
44+
void print_64_bits_s64_arr(const char *var_name, const int64_t *u) {
45+
printf("%s0: " INT64_ESCAPE "\n", var_name, u[0]);
46+
}
47+
void print_64_bits_f32_arr(const char *var_name, const float *f) {
48+
printf("%s0: %.3f, %s1: %.3f\n", var_name, f[0], var_name, f[1]);
49+
}
50+
void print_128_bits_u8_arr(const char *var_name, const uint8_t *u) {
51+
printf("%s0: %3u, %s1: %3u, %s2: %3u, %s3: %3u, %s4: %3u, %s5: %3u, "
52+
"%s6: %3u, %s7: %3u, %s8: %3u, %s9: %3u, %s10: %3u, %s11: %3u, "
53+
"%s12: %3u, %s13: %3u, %s14: %3u, %s15: %3u\n",
54+
var_name, u[0], var_name, u[1], var_name, u[2], var_name, u[3],
55+
var_name, u[4], var_name, u[5], var_name, u[6], var_name, u[7],
56+
var_name, u[8], var_name, u[9], var_name, u[10], var_name, u[11],
57+
var_name, u[12], var_name, u[13], var_name, u[14], var_name, u[15]);
58+
}
59+
void print_128_bits_s8_arr(const char *var_name, const int8_t *u) {
60+
printf("%s0: %3d, %s1: %3d, %s2: %3d, %s3: %3d, %s4: %3d, %s5: %3d, "
61+
"%s6: %3d, %s7: %3d, %s8: %3d, %s9: %3d, %s10: %3d, %s11: %3d, "
62+
"%s12: %3d, %s13: %3d, %s14: %3d, %s15: %3d\n",
63+
var_name, u[0], var_name, u[1], var_name, u[2], var_name, u[3],
64+
var_name, u[4], var_name, u[5], var_name, u[6], var_name, u[7],
65+
var_name, u[8], var_name, u[9], var_name, u[10], var_name, u[11],
66+
var_name, u[12], var_name, u[13], var_name, u[14], var_name, u[15]);
67+
}
68+
void print_128_bits_u16_arr(const char *var_name, const uint16_t *u) {
69+
printf("%s0: %5u, %s1: %5u, %s2: %5u, %s3: %5u, %s4: %5u, %s5: %5u, %s6: "
70+
"%5u, %s7: %5u\n",
71+
var_name, u[0], var_name, u[1], var_name, u[2], var_name, u[3],
72+
var_name, u[4], var_name, u[5], var_name, u[6], var_name, u[7]);
73+
}
74+
void print_128_bits_s16_arr(const char *var_name, const int16_t *u) {
75+
printf("%s0: %5d, %s1: %5d, %s2: %5d, %s3: %5d, %s4: %5d, %s5: %5d, %s6: "
76+
"%5d, %s7: %5d\n",
77+
var_name, u[0], var_name, u[1], var_name, u[2], var_name, u[3],
78+
var_name, u[4], var_name, u[5], var_name, u[6], var_name, u[7]);
79+
}
80+
void print_128_bits_u32_arr(const char *var_name, const uint32_t *u) {
81+
printf("%s0: %10u, %s1: %10u, %s2: %10u, %s3: %10u\n", var_name, u[0],
82+
var_name, u[1], var_name, u[2], var_name, u[3]);
83+
}
84+
void print_128_bits_s32_arr(const char *var_name, const int32_t *u) {
85+
printf("%s0: %10d, %s1: %10d, %s2: %10d, %s3: %10d\n", var_name, u[0],
86+
var_name, u[1], var_name, u[2], var_name, u[3]);
87+
}
88+
void print_128_bits_u64_arr(const char *var_name, const uint64_t *u) {
89+
printf("%s0: " UINT64_ESCAPE ", %s1: " UINT64_ESCAPE "\n", var_name, u[0],
90+
var_name, u[1]);
91+
}
92+
void print_128_bits_s64_arr(const char *var_name, const int64_t *u) {
93+
printf("%s0: " INT64_ESCAPE ", %s1: " INT64_ESCAPE "\n", var_name, u[0],
94+
var_name, u[1]);
95+
}
96+
void print_128_bits_f32_arr(const char *var_name, const float *f) {
97+
printf("%s0: %.3f, %s1: %.3f, %s2: %.3f, %s3: %.3f\n", var_name, f[0],
98+
var_name, f[1], var_name, f[2], var_name, f[3]);
99+
}
100+
101+
void print_u8_64(const char *var_name, uint8_t u0, uint8_t u1, uint8_t u2,
102+
uint8_t u3, uint8_t u4, uint8_t u5, uint8_t u6, uint8_t u7) {
103+
uint8_t a[] = {u0, u1, u2, u3, u4, u5, u6, u7};
104+
const uint8_t *u = (const uint8_t *)&a;
105+
print_64_bits_u8_arr(var_name, u);
106+
}
107+
void print_u8_64(const char *var_name, int8_t i0, int8_t i1, int8_t i2,
108+
int8_t i3, int8_t i4, int8_t i5, int8_t i6, int8_t i7) {
109+
int8_t a[] = {i0, i1, i2, i3, i4, i5, i6, i7};
110+
const uint8_t *u = (const uint8_t *)&a;
111+
print_64_bits_u8_arr(var_name, u);
112+
}
113+
void print_u8_64(const char *var_name, uint16_t u0, uint16_t u1, uint16_t u2,
114+
uint16_t u3) {
115+
uint16_t a[] = {u0, u1, u2, u3};
116+
const uint8_t *u = (const uint8_t *)&a;
117+
print_64_bits_u8_arr(var_name, u);
118+
}
119+
void print_u8_64(const char *var_name, int16_t i0, int16_t i1, int16_t i2,
120+
int16_t i3) {
121+
int16_t a[] = {i0, i1, i2, i3};
122+
const uint8_t *u = (const uint8_t *)&a;
123+
print_64_bits_u8_arr(var_name, u);
124+
}
125+
void print_u8_64(const char *var_name, uint32_t u0, uint32_t u1) {
126+
uint32_t a[] = {u0, u1};
127+
const uint8_t *u = (const uint8_t *)&a;
128+
print_64_bits_u8_arr(var_name, u);
129+
}
130+
void print_u8_64(const char *var_name, int32_t i0, int32_t i1) {
131+
int32_t a[] = {i0, i1};
132+
const uint8_t *u = (const uint8_t *)&a;
133+
print_64_bits_u8_arr(var_name, u);
134+
}
135+
void print_u8_64(const char *var_name, uint64_t u0) {
136+
uint64_t a[] = {u0};
137+
const uint8_t *u = (const uint8_t *)&a;
138+
print_64_bits_u8_arr(var_name, u);
139+
}
140+
void print_u8_64(const char *var_name, int64_t i0) {
141+
int64_t a[] = {i0};
142+
const uint8_t *u = (const uint8_t *)&a;
143+
print_64_bits_u8_arr(var_name, u);
144+
}
145+
146+
void print_u8_128(const char *var_name, uint8_t u0, uint8_t u1, uint8_t u2,
147+
uint8_t u3, uint8_t u4, uint8_t u5, uint8_t u6, uint8_t u7,
148+
uint8_t u8, uint8_t u9, uint8_t u10, uint8_t u11, uint8_t u12,
149+
uint8_t u13, uint8_t u14, uint8_t u15) {
150+
uint8_t a[] = {u0, u1, u2, u3, u4, u5, u6, u7,
151+
u8, u9, u10, u11, u12, u13, u14, u15};
152+
const uint8_t *u = (const uint8_t *)&a;
153+
print_128_bits_u8_arr(var_name, u);
154+
}
155+
void print_u8_128(const char *var_name, int8_t i0, int8_t i1, int8_t i2,
156+
int8_t i3, int8_t i4, int8_t i5, int8_t i6, int8_t i7,
157+
int8_t i8, int8_t i9, int8_t i10, int8_t i11, int8_t i12,
158+
int8_t i13, int8_t i14, int8_t i15) {
159+
int8_t a[] = {i0, i1, i2, i3, i4, i5, i6, i7,
160+
i8, i9, i10, i11, i12, i13, i14, i15};
161+
const uint8_t *u = (const uint8_t *)&a;
162+
print_128_bits_u8_arr(var_name, u);
163+
}
164+
void print_u8_128(const char *var_name, uint16_t u0, uint16_t u1, uint16_t u2,
165+
uint16_t u3, uint16_t u4, uint16_t u5, uint16_t u6,
166+
uint16_t u7) {
167+
uint16_t a[] = {u0, u1, u2, u3, u4, u5, u6, u7};
168+
const uint8_t *u = (const uint8_t *)&a;
169+
print_128_bits_u8_arr(var_name, u);
170+
}
171+
void print_u8_128(const char *var_name, int16_t i0, int16_t i1, int16_t i2,
172+
int16_t i3, int16_t i4, int16_t i5, int16_t i6, int16_t i7) {
173+
int16_t a[] = {i0, i1, i2, i3, i4, i5, i6, i7};
174+
const uint8_t *u = (const uint8_t *)&a;
175+
print_128_bits_u8_arr(var_name, u);
176+
}
177+
void print_u8_128(const char *var_name, uint32_t u0, uint32_t u1, uint32_t u2,
178+
uint32_t u3) {
179+
uint32_t a[] = {u0, u1, u2, u3};
180+
const uint8_t *u = (const uint8_t *)&a;
181+
print_128_bits_u8_arr(var_name, u);
182+
}
183+
void print_u8_128(const char *var_name, int32_t i0, int32_t i1, int32_t i2,
184+
int32_t i3) {
185+
int32_t a[] = {i0, i1, i2, i3};
186+
const uint8_t *u = (const uint8_t *)&a;
187+
print_128_bits_u8_arr(var_name, u);
188+
}
189+
void print_u8_128(const char *var_name, uint64_t u0, uint64_t u1) {
190+
uint64_t a[] = {u0, u1};
191+
const uint8_t *u = (const uint8_t *)&a;
192+
print_128_bits_u8_arr(var_name, u);
193+
}
194+
void print_u8_128(const char *var_name, int64_t i0, int64_t i1) {
195+
int64_t a[] = {i0, i1};
196+
const uint8_t *u = (const uint8_t *)&a;
197+
print_128_bits_u8_arr(var_name, u);
198+
}
199+
200+
} // namespace SSE2RVV

0 commit comments

Comments
 (0)