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-ADDI-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-ADDI-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 ADDI.
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 - general test of value 0 with 0, 1, -1, MIN, MAX immediate values\n");
48
 
49
    # Addresses for test data and results
50
    la      x1, test_A1_data
51
    la      x2, test_A1_res
52
 
53
    # Load testdata
54
    lw      x3, 0(x1)
55
 
56
    # Test
57
    addi    x4, x3, 1
58
    addi    x5, x3, 0x7FF
59
    addi    x6, x3, 0xFFFFFFFF
60
    addi    x7, x3, 0
61
    addi    x8, x3, 0xFFFFF800
62
 
63
    # Store results
64
    sw      x3, 0(x2)
65
    sw      x4, 4(x2)
66
    sw      x5, 8(x2)
67
    sw      x6, 12(x2)
68
    sw      x7, 16(x2)
69
    sw      x8, 20(x2)
70
 
71
    //
72
    // Assert
73
    //
74
    RVTEST_IO_CHECK()
75
    RVTEST_IO_ASSERT_GPR_EQ(x3, 0x00000000)
76
    RVTEST_IO_ASSERT_GPR_EQ(x4, 0x00000001)
77
    RVTEST_IO_ASSERT_GPR_EQ(x5, 0x00000000)
78
    RVTEST_IO_ASSERT_GPR_EQ(x6, 0xFFFFFFFF)
79
    RVTEST_IO_ASSERT_GPR_EQ(x7, 0x00000000)
80
    RVTEST_IO_ASSERT_GPR_EQ(x8, 0xFFFFF800)
81
 
82
    RVTEST_IO_WRITE_STR("# Test part A1  - Complete\n");
83
 
84
    # ---------------------------------------------------------------------------------------------
85
    RVTEST_IO_WRITE_STR("# Test part A2 - general test of value 1 with 0, 1, -1, MIN, MAX immediate values\n");
86
 
87
    # Addresses for test data and results
88
    la      x1, test_A2_data
89
    la      x2, test_A2_res
90
 
91
    # Load testdata
92
    lw      x8, 0(x1)
93
 
94
    # Test
95
    addi    x9, x8, 1
96
    addi    x10, x8, 0x7FF
97
    addi    x11, x8, 0xFFFFFFFF
98
    addi    x12, x8, 0
99
    addi    x13, x8, 0xFFFFF800
100
 
101
    # Store results
102
    sw      x8, 0(x2)
103
    sw      x9, 4(x2)
104
    sw      x10, 8(x2)
105
    sw      x11, 12(x2)
106
    sw      x12, 16(x2)
107
    sw      x13, 20(x2)
108
 
109
    RVTEST_IO_ASSERT_GPR_EQ(x8, 0x00000001)
110
    RVTEST_IO_ASSERT_GPR_EQ(x9, 0x00000002)
111
    #RVTEST_IO_ASSERT_GPR_EQ(x10, 0x00000000)
112
    RVTEST_IO_ASSERT_GPR_EQ(x11, 0x00000000)
113
    RVTEST_IO_ASSERT_GPR_EQ(x12, 0x00000001)
114
    RVTEST_IO_ASSERT_GPR_EQ(x13, 0xFFFFF801)
115
 
116
    RVTEST_IO_WRITE_STR("# Test part A2  - Complete\n");
117
 
118
    # ---------------------------------------------------------------------------------------------
119
    RVTEST_IO_WRITE_STR("# Test part A3 - general test of value -1 with 0, 1, -1, MIN, MAX immediate values\n");
120
 
121
    # Addresses for test data and results
122
    la      x1, test_A3_data
123
    la      x2, test_A3_res
124
 
125
    # Load testdata
126
    lw      x13, 0(x1)
127
 
128
    # Test
129
    addi    x14, x13, 1
130
    addi    x15, x13, 0x7FF
131
    addi    x16, x13, 0xFFFFFFFF
132
    addi    x17, x13, 0
133
    addi    x18, x13, 0xFFFFF800
134
 
135
    # Store results
136
    sw      x13, 0(x2)
137
    sw      x14, 4(x2)
138
    sw      x15, 8(x2)
139
    sw      x16, 12(x2)
140
    sw      x17, 16(x2)
141
    sw      x18, 20(x2)
142
 
143
    RVTEST_IO_ASSERT_GPR_EQ(x13, 0xFFFFFFFF)
144
    RVTEST_IO_ASSERT_GPR_EQ(x14, 0x00000000)
145
    RVTEST_IO_ASSERT_GPR_EQ(x15, 0x000007FE)
146
    RVTEST_IO_ASSERT_GPR_EQ(x16, 0xFFFFFFFE)
147
    RVTEST_IO_ASSERT_GPR_EQ(x17, 0xFFFFFFFF)
148
    RVTEST_IO_ASSERT_GPR_EQ(x18, 0xFFFFF7FF)
149
 
150
    RVTEST_IO_WRITE_STR("# Test part A3  - Complete\n");
151
 
152
    # ---------------------------------------------------------------------------------------------
153
    RVTEST_IO_WRITE_STR("# Test part A4 - general test of value 0x7FFFFFFF with 0, 1, -1, MIN, MAX immediate values\n");
154
 
155
    # Addresses for test data and results
156
    la      x1, test_A4_data
157
    la      x2, test_A4_res
158
 
159
    # Load testdata
160
    lw      x18, 0(x1)
161
 
162
    # Test
163
    addi    x19, x18, 1
164
    addi    x20, x18, 0x7FF
165
    addi    x21, x18, 0xFFFFFFFF
166
    addi    x22, x18, 0
167
    addi    x23, x18, 0xFFFFF800
168
 
169
    # Store results
170
    sw      x18, 0(x2)
171
    sw      x19, 4(x2)
172
    sw      x20, 8(x2)
173
    sw      x21, 12(x2)
174
    sw      x22, 16(x2)
175
    sw      x23, 20(x2)
176
 
177
    RVTEST_IO_ASSERT_GPR_EQ(x18, 0x7FFFFFFF)
178
    RVTEST_IO_ASSERT_GPR_EQ(x19, 0x80000000)
179
    RVTEST_IO_ASSERT_GPR_EQ(x20, 0x800007FE)
180
    RVTEST_IO_ASSERT_GPR_EQ(x21, 0x7FFFFFFE)
181
    RVTEST_IO_ASSERT_GPR_EQ(x22, 0x7FFFFFFF)
182
    RVTEST_IO_ASSERT_GPR_EQ(x23, 0x7FFFF7FF)
183
 
184
    RVTEST_IO_WRITE_STR("# Test part A4  - Complete\n");
185
 
186
    # ---------------------------------------------------------------------------------------------
187
    RVTEST_IO_WRITE_STR("# Test part A5 - general test of value 0x80000000 with 0, 1, -1, MIN, MAX immediate values\n");
188
 
189
    # Addresses for test data and results
190
    la      x1, test_A5_data
191
    la      x2, test_A5_res
192
 
193
    # Load testdata
194
    lw      x23, 0(x1)
195
 
196
    # Test
197
    addi    x24, x23, 1
198
    addi    x25, x23, 0x7FF
199
    addi    x26, x23, 0xFFFFFFFF
200
    addi    x27, x23, 0
201
    addi    x28, x23, 0xFFFFF800
202
 
203
    # Store results
204
    sw      x23, 0(x2)
205
    sw      x24, 4(x2)
206
    sw      x25, 8(x2)
207
    sw      x26, 12(x2)
208
    sw      x27, 16(x2)
209
    sw      x28, 20(x2)
210
 
211
    RVTEST_IO_ASSERT_GPR_EQ(x23, 0x80000000)
212
    RVTEST_IO_ASSERT_GPR_EQ(x24, 0x80000001)
213
    RVTEST_IO_ASSERT_GPR_EQ(x25, 0x800007FF)
214
    RVTEST_IO_ASSERT_GPR_EQ(x26, 0x7FFFFFFF)
215
    RVTEST_IO_ASSERT_GPR_EQ(x27, 0x80000000)
216
    RVTEST_IO_ASSERT_GPR_EQ(x28, 0x7FFFF800)
217
 
218
    RVTEST_IO_WRITE_STR("# Test part A5  - Complete\n");
219
 
220
    # ---------------------------------------------------------------------------------------------
221
    RVTEST_IO_WRITE_STR("# Test part B - testing forwarding between instructions\n");
222
 
223
    # Addresses for test data and results
224
    la      x26, test_B_data
225
    la      x27, test_B_res
226
 
227
    # Load testdata
228
    lw      x28, 0(x26)
229
 
230
    # Test
231
    addi    x29, x28, 1
232
    addi    x30, x29, 1
233
    addi    x31, x30, 1
234
    addi    x1, x31, 1
235
    addi    x2, x1, 1
236
    addi    x3, x2, 1
237
 
238
    # Store results
239
    sw      x28, 0(x27)
240
    sw      x29, 4(x27)
241
    sw      x30, 8(x27)
242
    sw      x31, 12(x27)
243
    sw      x1, 16(x27)
244
    sw      x2, 20(x27)
245
    sw      x3, 24(x27)
246
 
247
 
248
    RVTEST_IO_ASSERT_GPR_EQ(x28, 0x0000ABCD)
249
    RVTEST_IO_ASSERT_GPR_EQ(x29, 0x0000ABCE)
250
    RVTEST_IO_ASSERT_GPR_EQ(x30, 0x0000ABCF)
251
    RVTEST_IO_ASSERT_GPR_EQ(x31, 0x0000ABD0)
252
    #RVTEST_IO_ASSERT_GPR_EQ(x1, 0x800018F4)
253
    RVTEST_IO_ASSERT_GPR_EQ(x2, 0x0000ABD2)
254
    RVTEST_IO_ASSERT_GPR_EQ(x3, 0x0000ABD3)
255
 
256
    RVTEST_IO_WRITE_STR("# Test part B  - Complete\n");
257
 
258
    # ---------------------------------------------------------------------------------------------
259
    RVTEST_IO_WRITE_STR("# Test part C - testing writing to x0\n");
260
 
261
    # Addresses for test data and results
262
    la      x1, test_C_data
263
    la      x2, test_C_res
264
 
265
    # Load testdata
266
    lw      x5, 0(x1)
267
 
268
    # Test
269
    addi    x0, x5, 1
270
 
271
    # Store results
272
    sw      x0, 0(x2)
273
 
274
    RVTEST_IO_ASSERT_GPR_EQ(x0, 0x00000000)
275
 
276
    RVTEST_IO_WRITE_STR("# Test part C  - Complete\n");
277
 
278
    # ---------------------------------------------------------------------------------------------
279
    RVTEST_IO_WRITE_STR("# Test part D - testing forwarding throught x0\n");
280
 
281
    # Addresses for test data and results
282
    la      x1, test_D_data
283
    la      x2, test_D_res
284
 
285
    # Load testdata
286
    lw      x5, 0(x1)
287
 
288
    # Test
289
    addi    x0, x5, 1
290
    addi    x5, x0, 1
291
 
292
    # Store results
293
    sw      x0, 0(x2)
294
    sw      x5, 4(x2)
295
 
296
    RVTEST_IO_ASSERT_GPR_EQ(x0, 0x00000000)
297
    RVTEST_IO_ASSERT_GPR_EQ(x5, 0x00000000)
298
 
299
    RVTEST_IO_WRITE_STR("# Test part D  - Complete\n");
300
 
301
    # ---------------------------------------------------------------------------------------------
302
    RVTEST_IO_WRITE_STR("# Test part E - testing moving (addi with 0)\n");
303
 
304
    # Addresses for test data and results
305
    la      x1, test_E_data
306
    la      x2, test_E_res
307
 
308
    # Load testdata
309
    lw      x3, 0(x1)
310
 
311
    # Test
312
    addi    x4, x3, 0
313
    addi    x5, x4, 0
314
    addi    x6, x5, 0
315
    addi    x14, x6, 0
316
    addi    x15, x14, 0
317
    addi    x16, x15, 0
318
    addi    x25, x16, 0
319
    addi    x26, x25, 0
320
    addi    x27, x26, 0
321
 
322
    # Store results
323
    sw      x3, 0(x2)
324
    sw      x4, 4(x2)
325
    sw      x26, 8(x2)
326
    sw      x27, 12(x2)
327
 
328
    RVTEST_IO_ASSERT_GPR_EQ(x3, 0x36925814)
329
    RVTEST_IO_ASSERT_GPR_EQ(x4, 0x36925814)
330
    RVTEST_IO_ASSERT_GPR_EQ(x26, 0x36925814)
331
    RVTEST_IO_ASSERT_GPR_EQ(x27, 0x36925814)
332
 
333
    RVTEST_IO_WRITE_STR("# Test part E  - Complete\n");
334
 
335
    RVTEST_IO_WRITE_STR("# Test End\n")
336
 
337
 # ---------------------------------------------------------------------------------------------
338
    # HALT
339
    RV_COMPLIANCE_HALT
340
 
341
RV_COMPLIANCE_CODE_END
342
 
343
# Input data section.
344
    .data
345
    .align 4
346
 
347
test_A1_data:
348
    .word 0
349
test_A2_data:
350
    .word 1
351
test_A3_data:
352
    .word -1
353
test_A4_data:
354
    .word 0x7FFFFFFF
355
test_A5_data:
356
    .word 0x80000000
357
test_B_data:
358
    .word 0x0000ABCD
359
test_C_data:
360
    .word 0x12345678
361
test_D_data:
362
    .word 0xFEDCBA98
363
test_E_data:
364
    .word 0x36925814
365
 
366
 
367
# Output data section.
368
RV_COMPLIANCE_DATA_BEGIN
369
    .align 4
370
 
371
test_A1_res:
372
    .fill 6, 4, -1
373
test_A2_res:
374
    .fill 6, 4, -1
375
test_A3_res:
376
    .fill 6, 4, -1
377
test_A4_res:
378
    .fill 6, 4, -1
379
test_A5_res:
380
    .fill 6, 4, -1
381
test_B_res:
382
    .fill 7, 4, -1
383
test_C_res:
384
    .fill 1, 4, -1
385
test_D_res:
386
    .fill 2, 4, -1
387
test_E_res:
388
    .fill 4, 4, -1
389
 
390
RV_COMPLIANCE_DATA_END

powered by: WebSVN 2.1.0

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