public void asignaLatencia(Instruccion ins, int sumL, int mulL, int divL) { switch (ins.Op) { case "LD": ins.Latencia = 2; break; case "ST": ins.Latencia = 1; break; case "ADD": case "SUB": ins.Latencia = sumL; break; case "DIV": ins.Latencia = divL; break; case "MUL": ins.Latencia = mulL; break; } }
public string verificarDestinoInstruccion(Instruccion ins) { string opt = ""; switch (ins.Op) { case "LD": opt = "LOAD"; break; case "ST": opt = "STORE"; break; case "ADD": case "SUB": opt = "ADD"; break; case "DIV": case "MUL": opt = "MUL"; break; } return(opt); }
public void calcularDependencias(List <Instruccion> instrucciones, List <Dependencias> dependencias) { //como la lista de instrucciones esta a la inversa, se empieza desde el final for (int i = instrucciones.Count - 1; i >= 0; i--) { Instruccion ins = instrucciones[i]; for (int j = i + 1; j < instrucciones.Count; j++) { if ((ins.Rs1 == instrucciones[j].Rd || ins.Rs2 == instrucciones[j].Rd) && instrucciones[j].Op != "ST") { Dependencias dep = new Dependencias(); dep.IdInsDependiente = ins.IdInstruccion; dep.IdInsOrigen = instrucciones[j].IdInstruccion; dep.PorQuienDepende = instrucciones[j].Rd; if (j - i <= 2) { dep.Riesgo = "RAW"; } else { dep.Riesgo = ""; } dependencias.Add(dep); } if (ins.Op == "ST" && (ins.Rd == instrucciones[j].Rd)) { Dependencias dep = new Dependencias(); dep.IdInsDependiente = ins.IdInstruccion; dep.IdInsOrigen = instrucciones[j].IdInstruccion; dep.PorQuienDepende = instrucciones[j].Rd; dep.Riesgo = ""; dependencias.Add(dep); } } } }
public void asignarInstruccionAEstacionReservaAddSub(BindingList <Estaciones> estacionAddSub, Instruccion instruccion, int indice, Estaciones temp) { temp.Ocupada = "SI"; temp.Tipo = estacionAddSub[indice].Tipo; estacionAddSub[indice] = temp; }
public void asignarInstruccionABufferAlmacenamientoDisponible(BindingList <BufferT> bufferAlmacenamiento, Instruccion ins, int indice) { bufferAlmacenamiento[indice].Ocupada = "SI"; bufferAlmacenamiento[indice].Direccion = ins.Rs1 + "+" + ins.Inmediato; }