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

Subversion Repositories fwrisc

[/] [fwrisc/] [trunk/] [ve/] [fwrisc/] [tests/] [riscv-compliance/] [riscv-test-suite/] [rv32mi/] [rv64si/] [ma_fetch.S] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 mballance
# See LICENSE for license details.
2
 
3
#*****************************************************************************
4
# ma_fetch.S
5
#-----------------------------------------------------------------------------
6
#
7
# Test misaligned fetch trap.
8
#
9
 
10
#include "riscv_test.h"
11
#include "compliance_test.h"
12
#include "compliance_io.h"
13
#include "aw_test_macros.h"
14
 
15
RVTEST_RV64S
16
RVTEST_CODE_BEGIN
17
 
18
#ifdef __MACHINE_MODE
19
  #define sscratch mscratch
20
  #define sstatus mstatus
21
  #define scause mcause
22
  #define sbadaddr mbadaddr
23
  #define sepc mepc
24
  #define sret mret
25
  #define stvec_handler mtvec_handler
26
#endif
27
 
28
  .align 2
29
  .option norvc
30
 
31
  # Without RVC, the jalr should trap, and the handler will skip ahead.
32
  # With RVC, the jalr should not trap, and "j fail" should get skipped.
33
  li TESTNUM, 2
34
  SWSIG(2, TESTNUM)
35
  li t1, 0
36
  la t0, 1f
37
  jalr t1, t0, 2
38
1:
39
  .option rvc
40
  c.j 1f
41
  c.j 2f
42
  .option norvc
43
1:
44
  j fail
45
2:
46
 
47
  // This test should pass, since JALR ignores the target LSB
48
  li TESTNUM, 3
49
  SWSIG(3, TESTNUM)
50
  la t0, 1f
51
  jalr t1, t0, 1
52
1:
53
  j 1f
54
  j fail
55
1:
56
 
57
  li TESTNUM, 4
58
  SWSIG(4, TESTNUM)
59
  li t1, 0
60
  la t0, 1f
61
  jalr t1, t0, 3
62
1:
63
  .option rvc
64
  c.j 1f
65
  c.j 2f
66
  .option norvc
67
1:
68
  j fail
69
2:
70
 
71
  # Like test 2, but with jal instead of jalr.
72
  li TESTNUM, 5
73
  SWSIG(5, TESTNUM)
74
  li t1, 0
75
  la t0, 1f
76
  jal t1, 2f
77
1:
78
  .option rvc
79
  c.j 1f
80
2:
81
  c.j 2f
82
  .option norvc
83
1:
84
  j fail
85
2:
86
 
87
  # Like test 2, but with a taken branch instead of jalr.
88
  li TESTNUM, 6
89
  SWSIG(6, TESTNUM)
90
  li t1, 0
91
  la t0, 1f
92
  beqz x0, 2f
93
1:
94
  .option rvc
95
  c.j 1f
96
2:
97
  c.j 2f
98
  .option norvc
99
1:
100
  j fail
101
2:
102
 
103
  # Not-taken branches should not trap, even without RVC.
104
  li TESTNUM, 7
105
  SWSIG(7, TESTNUM)
106
  bnez x0, 1f
107
  j 2f
108
  .option rvc
109
  c.j 1f
110
1:
111
  c.j 1f
112
  .option norvc
113
1:
114
  j fail
115
2:
116
 
117
#ifdef __MACHINE_MODE
118
  # RVC cannot be disabled if doing so would cause a misaligned instruction
119
  # exception on the next instruction fetch. (This test assumes no other
120
  # extensions that support misalignment are present.)
121
  li TESTNUM, 8
122
  SWSIG(8, TESTNUM)
123
  csrr t2, misa
124
  andi t2, t2, 1 << ('c' - 'a')
125
  beqz t2, 2f
126
 
127
  .option rvc
128
  c.nop
129
  csrci misa, 1 << ('c' - 'a')
130
1:
131
  c.nop
132
  .option norvc
133
 
134
  csrr t2, misa
135
  andi t2, t2, 1 << ('c' - 'a')
136
  beqz t2, fail
137
 
138
  # When RVC is disabled, mret to a misaligned mepc should succeed,
139
  # masking off mepc[1].
140
  la t0, 1f
141
  addi t0, t0, -2
142
  csrw mepc, t0
143
 
144
  # Try to disable RVC; if it can't be disabled, skip the test.
145
  csrci misa, 1 << ('c' - 'a')
146
  csrr t2, misa
147
  andi t2, t2, 1 << ('c' - 'a')
148
  bnez t2, 2f
149
 
150
  li t2, MSTATUS_MPP
151
  csrs mstatus, t2
152
  mret
153
 
154
  # mret should transfer control to this branch.  Otherwise, it will
155
  # transfer control two bytes into the branch, which happens to be the
156
  # illegal instruction c.unimp.
157
  beqz x0, 1f
158
1:
159
  csrsi misa, 1 << ('c' - 'a')
160
2:
161
#endif
162
 
163
  j pass
164
 
165
  TEST_PASSFAIL
166
 
167
  .align 2
168
  .global stvec_handler
169
stvec_handler:
170
  # tests 2, 4, 5, 6, and 8 should trap
171
  li a0, 2
172
  beq TESTNUM, a0, 1f
173
  li a0, 4
174
  beq TESTNUM, a0, 1f
175
  li a0, 5
176
  beq TESTNUM, a0, 1f
177
  li a0, 6
178
  beq TESTNUM, a0, 1f
179
  j fail
180
1:
181
 
182
  # verify that return address was not written
183
  bnez t1, fail
184
 
185
  # verify trap cause
186
  li a1, CAUSE_MISALIGNED_FETCH
187
  csrr a0, scause
188
  bne a0, a1, fail
189
 
190
  # verify that epc == &jalr (== t0 - 4)
191
  csrr a1, sepc
192
  addi a1, a1, 4
193
  bne t0, a1, fail
194
 
195
  # verify that badaddr == 0 or badaddr == t0+2.
196
  csrr a0, sbadaddr
197
  beqz a0, 1f
198
  addi a0, a0, -2
199
  bne a0, t0, fail
200
1:
201
 
202
  addi a1, a1, 12
203
  csrw sepc, a1
204
  sret
205
 
206
RVTEST_CODE_END
207
 
208
  .data
209
RV_COMPLIANCE_DATA_BEGIN
210
test_res:
211
    .fill 40, 4, -1
212
RV_COMPLIANCE_DATA_END
213
 

powered by: WebSVN 2.1.0

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