1 #include "riscv_test.h"
2 #include "sv_test_macros.h"
4 RVTEST_RV64UF # Define TVM used by program.
6 #define SV_ELWIDTH_TESTW( inst, vl, elwidth, wid1, wid2, \
10 la x13, (testdata+elwidth); \
11 la x14, (testdata+elwidth*2); \
12 la x15, (testdata+elwidth*3); \
13 la x16, (testdata+elwidth*4); \
14 la x17, (testdata+elwidth*5); \
16 li x1, 0xa5a5a5a5a5a5a5a5; \
22 SET_SV_2CSRS( SV_REG_CSR( 1, 12, wid1, 12, 1), \
23 SV_REG_CSR( 0, 28, wid2, 28, 1)); \
32 TEST_SV_FW(0, f28, ans, 0); \
33 TEST_SV_FW(0, f29, ans, 4); \
34 TEST_SV_FW(0, f30, ans, 8);
36 #define SV_ELWIDTH_TEST( inst, vl, elwidth, wid1, wid2, \
40 la x13, (testdata+elwidth); \
41 la x14, (testdata+elwidth*2); \
42 la x15, (testdata+elwidth*3); \
43 la x16, (testdata+elwidth*4); \
44 la x17, (testdata+elwidth*5); \
46 li x1, 0xa5a5a5a5a5a5a5a5; \
52 SET_SV_2CSRS( SV_REG_CSR( 1, 12, wid1, 12, 1), \
53 SV_REG_CSR( 0, 28, wid2, 28, 1)); \
62 TEST_SV_FD(0, f28, ans, 0); \
63 TEST_SV_FD(0, f29, ans, 8); \
64 TEST_SV_FD(0, f30, ans, 16);
66 # SV test: vector-vector add
68 # sets up x3 and x4 with data, sets VL to 2, and carries out
69 # an "add 1 to x3". which actually means "add 1 to x3 *AND* add 1 to x4"
72 RVTEST_CODE_BEGIN # Start of test code.
74 SV_ELWIDTH_TEST( fld , 2, 8, SV_W_DFLT, SV_W_DFLT, testdata1, answer1 )
75 SV_ELWIDTH_TEST( fld , 3, 8, SV_W_DFLT, SV_W_DFLT, testdata1, answer2 )
76 SV_ELWIDTH_TEST( fld , 3, 8, SV_W_16BIT, SV_W_DFLT, testdata3, answer3)
77 SV_ELWIDTH_TEST( fld , 5, 8, SV_W_16BIT, SV_W_32BIT, testdata3, answer4)
78 SV_ELWIDTH_TEST( fld , 6, 8, SV_W_32BIT, SV_W_16BIT, testdata4, answer5)
80 SV_ELWIDTH_TESTW(flw , 3, 4, SV_W_DFLT, SV_W_DFLT, testdata1, answer1 )
81 SV_ELWIDTH_TESTW(flw , 3, 4, SV_W_16BIT, SV_W_DFLT, testdata3, answer8)
82 SV_ELWIDTH_TESTW(flw , 5, 4, SV_W_16BIT, SV_W_32BIT, testdata3, answer4)
84 SV_ELWIDTH_TESTW(flw , 2, 4, SV_W_32BIT, SV_W_16BIT, testdata4, answer5)
85 SV_ELWIDTH_TESTW(flw , 6, 8, SV_W_DFLT, SV_W_16BIT, testdata6, answer5)
87 SV_ELWIDTH_TEST( ld , 5, 8, SV_W_32BIT, SV_W_16BIT, testdata1,
88 0x6757271769592919, 0xa5a5a5a5a5a52616, 0xa5a5a5a5a5a5a5a5 )
89 SV_ELWIDTH_TEST( ld , 7, 8, SV_W_16BIT, SV_W_8BIT, testdata1,
90 0xa557371779593919, 0xa5a5a5a5a5a5a5a5, 0xa5a5a5a5a5a5a5a5 )
91 SV_ELWIDTH_TEST( ld , 11, 8, SV_W_8BIT, SV_W_16BIT, testdata1,
92 0x0049003900290019, 0xff89007900690059, 0xa5a5003700270017 )
94 RVTEST_PASS # Signal success.
97 RVTEST_CODE_END # End of test code.
100 # This section is optional, and this data is NOT saved in the output.
104 .dword 0x8979695949392919
105 .dword 0x8777675747372717
106 .dword 0x8676665646362616
107 .dword 0x8272625242322212
108 .dword 0x8171615141312111
109 .dword 0x8373635343332313
113 .dword 0x8979695949392919
114 .dword 0x8777675747372717
115 .dword 0xa5a5a5a5a5a5a5a5
120 .dword 0x8979695949392919
121 .dword 0x8777675747372717
122 .dword 0x8676665646362616
126 .dword 0x63d03c0051805140
127 .dword 0x000000000000E480
128 .dword 0x8676665646362616
129 .dword 0x8272625242322212
130 .dword 0x8171615141312111
131 .dword 0x8373635343332313
164 .short 0x5140 # 42 fp16
165 .short 0x5180 # 44 fp16
166 .short 0x3c00 # 1.0 fp16
167 .short 0x63d0 # 1000.0 fp16
168 .short 0xe480 # -1152.0 fp16
169 .short 0xd520 # -82 fp16
172 .dword 0xa5a5a5a5a5a5a5a5
192 .dword 0xa5a5a5a549392919
193 .dword 0xa5a5a5a589796959
194 .dword 0x8777675747372717
195 .dword 0xa5a5a5a5a5a5a5a5
206 # Output data section.
207 RVTEST_DATA_BEGIN # Start of test output data region.
213 RVTEST_DATA_END # End of test output data region.