Skip to content

Commit 9cea90b

Browse files
authored
Merge pull request #2224 from riscv-software-src/add-vector-test
Add simple vector extension test to CI
2 parents 6dda489 + 52e6a75 commit 9cea90b

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

ci-tests/test-spike

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#!/bin/bash
22
set -e
3+
set -x
34

45
ROOT=`git rev-parse --show-toplevel`
56
NPROCS="$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
@@ -26,6 +27,7 @@ riscv64-linux-gnu-gcc -static -O2 -o hello $CI/hello.c
2627
riscv64-linux-gnu-gcc -static -O2 -o dummy-slliuw $CI/dummy-slliuw.c
2728
riscv64-linux-gnu-gcc -static -O2 -o customcsr $CI/customcsr.c
2829
riscv64-linux-gnu-gcc -static -O2 -o atomics $CI/atomics.c
30+
riscv64-linux-gnu-gcc -static -O2 -march=rv64gcv -o vector-sum $CI/vector-sum.c
2931

3032
# run snippy-based tests
3133
wget https://github.com/syntacore/snippy/releases/download/snippy-2.1/snippy-x86_64-linux.tar.xz
@@ -45,6 +47,7 @@ g++ -std=c++2a -I$INSTALL/include -L$INSTALL/lib $CI/testlib.cc -lriscv -o /dev/
4547

4648
# run tests
4749
time $INSTALL/bin/spike --isa=rv64gc $BUILD/pk/pk hello | grep "Hello, world! Pi is approximately 3.141588."
50+
time $INSTALL/bin/spike --isa=rv64gcv $BUILD/pk/pk vector-sum | grep "The sum of the first 1000 positive integers is 500500."
4851
$INSTALL/bin/spike --log-commits --isa=rv64gc $BUILD/pk/pk atomics 2> /dev/null | grep "First atomic counter is 1000, second is 100"
4952
LD_LIBRARY_PATH=$INSTALL/lib ./test-libriscv $BUILD/pk/pk hello | grep "Hello, world! Pi is approximately 3.141588."
5053
LD_LIBRARY_PATH=$INSTALL/lib ./test-customext $BUILD/pk/pk dummy-slliuw | grep "Executed successfully"

ci-tests/vector-sum.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include <stdio.h>
2+
#include <string.h>
3+
#include <riscv_vector.h>
4+
5+
int main()
6+
{
7+
const size_t N = 1001;
8+
volatile int a[N];
9+
int* b = (int*)a;
10+
11+
for (size_t i = 0; i < N; i++)
12+
a[i] = i;
13+
14+
vint32m8_t vsum = __riscv_vmv_v_x_i32m8(0, -1);
15+
for (size_t i = 0; i < N; ) {
16+
size_t vl = __riscv_vsetvl_e32m8(N - i);
17+
vint32m8_t v = __riscv_vle32_v_i32m8(b + i, vl);
18+
vsum = __riscv_vadd_vv_i32m8(vsum, v, vl);
19+
i += vl;
20+
}
21+
vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1);
22+
int sum = __riscv_vmv_x_s_i32m1_i32(__riscv_vredsum_vs_i32m8_i32m1(vsum, vzero, -1));
23+
24+
printf("The sum of the first %zu positive integers is %d.\n", N - 1, sum);
25+
26+
return 0;
27+
}

0 commit comments

Comments
 (0)