fad659d57630044edefc1e36860a4048f1c28aba
[riscv-tests.git] / isa / rv64ui / sv_addw_elwidth.S
1 #include "riscv_test.h"
2 #include "sv_test_macros.h"
3
4 RVTEST_RV64U # Define TVM used by program.
5
6 #define SV_ELWIDTH_TEST( wid1, wid2, wid3, expect1, expect2, expect3 ) \
7 \
8 SV_LDD_DATA( x12, testdata , 0); \
9 SV_LDD_DATA( x13, testdata+8 , 0); \
10 SV_LDD_DATA( x14, testdata+16, 0); \
11 SV_LDD_DATA( x15, testdata+24, 0); \
12 SV_LDD_DATA( x16, testdata+32, 0); \
13 SV_LDD_DATA( x17, testdata+40, 0); \
14 \
15 li x28, 0xa5a5a5a5a5a5a5a5; \
16 li x29, 0xa5a5a5a5a5a5a5a5; \
17 li x30, 0xa5a5a5a5a5a5a5a5; \
18 \
19 SET_SV_MVL( 3); \
20 SET_SV_3CSRS( SV_REG_CSR( 1, 15, wid1, 15, 1), \
21 SV_REG_CSR( 1, 12, wid2, 12, 1), \
22 SV_REG_CSR( 1, 28, wid3, 28, 1)); \
23 SET_SV_VL( 3); \
24 \
25 addw x28, x15, x12; \
26 \
27 CLR_SV_CSRS(); \
28 SET_SV_VL( 1); \
29 SET_SV_MVL( 1); \
30 \
31 TEST_SV_IMM( x28, expect1 ); \
32 TEST_SV_IMM( x29, expect2 ); \
33 TEST_SV_IMM( x30, expect3 ); \
34 TEST_SV_IMM( x15, 0x0000005242322212); \
35 TEST_SV_IMM( x16, 0x0000005141312111);
36
37
38 # SV test: vector-vector add
39 #
40 # sets up x3 and x4 with data, sets VL to 2, and carries out
41 # an "add 1 to x3". which actually means "add 1 to x3 *AND* add 1 to x4"
42
43 # Test code region.
44 RVTEST_CODE_BEGIN # Start of test code.
45
46 #
47 SV_ELWIDTH_TEST( 0, 0, 0,
48 0xffffffff8b6bab8b, 0xffffffff88684828, 0x0000000000000000 )
49 SV_ELWIDTH_TEST( 0, 0, 3,
50 0x886848288b6bab8b, 0xa5a5a5a500000000, 0xa5a5a5a5a5a5a5a5 )
51 SV_ELWIDTH_TEST( 1, 1, 0,
52 0xffffffffffffff8b, 0xffffffffffffffab, 0x000000000000006b )
53 SV_ELWIDTH_TEST( 1, 1, 3,
54 0xffffffabffffff8b, 0xa5a5a5a50000006b, 0xa5a5a5a5a5a5a5a5 )
55 SV_ELWIDTH_TEST( 1, 1, 2,
56 0xa5a5006bffabff8b, 0xa5a5a5a5a5a5a5a5, 0xa5a5a5a5a5a5a5a5 )
57 SV_ELWIDTH_TEST( 1, 1, 1,
58 0xa5a5a5a5a56bab8b, 0xa5a5a5a5a5a5a5a5, 0xa5a5a5a5a5a5a5a5 )
59
60 RVTEST_PASS # Signal success.
61 fail:
62 RVTEST_FAIL
63 RVTEST_CODE_END # End of test code.
64
65 # Input data section.
66 # This section is optional, and this data is NOT saved in the output.
67 .data
68 .align 3
69 testdata:
70 .dword 0x0000005949398979
71 .dword 0x0000005747372717
72 .dword 0x0000000000000000
73 .dword 0x0000005242322212
74 .dword 0x0000005141312111
75 .dword 0x0000000000000000
76
77 # Output data section.
78 RVTEST_DATA_BEGIN # Start of test output data region.
79 .align 3
80 result:
81 .dword -1
82 .dword -1
83 .dword -1
84 RVTEST_DATA_END # End of test output data region.
85