diff --git a/riscv/insns/mhacc.h b/riscv/insns/mhacc.h index 77de911d..200bf492 100644 --- a/riscv/insns/mhacc.h +++ b/riscv/insns/mhacc.h @@ -1,4 +1,4 @@ require_extension('P'); require_rv32; sreg_t mres = sext32(RS1) * sext32(RS2); -WRITE_RD(RD + (mres >> 32)); \ No newline at end of file +WRITE_RD(sext32(RD + (mres >> 32))); diff --git a/riscv/insns/mhacc_h0.h b/riscv/insns/mhacc_h0.h index bb254534..058a19b9 100644 --- a/riscv/insns/mhacc_h0.h +++ b/riscv/insns/mhacc_h0.h @@ -1,4 +1,4 @@ require_extension('P'); require_rv32; sreg_t mres = sext32(RS1) * sext32(P_FIELD(RS2, 0, 16)); -WRITE_RD(RD + (mres >> 16)); \ No newline at end of file +WRITE_RD(sext32(RD + (mres >> 16))); diff --git a/riscv/insns/mhacc_h1.h b/riscv/insns/mhacc_h1.h index 7565c358..2a026de5 100644 --- a/riscv/insns/mhacc_h1.h +++ b/riscv/insns/mhacc_h1.h @@ -1,4 +1,4 @@ require_extension('P'); require_rv32; sreg_t mres = sext32(RS1) * sext32(P_FIELD(RS2, 1, 16)); -WRITE_RD(RD + (mres >> 16)); \ No newline at end of file +WRITE_RD(sext32(RD + (mres >> 16))); diff --git a/riscv/insns/mhaccsu.h b/riscv/insns/mhaccsu.h index 328355c1..53534894 100644 --- a/riscv/insns/mhaccsu.h +++ b/riscv/insns/mhaccsu.h @@ -1,4 +1,4 @@ require_extension('P'); require_rv32; sreg_t mres = sext32(RS1) * reg_t((uint32_t)RS2); -WRITE_RD(RD + (mres >> 32)); \ No newline at end of file +WRITE_RD(sext32(RD + (mres >> 32))); diff --git a/riscv/insns/mhaccsu_h0.h b/riscv/insns/mhaccsu_h0.h index d455141d..8cd6e12f 100644 --- a/riscv/insns/mhaccsu_h0.h +++ b/riscv/insns/mhaccsu_h0.h @@ -1,4 +1,4 @@ require_extension('P'); require_rv32; sreg_t mres = sext32(RS1) * (uint32_t)P_FIELD(RS2, 0, 16); -WRITE_RD(RD + (mres >> 16)); \ No newline at end of file +WRITE_RD(sext32(RD + (mres >> 16))); diff --git a/riscv/insns/mhaccsu_h1.h b/riscv/insns/mhaccsu_h1.h index d990e49b..0df57ae6 100644 --- a/riscv/insns/mhaccsu_h1.h +++ b/riscv/insns/mhaccsu_h1.h @@ -1,4 +1,4 @@ require_extension('P'); require_rv32; sreg_t mres = sext32(RS1) * (uint32_t)P_FIELD(RS2, 1, 16); -WRITE_RD(RD + (mres >> 16)); \ No newline at end of file +WRITE_RD(sext32(RD + (mres >> 16))); diff --git a/riscv/insns/mhaccu.h b/riscv/insns/mhaccu.h index e9fb8020..016292b0 100644 --- a/riscv/insns/mhaccu.h +++ b/riscv/insns/mhaccu.h @@ -1,4 +1,4 @@ require_extension('P'); require_rv32; uint64_t mres = reg_t((uint32_t)RS1) * reg_t((uint32_t)RS2); -WRITE_RD(RD + (mres >> 32)); \ No newline at end of file +WRITE_RD(sext32(RD + (mres >> 32))); diff --git a/riscv/insns/mhracc.h b/riscv/insns/mhracc.h index 902b0e56..3fcd94bf 100644 --- a/riscv/insns/mhracc.h +++ b/riscv/insns/mhracc.h @@ -2,4 +2,4 @@ require_extension('P'); require_rv32; sreg_t mres = sext32(RS1) * sext32(RS2); int32_t round = ((mres >> 31) + 1) >> 1; -WRITE_RD(RD + round); \ No newline at end of file +WRITE_RD(sext32(RD + round)); diff --git a/riscv/insns/mhraccsu.h b/riscv/insns/mhraccsu.h index 5d676ba6..f7f0ce16 100644 --- a/riscv/insns/mhraccsu.h +++ b/riscv/insns/mhraccsu.h @@ -2,4 +2,4 @@ require_extension('P'); require_rv32; sreg_t mres = sext(RS1,64) * reg_t((uint32_t)RS2); int32_t round = ((mres >> 31) + 1) >> 1; -WRITE_RD(RD + round); \ No newline at end of file +WRITE_RD(sext32(RD + round)); diff --git a/riscv/insns/mhraccu.h b/riscv/insns/mhraccu.h index 9cf5e5a4..285a47b2 100644 --- a/riscv/insns/mhraccu.h +++ b/riscv/insns/mhraccu.h @@ -2,4 +2,4 @@ require_extension('P'); require_rv32; reg_t mres = reg_t((uint32_t)RS1) * reg_t((uint32_t)RS2); uint32_t round = ((mres >> 31) + 1) >> 1; -WRITE_RD(RD + round); \ No newline at end of file +WRITE_RD(sext32(RD + round)); diff --git a/riscv/insns/mulhr.h b/riscv/insns/mulhr.h index 527d2a2f..80d6b69c 100644 --- a/riscv/insns/mulhr.h +++ b/riscv/insns/mulhr.h @@ -1,4 +1,4 @@ require_extension('P'); require_rv32; int64_t mres = sext(RS1,64) * sext(RS2,64); -WRITE_RD(((mres >> 31) + 1) >> 1); \ No newline at end of file +WRITE_RD(sext32(((mres >> 31) + 1) >> 1)); diff --git a/riscv/insns/mulhrsu.h b/riscv/insns/mulhrsu.h index bbd7619b..395802f9 100644 --- a/riscv/insns/mulhrsu.h +++ b/riscv/insns/mulhrsu.h @@ -1,4 +1,4 @@ require_extension('P'); require_rv32; sreg_t mres = sext(RS1,64) * reg_t((uint32_t)RS2); -WRITE_RD(((mres >> 31) + 1) >> 1); \ No newline at end of file +WRITE_RD(sext32(((mres >> 31) + 1) >> 1)); diff --git a/riscv/insns/mulhru.h b/riscv/insns/mulhru.h index 51cf38cb..4460f3b2 100644 --- a/riscv/insns/mulhru.h +++ b/riscv/insns/mulhru.h @@ -1,4 +1,4 @@ require_extension('P'); require_rv32; sreg_t mres = reg_t((uint32_t)RS1) * reg_t((uint32_t)RS2); -WRITE_RD(((mres >> 31) + 1) >> 1); \ No newline at end of file +WRITE_RD(sext32(((mres >> 31) + 1) >> 1));