/[smarc]/smarc/src/vmachine/vmachine.cc
ViewVC logotype

Diff of /smarc/src/vmachine/vmachine.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.11 by misto, Fri Jan 3 01:46:38 2003 UTC revision 1.12 by misto, Fri Jan 3 16:09:28 2003 UTC
# Line 153  void vmachine::init( vector<unsigned lon Line 153  void vmachine::init( vector<unsigned lon
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 );
# Line 220  void vmachine::do_ID( void ) Line 219  void vmachine::do_ID( void )
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 );
# Line 280  void vmachine::do_EX( void ) Line 286  void vmachine::do_EX( void )
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) &&
# Line 361  void vmachine::do_MA( void ) Line 372  void vmachine::do_MA( void )
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) &&
# Line 400  void vmachine::do_WB( void ) Line 416  void vmachine::do_WB( void )
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());

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.12

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26