|
|
|
@ -379,9 +379,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = (int32_t)imm;
|
|
|
|
@ -411,9 +412,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *PC + (int32_t)imm;
|
|
|
|
@ -443,9 +445,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -479,9 +482,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -516,9 +520,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(*(X+rs1) == *(X+rs2)) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<13>(imm);
|
|
|
|
@ -549,9 +554,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(*(X+rs1) != *(X+rs2)) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<13>(imm);
|
|
|
|
@ -582,9 +588,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if((int32_t)*(X+rs1) < (int32_t)*(X+rs2)) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<13>(imm);
|
|
|
|
@ -615,9 +622,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if((int32_t)*(X+rs1) >= (int32_t)*(X+rs2)) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<13>(imm);
|
|
|
|
@ -648,9 +656,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(*(X+rs1) < *(X+rs2)) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<13>(imm);
|
|
|
|
@ -681,9 +690,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(*(X+rs1) >= *(X+rs2)) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<13>(imm);
|
|
|
|
@ -714,9 +724,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -750,9 +761,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -790,9 +802,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -830,9 +843,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -866,9 +880,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -906,9 +921,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
writeSpace1(traits::MEM, *(X+rs1) + (int16_t)sext<12>(imm), (int8_t)*(X+rs2));
|
|
|
|
@ -939,9 +955,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -976,9 +993,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -1013,9 +1031,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *(X+rs1) + (int16_t)sext<12>(imm);
|
|
|
|
@ -1046,9 +1065,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = (int32_t)*(X+rs1) < (int16_t)sext<12>(imm)? 1 : 0;
|
|
|
|
@ -1079,9 +1099,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *(X+rs1) < (int16_t)sext<12>(imm)? 1 : 0;
|
|
|
|
@ -1112,9 +1133,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *(X+rs1) ^ (int16_t)sext<12>(imm);
|
|
|
|
@ -1145,9 +1167,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *(X+rs1) | (int16_t)sext<12>(imm);
|
|
|
|
@ -1178,9 +1201,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *(X+rs1) & (int16_t)sext<12>(imm);
|
|
|
|
@ -1211,9 +1235,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(shamt > 31) {
|
|
|
|
@ -1249,9 +1274,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(shamt > 31) {
|
|
|
|
@ -1287,9 +1313,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(shamt > 31) {
|
|
|
|
@ -1325,9 +1352,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *(X+rs1) + *(X+rs2);
|
|
|
|
@ -1358,9 +1386,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *(X+rs1) - *(X+rs2);
|
|
|
|
@ -1391,9 +1420,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *(X+rs1) << (*(X+rs2) & (traits::XLEN - 1));
|
|
|
|
@ -1424,9 +1454,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = (int32_t)*(X+rs1) < (int32_t)*(X+rs2)? 1 : 0;
|
|
|
|
@ -1457,9 +1488,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = (uint32_t)*(X+rs1) < (uint32_t)*(X+rs2)? 1 : 0;
|
|
|
|
@ -1490,9 +1522,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *(X+rs1) ^ *(X+rs2);
|
|
|
|
@ -1523,9 +1556,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *(X+rs1) >> (*(X+rs2) & (traits::XLEN - 1));
|
|
|
|
@ -1556,9 +1590,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = (int32_t)*(X+rs1) >> (*(X+rs2) & (traits::XLEN - 1));
|
|
|
|
@ -1589,9 +1624,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *(X+rs1) | *(X+rs2);
|
|
|
|
@ -1622,9 +1658,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd != 0) *(X+rd) = *(X+rs1) & *(X+rs2);
|
|
|
|
@ -1656,9 +1693,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
writeSpace1(traits::FENCE, traits::fence, pred << 4 | succ);
|
|
|
|
@ -1689,9 +1726,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
writeSpace2(traits::FENCE, traits::fencei, imm);
|
|
|
|
@ -1716,9 +1753,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
raise(0, 11);
|
|
|
|
@ -1743,9 +1780,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
raise(0, 3);
|
|
|
|
@ -1770,9 +1807,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
leave(0);
|
|
|
|
@ -1797,9 +1834,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
leave(1);
|
|
|
|
@ -1824,9 +1861,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
leave(3);
|
|
|
|
@ -1851,9 +1888,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
wait(1);
|
|
|
|
@ -1883,9 +1920,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -1919,9 +1956,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -1962,9 +2000,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2000,9 +2039,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2038,9 +2078,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2074,9 +2115,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2111,9 +2153,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2148,9 +2191,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2186,9 +2230,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2224,9 +2269,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2262,9 +2308,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2300,9 +2347,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2342,9 +2390,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2380,9 +2429,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2422,9 +2472,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 4;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2459,9 +2510,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2495,9 +2547,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2532,9 +2585,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2568,9 +2622,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
*(X+rs1) = *(X+rs1) + (int8_t)sext<6>(imm);
|
|
|
|
@ -2596,9 +2651,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2628,9 +2683,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2663,9 +2719,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2697,9 +2754,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2732,9 +2790,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(nzimm) *(X+2) = *(X+2) + (int16_t)sext<10>(nzimm);
|
|
|
|
@ -2765,9 +2824,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2800,9 +2860,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(shamt) {
|
|
|
|
@ -2839,9 +2900,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2874,9 +2936,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2909,9 +2972,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2944,9 +3008,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -2979,9 +3044,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -3013,9 +3079,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
pc_assign(*NEXT_PC) = *PC + (int16_t)sext<12>(imm);
|
|
|
|
@ -3045,9 +3111,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(*(X+(rs1 + 8)) == 0) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<9>(imm);
|
|
|
|
@ -3077,9 +3144,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(*(X+(rs1 + 8)) != 0) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<9>(imm);
|
|
|
|
@ -3109,9 +3177,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(nzuimm) *(X+rs1) = *(X+rs1) << nzuimm;
|
|
|
|
@ -3141,9 +3210,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rd) {
|
|
|
|
@ -3177,9 +3247,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
*(X+rd) = *(X+rs2);
|
|
|
|
@ -3208,9 +3279,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
if(rs1) pc_assign(*NEXT_PC) = *(X+rs1);
|
|
|
|
@ -3241,9 +3313,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
*(X+rd) = *(X+rd) + *(X+rs2);
|
|
|
|
@ -3272,9 +3345,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -3302,9 +3376,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
raise(0, 3);
|
|
|
|
@ -3334,9 +3408,10 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
{
|
|
|
|
@ -3364,9 +3439,9 @@ private:
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
// prepare execution
|
|
|
|
|
uint32_t* X = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::X0]);
|
|
|
|
|
uint32_t* PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::PC]);
|
|
|
|
|
uint32_t* NEXT_PC = reinterpret_cast<uint32_t*>(this->regs_base_ptr+arch::traits<ARCH>::reg_byte_offsets[arch::traits<ARCH>::NEXT_PC]);
|
|
|
|
|
// used registers// calculate next pc value
|
|
|
|
|
*NEXT_PC = *PC + 2;
|
|
|
|
|
// execute instruction
|
|
|
|
|
raise(0, 2);
|
|
|
|
@ -3435,6 +3510,9 @@ vm_impl<ARCH>::vm_impl(ARCH &core, unsigned core_id, unsigned cluster_id)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inline bool is_count_limit_enabled(finish_cond_e cond){
|
|
|
|
|
return (cond & finish_cond_e::COUNT_LIMIT) == finish_cond_e::COUNT_LIMIT;
|
|
|
|
|
}
|
|
|
|
|
template <typename ARCH>
|
|
|
|
|
typename vm_base<ARCH>::virt_addr_t vm_impl<ARCH>::execute_inst(finish_cond_e cond, virt_addr_t start, uint64_t icount_limit){
|
|
|
|
|
// we fetch at max 4 byte, alignment is 2
|
|
|
|
@ -3443,8 +3521,7 @@ typename vm_base<ARCH>::virt_addr_t vm_impl<ARCH>::execute_inst(finish_cond_e co
|
|
|
|
|
auto *const data = (uint8_t *)&insn;
|
|
|
|
|
auto pc=start;
|
|
|
|
|
while(!this->core.should_stop() &&
|
|
|
|
|
!((cond & finish_cond_e::COUNT_LIMIT) == finish_cond_e::COUNT_LIMIT &&
|
|
|
|
|
this->core.get_icount() < icount_limit)){
|
|
|
|
|
!(is_count_limit_enabled(cond) && this->core.get_icount() >= icount_limit)){
|
|
|
|
|
auto res = fetch_ins(pc, data);
|
|
|
|
|
if(res!=iss::Ok){
|
|
|
|
|
auto new_pc = super::core.enter_trap(TRAP_ID, pc.val);
|
|
|
|
|