| 153 |
ppDR.remember(0); |
ppDR.remember(0); |
| 154 |
|
|
| 155 |
psr.zero(); |
psr.zero(); |
|
psr.CWP--; |
|
| 156 |
|
|
| 157 |
Mpx1.set( 1 ); |
Mpx1.set( 1 ); |
| 158 |
Mpx2.set( 1 ); |
Mpx2.set( 1 ); |
| 219 |
#ifdef VMDEBUG |
#ifdef VMDEBUG |
| 220 |
cout.form("ID phase: IR: %08X, PC: %08X\n",IR.get(), PC.get()); |
cout.form("ID phase: IR: %08X, PC: %08X\n",IR.get(), PC.get()); |
| 221 |
#endif |
#endif |
| 222 |
|
|
| 223 |
|
if ( nOP.instr == instr_word::halt ){ |
| 224 |
|
phase_active[IF] = false; |
| 225 |
|
phase_active[ID] = false; |
| 226 |
|
pPC.remember(); |
| 227 |
|
return; |
| 228 |
|
} |
| 229 |
|
|
| 230 |
Const.process(); |
Const.process(); |
| 231 |
Registers.process_out( psr.CWP ); |
Registers.process_out( psr.CWP ); |
| 286 |
cout.form("EX phase: A1: %08X, A2: %08X, R: %08X, DR: %08X\n", |
cout.form("EX phase: A1: %08X, A2: %08X, R: %08X, DR: %08X\n", |
| 287 |
A1.get(), A2.get(),R.get(),DR.get()); |
A1.get(), A2.get(),R.get(),DR.get()); |
| 288 |
#endif |
#endif |
| 289 |
|
if ( OP.instr == instr_word::halt ){ |
| 290 |
|
phase_active[EX] = false; |
| 291 |
|
ppPC.remember(); |
| 292 |
|
return; |
| 293 |
|
} |
| 294 |
|
|
| 295 |
if ( phase_active[WB] && OP.is_arlog_src() && |
if ( phase_active[WB] && OP.is_arlog_src() && |
| 296 |
(ppOP.is_arlog_dst() || ppOP.group==instr_word::load) && |
(ppOP.is_arlog_dst() || ppOP.group==instr_word::load) && |
| 372 |
cout.form("MA phase: T: %08X, pR: %08X, pDR: %08X\n", |
cout.form("MA phase: T: %08X, pR: %08X, pDR: %08X\n", |
| 373 |
T.get(),pR.get(),pDR.get()); |
T.get(),pR.get(),pDR.get()); |
| 374 |
#endif |
#endif |
| 375 |
|
if ( pOP.instr == instr_word::halt ){ |
| 376 |
|
phase_active[MA] = false; |
| 377 |
|
pppPC.remember(); |
| 378 |
|
return; |
| 379 |
|
} |
| 380 |
|
|
| 381 |
if ( phase_active[WB] && pOP.group == instr_word::store && |
if ( phase_active[WB] && pOP.group == instr_word::store && |
| 382 |
(ppOP.is_arlog_dst() || ppOP.group==instr_word::load) && |
(ppOP.is_arlog_dst() || ppOP.group==instr_word::load) && |
| 416 |
ppDR.pass_through(); |
ppDR.pass_through(); |
| 417 |
pppPC.pass_through(); |
pppPC.pass_through(); |
| 418 |
|
|
| 419 |
|
if ( ppOP.instr == instr_word::halt ){ |
| 420 |
|
phase_active[WB] = false; |
| 421 |
|
ppppPC.remember(); |
| 422 |
|
return; |
| 423 |
|
} |
| 424 |
|
|
| 425 |
#ifdef VMDEBUG |
#ifdef VMDEBUG |
| 426 |
cout.form("WB phase: pT: %08X, D: %08X, ppDR: %08X\n", |
cout.form("WB phase: pT: %08X, D: %08X, ppDR: %08X\n", |
| 427 |
pT.get(),D.get(),ppDR.get()); |
pT.get(),D.get(),ppDR.get()); |