fix RVM description bugs
This commit is contained in:
Submodule gen_input/CoreDSL-Instruction-Set-Description updated: eab89af46b...a5f12b0659
@@ -486,7 +486,7 @@ private:
|
|||||||
// execute instruction
|
// execute instruction
|
||||||
{
|
{
|
||||||
int32_t new_pc = *(X+rs1) + (int16_t)sext<12>(imm);
|
int32_t new_pc = *(X+rs1) + (int16_t)sext<12>(imm);
|
||||||
if(rd != 0) *(X+rd) = *PC + 2;
|
if(rd != 0) *(X+rd) = *PC + 4;
|
||||||
pc_assign(*NEXT_PC) = new_pc & ~ 0x1;
|
pc_assign(*NEXT_PC) = new_pc & ~ 0x1;
|
||||||
}
|
}
|
||||||
// post execution stuff
|
// post execution stuff
|
||||||
@@ -2155,7 +2155,7 @@ private:
|
|||||||
// execute instruction
|
// execute instruction
|
||||||
{
|
{
|
||||||
if(rd != 0) {
|
if(rd != 0) {
|
||||||
int64_t res = (int32_t)*(X+rs1) * (int32_t)*(X+rs2);
|
int64_t res = (int64_t)(int32_t)*(X+rs1) * (int64_t)(int32_t)*(X+rs2);
|
||||||
*(X+rd) = (uint32_t)res;
|
*(X+rd) = (uint32_t)res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2193,7 +2193,7 @@ private:
|
|||||||
// execute instruction
|
// execute instruction
|
||||||
{
|
{
|
||||||
if(rd != 0) {
|
if(rd != 0) {
|
||||||
int64_t res = (int32_t)*(X+rs1) * (int32_t)*(X+rs2);
|
int64_t res = (int64_t)(int32_t)*(X+rs1) * (int64_t)(int32_t)*(X+rs2);
|
||||||
*(X+rd) = (uint32_t)(res >> traits::XLEN);
|
*(X+rd) = (uint32_t)(res >> traits::XLEN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2231,8 +2231,8 @@ private:
|
|||||||
// execute instruction
|
// execute instruction
|
||||||
{
|
{
|
||||||
if(rd != 0) {
|
if(rd != 0) {
|
||||||
int64_t res = (int32_t)*(X+rs1) * (uint32_t)*(X+rs2);
|
int64_t res = (int64_t)(int32_t)*(X+rs1) * (uint64_t)*(X+rs2);
|
||||||
*(X+rd) = (uint32_t)res;
|
*(X+rd) = (uint32_t)(res >> traits::XLEN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// post execution stuff
|
// post execution stuff
|
||||||
@@ -2269,8 +2269,8 @@ private:
|
|||||||
// execute instruction
|
// execute instruction
|
||||||
{
|
{
|
||||||
if(rd != 0) {
|
if(rd != 0) {
|
||||||
uint64_t res = (uint32_t)*(X+rs1) * (uint32_t)*(X+rs2);
|
uint64_t res = (uint64_t)*(X+rs1) * (uint64_t)*(X+rs2);
|
||||||
*(X+rd) = (uint32_t)res;
|
*(X+rd) = (uint32_t)(res >> traits::XLEN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// post execution stuff
|
// post execution stuff
|
||||||
|
Reference in New Issue
Block a user