コード例 #1
0
ファイル: Tomasulo.java プロジェクト: huizhedmth/SC0xeb
 public void new_cycle() {
   Message msg;
   for (int i = 0; i < msgs.size(); i++) {
     msg = msgs.get(i);
     if (msg.valid) { // valid msg, remove it
       msgs.remove(i);
       i--;
     } else { // invalid msg, make it valid and do store operation
       if (msg.addr != -1) { // a s.d instruction
         System.out.println("Storing " + msg.result + " into mem[" + msg.addr + "]");
         mem[msg.addr] = msg.result;
       } else { // not a s.d instruction
         for (int j = 0; j < 32; j++) {
           if (msg.addr == -1) { // not a s.d instruction
             if (freg.getFregFlag(j) == msg.station_id) { // write register
               System.out.println("F" + j + " is being written");
               freg.setFregFlag(j, Station.READY);
               freg.setFreg(j, msg.result);
               break;
             }
             if (reg.getRegFlag(j) == msg.station_id) { // write register
               System.out.println("R" + j + " is being written");
               reg.setRegFlag(j, Station.READY);
               reg.setReg(j, (int) msg.result);
               break;
             }
           }
         }
       }
       msg.valid = true;
     }
   }
 }