1 #include "riscv_test.h"
2 #include "sv_test_macros.h"
4 RVTEST_RV64U # Define TVM used by program.
6 // TODO: add extra "code" argument and "testdata" argument,
7 // replace "sraw" with "code"
8 // TODO: move SV_ELWIDTH_TEST to sv_test_macros.h
9 // TODO: probably remove testing of x15 and x16 (or pass in as extra args?)
11 #define SV_ELWIDTH_TEST( vl, wid1, wid2, wid3, isvec1, isvec2, isvec3, \
12 expect1, expect2, expect3 ) \
14 SV_LDD_DATA( x12, testdata , 0); \
15 SV_LDD_DATA( x13, testdata+8 , 0); \
16 SV_LDD_DATA( x14, testdata+16, 0); \
17 SV_LDD_DATA( x15, testdata+24, 0); \
18 SV_LDD_DATA( x16, testdata+32, 0); \
19 SV_LDD_DATA( x17, testdata+40, 0); \
21 li x28, 0xa5a5a5a5a5a5a5a5; \
22 li x29, 0xa5a5a5a5a5a5a5a5; \
23 li x30, 0xa5a5a5a5a5a5a5a5; \
26 SET_SV_2CSRS( SV_REG_CSR( 1, 15, wid1, 15, isvec1), \
27 SV_REG_CSR( 1, 12, wid2, 12, isvec2) ); \
28 SET_SV_CSR2( 1, 28, wid3, 28, isvec3); \
31 mulhu x28, x15, x12; \
37 TEST_SV_IMMW( x28, expect1 ); \
38 TEST_SV_IMMW( x29, expect2 ); \
39 TEST_SV_IMMW( x30, expect3 );
42 # SV test: vector-vector add
44 # sets up x3 and x4 with data, sets VL to 2, and carries out
45 # an "add 1 to x3". which actually means "add 1 to x3 *AND* add 1 to x4"
48 RVTEST_CODE_BEGIN # Start of test code.
50 # TODO: add "sraw" argument, add testdata argument
51 SV_ELWIDTH_TEST( 3, 0, 0, 0, 1, 1, 1,
52 0xffffffff7fff8000, 0x000000000001fefe, 0xfffffffffe000000 )
53 SV_ELWIDTH_TEST( 3, 0, 0, 3, 1, 1, 1,
54 0x1fefe7fff8000, 0xa5a5a5a5fe000000, 0xa5a5a5a5a5a5a5a5 )
56 SV_ELWIDTH_TEST( 3, 2, 0, 0, 1, 1, 1,
57 0x7fff, 0xaaaa, 0xfffe )
58 SV_ELWIDTH_TEST( 3, 0, 2, 0, 1, 1, 1,
61 SV_ELWIDTH_TEST( 3, 2, 2, 2, 1, 1, 1,
62 0x7fff0000, 0xa5a5a9a8, 0xa5a5a5a5 )
63 SV_ELWIDTH_TEST( 3, 2, 2, 1, 1, 1, 1,
64 0xa5a8ff00, 0xa5a5a5a5, 0xa5a5a5a5 )
65 SV_ELWIDTH_TEST( 3, 3, 3, 1, 1, 1, 1,
66 0xa500fe00, 0xa5a5a5a5, 0xa5a5a5a5 )
67 SV_ELWIDTH_TEST( 3, 2, 3, 3, 1, 1, 1,
68 0x00004000, 0x0000aaaa, 0x0000fd7e )
69 SV_ELWIDTH_TEST( 3, 1, 1, 2, 1, 1, 1,
70 0xa5a5001900110009, 0xa5a5a5a5a5a5a5a5, 0xa5a5a5a5a5a5a5a5 )
71 SV_ELWIDTH_TEST( 3, 1, 1, 1, 1, 1, 1,
72 0xa5a5a5a5a5191109, 0xa5a5a5a5a5a5a5a5, 0xa5a5a5a5a5a5a5a5 )
74 RVTEST_PASS # Signal success.
77 RVTEST_CODE_END # End of test code.
80 # This section is optional, and this data is NOT saved in the output.
84 .dword 0xffffffff80000000
85 .dword 0xaaaaaaaaaaaaaaab
86 .dword 0xffffffffff000000
87 .dword 0xffffffffffff8000
88 .dword 0x000000000002fe7d
89 .dword 0xffffffffff000000
91 # Output data section.
92 RVTEST_DATA_BEGIN # Start of test output data region.
98 RVTEST_DATA_END # End of test output data region.