static public void Work() { // if (D_state == Control.States.SINS || D_state == Control.States.SHLT) { d_state = D_state; return; } if (D_icode == Control.Codes.IPOPQ) { int deb = 0; int nm = deb + 1; } d_dstE = d_dstM = Control.Registers.RNONE; if (D_icode == Control.Codes.IRRMOVQ || D_icode == Control.Codes.IIRMOVQ || D_icode == Control.Codes.IOPQ || D_icode == Control.Codes.IIOPQ) { d_dstE = D_rB; } if (D_icode == Control.Codes.ICALL || D_icode == Control.Codes.IRET || D_icode == Control.Codes.IPUSHQ || D_icode == Control.Codes.IPOPQ) { d_dstE = Control.Registers.RSP; } if (D_icode == Control.Codes.IMRMOVQ || D_icode == Control.Codes.IPOPQ) { d_dstM = D_rA; } d_srcA = d_srcB = Control.Registers.RNONE; if (D_icode == Control.Codes.IRRMOVQ || D_icode == Control.Codes.IRMMOVQ || D_icode == Control.Codes.IOPQ || D_icode == Control.Codes.IPUSHQ) { d_srcA = D_rA; } if (D_icode == Control.Codes.IPOPQ || D_icode == Control.Codes.IRET) { d_srcA = Control.Registers.RSP; } if (D_icode == Control.Codes.IRMMOVQ || D_icode == Control.Codes.IMRMOVQ || D_icode == Control.Codes.IOPQ || D_icode == Control.Codes.IIOPQ) { d_srcB = D_rB; } if (D_icode == Control.Codes.IRET || D_icode == Control.Codes.IPUSHQ || D_icode == Control.Codes.IPOPQ || D_icode == Control.Codes.ICALL) { d_srcB = Control.Registers.RSP; } long d_rvalA = reg[(long)d_srcA]; long d_rvalB = reg[(long)d_srcB]; if (D_icode == Control.Codes.ICALL || D_icode == Control.Codes.IJXX) { d_valA = D_valP; } else { d_valA = Fwd(d_srcA, d_rvalA); } d_valB = Fwd(d_srcB, d_rvalB); d_state = D_state; d_icode = D_icode; d_ifun = D_ifun; d_valC = D_valC; }
static public void Updata(Control.States state, Control.Codes code, long ifun, Control.Registers rA, Control.Registers rB, long valC, long valP) { D_state = state; D_icode = code; D_ifun = ifun; D_rA = rA; D_rB = rB; D_valC = valC; D_valP = valP; }
static public void Updata(Control.States state, Control.Codes icode, long ifun, long valE, long valM, Control.Registers dstE, Control.Registers dstM) { W_state = state; W_icode = icode; W_ifun = ifun; W_valE = valE; W_valM = valM; W_dstE = dstE; W_dstM = dstM; }
static public void Updata(Control.States state, Control.Codes icode, long ifun, bool Cnd, long valE, long valA, Control.Registers dstE, Control.Registers dstM) { M_state = state; M_icode = icode; M_ifun = ifun; M_Cnd = Cnd; M_valE = valE; M_valA = valA; M_dstE = dstE; M_dstM = dstM; }
static string Get_Ins(Control.Codes code, long fun) { long nm = (long)code; for (int i = 0; i < 31; i++) { if (instr[i].icode == nm && instr[i].ifun == fun) { return(instr[i].ins); } } return("NOP"); }
static public void Updata(Control.States state, Control.Codes icode, long ifun, long valC, long valA, long valB, Control.Registers dstE, Control.Registers dstM, Control.Registers srcA, Control.Registers srcB) { E_state = state; E_icode = icode; E_ifun = ifun; E_valC = valC; E_valA = valA; E_valB = valB; E_dstE = dstE; E_dstM = dstM; E_srcA = srcA; E_srcB = srcB; }
static public void Work() { long r0 = 0, r1 = 0; long valC = 0; f_PC = SelectPC(); Read_b(ref r0, ref r1); f_icode = (Control.Codes)r0; f_ifun = r1; r0 = r1 = 15; f_state = Control.States.SAOK; switch (f_icode) { case Control.Codes.IHALT: f_state = Control.States.SHLT; break; case Control.Codes.INOP: break; case Control.Codes.IRRMOVQ: Read_b(ref r0, ref r1); break; case Control.Codes.IIRMOVQ: Read_b(ref r0, ref r1); Read_d(ref valC); break; case Control.Codes.IRMMOVQ: Read_b(ref r0, ref r1); Read_d(ref valC); break; case Control.Codes.IMRMOVQ: Read_b(ref r0, ref r1); Read_d(ref valC); break; case Control.Codes.IOPQ: Read_b(ref r0, ref r1); break; case Control.Codes.IJXX: Read_d(ref valC); break; case Control.Codes.ICALL: Read_d(ref valC); break; case Control.Codes.IRET: break; case Control.Codes.IPUSHQ: Read_b(ref r0, ref r1); break; case Control.Codes.IPOPQ: Read_b(ref r0, ref r1); break; case Control.Codes.IIOPQ: Read_b(ref r0, ref r1); Read_d(ref valC); break; default: f_state = Control.States.SINS; f_icode = Control.Codes.IHALT; f_ifun = 0; break; } f_rA = (Control.Registers)r0; f_rB = (Control.Registers)r1; f_valC = valC; f_valP = f_PC; f_predPC = PredPC(); if (f_icode != Control.Codes.IOPQ && f_icode != Control.Codes.IJXX && f_icode != Control.Codes.IRRMOVQ && f_icode != Control.Codes.IIOPQ) { if (f_ifun != 0) { f_state = Control.States.SINS; } } else { if ((f_icode == Control.Codes.IOPQ || f_icode == Control.Codes.IIOPQ) && f_ifun > 3) { f_state = Control.States.SINS; } else if (f_ifun > 6) { f_state = Control.States.SINS; } } if ((f_icode == Control.Codes.IRRMOVQ || f_icode == Control.Codes.IRMMOVQ || f_icode == Control.Codes.IMRMOVQ || f_icode == Control.Codes.IOPQ) && (f_rA == Control.Registers.RNONE || f_rB == Control.Registers.RNONE)) { f_state = Control.States.SINS; } if ((f_icode == Control.Codes.IIRMOVQ || f_icode == Control.Codes.IIOPQ) && (f_rA != Control.Registers.RNONE || f_rB == Control.Registers.RNONE)) { f_state = Control.States.SINS; } if ((f_icode == Control.Codes.IPUSHQ || f_icode == Control.Codes.IPOPQ) && (f_rA == Control.Registers.RNONE || f_rB != Control.Registers.RNONE)) { f_state = Control.States.SINS; } }