Browse Source

rvp: Fix packed multiply-subtract operation logic

Corrects swapped add/subtract operators in packed 2-way multiply
loop. Spec requires (p0 - p1) but implementation computed (p1 - p0).
Even elements should add, odd elements should subtract.

Fixed instructions:
- PM2WSUB.H: P-ext spec
- PM2WSUBA.H: P-ext spec

Changed: Swapped += and -= for (j & 1) conditional

Signed-off-by: Max Chou <max.chou@sifive.com>
pull/2310/head
Max Chou 2 months ago
committed by Chih-Min Chao
parent
commit
85c84f0d27
  1. 4
      riscv/insns/pm2wsub_h.h
  2. 4
      riscv/insns/pm2wsuba_h.h

4
riscv/insns/pm2wsub_h.h

@ -1,7 +1,7 @@
require_rv32; require_rv32;
P_WIDEN_REDUCTION_LOOP(32, 16, false, false, { P_WIDEN_REDUCTION_LOOP(32, 16, false, false, {
if (j & 1) if (j & 1)
p_res += p_rs1 * p_rs2;
else
p_res -= p_rs1 * p_rs2; p_res -= p_rs1 * p_rs2;
else
p_res += p_rs1 * p_rs2;
}) })

4
riscv/insns/pm2wsuba_h.h

@ -1,7 +1,7 @@
require_rv32; require_rv32;
P_WIDEN_REDUCTION_LOOP(32, 16, true, false, { P_WIDEN_REDUCTION_LOOP(32, 16, true, false, {
if (j & 1) if (j & 1)
p_res += p_rs1 * p_rs2;
else
p_res -= p_rs1 * p_rs2; p_res -= p_rs1 * p_rs2;
else
p_res += p_rs1 * p_rs2;
}) })
Loading…
Cancel
Save