Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- instrJAL(void)
- {
- MemType rd = (getMEMC(getPC()) & 0xF80) >> 7;
- MemType offset_20 = (getMEMC(getPC()) & 0x80000000) >> 31;
- MemType offset_H = (getMEMC(getPC()) & 0x000FF000) >> 12;
- MemType offset_L = (getMEMC(getPC()) & 0x7FE00000) >> 21;
- MemType offset_11 = (getMEMC(getPC()) & 0x00100000) >> 20;
- MemType offset_u = (offset_20 << 20) + (offset_H << 12) + (offset_11 << 11) + (offset_L << 1);
- printf("CODE = %x\r\n", getMEMC(getPC()));
- printf("offset = %x\r\n", offset_u);
- logPrintPC(getPC());
- logPrintOpcode(getMEMC(getPC()));
- char buf[128];
- sprintf(buf, "JAL: rd%d, ", rd);
- logPrint(buf);
- if(offset_20){
- sprintf(buf, "-%d (rd%d)\t", ((~offset_u) + 1) & 0x000fffff, rd);
- logPrint(buf);
- //setRegister(rd, getPC() - (((~offset_u) + 1) & 0x000fffff));
- setRegister(rd, getPC() + 4);
- setPC(getPC() - (((~offset_u) + 1) & 0x000fffff));
- }
- else{
- sprintf(buf, "%d (rd%d)\t", offset_u, rd);
- logPrint(buf);
- //setRegister(rd, getPC() + offset_u);
- setRegister(rd, getPC() + 4);
- setPC(getPC() + offset_u);
- }
- //setPC(getPC() + 4);
- sprintf(buf,"\t data saved in rd%d: 0x%08lx\r\n", rd, getRegister(rd));
- logPrint(buf);
- //incPC();
- }
- void instrSRA(void)
- {
- MemType rd = (getMEMC(getPC()) & 0xF80) >> 7; //odczytaj nr rejestru docelowego
- MemType rs1 = (getMEMC(getPC()) & 0x000F8000) >> 15;
- MemType rs2 = (getMEMC(getPC()) & 0x01F00000) >> 20; // inna maska
- MemType shift = rs2 & 0x0000001F;
- setRegister(rd, (MemType)((int32_t)rs1 >> shift));
- incPC();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement