Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.68 KB | None | 0 0
  1. instrJAL(void)
  2. {
  3.  
  4.     MemType rd = (getMEMC(getPC()) & 0xF80) >> 7;
  5.     MemType offset_20 = (getMEMC(getPC()) & 0x80000000) >> 31;
  6.     MemType offset_H = (getMEMC(getPC()) & 0x000FF000) >> 12;
  7.     MemType offset_L = (getMEMC(getPC()) & 0x7FE00000) >> 21;
  8.     MemType offset_11 = (getMEMC(getPC()) & 0x00100000) >> 20;
  9.     MemType offset_u = (offset_20 << 20) + (offset_H << 12) + (offset_11 << 11) + (offset_L << 1);
  10.  
  11.     printf("CODE = %x\r\n", getMEMC(getPC()));
  12.     printf("offset = %x\r\n", offset_u);
  13.     logPrintPC(getPC());
  14.     logPrintOpcode(getMEMC(getPC()));
  15.     char buf[128];
  16.     sprintf(buf, "JAL:  rd%d, ", rd);
  17.     logPrint(buf);
  18.  
  19.     if(offset_20){
  20.         sprintf(buf, "-%d (rd%d)\t", ((~offset_u) + 1) & 0x000fffff, rd);
  21.         logPrint(buf);
  22.         //setRegister(rd, getPC() - (((~offset_u) + 1) & 0x000fffff));
  23.         setRegister(rd, getPC() + 4);
  24.         setPC(getPC() - (((~offset_u) + 1) & 0x000fffff));
  25.     }
  26.     else{
  27.         sprintf(buf, "%d (rd%d)\t", offset_u, rd);
  28.         logPrint(buf);
  29.         //setRegister(rd, getPC() + offset_u);
  30.         setRegister(rd, getPC() + 4);
  31.         setPC(getPC() + offset_u);
  32.  
  33.     }
  34.     //setPC(getPC() + 4);
  35.     sprintf(buf,"\t data saved in rd%d: 0x%08lx\r\n", rd, getRegister(rd));
  36.     logPrint(buf);
  37.     //incPC();
  38.  
  39.     }
  40.  
  41.  
  42. void instrSRA(void)
  43.     {
  44.         MemType rd = (getMEMC(getPC()) & 0xF80) >> 7; //odczytaj nr rejestru docelowego
  45.         MemType rs1 = (getMEMC(getPC()) & 0x000F8000) >> 15;
  46.         MemType rs2 = (getMEMC(getPC()) & 0x01F00000) >> 20; // inna maska
  47.  
  48.         MemType shift = rs2 & 0x0000001F;
  49.  
  50.         setRegister(rd, (MemType)((int32_t)rs1 >> shift));
  51.         incPC();
  52.  
  53.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement