Browse Source

rvp: some rv32 multiplication instructions require extra sign-extension

Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
pull/2310/head
Chih-Min Chao 1 month ago
parent
commit
f35109939a
  1. 2
      riscv/insns/mhacc.h
  2. 2
      riscv/insns/mhacc_h0.h
  3. 2
      riscv/insns/mhacc_h1.h
  4. 2
      riscv/insns/mhaccsu.h
  5. 2
      riscv/insns/mhaccsu_h0.h
  6. 2
      riscv/insns/mhaccsu_h1.h
  7. 2
      riscv/insns/mhaccu.h
  8. 2
      riscv/insns/mhracc.h
  9. 2
      riscv/insns/mhraccsu.h
  10. 2
      riscv/insns/mhraccu.h
  11. 2
      riscv/insns/mulhr.h
  12. 2
      riscv/insns/mulhrsu.h
  13. 2
      riscv/insns/mulhru.h

2
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));
WRITE_RD(sext32(RD + (mres >> 32)));

2
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));
WRITE_RD(sext32(RD + (mres >> 16)));

2
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));
WRITE_RD(sext32(RD + (mres >> 16)));

2
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));
WRITE_RD(sext32(RD + (mres >> 32)));

2
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));
WRITE_RD(sext32(RD + (mres >> 16)));

2
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));
WRITE_RD(sext32(RD + (mres >> 16)));

2
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));
WRITE_RD(sext32(RD + (mres >> 32)));

2
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);
WRITE_RD(sext32(RD + round));

2
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);
WRITE_RD(sext32(RD + round));

2
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);
WRITE_RD(sext32(RD + round));

2
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);
WRITE_RD(sext32(((mres >> 31) + 1) >> 1));

2
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);
WRITE_RD(sext32(((mres >> 31) + 1) >> 1));

2
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);
WRITE_RD(sext32(((mres >> 31) + 1) >> 1));

Loading…
Cancel
Save