OpenCores
URL https://opencores.org/ocsvn/fwrisc/fwrisc/trunk

Subversion Repositories fwrisc

[/] [fwrisc/] [trunk/] [ve/] [fwrisc/] [tests/] [riscv-compliance/] [riscv-test-suite/] [rv32i/] [src/] [I-LHU-01.S] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 mballance
# RISC-V Compliance Test I-LHU-01
2
#
3
# Copyright (c) 2017, Codasip Ltd.
4
# Copyright (c) 2018, Imperas Software Ltd. Additions
5
# All rights reserved.
6
#
7
# Redistribution and use in source and binary forms, with or without
8
# modification, are permitted provided that the following conditions are met:
9
#      * Redistributions of source code must retain the above copyright
10
#        notice, this list of conditions and the following disclaimer.
11
#      * Redistributions in binary form must reproduce the above copyright
12
#        notice, this list of conditions and the following disclaimer in the
13
#        documentation and/or other materials provided with the distribution.
14
#      * Neither the name of the Codasip Ltd., Imperas Software Ltd. nor the
15
#        names of its contributors may be used to endorse or promote products
16
#        derived from this software without specific prior written permission.
17
#
18
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
19
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Codasip Ltd., Imperas Software Ltd.
22
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
#
29
# Specification: RV32I Base Integer Instruction Set, Version 2.0
30
# Description: Testing instruction LHU.
31
 
32
#include "compliance_test.h"
33
#include "compliance_io.h"
34
#include "test_macros.h"
35
 
36
# Test Virtual Machine (TVM) used by program.
37
RV_COMPLIANCE_RV32M
38
 
39
# Test code region
40
RV_COMPLIANCE_CODE_BEGIN
41
 
42
    RVTEST_IO_INIT
43
    RVTEST_IO_ASSERT_GPR_EQ(x0, 0x00000000)
44
    RVTEST_IO_WRITE_STR("# Test Begin Reserved regs ra(x1) a0(x10) t0(x5)\n")
45
 
46
    # ---------------------------------------------------------------------------------------------
47
    RVTEST_IO_WRITE_STR("# Test part A1 - test base address + 0\n");
48
 
49
    # Addresses for test data and results
50
    la      x31, test_A1_data
51
    la      x2, test_A1_res
52
 
53
    # Test
54
    lhu     x3, 0(x31)
55
    lhu     x4, 2(x31)
56
 
57
    # Store results
58
    sw      x3, 0(x2)
59
    sw      x4, 4(x2)
60
 
61
    //
62
    // Assert
63
    //
64
    RVTEST_IO_CHECK()
65
    RVTEST_IO_ASSERT_GPR_EQ(x3, 0x0000F222)
66
    RVTEST_IO_ASSERT_GPR_EQ(x4, 0x000011F1)
67
 
68
    RVTEST_IO_WRITE_STR("# Test part A1  - Complete\n");
69
 
70
    # ---------------------------------------------------------------------------------------------
71
    RVTEST_IO_WRITE_STR("# Test part A2 - test base address - 1\n");
72
 
73
    # Addresses for test data and results
74
    la      x24, test_A2_data + 1
75
    la      x5, test_A2_res
76
 
77
    # Test
78
    lhu     x25, -1(x24)
79
    lhu     x26, +1(x24)
80
 
81
    # Store results
82
    sw      x25, 0(x5)
83
    sw      x26, 4(x5)
84
 
85
    RVTEST_IO_ASSERT_GPR_EQ(x25, 0x000044F4)
86
    RVTEST_IO_ASSERT_GPR_EQ(x26, 0x0000F333)
87
 
88
    RVTEST_IO_WRITE_STR("# Test part A2  - Complete\n");
89
 
90
    # ---------------------------------------------------------------------------------------------
91
    RVTEST_IO_WRITE_STR("# Test part A3 - test base address + 1\n");
92
 
93
    # Addresses for test data and results
94
    la      x7, test_A3_data - 1
95
    la      x8, test_A3_res
96
 
97
    # Test
98
    lhu     x30, 1(x7)
99
    lhu     x31, 3(x7)
100
 
101
    # Store results
102
    sw      x30, 0(x8)
103
    sw      x31, 4(x8)
104
 
105
    RVTEST_IO_ASSERT_GPR_EQ(x30, 0x0000F666)
106
    RVTEST_IO_ASSERT_GPR_EQ(x31, 0x000055F5)
107
 
108
    RVTEST_IO_WRITE_STR("# Test part A3  - Complete\n");
109
 
110
    # ---------------------------------------------------------------------------------------------
111
    RVTEST_IO_WRITE_STR("# Test part A4 - test base address - 2048\n");
112
 
113
    # Addresses for test data and results
114
    la      x10, test_A4_data + 2048
115
    la      x11, test_A4_res
116
 
117
    # Test
118
    lhu     x12, 0xFFFFF800(x10)
119
    lhu     x13, 0xFFFFF802(x10)
120
 
121
    # Store results
122
    sw      x12, 0(x11)
123
    sw      x13, 4(x11)
124
 
125
    RVTEST_IO_ASSERT_GPR_EQ(x12, 0x000088F8)
126
    RVTEST_IO_ASSERT_GPR_EQ(x13, 0x0000F777)
127
 
128
    RVTEST_IO_WRITE_STR("# Test part A4  - Complete\n");
129
 
130
    # ---------------------------------------------------------------------------------------------
131
    RVTEST_IO_WRITE_STR("# Test part A5 - test base address + 2047\n");
132
 
133
    # Addresses for test data and results
134
    la      x13, test_A5_data - 2045
135
    la      x14, test_A5_res
136
 
137
    # Test
138
    lhu     x15, 0x7FD(x13)
139
    lhu     x16, 0x7FF(x13)
140
 
141
    # Store results
142
    sw      x15, 0(x14)
143
    sw      x16, 4(x14)
144
 
145
    RVTEST_IO_ASSERT_GPR_EQ(x15, 0x00000AAA)
146
    RVTEST_IO_ASSERT_GPR_EQ(x16, 0x00009909)
147
 
148
    RVTEST_IO_WRITE_STR("# Test part A5  - Complete\n");
149
 
150
    # ---------------------------------------------------------------------------------------------
151
    RVTEST_IO_WRITE_STR("# Test part B - test base address + -4,-2, 0, 2, 4, 6\n");
152
 
153
    # Addresses for test data and results
154
    la      x16, test_B_data
155
    la      x17, test_B_res
156
 
157
    # Test
158
    lhu     x18, -4(x16)
159
    lhu     x19, -2(x16)
160
    lhu     x20, 0(x16)
161
    lhu     x21, 2(x16)
162
    lhu     x22, 4(x16)
163
    lhu     x23, 6(x16)
164
 
165
    # Store results
166
    sw      x18, 0(x17)
167
    sw      x19, 4(x17)
168
    sw      x20, 8(x17)
169
    sw      x21, 12(x17)
170
    sw      x22, 16(x17)
171
    sw      x23, 20(x17)
172
 
173
    RVTEST_IO_ASSERT_GPR_EQ(x18, 0x0000CC0C)
174
    RVTEST_IO_ASSERT_GPR_EQ(x19, 0x00000BBB)
175
    RVTEST_IO_ASSERT_GPR_EQ(x20, 0x00000EEE)
176
    RVTEST_IO_ASSERT_GPR_EQ(x21, 0x0000DD0D)
177
    RVTEST_IO_ASSERT_GPR_EQ(x22, 0x000000F0)
178
    RVTEST_IO_ASSERT_GPR_EQ(x23, 0x00000FFF)
179
 
180
    RVTEST_IO_WRITE_STR("# Test part B  - Complete\n");
181
 
182
    # ---------------------------------------------------------------------------------------------
183
    RVTEST_IO_WRITE_STR("# Test part C - test load to x0\n");
184
 
185
    # Addresses for test data and results
186
    la      x21, test_C_data
187
    la      x22, test_C_res
188
 
189
    # Test
190
    lhu     x0, 0(x21)
191
 
192
    # Store results
193
    sw      x0, 0(x22)
194
 
195
    RVTEST_IO_ASSERT_GPR_EQ(x0, 0x00000000)
196
 
197
    RVTEST_IO_WRITE_STR("# Test part C  - Complete\n");
198
 
199
    # ---------------------------------------------------------------------------------------------
200
    RVTEST_IO_WRITE_STR("# Test part D - test for forwarding\n");
201
 
202
    # Addresses for test data and results
203
    la      x21, test_D_data
204
    la      x22, test_D_res
205
 
206
    # Test
207
    lw      x23, 0(x21)
208
    lhu     x24, 0(x23)
209
    mv      x25, x24
210
 
211
    # Store results
212
    sw      x25, 0(x22)
213
 
214
    RVTEST_IO_ASSERT_GPR_EQ(x25, 0x0000DEF0)
215
 
216
    RVTEST_IO_WRITE_STR("# Test part D  - Complete\n");
217
 
218
    # ---------------------------------------------------------------------------------------------
219
    RVTEST_IO_WRITE_STR("# Test part E1 - test store with same base and destination address\n");
220
 
221
    # Addresses for test data and results
222
    la      x25, test_E1_data
223
    la      x26, test_E1_res
224
 
225
    # Test
226
    lhu     x25, 0(x25)
227
 
228
    # Store results
229
    sw      x25, 0(x26)
230
 
231
    RVTEST_IO_ASSERT_GPR_EQ(x25, 0x00003210)
232
 
233
    RVTEST_IO_WRITE_STR("# Test part E  - Complete\n");
234
 
235
    # ---------------------------------------------------------------------------------------------
236
    RVTEST_IO_WRITE_STR("# Test part E2 - test store with same base and destination address, base with offset\n");
237
 
238
    # Addresses for test data and results
239
    la      x27, test_E2_data + 1
240
    la      x28, test_E2_res
241
 
242
    # Test
243
    lhu     x27, -1(x27)
244
 
245
    # Store results
246
    sw      x27, 0(x28)
247
 
248
    RVTEST_IO_ASSERT_GPR_EQ(x27, 0x0000BA98)
249
 
250
    RVTEST_IO_WRITE_STR("# Test part A1  - Complete\n");
251
 
252
    RVTEST_IO_WRITE_STR("# Test End\n")
253
 
254
 # ---------------------------------------------------------------------------------------------
255
    # HALT
256
    RV_COMPLIANCE_HALT
257
 
258
RV_COMPLIANCE_CODE_END
259
 
260
# Input data section.
261
    .data
262
    .align 4
263
 
264
test_A1_data:
265
    .word 0x11F1F222
266
test_A2_data:
267
    .word 0xF33344F4
268
test_A3_data:
269
    .word 0x55F5F666
270
test_A4_data:
271
    .word 0xF77788F8
272
test_A5_data:
273
    .word 0x99090AAA
274
    .word 0x0BBBCC0C
275
test_B_data:
276
    .word 0xDD0D0EEE
277
    .word 0x0FFF00F0
278
test_C_data:
279
    .word 0x12345678
280
test_D_data:
281
    .word test_D_data2_label
282
test_D_data2_label:
283
    .word 0x9ABCDEF0
284
test_E1_data:
285
    .word 0x76543210
286
test_E2_data:
287
    .word 0xFEDCBA98
288
 
289
 
290
# Output data section.
291
RV_COMPLIANCE_DATA_BEGIN
292
    .align 4
293
 
294
test_A1_res:
295
    .fill 2, 4, -1
296
test_A2_res:
297
    .fill 2, 4, -1
298
test_A3_res:
299
    .fill 2, 4, -1
300
test_A4_res:
301
    .fill 2, 4, -1
302
test_A5_res:
303
    .fill 2, 4, -1
304
test_B_res:
305
    .fill 6, 4, -1
306
test_C_res:
307
    .fill 1, 4, -1
308
test_D_res:
309
    .fill 1, 4, -1
310
test_E1_res:
311
    .fill 1, 4, -1
312
test_E2_res:
313
    .fill 1, 4, -1
314
 
315
RV_COMPLIANCE_DATA_END

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.