From 85c84f0d2769807aaa38e368772e1763a25a32fb Mon Sep 17 00:00:00 2001 From: Max Chou Date: Fri, 29 May 2026 11:15:34 -0700 Subject: [PATCH] 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 --- riscv/insns/pm2wsub_h.h | 4 ++-- riscv/insns/pm2wsuba_h.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/riscv/insns/pm2wsub_h.h b/riscv/insns/pm2wsub_h.h index 903cbe30..e960c404 100644 --- a/riscv/insns/pm2wsub_h.h +++ b/riscv/insns/pm2wsub_h.h @@ -1,7 +1,7 @@ require_rv32; P_WIDEN_REDUCTION_LOOP(32, 16, false, false, { if (j & 1) - p_res += p_rs1 * p_rs2; - else p_res -= p_rs1 * p_rs2; + else + p_res += p_rs1 * p_rs2; }) \ No newline at end of file diff --git a/riscv/insns/pm2wsuba_h.h b/riscv/insns/pm2wsuba_h.h index 600b77e2..dae5c0a7 100644 --- a/riscv/insns/pm2wsuba_h.h +++ b/riscv/insns/pm2wsuba_h.h @@ -1,7 +1,7 @@ require_rv32; P_WIDEN_REDUCTION_LOOP(32, 16, true, false, { if (j & 1) - p_res += p_rs1 * p_rs2; - else p_res -= p_rs1 * p_rs2; + else + p_res += p_rs1 * p_rs2; }) \ No newline at end of file