Browse Source

rvp: refine the sign-extension and extration of mulplication result

Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
pull/2310/head
Chih-Min Chao 3 months ago
parent
commit
38886e3dc7
  1. 3
      riscv/insns/mqrwacc.h
  2. 3
      riscv/insns/mqwacc.h
  3. 3
      riscv/insns/pmqrwacc_h.h
  4. 3
      riscv/insns/pmqwacc_h.h

3
riscv/insns/mqrwacc.h

@ -1,3 +1,4 @@
require_extension('P'); require_extension('P');
require_rv32; require_rv32;
WRITE_P_RD_PAIR(P_RD_PAIR + (((sreg_t)RS1*(sreg_t)RS2 + 0x40000000) >> 31)); int64_t tmp = (((int128_t)(int32_t)RS1 * (int32_t)RS2) + (1 << 30)) >> 31;
WRITE_P_RD_PAIR(P_RD_PAIR + tmp);

3
riscv/insns/mqwacc.h

@ -1,3 +1,4 @@
require_extension('P'); require_extension('P');
require_rv32; require_rv32;
WRITE_P_RD_PAIR(P_RD_PAIR + (((sreg_t)RS1*(sreg_t)RS2) >> 31)); int64_t tmp = (((int128_t)(int32_t)RS1 * (int32_t)RS2)) >> 31;
WRITE_P_RD_PAIR((P_RD_PAIR + tmp));

3
riscv/insns/pmqrwacc_h.h

@ -1,4 +1,5 @@
require_rv32; require_rv32;
P_WIDEN_RD_RS1_RS2_LOOP(16, 16, { P_WIDEN_RD_RS1_RS2_LOOP(16, 16, {
p_rd += (p_rs1 * p_rs2 + 0x4000) >> 15; int64_t val = ((int64_t)(int16_t)p_rs1 * (int64_t)(int16_t)p_rs2 + 0x4000) >> 15;
p_rd += val;
}) })

3
riscv/insns/pmqwacc_h.h

@ -1,4 +1,5 @@
require_rv32; require_rv32;
P_WIDEN_RD_RS1_RS2_LOOP(16, 16, { P_WIDEN_RD_RS1_RS2_LOOP(16, 16, {
p_rd += (p_rs1 * p_rs2) >> 15; int64_t val = ((int64_t)(int16_t)p_rs1 * (int64_t)(int16_t)p_rs2) >> 15;
p_rd += val;
}) })
Loading…
Cancel
Save