fix RVM description bugs
This commit is contained in:
parent
80057eef32
commit
ff3fa19208
|
@ -1 +1 @@
|
||||||
Subproject commit eab89af46bd1d6485e150111db1612ce8dca984b
|
Subproject commit a5f12b0659ba668c2a8651bd23be19bab2bb6f12
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue