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-SB-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-SB-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 SB.
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
    # Address for test results
50
    la      x1, test_A1_res
51
 
52
    # Set memory
53
    li      x31, 0xAAAABBBB
54
    sw      x31, 0(x1)
55
 
56
    # Test
57
    li      x2, 0x11F1F222
58
    sb      x2, 0(x1)
59
 
60
    //
61
    // Assert
62
    //
63
    RVTEST_IO_CHECK()
64
    RVTEST_IO_ASSERT_GPR_EQ(x2, 0x11F1F222)
65
    RVTEST_IO_ASSERT_GPR_EQ(x31, 0xAAAABBBB)
66
 
67
    RVTEST_IO_WRITE_STR("# Test part A1  - Complete\n");
68
 
69
    # ---------------------------------------------------------------------------------------------
70
    RVTEST_IO_WRITE_STR("# Test part A2 - test base address - 1\n");
71
 
72
    # Address for test results
73
    la      x5, test_A2_res + 1
74
 
75
    # Clear memory
76
    sw      x0, -1(x5)
77
 
78
    # Test
79
    li      x25, 0xF33344F4
80
    sb      x25, 0xFFFFFFFF(x5)
81
 
82
    RVTEST_IO_ASSERT_GPR_EQ(x0, 0x00000000)
83
    RVTEST_IO_ASSERT_GPR_EQ(x25, 0xF33344F4)
84
 
85
    RVTEST_IO_WRITE_STR("# Test part A2  - Complete\n");
86
 
87
    # ---------------------------------------------------------------------------------------------
88
    RVTEST_IO_WRITE_STR("# Test part A3 - test base address + 1\n");
89
 
90
    # Address for test results
91
    la      x8, test_A3_res - 1
92
 
93
    # Clear memory
94
    sw      x0, 1(x8)
95
 
96
    # Test
97
    li      x31, 0x55F5F666
98
    sb      x31, +1(x8)
99
 
100
    RVTEST_IO_ASSERT_GPR_EQ(x0, 0x00000000)
101
    RVTEST_IO_ASSERT_GPR_EQ(x31, 0x55F5F666)
102
 
103
    RVTEST_IO_WRITE_STR("# Test part A3  - Complete\n");
104
 
105
    # ---------------------------------------------------------------------------------------------
106
    RVTEST_IO_WRITE_STR("# Test part A4 - test base address - 2048\n");
107
 
108
    # Address for test results
109
    la      x11, test_A4_res + 2048
110
 
111
    # Clear memory
112
    sw      x0, -2048(x11)
113
 
114
    # Test
115
    li      x12, 0xF77788F8
116
    sb      x12, 0xFFFFF800(x11)
117
 
118
    RVTEST_IO_ASSERT_GPR_EQ(x0, 0x00000000)
119
    RVTEST_IO_ASSERT_GPR_EQ(x12, 0xF77788F8)
120
 
121
    RVTEST_IO_WRITE_STR("# Test part A4  - Complete\n");
122
 
123
    # ---------------------------------------------------------------------------------------------
124
    RVTEST_IO_WRITE_STR("# Test part A5 - test base address + 2047\n");
125
 
126
    # Address for test results
127
    la      x14, test_A5_res - 2047
128
 
129
    # Clear memory
130
    sw      x0, 2047(x14)
131
 
132
    # Test
133
    li      x15, 0x99090AAA
134
    sb      x15, 0x7FF(x14)
135
 
136
    RVTEST_IO_ASSERT_GPR_EQ(x0, 0x00000000)
137
    RVTEST_IO_ASSERT_GPR_EQ(x15, 0x99090AAA)
138
 
139
    RVTEST_IO_WRITE_STR("# Test part A5  - Complete\n");
140
 
141
    # ---------------------------------------------------------------------------------------------
142
    RVTEST_IO_WRITE_STR("# Test part B - test base address + -4, -3, ... , 7\n");
143
 
144
    # Address for test results
145
    la      x17, test_B_res
146
 
147
    # Test
148
    li      x18, 0x1111110C
149
    li      x19, 0x222222CC
150
    li      x20, 0x333333BB
151
    li      x21, 0x4444440B
152
    li      x22, 0x555555EE
153
    li      x23, 0x6666660E
154
    li      x24, 0x7777770D
155
    li      x25, 0x888888DD
156
    li      x26, 0x999999F0
157
    li      x27, 0xAAAAAA00
158
    li      x28, 0xBBBBBBFF
159
    li      x29, 0xCCCCCC0F
160
 
161
    # Store results
162
    sb      x18, -4(x17)
163
    sb      x19, -3(x17)
164
    sb      x20, -2(x17)
165
    sb      x21, -1(x17)
166
    sb      x22, 0(x17)
167
    sb      x23, 1(x17)
168
    sb      x24, 2(x17)
169
    sb      x25, 3(x17)
170
    sb      x26, 4(x17)
171
    sb      x27, 5(x17)
172
    sb      x28, 6(x17)
173
    sb      x29, 7(x17)
174
 
175
    RVTEST_IO_ASSERT_GPR_EQ(x18, 0x1111110C)
176
    RVTEST_IO_ASSERT_GPR_EQ(x19, 0x222222CC)
177
    RVTEST_IO_ASSERT_GPR_EQ(x20, 0x333333BB)
178
    RVTEST_IO_ASSERT_GPR_EQ(x21, 0x4444440B)
179
    RVTEST_IO_ASSERT_GPR_EQ(x22, 0x555555EE)
180
    RVTEST_IO_ASSERT_GPR_EQ(x23, 0x6666660E)
181
    RVTEST_IO_ASSERT_GPR_EQ(x24, 0x7777770D)
182
    RVTEST_IO_ASSERT_GPR_EQ(x25, 0x888888DD)
183
    RVTEST_IO_ASSERT_GPR_EQ(x26, 0x999999F0)
184
    RVTEST_IO_ASSERT_GPR_EQ(x27, 0xAAAAAA00)
185
    RVTEST_IO_ASSERT_GPR_EQ(x28, 0xBBBBBBFF)
186
    RVTEST_IO_ASSERT_GPR_EQ(x29, 0xCCCCCC0F)
187
 
188
    RVTEST_IO_WRITE_STR("# Test part B  - Complete\n");
189
 
190
    # ---------------------------------------------------------------------------------------------
191
    RVTEST_IO_WRITE_STR("# Test part C - test store x0\n");
192
 
193
    # Address for test results
194
    la      x22, test_C_res
195
 
196
    # Set memory
197
    li      x1, 0x87654321
198
    sw      x1, 0(x22)
199
 
200
    # Test
201
    li      x0, 0x12345678
202
    sb      x0, 0(x22)
203
 
204
    RVTEST_IO_ASSERT_GPR_EQ(x0, 0x00000000)
205
    RVTEST_IO_ASSERT_GPR_EQ(x1, 0x87654321)
206
 
207
    RVTEST_IO_WRITE_STR("# Test part C  - Complete\n");
208
 
209
    # ---------------------------------------------------------------------------------------------
210
    RVTEST_IO_WRITE_STR("# Test part D1 - test for forwarding (to address register)\n");
211
 
212
    # Address for test data
213
    la      x21, test_D1_data
214
 
215
    # Clear memory
216
    lw      x1, 0(x21)
217
    sw      x0, 0(x1)
218
 
219
    # Test
220
    li      x19, 0x11223344
221
    lw      x23, 0(x21)
222
    sb      x19, 0(x23)
223
 
224
    RVTEST_IO_ASSERT_GPR_EQ(x19, 0x11223344)
225
 
226
    RVTEST_IO_WRITE_STR("# Test part D  - Complete\n");
227
 
228
    # ---------------------------------------------------------------------------------------------
229
    RVTEST_IO_WRITE_STR("# Test part D2 - test for forwarding (to data register)\n");
230
 
231
    # Address for test data
232
    la      x23, test_D2_data
233
    la      x24, test_D2_res
234
 
235
    # Clear memory
236
    sw      x0, 0(x24)
237
 
238
    # Test
239
    lw      x25, 0(x23)
240
    sb      x25, 0(x24)
241
 
242
    RVTEST_IO_ASSERT_GPR_EQ(x25, 0x9ABCDEF0)
243
 
244
    RVTEST_IO_WRITE_STR("# Test part E  - Complete\n");
245
 
246
    # ---------------------------------------------------------------------------------------------
247
    RVTEST_IO_WRITE_STR("# Test part E1 - test war hazard (data register)\n");
248
 
249
    # Address for test results
250
    la      x26, test_E1_res
251
 
252
    # Clear memory
253
    sw      x0, 0(x26)
254
 
255
    # Test
256
    li      x25, 0x76543210
257
    sb      x25, 0(x26)
258
    mv      x25, x0
259
 
260
    RVTEST_IO_ASSERT_GPR_EQ(x25, 0x00000000)
261
 
262
    RVTEST_IO_WRITE_STR("# Test part A1  - Complete\n");
263
 
264
    # ---------------------------------------------------------------------------------------------
265
    RVTEST_IO_WRITE_STR("# Test part E2 - test war hazard (address register)\n");
266
 
267
    # Address for test results
268
    la      x28, test_E2_res
269
 
270
    # Clear memory
271
    sw      x0, 0(x28)
272
 
273
    # Test
274
    li      x27, 0x89ABCDEF
275
    sb      x27, 0(x28)
276
    addi    x28, x28, -4
277
 
278
    RVTEST_IO_ASSERT_GPR_EQ(x27, 0x89ABCDEF)
279
    RVTEST_IO_ASSERT_GPR_EQ(x28, 0x8000403C)
280
 
281
    RVTEST_IO_WRITE_STR("# Test part A2  - Complete\n");
282
 
283
    # ---------------------------------------------------------------------------------------------
284
    RVTEST_IO_WRITE_STR("# Test part F - test raw hazard in memory\n");
285
 
286
    # Address for test results
287
    la      x29, test_F_res
288
 
289
    # Clear memory
290
    sw      x0, 0(x29)
291
    sw      x0, 4(x29)
292
 
293
    # Test
294
    li      x27, 0x14725836
295
    sb      x27, 0(x29)
296
    lw      x30, 0(x29)
297
    sb      x30, 4(x29)
298
 
299
    RVTEST_IO_ASSERT_GPR_EQ(x27, 0x14725836)
300
    RVTEST_IO_ASSERT_GPR_EQ(x30, 0x00000036)
301
 
302
    RVTEST_IO_WRITE_STR("# Test part A3  - Complete\n");
303
 
304
    # ---------------------------------------------------------------------------------------------
305
    RVTEST_IO_WRITE_STR("# Test part G - test waw hazard in memory\n");
306
 
307
    # Address for test results
308
    la      x1, test_G_res
309
 
310
    # Clear memory
311
    sw      x0, 0(x1)
312
 
313
    # Test
314
    li      x2, 0x96385201
315
    li      x3, 0x25814963
316
    sb      x2, 0(x1)
317
    sb      x3, 0(x1)
318
 
319
    RVTEST_IO_ASSERT_GPR_EQ(x2, 0x96385201)
320
    RVTEST_IO_ASSERT_GPR_EQ(x3, 0x25814963)
321
 
322
    RVTEST_IO_WRITE_STR("# Test part A4  - Complete\n");
323
 
324
    RVTEST_IO_WRITE_STR("Test End\n")
325
 
326
 # ---------------------------------------------------------------------------------------------
327
    # HALT
328
    RV_COMPLIANCE_HALT
329
 
330
RV_COMPLIANCE_CODE_END
331
 
332
# Input data section.
333
    .data
334
    .align 4
335
 
336
test_D1_data:
337
    .word test_D1_res
338
test_D2_data:
339
    .word 0x9ABCDEF0
340
 
341
 
342
# Output data section.
343
RV_COMPLIANCE_DATA_BEGIN
344
    .align 4
345
 
346
test_A1_res:
347
    .fill 1, 4, -1
348
test_A2_res:
349
    .fill 1, 4, -1
350
test_A3_res:
351
    .fill 1, 4, -1
352
test_A4_res:
353
    .fill 1, 4, -1
354
test_A5_res:
355
    .fill 1, 4, -1
356
    .fill 1, 4, -1
357
test_B_res:
358
    .fill 2, 4, -1
359
test_C_res:
360
    .fill 1, 4, -1
361
test_D1_res:
362
    .fill 1, 4, -1
363
test_D2_res:
364
    .fill 1, 4, -1
365
test_E1_res:
366
    .fill 1, 4, -1
367
test_E2_res:
368
    .fill 1, 4, -1
369
test_F_res:
370
    .fill 2, 4, -1
371
test_G_res:
372
    .fill 1, 4, -1
373
 
374
RV_COMPLIANCE_DATA_END

powered by: WebSVN 2.1.0

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