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-SLLI-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-SLLI-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 SLLI.
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
    slli    x4, x3, 1
58
    slli    x5, x3, 0xF
59
    slli    x6, x3, 0x1F
60
    slli    x7, x3, 0
61
    slli    x8, x3, 0x10
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, 0x00000000)
77
    RVTEST_IO_ASSERT_GPR_EQ(x5, 0x00000000)
78
    RVTEST_IO_ASSERT_GPR_EQ(x6, 0x00000000)
79
    RVTEST_IO_ASSERT_GPR_EQ(x7, 0x00000000)
80
    RVTEST_IO_ASSERT_GPR_EQ(x8, 0x00000000)
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
    slli    x9, x8, 1
96
    slli    x10, x8, 0xF
97
    slli    x11, x8, 0x1F
98
    slli    x12, x8, 0
99
    slli    x13, x8, 0x10
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, 0x80000000)
113
    RVTEST_IO_ASSERT_GPR_EQ(x12, 0x00000001)
114
    RVTEST_IO_ASSERT_GPR_EQ(x13, 0x00010000)
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
    slli    x14, x13, 1
130
    slli    x15, x13, 0xF
131
    slli    x16, x13, 0x1F
132
    slli    x17, x13, 0
133
    slli    x18, x13, 0x10
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, 0xFFFFFFFE)
145
    RVTEST_IO_ASSERT_GPR_EQ(x15, 0xFFFF8000)
146
    RVTEST_IO_ASSERT_GPR_EQ(x16, 0x80000000)
147
    RVTEST_IO_ASSERT_GPR_EQ(x17, 0xFFFFFFFF)
148
    RVTEST_IO_ASSERT_GPR_EQ(x18, 0xFFFF0000)
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      x12, test_A4_data
157
    la      x13, test_A4_res
158
 
159
    # Load testdata
160
    lw      x18, 0(x12)
161
 
162
    # Test
163
    slli    x19, x18, 1
164
    slli    x20, x18, 0xF
165
    slli    x21, x18, 0x1F
166
    slli    x22, x18, 0
167
    slli    x23, x18, 0x10
168
 
169
    # Store results
170
    sw      x18, 0(x13)
171
    sw      x19, 4(x13)
172
    sw      x20, 8(x13)
173
    sw      x21, 12(x13)
174
    sw      x22, 16(x13)
175
    sw      x23, 20(x13)
176
 
177
    RVTEST_IO_ASSERT_GPR_EQ(x18, 0x7FFFFFFF)
178
    RVTEST_IO_ASSERT_GPR_EQ(x19, 0xFFFFFFFE)
179
    RVTEST_IO_ASSERT_GPR_EQ(x20, 0xFFFF8000)
180
    RVTEST_IO_ASSERT_GPR_EQ(x21, 0x80000000)
181
    RVTEST_IO_ASSERT_GPR_EQ(x22, 0x7FFFFFFF)
182
    RVTEST_IO_ASSERT_GPR_EQ(x23, 0xFFFF0000)
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      x12, test_A5_data
191
    la      x13, test_A5_res
192
 
193
    # Load testdata
194
    lw      x23, 0(x12)
195
 
196
    # Test
197
    slli    x24, x23, 1
198
    slli    x25, x23, 0xF
199
    slli    x26, x23, 0x1F
200
    slli    x27, x23, 0
201
    slli    x28, x23, 0x10
202
 
203
    # Store results
204
    sw      x23, 0(x13)
205
    sw      x24, 4(x13)
206
    sw      x25, 8(x13)
207
    sw      x26, 12(x13)
208
    sw      x27, 16(x13)
209
    sw      x28, 20(x13)
210
 
211
    RVTEST_IO_ASSERT_GPR_EQ(x23, 0x80000000)
212
    RVTEST_IO_ASSERT_GPR_EQ(x24, 0x00000000)
213
    RVTEST_IO_ASSERT_GPR_EQ(x25, 0x00000000)
214
    RVTEST_IO_ASSERT_GPR_EQ(x26, 0x00000000)
215
    RVTEST_IO_ASSERT_GPR_EQ(x27, 0x80000000)
216
    RVTEST_IO_ASSERT_GPR_EQ(x28, 0x00000000)
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
    slli    x29, x28, 1
232
    slli    x30, x29, 1
233
    slli    x31, x30, 1
234
    slli    x1, x31, 1
235
    slli    x2, x1, 1
236
    slli    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
    RVTEST_IO_ASSERT_GPR_EQ(x28, 0xABCDEF10)
248
    RVTEST_IO_ASSERT_GPR_EQ(x29, 0x579BDE20)
249
    RVTEST_IO_ASSERT_GPR_EQ(x30, 0xAF37BC40)
250
    RVTEST_IO_ASSERT_GPR_EQ(x31, 0x5E6F7880)
251
    #RVTEST_IO_ASSERT_GPR_EQ(x1, 0x80001940)
252
    RVTEST_IO_ASSERT_GPR_EQ(x2, 0x79BDE200)
253
    RVTEST_IO_ASSERT_GPR_EQ(x3, 0xF37BC400)
254
 
255
    RVTEST_IO_WRITE_STR("# Test part B  - Complete\n");
256
 
257
    # ---------------------------------------------------------------------------------------------
258
    RVTEST_IO_WRITE_STR("# Test part C - testing writing to x0\n");
259
 
260
    # Addresses for test data and results
261
    la      x1, test_C_data
262
    la      x2, test_C_res
263
 
264
    # Load testdata
265
    lw      x5, 0(x1)
266
 
267
    # Test
268
    slli    x0, x5, 1
269
 
270
    # Store results
271
    sw      x0, 0(x2)
272
 
273
    RVTEST_IO_ASSERT_GPR_EQ(x0, 0x00000000)
274
 
275
    RVTEST_IO_WRITE_STR("# Test part C  - Complete\n");
276
 
277
    # ---------------------------------------------------------------------------------------------
278
    RVTEST_IO_WRITE_STR("# Test part D - testing forwarding throught x0\n");
279
 
280
    # Addresses for test data and results
281
    la      x1, test_D_data
282
    la      x2, test_D_res
283
 
284
    # Load testdata
285
    lw      x5, 0(x1)
286
 
287
    # Test
288
    slli    x0, x5, 1
289
    slli    x5, x0, 1
290
 
291
    # Store results
292
    sw      x0, 0(x2)
293
    sw      x5, 4(x2)
294
 
295
    RVTEST_IO_ASSERT_GPR_EQ(x0, 0x00000000)
296
    RVTEST_IO_ASSERT_GPR_EQ(x5, 0x00000000)
297
 
298
    RVTEST_IO_WRITE_STR("# Test part D  - Complete\n");
299
 
300
    RVTEST_IO_WRITE_STR("# Test End\n")
301
 
302
 # ---------------------------------------------------------------------------------------------
303
    # HALT
304
    RV_COMPLIANCE_HALT
305
 
306
RV_COMPLIANCE_CODE_END
307
 
308
# Input data section.
309
    .data
310
    .align 4
311
 
312
test_A1_data:
313
    .word 0
314
test_A2_data:
315
    .word 1
316
test_A3_data:
317
    .word -1
318
test_A4_data:
319
    .word 0x7FFFFFFF
320
test_A5_data:
321
    .word 0x80000000
322
test_B_data:
323
    .word 0xABCDEF10
324
test_C_data:
325
    .word 0x12345678
326
test_D_data:
327
    .word 0xFEDCBA98
328
 
329
 
330
# Output data section.
331
RV_COMPLIANCE_DATA_BEGIN
332
    .align 4
333
 
334
test_A1_res:
335
    .fill 6, 4, -1
336
test_A2_res:
337
    .fill 6, 4, -1
338
test_A3_res:
339
    .fill 6, 4, -1
340
test_A4_res:
341
    .fill 6, 4, -1
342
test_A5_res:
343
    .fill 6, 4, -1
344
test_B_res:
345
    .fill 7, 4, -1
346
test_C_res:
347
    .fill 1, 4, -1
348
test_D_res:
349
    .fill 2, 4, -1
350
 
351
RV_COMPLIANCE_DATA_END

powered by: WebSVN 2.1.0

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