diff options
author | Scott Johnson <scott.johnson@arilinc.com> | 2021-10-06 12:45:03 -0700 |
---|---|---|
committer | Scott Johnson <scott.johnson@arilinc.com> | 2021-10-06 12:45:03 -0700 |
commit | ee73b811d5f3b5fc899c5073646d45bd262b9c22 (patch) | |
tree | 6a95cfe2b5e88c354c20f276580a5f55054e1526 | |
parent | 894a2d772342e667e8733d83e20ff9174be7114b (diff) | |
download | spike-ee73b811d5f3b5fc899c5073646d45bd262b9c22.zip spike-ee73b811d5f3b5fc899c5073646d45bd262b9c22.tar.gz spike-ee73b811d5f3b5fc899c5073646d45bd262b9c22.tar.bz2 |
When mstatus.VS exists, P-extension instructions must respect it
Any instruction that may write vxsat will take an illegal instruction
exception if mstatus.VS exists and is Off.
In Spike today, mstatus.VS exists iff misa.V=1, which is true iff the
--isa string enables the V extension.
I went through the riscv-p-spec looking for "OV = 1" and added this
behavior to every matching instruction.
See #823 for discussion.
133 files changed, 133 insertions, 0 deletions
diff --git a/riscv/insns/kabs16.h b/riscv/insns/kabs16.h index 376e921..8d1d9b8 100644 --- a/riscv/insns/kabs16.h +++ b/riscv/insns/kabs16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_ONE_LOOP(16, { pd = ps1; if (ps1 == INT16_MIN) { diff --git a/riscv/insns/kabs32.h b/riscv/insns/kabs32.h index 9b0c227..0536aac 100644 --- a/riscv/insns/kabs32.h +++ b/riscv/insns/kabs32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_ONE_LOOP(32, { pd = ps1; diff --git a/riscv/insns/kabs8.h b/riscv/insns/kabs8.h index df42202..2e6e1f1 100644 --- a/riscv/insns/kabs8.h +++ b/riscv/insns/kabs8.h @@ -1,3 +1,4 @@ +require_vector_vs; P_ONE_LOOP(8, { pd = ps1; if (ps1 == INT8_MIN) { diff --git a/riscv/insns/kabsw.h b/riscv/insns/kabsw.h index ce0d786..3ac2339 100644 --- a/riscv/insns/kabsw.h +++ b/riscv/insns/kabsw.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); int32_t rs1 = P_W(RS1, 0); diff --git a/riscv/insns/kadd16.h b/riscv/insns/kadd16.h index 5fd2009..b6defe1 100644 --- a/riscv/insns/kadd16.h +++ b/riscv/insns/kadd16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(16, { bool sat = false; pd = (sat_add<int16_t, uint16_t>(ps1, ps2, sat)); diff --git a/riscv/insns/kadd32.h b/riscv/insns/kadd32.h index d0c53f5..1728847 100644 --- a/riscv/insns/kadd32.h +++ b/riscv/insns/kadd32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_LOOP(32, { bool sat = false; diff --git a/riscv/insns/kadd64.h b/riscv/insns/kadd64.h index eddc078..c58fff0 100644 --- a/riscv/insns/kadd64.h +++ b/riscv/insns/kadd64.h @@ -1,3 +1,4 @@ +require_vector_vs; P_64_PROFILE({ bool sat = false; rd = (sat_add<int64_t, uint64_t>(rs1, rs2, sat)); diff --git a/riscv/insns/kadd8.h b/riscv/insns/kadd8.h index d4c6632..98864c7 100644 --- a/riscv/insns/kadd8.h +++ b/riscv/insns/kadd8.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(8, { bool sat = false; pd = (sat_add<int8_t, uint8_t>(ps1, ps2, sat)); diff --git a/riscv/insns/kaddh.h b/riscv/insns/kaddh.h index b0532fb..e7c377c 100644 --- a/riscv/insns/kaddh.h +++ b/riscv/insns/kaddh.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res = (sreg_t)P_SW(RS1, 0) + (sreg_t)P_SW(RS2, 0); P_SAT(res, 16); diff --git a/riscv/insns/kaddw.h b/riscv/insns/kaddw.h index 1f37c74..693e3eb 100644 --- a/riscv/insns/kaddw.h +++ b/riscv/insns/kaddw.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res = (sreg_t)P_SW(RS1, 0) + (sreg_t)P_SW(RS2, 0); P_SAT(res, 32); diff --git a/riscv/insns/kcras16.h b/riscv/insns/kcras16.h index e89ac4d..d746425 100644 --- a/riscv/insns/kcras16.h +++ b/riscv/insns/kcras16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_CROSS_ULOOP(16, { bool sat = false; pd = (sat_add<int16_t, uint16_t>(ps1, ps2, sat)); diff --git a/riscv/insns/kcras32.h b/riscv/insns/kcras32.h index 0d18aca..ead31f8 100644 --- a/riscv/insns/kcras32.h +++ b/riscv/insns/kcras32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_CROSS_ULOOP(32, { bool sat = false; diff --git a/riscv/insns/kcrsa16.h b/riscv/insns/kcrsa16.h index 1c80c64..2a7ca4d 100644 --- a/riscv/insns/kcrsa16.h +++ b/riscv/insns/kcrsa16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_CROSS_ULOOP(16, { bool sat = false; pd = (sat_sub<int16_t, uint16_t>(ps1, ps2, sat)); diff --git a/riscv/insns/kcrsa32.h b/riscv/insns/kcrsa32.h index a427bfc..b688fd3 100644 --- a/riscv/insns/kcrsa32.h +++ b/riscv/insns/kcrsa32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_CROSS_ULOOP(32, { bool sat = false; diff --git a/riscv/insns/kdmabb.h b/riscv/insns/kdmabb.h index cd8dc61..bc012fd 100644 --- a/riscv/insns/kdmabb.h +++ b/riscv/insns/kdmabb.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res; sreg_t aop = P_SH(RS1, 0); diff --git a/riscv/insns/kdmabb16.h b/riscv/insns/kdmabb16.h index 808e5ab..2ccd40b 100644 --- a/riscv/insns/kdmabb16.h +++ b/riscv/insns/kdmabb16.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_LOOP(32, { int32_t aop = P_SH(ps1, 0); diff --git a/riscv/insns/kdmabt.h b/riscv/insns/kdmabt.h index d542cfc..2b293e0 100644 --- a/riscv/insns/kdmabt.h +++ b/riscv/insns/kdmabt.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res; sreg_t aop = P_SH(RS1, 0); diff --git a/riscv/insns/kdmabt16.h b/riscv/insns/kdmabt16.h index d9a1f83..49538b3 100644 --- a/riscv/insns/kdmabt16.h +++ b/riscv/insns/kdmabt16.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_LOOP(32, { int32_t aop = P_SH(ps1, 0); diff --git a/riscv/insns/kdmatt.h b/riscv/insns/kdmatt.h index c4fd29d..b401882 100644 --- a/riscv/insns/kdmatt.h +++ b/riscv/insns/kdmatt.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res; sreg_t aop = P_SH(RS1, 1); diff --git a/riscv/insns/kdmatt16.h b/riscv/insns/kdmatt16.h index 267d72b..ebce13f 100644 --- a/riscv/insns/kdmatt16.h +++ b/riscv/insns/kdmatt16.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_LOOP(32, { int32_t aop = P_SH(ps1, 1); diff --git a/riscv/insns/kdmbb.h b/riscv/insns/kdmbb.h index 485c4a6..b98dd0a 100644 --- a/riscv/insns/kdmbb.h +++ b/riscv/insns/kdmbb.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res; sreg_t aop = P_SH(RS1, 0); diff --git a/riscv/insns/kdmbb16.h b/riscv/insns/kdmbb16.h index ac5cc5d..a84877d 100644 --- a/riscv/insns/kdmbb16.h +++ b/riscv/insns/kdmbb16.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_LOOP(32, { int32_t aop = P_SH(ps1, 0); diff --git a/riscv/insns/kdmbt.h b/riscv/insns/kdmbt.h index 8b1de6e..2a8efa3 100644 --- a/riscv/insns/kdmbt.h +++ b/riscv/insns/kdmbt.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res; sreg_t aop = P_SH(RS1, 0); diff --git a/riscv/insns/kdmbt16.h b/riscv/insns/kdmbt16.h index 02d9025..85e9d0e 100644 --- a/riscv/insns/kdmbt16.h +++ b/riscv/insns/kdmbt16.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_LOOP(32, { int32_t aop = P_SH(ps1, 0); diff --git a/riscv/insns/kdmtt.h b/riscv/insns/kdmtt.h index e264f5d..4bdd647 100644 --- a/riscv/insns/kdmtt.h +++ b/riscv/insns/kdmtt.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res; sreg_t aop = P_SH(RS1, 1); diff --git a/riscv/insns/kdmtt16.h b/riscv/insns/kdmtt16.h index 7b30f0d..2190710 100644 --- a/riscv/insns/kdmtt16.h +++ b/riscv/insns/kdmtt16.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_LOOP(32, { int32_t aop = P_SH(ps1, 1); diff --git a/riscv/insns/khm16.h b/riscv/insns/khm16.h index 3183556..9c2e28c 100644 --- a/riscv/insns/khm16.h +++ b/riscv/insns/khm16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(16, { if ((ps1 != INT16_MIN) | (ps2 != INT16_MIN)) { pd = (ps1 * ps2) >> 15; diff --git a/riscv/insns/khm8.h b/riscv/insns/khm8.h index c3ed6b2..ac21d68 100644 --- a/riscv/insns/khm8.h +++ b/riscv/insns/khm8.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(8, { if ((ps1 != INT8_MIN) | (ps2 != INT8_MIN)) { pd = (ps1 * ps2) >> 7; diff --git a/riscv/insns/khmbb.h b/riscv/insns/khmbb.h index 0555620..28f7649 100644 --- a/riscv/insns/khmbb.h +++ b/riscv/insns/khmbb.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res; sreg_t aop = P_SH(RS1, 0); diff --git a/riscv/insns/khmbb16.h b/riscv/insns/khmbb16.h index 40a0c41..efbd7eb 100644 --- a/riscv/insns/khmbb16.h +++ b/riscv/insns/khmbb16.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_LOOP(32, { int32_t aop = P_SH(ps1, 0); diff --git a/riscv/insns/khmbt.h b/riscv/insns/khmbt.h index 431a9eb..c821e8f 100644 --- a/riscv/insns/khmbt.h +++ b/riscv/insns/khmbt.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res; sreg_t aop = P_SH(RS1, 0); diff --git a/riscv/insns/khmbt16.h b/riscv/insns/khmbt16.h index 81cabd1..4bb1f48 100644 --- a/riscv/insns/khmbt16.h +++ b/riscv/insns/khmbt16.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_LOOP(32, { int32_t aop = P_SH(ps1, 0); diff --git a/riscv/insns/khmtt.h b/riscv/insns/khmtt.h index b39ce70..a6df179 100644 --- a/riscv/insns/khmtt.h +++ b/riscv/insns/khmtt.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res; sreg_t aop = P_SH(RS1, 1); diff --git a/riscv/insns/khmtt16.h b/riscv/insns/khmtt16.h index 7f004b0..d3c0b4c 100644 --- a/riscv/insns/khmtt16.h +++ b/riscv/insns/khmtt16.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_LOOP(32, { int32_t aop = P_SH(ps1, 1); diff --git a/riscv/insns/khmx16.h b/riscv/insns/khmx16.h index ed72f45..bf93462 100644 --- a/riscv/insns/khmx16.h +++ b/riscv/insns/khmx16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_CROSS_LOOP(16, { if ((ps1 != INT16_MIN) | (ps2 != INT16_MIN)) { pd = (ps1 * ps2) >> 15; diff --git a/riscv/insns/khmx8.h b/riscv/insns/khmx8.h index 84aafb3..0d6a5d5 100644 --- a/riscv/insns/khmx8.h +++ b/riscv/insns/khmx8.h @@ -1,3 +1,4 @@ +require_vector_vs; P_CROSS_LOOP(8, { if ((ps1 != INT8_MIN) | (ps2 != INT8_MIN)) { pd = (ps1 * ps2) >> 7; diff --git a/riscv/insns/kmabb.h b/riscv/insns/kmabb.h index f2e7351..f2d7715 100644 --- a/riscv/insns/kmabb.h +++ b/riscv/insns/kmabb.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int32_t mres = P_SH(ps1, 0) * P_SH(ps2, 0); bool sat = false; diff --git a/riscv/insns/kmabb32.h b/riscv/insns/kmabb32.h index dba9713..1f6a84e 100644 --- a/riscv/insns/kmabb32.h +++ b/riscv/insns/kmabb32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; require_extension('P'); diff --git a/riscv/insns/kmabt.h b/riscv/insns/kmabt.h index e5b4576..4ead23b 100644 --- a/riscv/insns/kmabt.h +++ b/riscv/insns/kmabt.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int32_t mres = P_SH(ps1, 0) * P_SH(ps2, 1); bool sat = false; diff --git a/riscv/insns/kmabt32.h b/riscv/insns/kmabt32.h index 441b46f..90b7c3a 100644 --- a/riscv/insns/kmabt32.h +++ b/riscv/insns/kmabt32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; require_extension('P'); diff --git a/riscv/insns/kmada.h b/riscv/insns/kmada.h index 8271bd0..3c082c7 100644 --- a/riscv/insns/kmada.h +++ b/riscv/insns/kmada.h @@ -1,3 +1,4 @@ +require_vector_vs; P_REDUCTION_LOOP(32, 16, true, true, { pd_res += ps1 * ps2; }) diff --git a/riscv/insns/kmadrs.h b/riscv/insns/kmadrs.h index 92229c4..a450351 100644 --- a/riscv/insns/kmadrs.h +++ b/riscv/insns/kmadrs.h @@ -1,3 +1,4 @@ +require_vector_vs; P_REDUCTION_LOOP(32, 16, true, true, { if (j & 1) pd_res -= ps1 * ps2; diff --git a/riscv/insns/kmadrs32.h b/riscv/insns/kmadrs32.h index 7c5fbf3..bc91982 100644 --- a/riscv/insns/kmadrs32.h +++ b/riscv/insns/kmadrs32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; require_extension('P'); diff --git a/riscv/insns/kmads.h b/riscv/insns/kmads.h index c43fe4a..89aabe0 100644 --- a/riscv/insns/kmads.h +++ b/riscv/insns/kmads.h @@ -1,3 +1,4 @@ +require_vector_vs; P_REDUCTION_LOOP(32, 16, true, true, { if (j & 1) pd_res += ps1 * ps2; diff --git a/riscv/insns/kmads32.h b/riscv/insns/kmads32.h index 7434fe8..c8443db 100644 --- a/riscv/insns/kmads32.h +++ b/riscv/insns/kmads32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; require_extension('P'); diff --git a/riscv/insns/kmar64.h b/riscv/insns/kmar64.h index 63c103b..49f4482 100644 --- a/riscv/insns/kmar64.h +++ b/riscv/insns/kmar64.h @@ -1,3 +1,4 @@ +require_vector_vs; P_64_PROFILE_BASE() P_64_PROFILE_PARAM(true, false) diff --git a/riscv/insns/kmatt.h b/riscv/insns/kmatt.h index 4eb020d..4be2f3d 100644 --- a/riscv/insns/kmatt.h +++ b/riscv/insns/kmatt.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int32_t mres = P_SH(ps1, 1) * P_SH(ps2, 1); bool sat = false; diff --git a/riscv/insns/kmatt32.h b/riscv/insns/kmatt32.h index 761c45c..35ad7b0 100644 --- a/riscv/insns/kmatt32.h +++ b/riscv/insns/kmatt32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; require_extension('P'); diff --git a/riscv/insns/kmaxda.h b/riscv/insns/kmaxda.h index e0db379..393f047 100644 --- a/riscv/insns/kmaxda.h +++ b/riscv/insns/kmaxda.h @@ -1,3 +1,4 @@ +require_vector_vs; P_REDUCTION_CROSS_LOOP(32, 16, true, true, { pd_res += ps1 * ps2; }) diff --git a/riscv/insns/kmaxda32.h b/riscv/insns/kmaxda32.h index 0a09013..8129954 100644 --- a/riscv/insns/kmaxda32.h +++ b/riscv/insns/kmaxda32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; require_extension('P'); diff --git a/riscv/insns/kmaxds.h b/riscv/insns/kmaxds.h index 493d8b3..c2f0e59 100644 --- a/riscv/insns/kmaxds.h +++ b/riscv/insns/kmaxds.h @@ -1,3 +1,4 @@ +require_vector_vs; P_REDUCTION_CROSS_LOOP(32, 16, true, true, { if (j & 1) pd_res += ps1 * ps2; diff --git a/riscv/insns/kmaxds32.h b/riscv/insns/kmaxds32.h index 6e18533..e49e9e6 100644 --- a/riscv/insns/kmaxds32.h +++ b/riscv/insns/kmaxds32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; require_extension('P'); diff --git a/riscv/insns/kmda.h b/riscv/insns/kmda.h index fc7a427..68b6c9a 100644 --- a/riscv/insns/kmda.h +++ b/riscv/insns/kmda.h @@ -1,3 +1,4 @@ +require_vector_vs; P_REDUCTION_LOOP(32, 16, false, true, { pd_res += ps1 * ps2; }) diff --git a/riscv/insns/kmda32.h b/riscv/insns/kmda32.h index 1196f08..7c6de0b 100644 --- a/riscv/insns/kmda32.h +++ b/riscv/insns/kmda32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; require_extension('P'); diff --git a/riscv/insns/kmmac.h b/riscv/insns/kmmac.h index dccedf0..946f0fe 100644 --- a/riscv/insns/kmmac.h +++ b/riscv/insns/kmmac.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int64_t mres = (int64_t) ps1 * (int64_t) ps2; bool sat = false; diff --git a/riscv/insns/kmmac_u.h b/riscv/insns/kmmac_u.h index 4b81a49..5a06a4d 100644 --- a/riscv/insns/kmmac_u.h +++ b/riscv/insns/kmmac_u.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int64_t mres = (int64_t) ps1 * (int64_t) ps2; int32_t round = (((mres >> 31) + 1) >> 1); diff --git a/riscv/insns/kmmawb.h b/riscv/insns/kmmawb.h index 91da3d1..0e3a694 100644 --- a/riscv/insns/kmmawb.h +++ b/riscv/insns/kmmawb.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int64_t mres = (int64_t)ps1 * P_SH(ps2, 0); bool sat = false; diff --git a/riscv/insns/kmmawb2.h b/riscv/insns/kmmawb2.h index 74711e8..6b3aa0d 100644 --- a/riscv/insns/kmmawb2.h +++ b/riscv/insns/kmmawb2.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int64_t addop = 0; int64_t mres = 0; diff --git a/riscv/insns/kmmawb2_u.h b/riscv/insns/kmmawb2_u.h index bb5d585..f44346e 100644 --- a/riscv/insns/kmmawb2_u.h +++ b/riscv/insns/kmmawb2_u.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int64_t addop = 0; int64_t mres = 0; diff --git a/riscv/insns/kmmawb_u.h b/riscv/insns/kmmawb_u.h index cd36184..766dd71 100644 --- a/riscv/insns/kmmawb_u.h +++ b/riscv/insns/kmmawb_u.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int64_t mres = (int64_t)ps1 * P_SH(ps2, 0); int32_t round = (((mres >> 15) + 1) >> 1); diff --git a/riscv/insns/kmmawt.h b/riscv/insns/kmmawt.h index 140716c..514ee48 100644 --- a/riscv/insns/kmmawt.h +++ b/riscv/insns/kmmawt.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int64_t mres = (int64_t)ps1 * P_SH(ps2, 1); bool sat = false; diff --git a/riscv/insns/kmmawt2.h b/riscv/insns/kmmawt2.h index 8e4dce4..3cd72de 100644 --- a/riscv/insns/kmmawt2.h +++ b/riscv/insns/kmmawt2.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int64_t addop = 0; int64_t mres = 0; diff --git a/riscv/insns/kmmawt2_u.h b/riscv/insns/kmmawt2_u.h index 03c15b1..7fe378c 100644 --- a/riscv/insns/kmmawt2_u.h +++ b/riscv/insns/kmmawt2_u.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int64_t addop = 0; int64_t mres = 0; diff --git a/riscv/insns/kmmawt_u.h b/riscv/insns/kmmawt_u.h index b1bd289..74d8fd0 100644 --- a/riscv/insns/kmmawt_u.h +++ b/riscv/insns/kmmawt_u.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int64_t mres = (int64_t)ps1 * P_SH(ps2, 1); int32_t round = (((mres >> 15) + 1) >> 1); diff --git a/riscv/insns/kmmsb.h b/riscv/insns/kmmsb.h index 783f409..29ad1bf 100644 --- a/riscv/insns/kmmsb.h +++ b/riscv/insns/kmmsb.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int64_t mres = (int64_t) ps1 * (int64_t) ps2; bool sat = false; diff --git a/riscv/insns/kmmsb_u.h b/riscv/insns/kmmsb_u.h index 5beb91f..c7b283e 100644 --- a/riscv/insns/kmmsb_u.h +++ b/riscv/insns/kmmsb_u.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { int64_t mres = (int64_t) ps1 * (int64_t) ps2; int32_t round = (((mres >> 31) + 1) >> 1); diff --git a/riscv/insns/kmmwb2.h b/riscv/insns/kmmwb2.h index 55c4aea..272f738 100644 --- a/riscv/insns/kmmwb2.h +++ b/riscv/insns/kmmwb2.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { if((INT32_MIN != ps1) | (INT16_MIN != P_SH(ps2, 0))) { int64_t mres = ((int64_t) ps1 * P_SH(ps2, 0)) << 1; diff --git a/riscv/insns/kmmwb2_u.h b/riscv/insns/kmmwb2_u.h index 394a4d6..b5a5006 100644 --- a/riscv/insns/kmmwb2_u.h +++ b/riscv/insns/kmmwb2_u.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { if((INT32_MIN != ps1) | (INT16_MIN != P_SH(ps2, 0))) { int64_t mres = ((int64_t) ps1 * P_SH(ps2, 0)) << 1; diff --git a/riscv/insns/kmmwt2.h b/riscv/insns/kmmwt2.h index d80291a..73d3dc8 100644 --- a/riscv/insns/kmmwt2.h +++ b/riscv/insns/kmmwt2.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { if((INT32_MIN != ps1) | (INT16_MIN != P_SH(ps2, 1))) { int64_t mres = ((int64_t) ps1 * P_SH(ps2, 1)) << 1; diff --git a/riscv/insns/kmmwt2_u.h b/riscv/insns/kmmwt2_u.h index 330a241..1f525a8 100644 --- a/riscv/insns/kmmwt2_u.h +++ b/riscv/insns/kmmwt2_u.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { if((INT32_MIN != ps1) | (INT16_MIN != P_SH(ps2, 1))) { int64_t mres = ((int64_t) ps1 * P_SH(ps2, 1)) << 1; diff --git a/riscv/insns/kmsda.h b/riscv/insns/kmsda.h index 4de7018..94b118a 100644 --- a/riscv/insns/kmsda.h +++ b/riscv/insns/kmsda.h @@ -1,3 +1,4 @@ +require_vector_vs; P_REDUCTION_LOOP(32, 16, true, true, { pd_res -= ps1 * ps2; }) diff --git a/riscv/insns/kmsda32.h b/riscv/insns/kmsda32.h index 249a4da..2790f80 100644 --- a/riscv/insns/kmsda32.h +++ b/riscv/insns/kmsda32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; require_extension('P'); diff --git a/riscv/insns/kmsr64.h b/riscv/insns/kmsr64.h index 698ae51..bfef503 100644 --- a/riscv/insns/kmsr64.h +++ b/riscv/insns/kmsr64.h @@ -1,3 +1,4 @@ +require_vector_vs; P_64_PROFILE_BASE() P_64_PROFILE_PARAM(true, false) diff --git a/riscv/insns/kmsxda.h b/riscv/insns/kmsxda.h index cd83b61..2d0faa3 100644 --- a/riscv/insns/kmsxda.h +++ b/riscv/insns/kmsxda.h @@ -1,3 +1,4 @@ +require_vector_vs; P_REDUCTION_CROSS_LOOP(32, 16, true, true, { pd_res -= ps1 * ps2; }) diff --git a/riscv/insns/kmsxda32.h b/riscv/insns/kmsxda32.h index ad265b5..1855a1b 100644 --- a/riscv/insns/kmsxda32.h +++ b/riscv/insns/kmsxda32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; require_extension('P'); diff --git a/riscv/insns/kmxda.h b/riscv/insns/kmxda.h index b714af2..4addd8a 100644 --- a/riscv/insns/kmxda.h +++ b/riscv/insns/kmxda.h @@ -1,3 +1,4 @@ +require_vector_vs; P_REDUCTION_CROSS_LOOP(32, 16, false, true, { pd_res += ps1 * ps2; }) diff --git a/riscv/insns/kmxda32.h b/riscv/insns/kmxda32.h index 1b0c260..1438652 100644 --- a/riscv/insns/kmxda32.h +++ b/riscv/insns/kmxda32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; require_extension('P'); diff --git a/riscv/insns/ksll16.h b/riscv/insns/ksll16.h index ce6dd03..9e03b34 100644 --- a/riscv/insns/ksll16.h +++ b/riscv/insns/ksll16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_X_LOOP(16, 4, { auto res = (sreg_t)ps1 << sa; P_SAT(res, 16); diff --git a/riscv/insns/ksll32.h b/riscv/insns/ksll32.h index dce8c96..3588898 100644 --- a/riscv/insns/ksll32.h +++ b/riscv/insns/ksll32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_X_LOOP(32, 5, { auto res = (sreg_t)ps1 << sa; diff --git a/riscv/insns/ksll8.h b/riscv/insns/ksll8.h index 93ed907..930ea03 100644 --- a/riscv/insns/ksll8.h +++ b/riscv/insns/ksll8.h @@ -1,3 +1,4 @@ +require_vector_vs; P_X_LOOP(8, 3, { auto res = (sreg_t)ps1 << sa; P_SAT(res, 8); diff --git a/riscv/insns/kslli16.h b/riscv/insns/kslli16.h index e37eab8..edc7c67 100644 --- a/riscv/insns/kslli16.h +++ b/riscv/insns/kslli16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_I_LOOP(16, 4, { auto res = (sreg_t)ps1 << imm4u; P_SAT(res, 16); diff --git a/riscv/insns/kslli32.h b/riscv/insns/kslli32.h index 95000e4..4fd506b 100644 --- a/riscv/insns/kslli32.h +++ b/riscv/insns/kslli32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_I_LOOP(32, 5, { auto res = (sreg_t)ps1 << imm5u; diff --git a/riscv/insns/kslli8.h b/riscv/insns/kslli8.h index 115361b..18d714f 100644 --- a/riscv/insns/kslli8.h +++ b/riscv/insns/kslli8.h @@ -1,3 +1,4 @@ +require_vector_vs; P_I_LOOP(8, 3, { auto res = (sreg_t)ps1 << imm3u; P_SAT(res, 8); diff --git a/riscv/insns/kslliw.h b/riscv/insns/kslliw.h index 13c5d7f..db17b2c 100644 --- a/riscv/insns/kslliw.h +++ b/riscv/insns/kslliw.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t rs1 = sext32(RS1); sreg_t sa = insn.p_imm5(); diff --git a/riscv/insns/ksllw.h b/riscv/insns/ksllw.h index e8cf68f..0004137 100644 --- a/riscv/insns/ksllw.h +++ b/riscv/insns/ksllw.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t rs1 = sext32(RS1); sreg_t sa = get_field(RS2, make_mask64(0, 5)); diff --git a/riscv/insns/kslra16.h b/riscv/insns/kslra16.h index ce4aa33..ad1443a 100644 --- a/riscv/insns/kslra16.h +++ b/riscv/insns/kslra16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_X_LOOP(16, 5, { if (ssa < 0) { sa = -ssa; diff --git a/riscv/insns/kslra16_u.h b/riscv/insns/kslra16_u.h index ff0ef40..8335f3e 100644 --- a/riscv/insns/kslra16_u.h +++ b/riscv/insns/kslra16_u.h @@ -1,3 +1,4 @@ +require_vector_vs; P_X_LOOP(16, 5, { if (ssa < 0) { sa = -ssa; diff --git a/riscv/insns/kslra32.h b/riscv/insns/kslra32.h index 76906d1..871d601 100644 --- a/riscv/insns/kslra32.h +++ b/riscv/insns/kslra32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_X_LOOP(32, 6, { if (ssa < 0) { diff --git a/riscv/insns/kslra32_u.h b/riscv/insns/kslra32_u.h index 66504eb..d53c8fe 100644 --- a/riscv/insns/kslra32_u.h +++ b/riscv/insns/kslra32_u.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_X_LOOP(32, 6, { if (ssa < 0) { diff --git a/riscv/insns/kslra8.h b/riscv/insns/kslra8.h index 2346a86..b3f3e6b 100644 --- a/riscv/insns/kslra8.h +++ b/riscv/insns/kslra8.h @@ -1,3 +1,4 @@ +require_vector_vs; P_X_LOOP(8, 4, { if (ssa < 0) { sa = -ssa; diff --git a/riscv/insns/kslra8_u.h b/riscv/insns/kslra8_u.h index b67b25a..620f3bd 100644 --- a/riscv/insns/kslra8_u.h +++ b/riscv/insns/kslra8_u.h @@ -1,3 +1,4 @@ +require_vector_vs; P_X_LOOP(8, 4, { if (ssa < 0) { sa = -ssa; diff --git a/riscv/insns/kslraw.h b/riscv/insns/kslraw.h index 20e4894..0ec07b5 100644 --- a/riscv/insns/kslraw.h +++ b/riscv/insns/kslraw.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t rs1 = sext32(RS1); sreg_t sa = int64_t(RS2) << (64 - 6) >> (64 - 6); diff --git a/riscv/insns/kslraw_u.h b/riscv/insns/kslraw_u.h index e1c53ee..f3c5cd7 100644 --- a/riscv/insns/kslraw_u.h +++ b/riscv/insns/kslraw_u.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t rs1 = sext32(RS1); sreg_t sa = int64_t(RS2) << (64 - 6) >> (64 - 6); diff --git a/riscv/insns/kstas16.h b/riscv/insns/kstas16.h index ca2c538..ad18013 100644 --- a/riscv/insns/kstas16.h +++ b/riscv/insns/kstas16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_STRAIGHT_ULOOP(16, { bool sat = false; pd = (sat_add<int16_t, uint16_t>(ps1, ps2, sat)); diff --git a/riscv/insns/kstas32.h b/riscv/insns/kstas32.h index db78a8e..35f23e0 100644 --- a/riscv/insns/kstas32.h +++ b/riscv/insns/kstas32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_STRAIGHT_ULOOP(32, { bool sat = false; diff --git a/riscv/insns/kstsa16.h b/riscv/insns/kstsa16.h index b1349c7..47a8918 100644 --- a/riscv/insns/kstsa16.h +++ b/riscv/insns/kstsa16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_STRAIGHT_ULOOP(16, { bool sat = false; pd = (sat_sub<int16_t, uint16_t>(ps1, ps2, sat)); diff --git a/riscv/insns/kstsa32.h b/riscv/insns/kstsa32.h index f7e5eb4..aa9c372 100644 --- a/riscv/insns/kstsa32.h +++ b/riscv/insns/kstsa32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_STRAIGHT_ULOOP(32, { bool sat = false; diff --git a/riscv/insns/ksub16.h b/riscv/insns/ksub16.h index 4f8e8b1..57562b5 100644 --- a/riscv/insns/ksub16.h +++ b/riscv/insns/ksub16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(16, { bool sat = false; pd = (sat_sub<int16_t, uint16_t>(ps1, ps2, sat)); diff --git a/riscv/insns/ksub32.h b/riscv/insns/ksub32.h index b6eaa82..3ef32e8 100644 --- a/riscv/insns/ksub32.h +++ b/riscv/insns/ksub32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_LOOP(32, { bool sat = false; diff --git a/riscv/insns/ksub64.h b/riscv/insns/ksub64.h index d0040dc..c6f0994 100644 --- a/riscv/insns/ksub64.h +++ b/riscv/insns/ksub64.h @@ -1,3 +1,4 @@ +require_vector_vs; P_64_PROFILE({ bool sat = false; rd = (sat_sub<int64_t, uint64_t>(rs1, rs2, sat)); diff --git a/riscv/insns/ksub8.h b/riscv/insns/ksub8.h index 2b8ea2e..705f632 100644 --- a/riscv/insns/ksub8.h +++ b/riscv/insns/ksub8.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(8, { bool sat = false; pd = (sat_sub<int8_t, uint8_t>(ps1, ps2, sat)); diff --git a/riscv/insns/ksubh.h b/riscv/insns/ksubh.h index 7c5d2b2..7c421b0 100644 --- a/riscv/insns/ksubh.h +++ b/riscv/insns/ksubh.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res = (sreg_t)P_SW(RS1, 0) - (sreg_t)P_SW(RS2, 0); P_SAT(res, 16); diff --git a/riscv/insns/ksubw.h b/riscv/insns/ksubw.h index 49c6385..7bd5cdb 100644 --- a/riscv/insns/ksubw.h +++ b/riscv/insns/ksubw.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res = (sreg_t)P_SW(RS1, 0) - (sreg_t)P_SW(RS2, 0); P_SAT(res, 32); diff --git a/riscv/insns/kwmmul.h b/riscv/insns/kwmmul.h index 57aa2b5..b0ab8d4 100644 --- a/riscv/insns/kwmmul.h +++ b/riscv/insns/kwmmul.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { if((INT32_MIN != ps1) | (INT32_MIN != ps2)) { int64_t mres = ((int64_t) ps1 * (int64_t) ps2) << 1; diff --git a/riscv/insns/kwmmul_u.h b/riscv/insns/kwmmul_u.h index fb74a43..c2045e1 100644 --- a/riscv/insns/kwmmul_u.h +++ b/riscv/insns/kwmmul_u.h @@ -1,3 +1,4 @@ +require_vector_vs; P_LOOP(32, { if((INT32_MIN != ps1) | (INT32_MIN != ps2)) { int64_t mres = ((int64_t) ps1 * (int64_t) ps2) << 1; diff --git a/riscv/insns/sclip16.h b/riscv/insns/sclip16.h index cd313c0..d90ce19 100644 --- a/riscv/insns/sclip16.h +++ b/riscv/insns/sclip16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_I_LOOP(16, 4, { int64_t int_max = INT64_MAX >> (64 - (imm4u + 1)); int64_t int_min = INT64_MIN >> (64 - (imm4u + 1)); diff --git a/riscv/insns/sclip32.h b/riscv/insns/sclip32.h index 8c16e81..ff1ba28 100644 --- a/riscv/insns/sclip32.h +++ b/riscv/insns/sclip32.h @@ -1,3 +1,4 @@ +require_vector_vs; P_I_LOOP(32, 5, { int64_t int_max = INT64_MAX >> (64 - (imm5u + 1)); int64_t int_min = INT64_MIN >> (64 - (imm5u + 1)); diff --git a/riscv/insns/sclip8.h b/riscv/insns/sclip8.h index 7f86891..afd9c69 100644 --- a/riscv/insns/sclip8.h +++ b/riscv/insns/sclip8.h @@ -1,3 +1,4 @@ +require_vector_vs; P_I_LOOP(8, 3, { int64_t int_max = INT64_MAX >> (64 - (imm3u + 1)); int64_t int_min = INT64_MIN >> (64 - (imm3u + 1)); diff --git a/riscv/insns/uclip16.h b/riscv/insns/uclip16.h index cc1f58a..4cc2519 100644 --- a/riscv/insns/uclip16.h +++ b/riscv/insns/uclip16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_I_LOOP(16, 4, { int64_t uint_max = imm4u ? UINT64_MAX >> (64 - imm4u) : 0; pd = ps1; diff --git a/riscv/insns/uclip32.h b/riscv/insns/uclip32.h index 4d24afb..d347650 100644 --- a/riscv/insns/uclip32.h +++ b/riscv/insns/uclip32.h @@ -1,3 +1,4 @@ +require_vector_vs; P_I_LOOP(32, 5, { int64_t uint_max = imm5u ? UINT64_MAX >> (64 - imm5u) : 0; pd = ps1; diff --git a/riscv/insns/uclip8.h b/riscv/insns/uclip8.h index 87a23ba..b8a95c0 100644 --- a/riscv/insns/uclip8.h +++ b/riscv/insns/uclip8.h @@ -1,3 +1,4 @@ +require_vector_vs; P_I_LOOP(8, 3, { int64_t uint_max = imm3u ? UINT64_MAX >> (64 - imm3u) : 0; pd = ps1; diff --git a/riscv/insns/ukadd16.h b/riscv/insns/ukadd16.h index 8d74291..680b5b6 100644 --- a/riscv/insns/ukadd16.h +++ b/riscv/insns/ukadd16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_ULOOP(16, { bool sat = false; pd = (sat_addu<uint16_t>(ps1, ps2, sat)); diff --git a/riscv/insns/ukadd32.h b/riscv/insns/ukadd32.h index 6608027..dd836c1 100644 --- a/riscv/insns/ukadd32.h +++ b/riscv/insns/ukadd32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_ULOOP(32, { bool sat = false; diff --git a/riscv/insns/ukadd64.h b/riscv/insns/ukadd64.h index e61e2f9..d7e98f3 100644 --- a/riscv/insns/ukadd64.h +++ b/riscv/insns/ukadd64.h @@ -1,3 +1,4 @@ +require_vector_vs; P_64_UPROFILE({ bool sat = false; rd = (sat_addu<uint64_t>(rs1, rs2, sat)); diff --git a/riscv/insns/ukadd8.h b/riscv/insns/ukadd8.h index cc0a5f2..4bcada2 100644 --- a/riscv/insns/ukadd8.h +++ b/riscv/insns/ukadd8.h @@ -1,3 +1,4 @@ +require_vector_vs; P_ULOOP(8, { bool sat = false; pd = (sat_addu<uint8_t>(ps1, ps2, sat)); diff --git a/riscv/insns/ukaddh.h b/riscv/insns/ukaddh.h index e4fad34..d067dd6 100644 --- a/riscv/insns/ukaddh.h +++ b/riscv/insns/ukaddh.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res = (sreg_t)P_W(RS1, 0) + (sreg_t)P_W(RS2, 0); P_SATU(res, 16); diff --git a/riscv/insns/ukaddw.h b/riscv/insns/ukaddw.h index 7188d80..e369106 100644 --- a/riscv/insns/ukaddw.h +++ b/riscv/insns/ukaddw.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res = (sreg_t)P_W(RS1, 0) + (sreg_t)P_W(RS2, 0); P_SATU(res, 32); diff --git a/riscv/insns/ukcras16.h b/riscv/insns/ukcras16.h index 90ef8f8..54b9a10 100644 --- a/riscv/insns/ukcras16.h +++ b/riscv/insns/ukcras16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_CROSS_ULOOP(16, { bool sat = false; pd = (sat_addu<uint16_t>(ps1, ps2, sat)); diff --git a/riscv/insns/ukcras32.h b/riscv/insns/ukcras32.h index 9478778..001644c 100644 --- a/riscv/insns/ukcras32.h +++ b/riscv/insns/ukcras32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_CROSS_ULOOP(32, { bool sat = false; diff --git a/riscv/insns/ukcrsa16.h b/riscv/insns/ukcrsa16.h index 584ff5b..343063c 100644 --- a/riscv/insns/ukcrsa16.h +++ b/riscv/insns/ukcrsa16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_CROSS_ULOOP(16, { bool sat = false; pd = (sat_subu<uint16_t>(ps1, ps2, sat)); diff --git a/riscv/insns/ukcrsa32.h b/riscv/insns/ukcrsa32.h index 7eda7a6..260f181 100644 --- a/riscv/insns/ukcrsa32.h +++ b/riscv/insns/ukcrsa32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_CROSS_ULOOP(32, { bool sat = false; diff --git a/riscv/insns/ukmar64.h b/riscv/insns/ukmar64.h index 8f6d4f0..e33ad7d 100644 --- a/riscv/insns/ukmar64.h +++ b/riscv/insns/ukmar64.h @@ -1,3 +1,4 @@ +require_vector_vs; P_64_UPROFILE_REDUCTION(32, { bool sat = false; rd = (sat_addu<uint64_t>(rd, ps1 * ps2, sat)); diff --git a/riscv/insns/ukmsr64.h b/riscv/insns/ukmsr64.h index 321c03b..9a38cb0 100644 --- a/riscv/insns/ukmsr64.h +++ b/riscv/insns/ukmsr64.h @@ -1,3 +1,4 @@ +require_vector_vs; P_64_UPROFILE_REDUCTION(32, { bool sat = false; rd = (sat_subu<uint64_t>(rd, ps1 * ps2, sat)); diff --git a/riscv/insns/ukstas16.h b/riscv/insns/ukstas16.h index cccf62a..a8203e4 100644 --- a/riscv/insns/ukstas16.h +++ b/riscv/insns/ukstas16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_STRAIGHT_ULOOP(16, { bool sat = false; pd = (sat_addu<uint16_t>(ps1, ps2, sat)); diff --git a/riscv/insns/ukstas32.h b/riscv/insns/ukstas32.h index 02a101f..c734eb6 100644 --- a/riscv/insns/ukstas32.h +++ b/riscv/insns/ukstas32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_STRAIGHT_ULOOP(32, { bool sat = false; diff --git a/riscv/insns/ukstsa16.h b/riscv/insns/ukstsa16.h index 2020bbb..8145111 100644 --- a/riscv/insns/ukstsa16.h +++ b/riscv/insns/ukstsa16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_STRAIGHT_ULOOP(16, { bool sat = false; pd = (sat_subu<uint16_t>(ps1, ps2, sat)); diff --git a/riscv/insns/ukstsa32.h b/riscv/insns/ukstsa32.h index fbd2a91..9eb713e 100644 --- a/riscv/insns/ukstsa32.h +++ b/riscv/insns/ukstsa32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_STRAIGHT_ULOOP(32, { bool sat = false; diff --git a/riscv/insns/uksub16.h b/riscv/insns/uksub16.h index 07968d8..7fba16e 100644 --- a/riscv/insns/uksub16.h +++ b/riscv/insns/uksub16.h @@ -1,3 +1,4 @@ +require_vector_vs; P_ULOOP(16, { bool sat = false; pd = (sat_subu<uint16_t>(ps1, ps2, sat)); diff --git a/riscv/insns/uksub32.h b/riscv/insns/uksub32.h index 3392c69..3d4913b 100644 --- a/riscv/insns/uksub32.h +++ b/riscv/insns/uksub32.h @@ -1,3 +1,4 @@ +require_vector_vs; require_rv64; P_ULOOP(32, { bool sat = false; diff --git a/riscv/insns/uksub64.h b/riscv/insns/uksub64.h index fa5d5fd..0d2bb05 100644 --- a/riscv/insns/uksub64.h +++ b/riscv/insns/uksub64.h @@ -1,3 +1,4 @@ +require_vector_vs; P_64_UPROFILE({ bool sat = false; rd = (sat_subu<uint64_t>(rs1, rs2, sat)); diff --git a/riscv/insns/uksub8.h b/riscv/insns/uksub8.h index 5771e08..f26621e 100644 --- a/riscv/insns/uksub8.h +++ b/riscv/insns/uksub8.h @@ -1,3 +1,4 @@ +require_vector_vs; P_ULOOP(8, { bool sat = false; pd = (sat_subu<uint8_t>(ps1, ps2, sat)); diff --git a/riscv/insns/uksubh.h b/riscv/insns/uksubh.h index c050543..d7a4f30 100644 --- a/riscv/insns/uksubh.h +++ b/riscv/insns/uksubh.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res = (sreg_t)P_W(RS1, 0) - (sreg_t)P_W(RS2, 0); P_SATU(res, 16); diff --git a/riscv/insns/uksubw.h b/riscv/insns/uksubw.h index f9758b3..ec07bde 100644 --- a/riscv/insns/uksubw.h +++ b/riscv/insns/uksubw.h @@ -1,3 +1,4 @@ +require_vector_vs; require_extension('P'); sreg_t res = (sreg_t)P_W(RS1, 0) - (sreg_t)P_W(RS2, 0); P_SATU(res, 32); |