⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mips.igen

📁 这个是LINUX下的GDB调度工具的源码
💻 IGEN
📖 第 1 页 / 共 5 页
字号:
"lh r<RT>, <OFFSET>(r<BASE>)"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  GPR[RT] = EXTEND16 (do_load (SD_, AccessLength_HALFWORD, GPR[BASE], EXTEND16 (OFFSET)));}100101,5.BASE,5.RT,16.OFFSET:NORMAL:32::LHU"lhu r<RT>, <OFFSET>(r<BASE>)"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  GPR[RT] = do_load (SD_, AccessLength_HALFWORD, GPR[BASE], EXTEND16 (OFFSET));}110000,5.BASE,5.RT,16.OFFSET:NORMAL:32::LL"ll r<RT>, <OFFSET>(r<BASE>)"*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:{  address_word base = GPR[BASE];  address_word offset = EXTEND16 (OFFSET);  {    address_word vaddr = loadstore_ea (SD_, base, offset);    address_word paddr;    int uncached;    if ((vaddr & 3) != 0)      {        SIM_CORE_SIGNAL (SD, CPU, cia, read_map, 4, vaddr, read_transfer, sim_core_unaligned_signal);      }    else      {	if (AddressTranslation(vaddr,isDATA,isLOAD,&paddr,&uncached,isTARGET,isREAL))	  {	    unsigned64 memval = 0;	    unsigned64 memval1 = 0;	    unsigned64 mask = 0x7;	    unsigned int shift = 2;	    unsigned int reverse = (ReverseEndian ? (mask >> shift) : 0);	    unsigned int bigend = (BigEndianCPU ? (mask >> shift) : 0);	    unsigned int byte;	    paddr = ((paddr & ~mask) | ((paddr & mask) ^ (reverse << shift)));	    LoadMemory(&memval,&memval1,uncached,AccessLength_WORD,paddr,vaddr,isDATA,isREAL);	    byte = ((vaddr & mask) ^ (bigend << shift));	    GPR[RT] = EXTEND32 (memval >> (8 * byte));	    LLBIT = 1;	  }      }  }}110100,5.BASE,5.RT,16.OFFSET:NORMAL:64::LLD"lld r<RT>, <OFFSET>(r<BASE>)"*mipsIII:*mipsIV:*mipsV:*mips64:*vr4100:*vr5000:{  address_word base = GPR[BASE];  address_word offset = EXTEND16 (OFFSET);  check_u64 (SD_, instruction_0);  {    address_word vaddr = loadstore_ea (SD_, base, offset);    address_word paddr;    int uncached;    if ((vaddr & 7) != 0)      {	SIM_CORE_SIGNAL (SD, CPU, cia, read_map, 8, vaddr, read_transfer, sim_core_unaligned_signal);      }    else      {	if (AddressTranslation(vaddr,isDATA,isLOAD,&paddr,&uncached,isTARGET,isREAL))	  {	    unsigned64 memval = 0;	    unsigned64 memval1 = 0;	    LoadMemory(&memval,&memval1,uncached,AccessLength_DOUBLEWORD,paddr,vaddr,isDATA,isREAL);	    GPR[RT] = memval;	    LLBIT = 1;	  }      }  }}001111,00000,5.RT,16.IMMEDIATE:NORMAL:32::LUI"lui r<RT>, %#lx<IMMEDIATE>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  TRACE_ALU_INPUT1 (IMMEDIATE);  GPR[RT] = EXTEND32 (IMMEDIATE << 16);  TRACE_ALU_RESULT (GPR[RT]);}100011,5.BASE,5.RT,16.OFFSET:NORMAL:32::LW"lw r<RT>, <OFFSET>(r<BASE>)"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  GPR[RT] = EXTEND32 (do_load (SD_, AccessLength_WORD, GPR[BASE], EXTEND16 (OFFSET)));}1100,ZZ!0!1!3,5.BASE,5.RT,16.OFFSET:NORMAL:32::LWCz"lwc<ZZ> r<RT>, <OFFSET>(r<BASE>)"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  COP_LW (ZZ, RT, do_load (SD_, AccessLength_WORD, GPR[BASE], EXTEND16 (OFFSET)));}100010,5.BASE,5.RT,16.OFFSET:NORMAL:32::LWL"lwl r<RT>, <OFFSET>(r<BASE>)"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  GPR[RT] = EXTEND32 (do_load_left (SD_, AccessLength_WORD, GPR[BASE], EXTEND16 (OFFSET), GPR[RT]));}100110,5.BASE,5.RT,16.OFFSET:NORMAL:32::LWR"lwr r<RT>, <OFFSET>(r<BASE>)"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  GPR[RT] = EXTEND32 (do_load_right (SD_, AccessLength_WORD, GPR[BASE], EXTEND16 (OFFSET), GPR[RT]));}100111,5.BASE,5.RT,16.OFFSET:NORMAL:64::LWU"lwu r<RT>, <OFFSET>(r<BASE>)"*mipsIII:*mipsIV:*mipsV:*mips64:*vr4100:*vr5000:{  check_u64 (SD_, instruction_0);  GPR[RT] = do_load (SD_, AccessLength_WORD, GPR[BASE], EXTEND16 (OFFSET));}011100,5.RS,5.RT,00000,00000,000000:SPECIAL2:32::MADD"madd r<RS>, r<RT>"*mips32:*mips64:*vr5500:{  signed64 temp;  check_mult_hilo (SD_, HIHISTORY, LOHISTORY);  if (NotWordValue (GPR[RS]) || NotWordValue (GPR[RT]))    Unpredictable ();  TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);  temp = (U8_4 (VL4_8 (HI), VL4_8 (LO))          + ((signed64) EXTEND32 (GPR[RT]) * (signed64) EXTEND32 (GPR[RS])));  LO = EXTEND32 (temp);  HI = EXTEND32 (VH4_8 (temp));  TRACE_ALU_RESULT2 (HI, LO);}011100,5.RS,5.RT,00000,00000,000001:SPECIAL2:32::MADDU"maddu r<RS>, r<RT>"*mips32:*mips64:*vr5500:{  unsigned64 temp;  check_mult_hilo (SD_, HIHISTORY, LOHISTORY);  if (NotWordValue (GPR[RS]) || NotWordValue (GPR[RT]))    Unpredictable ();  TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);  temp = (U8_4 (VL4_8 (HI), VL4_8 (LO))          + ((unsigned64) VL4_8 (GPR[RS]) * (unsigned64) VL4_8 (GPR[RT])));  LO = EXTEND32 (temp);  HI = EXTEND32 (VH4_8 (temp));  TRACE_ALU_RESULT2 (HI, LO);}:function:::void:do_mfhi:int rd{  check_mf_hilo (SD_, HIHISTORY, LOHISTORY);  TRACE_ALU_INPUT1 (HI);  GPR[rd] = HI;  TRACE_ALU_RESULT (GPR[rd]);}000000,0000000000,5.RD,00000,010000:SPECIAL:32::MFHI"mfhi r<RD>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  do_mfhi (SD_, RD);}:function:::void:do_mflo:int rd{  check_mf_hilo (SD_, LOHISTORY, HIHISTORY);  TRACE_ALU_INPUT1 (LO);  GPR[rd] = LO;  TRACE_ALU_RESULT (GPR[rd]);}000000,0000000000,5.RD,00000,010010:SPECIAL:32::MFLO"mflo r<RD>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  do_mflo (SD_, RD);}000000,5.RS,5.RT,5.RD,00000,001011:SPECIAL:32::MOVN"movn r<RD>, r<RS>, r<RT>"*mipsIV:*mipsV:*mips32:*mips64:*vr5000:{  if (GPR[RT] != 0)    {      GPR[RD] = GPR[RS];      TRACE_ALU_RESULT (GPR[RD]);    }}000000,5.RS,5.RT,5.RD,00000,001010:SPECIAL:32::MOVZ"movz r<RD>, r<RS>, r<RT>"*mipsIV:*mipsV:*mips32:*mips64:*vr5000:{  if (GPR[RT] == 0)    {      GPR[RD] = GPR[RS];      TRACE_ALU_RESULT (GPR[RD]);    }}011100,5.RS,5.RT,00000,00000,000100:SPECIAL2:32::MSUB"msub r<RS>, r<RT>"*mips32:*mips64:*vr5500:{  signed64 temp;  check_mult_hilo (SD_, HIHISTORY, LOHISTORY);  if (NotWordValue (GPR[RS]) || NotWordValue (GPR[RT]))    Unpredictable ();  TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);  temp = (U8_4 (VL4_8 (HI), VL4_8 (LO))          - ((signed64) EXTEND32 (GPR[RT]) * (signed64) EXTEND32 (GPR[RS])));  LO = EXTEND32 (temp);  HI = EXTEND32 (VH4_8 (temp));  TRACE_ALU_RESULT2 (HI, LO);}011100,5.RS,5.RT,00000,00000,000101:SPECIAL2:32::MSUBU"msubu r<RS>, r<RT>"*mips32:*mips64:*vr5500:{  unsigned64 temp;  check_mult_hilo (SD_, HIHISTORY, LOHISTORY);  if (NotWordValue (GPR[RS]) || NotWordValue (GPR[RT]))    Unpredictable ();  TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);  temp = (U8_4 (VL4_8 (HI), VL4_8 (LO))          - ((unsigned64) VL4_8 (GPR[RS]) * (unsigned64) VL4_8 (GPR[RT])));  LO = EXTEND32 (temp);  HI = EXTEND32 (VH4_8 (temp));  TRACE_ALU_RESULT2 (HI, LO);}000000,5.RS,000000000000000,010001:SPECIAL:32::MTHI"mthi r<RS>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  check_mt_hilo (SD_, HIHISTORY);  HI = GPR[RS];}000000,5.RS,000000000000000,010011:SPECIAL:32::MTLO"mtlo r<RS>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  check_mt_hilo (SD_, LOHISTORY);  LO = GPR[RS];}011100,5.RS,5.RT,5.RD,00000,000010:SPECIAL2:32::MUL"mul r<RD>, r<RS>, r<RT>"*mips32:*mips64:*vr5500:{  signed64 prod;  if (NotWordValue (GPR[RS]) || NotWordValue (GPR[RT]))    Unpredictable ();  TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]);  prod = (((signed64)(signed32) GPR[RS])          * ((signed64)(signed32) GPR[RT]));  GPR[RD] = EXTEND32 (VL4_8 (prod));  TRACE_ALU_RESULT (GPR[RD]);}:function:::void:do_mult:int rs, int rt, int rd{  signed64 prod;  check_mult_hilo (SD_, HIHISTORY, LOHISTORY);  if (NotWordValue (GPR[rs]) || NotWordValue (GPR[rt]))    Unpredictable ();  TRACE_ALU_INPUT2 (GPR[rs], GPR[rt]);  prod = (((signed64)(signed32) GPR[rs])	  * ((signed64)(signed32) GPR[rt]));  LO = EXTEND32 (VL4_8 (prod));  HI = EXTEND32 (VH4_8 (prod));  if (rd != 0)    GPR[rd] = LO;  TRACE_ALU_RESULT2 (HI, LO);}000000,5.RS,5.RT,0000000000,011000:SPECIAL:32::MULT"mult r<RS>, r<RT>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:{  do_mult (SD_, RS, RT, 0);}000000,5.RS,5.RT,5.RD,00000,011000:SPECIAL:32::MULT"mult r<RS>, r<RT>":RD == 0"mult r<RD>, r<RS>, r<RT>"*vr5000:*r3900:{  do_mult (SD_, RS, RT, RD);}:function:::void:do_multu:int rs, int rt, int rd{  unsigned64 prod;  check_mult_hilo (SD_, HIHISTORY, LOHISTORY);  if (NotWordValue (GPR[rs]) || NotWordValue (GPR[rt]))    Unpredictable ();  TRACE_ALU_INPUT2 (GPR[rs], GPR[rt]);  prod = (((unsigned64)(unsigned32) GPR[rs])	  * ((unsigned64)(unsigned32) GPR[rt]));  LO = EXTEND32 (VL4_8 (prod));  HI = EXTEND32 (VH4_8 (prod));  if (rd != 0)    GPR[rd] = LO;  TRACE_ALU_RESULT2 (HI, LO);}000000,5.RS,5.RT,0000000000,011001:SPECIAL:32::MULTU"multu r<RS>, r<RT>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:{  do_multu (SD_, RS, RT, 0);}000000,5.RS,5.RT,5.RD,00000,011001:SPECIAL:32::MULTU"multu r<RS>, r<RT>":RD == 0"multu r<RD>, r<RS>, r<RT>"*vr5000:*r3900:{  do_multu (SD_, RS, RT, RD);}:function:::void:do_nor:int rs, int rt, int rd{  TRACE_ALU_INPUT2 (GPR[rs], GPR[rt]);  GPR[rd] = ~ (GPR[rs] | GPR[rt]);  TRACE_ALU_RESULT (GPR[rd]);}000000,5.RS,5.RT,5.RD,00000,100111:SPECIAL:32::NOR"nor r<RD>, r<RS>, r<RT>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  do_nor (SD_, RS, RT, RD);}:function:::void:do_or:int rs, int rt, int rd{  TRACE_ALU_INPUT2 (GPR[rs], GPR[rt]);  GPR[rd] = (GPR[rs] | GPR[rt]);  TRACE_ALU_RESULT (GPR[rd]);}000000,5.RS,5.RT,5.RD,00000,100101:SPECIAL:32::OR"or r<RD>, r<RS>, r<RT>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  do_or (SD_, RS, RT, RD);}:function:::void:do_ori:int rs, int rt, unsigned immediate{  TRACE_ALU_INPUT2 (GPR[rs], immediate);  GPR[rt] = (GPR[rs] | immediate);  TRACE_ALU_RESULT (GPR[rt]);}001101,5.RS,5.RT,16.IMMEDIATE:NORMAL:32::ORI"ori r<RT>, r<RS>, %#lx<IMMEDIATE>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{  do_ori (SD_, RS, RT, IMMEDIATE);}110011,5.BASE,5.HINT,16.OFFSET:NORMAL:32::PREF"pref <HINT>, <OFFSET>(r<BASE>)"*mipsIV:*mipsV:*mips32:*mips64:*vr5000:{  address_word base = GPR[BASE];  address_word offset = EXTEND16 (OFFSET);  {    address_word vaddr = loadstore_ea (SD_, base, offset);    address_word paddr;    int uncached;    {      if (AddressTranslation(vaddr,isDATA,isLOAD,&paddr,&uncached,isTARGET,isREAL))	Prefetch(uncached,paddr,vaddr,isDATA,HINT);    }  }}:function:::void:do_store:unsigned access, address_word base, address_word offset, unsigned_word word{  address_word mask = (WITH_TARGET_WORD_BITSIZE == 64 ? 0x7 : 0x3);  address_word reverseendian = (ReverseEndian ? (mask ^ access) : 0);  address_word bigendiancpu = (BigEndianCPU ? (mask ^ access) : 0);  unsigned int byte;  address_word paddr;  int uncached;  unsigned64 memval;  address_word vaddr;  vaddr = loadstore_ea (SD_, base, offset);  if ((vaddr & access) != 0)    {      SIM_CORE_SIGNAL (SD, STATE_CPU(SD, 0), cia, read_map, access+1, vaddr, write_transfer, sim_core_unaligned_signal);    }  AddressTranslation (vaddr, isDATA, isSTORE, &paddr, &uncached, isTARGET, isREAL);  paddr = ((paddr & ~mask) | ((paddr & mask) ^ reverseendian));  byte = ((vaddr & mask) ^ bigendiancpu);  memval = (word << (8 * byte));  StoreMemory (uncached, access, memval, 0, paddr, vaddr, isREAL);}:function:::void:do_store_left:unsigned access, address_word base, address_word offset, unsigned_word rt{  address_word mask = (WITH_TARGET_WORD_BITSIZE == 64 ? 0x7 : 0x3);  address_word reverseendian = (ReverseEndian ? -1 : 0);  address_word bigendiancpu = (BigEndianCPU ? -1 : 0);  unsigned int byte;  unsigned int word;  address_word paddr;  int uncached;  unsigned64 memval;  address_word vaddr;  int nr_lhs_bits;  int nr_rhs_bits;  vaddr = loadstore_ea (SD_, base, offset);  AddressTranslation (vaddr, isDATA, isSTORE, &paddr, &uncached, isTARGET, isREAL);  paddr = (paddr ^ (reverseendian & mask));  if (BigEndianMem == 0)    paddr = paddr & ~access;  /* compute where within the word/mem we are */  byte = ((vaddr ^ bigendiancpu) & access); /* 0..access */  word = ((vaddr ^ bigendiancpu) & (mask & ~access)) / (access + 1); /* 0..1 */  nr_lhs_bits = 8 * byte + 8;  nr_rhs_bits = 8 * access - 8 * byte;  /* nr_lhs_bits + nr_rhs_bits == 8 * (accesss + 1) */  /* fprintf (stderr, "s[wd]l: 0x%08lx%08lx 0x%08lx%08lx %d:%d %d+%d\n",	   (long) ((unsigned64) vaddr >> 32), (long) vaddr,	   (long) ((unsigned64) paddr >> 32), (long) paddr,	   word, byte, nr_lhs_bits, nr_rhs_bits); */  if (word == 0)    {      memval = (rt >> nr_rhs_bits);    }  else    {      memval = (rt << nr_lhs_bits);    }  /* fprintf (stderr, "s[wd]l: 0x%08lx%08lx -> 0x%08lx%08lx\n",	   (long) ((unsigned64) rt >> 32), (long) rt,	   (long) ((unsigned64) memval >> 32), (long) memval); */  StoreMemory (uncached, byte, memval, 0, paddr, vaddr, isREAL);}:function:::void:do_store_right:unsigned access, address_word base, address_word offset, unsigned_word rt

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -