Skip to content

Commit 662c24f

Browse files
Flushing SYS instructions on retire should halt same cycle retires (#257)
Failing test and solution for Issue #253 Some of the SYS instrutions are executed on retire and may cause a flush. Olympia currently allows the youger uops to retire in the same cycle. However, when the flushing sys uop is retired, the program order check fails, as younger uops have retired out of order. Solution is to stop retiring uops when this happens. --------- Co-authored-by: Rajat Bhatia <rbhatia@ventanamicro.com>
1 parent e97a29f commit 662c24f

File tree

3 files changed

+306
-0
lines changed

3 files changed

+306
-0
lines changed

core/ROB.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,12 @@ namespace olympia
201201
if (SPARTA_EXPECT_FALSE(ex_inst.getPipe() == InstArchInfo::TargetPipe::SYS))
202202
{
203203
retireSysInst_(ex_inst_ptr);
204+
// Fix for Issue #253
205+
// If a flush is caused by retiring sys inst, then retire no more!
206+
if (expect_flush_ == true) {
207+
break;
208+
}
209+
204210
}
205211
}
206212
else

test/sim/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ sparta_named_test(olympia_json_test_missing_opcodes olympia
5656
sparta_named_test(olympia_json_test_fp_transfers olympia
5757
--workload json_tests/fp_transfers.json)
5858

59+
# Test sys retire under flush (#253)
60+
sparta_named_test(olympia_json_test_sys_retire_under_flush_issue_253 olympia
61+
--workload json_tests/sys_flush_test.json --arch ../arches/big_core.yaml)
62+
5963
# Test PEvent generation
6064
sparta_named_test(olympia_json_test_pevents olympia
6165
--workload traces/dhry_riscv.zstf -i100k
Lines changed: 296 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,296 @@
1+
[
2+
{
3+
"CSR": 140,
4+
"mnemonic": "csrrs",
5+
"rs1": 18,
6+
"rs2": 0
7+
},
8+
{
9+
"mnemonic": "mul",
10+
"rd": 3,
11+
"rs1": 5,
12+
"rs2": 2
13+
},
14+
{
15+
"mnemonic": "mul",
16+
"rd": 3,
17+
"rs1": 5,
18+
"rs2": 2
19+
},
20+
{
21+
"mnemonic": "mul",
22+
"rd": 3,
23+
"rs1": 5,
24+
"rs2": 2
25+
},
26+
{
27+
"mnemonic": "mul",
28+
"rd": 3,
29+
"rs1": 5,
30+
"rs2": 2
31+
},
32+
{
33+
"mnemonic": "mul",
34+
"rd": 3,
35+
"rs1": 5,
36+
"rs2": 2
37+
},
38+
{
39+
"mnemonic": "mul",
40+
"rd": 3,
41+
"rs1": 5,
42+
"rs2": 2
43+
},
44+
{
45+
"mnemonic": "mul",
46+
"rd": 3,
47+
"rs1": 5,
48+
"rs2": 2
49+
},
50+
{
51+
"mnemonic": "mul",
52+
"rd": 3,
53+
"rs1": 5,
54+
"rs2": 2
55+
},
56+
{
57+
"CSR": 140,
58+
"mnemonic": "csrrs",
59+
"rs1": 18,
60+
"rs2": 0
61+
},
62+
{
63+
"CSR": 141,
64+
"mnemonic": "csrrs",
65+
"rs1": 18,
66+
"rs2": 0
67+
},
68+
{
69+
"CSR": 142,
70+
"mnemonic": "csrrs",
71+
"rs1": 18,
72+
"rs2": 0
73+
},
74+
{
75+
"CSR": 143,
76+
"mnemonic": "csrrs",
77+
"rs1": 18,
78+
"rs2": 0
79+
},
80+
{
81+
"CSR": 144,
82+
"mnemonic": "csrrs",
83+
"rs1": 18,
84+
"rs2": 0
85+
},
86+
{
87+
"mnemonic": "mul",
88+
"rd": 3,
89+
"rs1": 5,
90+
"rs2": 2
91+
},
92+
{
93+
"mnemonic": "mul",
94+
"rd": 3,
95+
"rs1": 5,
96+
"rs2": 2
97+
},
98+
{
99+
"mnemonic": "mul",
100+
"rd": 3,
101+
"rs1": 5,
102+
"rs2": 2
103+
},
104+
{
105+
"mnemonic": "mul",
106+
"rd": 3,
107+
"rs1": 5,
108+
"rs2": 2
109+
},
110+
{
111+
"mnemonic": "mul",
112+
"rd": 3,
113+
"rs1": 5,
114+
"rs2": 2
115+
},
116+
{
117+
"mnemonic": "mul",
118+
"rd": 3,
119+
"rs1": 5,
120+
"rs2": 2
121+
},
122+
{
123+
"mnemonic": "mul",
124+
"rd": 3,
125+
"rs1": 5,
126+
"rs2": 2
127+
},
128+
{
129+
"mnemonic": "mul",
130+
"rd": 3,
131+
"rs1": 5,
132+
"rs2": 2
133+
},
134+
{
135+
"mnemonic": "mul",
136+
"rd": 3,
137+
"rs1": 5,
138+
"rs2": 2
139+
},
140+
{
141+
"mnemonic": "mul",
142+
"rd": 3,
143+
"rs1": 5,
144+
"rs2": 2
145+
},
146+
{
147+
"mnemonic": "mul",
148+
"rd": 3,
149+
"rs1": 5,
150+
"rs2": 2
151+
},
152+
{
153+
"mnemonic": "mul",
154+
"rd": 3,
155+
"rs1": 5,
156+
"rs2": 2
157+
},
158+
{
159+
"mnemonic": "mul",
160+
"rd": 3,
161+
"rs1": 5,
162+
"rs2": 2
163+
},
164+
{
165+
"mnemonic": "mul",
166+
"rd": 3,
167+
"rs1": 5,
168+
"rs2": 2
169+
},
170+
{
171+
"mnemonic": "mul",
172+
"rd": 3,
173+
"rs1": 5,
174+
"rs2": 2
175+
},
176+
{
177+
"mnemonic": "mul",
178+
"rd": 3,
179+
"rs1": 5,
180+
"rs2": 2
181+
},
182+
{
183+
"mnemonic": "mul",
184+
"rd": 3,
185+
"rs1": 5,
186+
"rs2": 2
187+
},
188+
{
189+
"mnemonic": "mul",
190+
"rd": 3,
191+
"rs1": 5,
192+
"rs2": 2
193+
},
194+
{
195+
"mnemonic": "mul",
196+
"rd": 3,
197+
"rs1": 5,
198+
"rs2": 2
199+
},
200+
{
201+
"mnemonic": "mul",
202+
"rd": 3,
203+
"rs1": 5,
204+
"rs2": 2
205+
},
206+
{
207+
"mnemonic": "mul",
208+
"rd": 3,
209+
"rs1": 5,
210+
"rs2": 2
211+
},
212+
{
213+
"mnemonic": "mul",
214+
"rd": 3,
215+
"rs1": 5,
216+
"rs2": 2
217+
},
218+
{
219+
"mnemonic": "mul",
220+
"rd": 3,
221+
"rs1": 5,
222+
"rs2": 2
223+
},
224+
{
225+
"mnemonic": "mul",
226+
"rd": 3,
227+
"rs1": 5,
228+
"rs2": 2
229+
},
230+
{
231+
"mnemonic": "mul",
232+
"rd": 3,
233+
"rs1": 5,
234+
"rs2": 2
235+
},
236+
{
237+
"mnemonic": "mul",
238+
"rd": 3,
239+
"rs1": 5,
240+
"rs2": 2
241+
},
242+
{
243+
"mnemonic": "mul",
244+
"rd": 3,
245+
"rs1": 5,
246+
"rs2": 2
247+
},
248+
{
249+
"mnemonic": "mul",
250+
"rd": 3,
251+
"rs1": 5,
252+
"rs2": 2
253+
},
254+
{
255+
"mnemonic": "mul",
256+
"rd": 3,
257+
"rs1": 5,
258+
"rs2": 2
259+
},
260+
{
261+
"mnemonic": "mul",
262+
"rd": 3,
263+
"rs1": 5,
264+
"rs2": 2
265+
},
266+
{
267+
"mnemonic": "mul",
268+
"rd": 3,
269+
"rs1": 5,
270+
"rs2": 2
271+
},
272+
{
273+
"mnemonic": "mul",
274+
"rd": 3,
275+
"rs1": 5,
276+
"rs2": 2
277+
},
278+
{
279+
"mnemonic": "mul",
280+
"rd": 3,
281+
"rs1": 5,
282+
"rs2": 2
283+
},
284+
{
285+
"mnemonic": "mul",
286+
"rd": 3,
287+
"rs1": 5,
288+
"rs2": 2
289+
},
290+
{
291+
"mnemonic": "mul",
292+
"rd": 3,
293+
"rs1": 5,
294+
"rs2": 2
295+
}
296+
]

0 commit comments

Comments
 (0)