Browse Source

rvp: add packed instructions for rv32 - part1

add the following categories

  * packed add/sub/pli instructions
  * packed cross instructions
  * packed absolute instructions
  * packed accumulation instructions
  * packed sign-extend and saturating instructions
  * packed shift instructions
  * packed compare instructions
  * packed pack instructions
  * packed basic arithmetic and data-move
  * packed multiply instructions
  * packed accumulate instructions
  * packed multiply-add instructions
  * RD-only element-wise register-pair
pull/2246/head
Jason 4 months ago
committed by Chih-Min Chao
parent
commit
e4ad4513c7
  1. 1
      riscv/insn_template.h
  2. 3
      riscv/insns/aadd.h
  3. 3
      riscv/insns/aaddu.h
  4. 4
      riscv/insns/abs.h
  5. 3
      riscv/insns/asub.h
  6. 3
      riscv/insns/asubu.h
  7. 10
      riscv/insns/cls.h
  8. 3
      riscv/insns/macc_h00.h
  9. 3
      riscv/insns/macc_h01.h
  10. 3
      riscv/insns/macc_h11.h
  11. 3
      riscv/insns/maccsu_h00.h
  12. 3
      riscv/insns/maccsu_h11.h
  13. 3
      riscv/insns/maccu_h00.h
  14. 3
      riscv/insns/maccu_h01.h
  15. 3
      riscv/insns/maccu_h11.h
  16. 2
      riscv/insns/merge.h
  17. 4
      riscv/insns/mhacc.h
  18. 4
      riscv/insns/mhacc_h0.h
  19. 4
      riscv/insns/mhacc_h1.h
  20. 4
      riscv/insns/mhaccsu.h
  21. 4
      riscv/insns/mhaccsu_h0.h
  22. 4
      riscv/insns/mhaccsu_h1.h
  23. 4
      riscv/insns/mhaccu.h
  24. 5
      riscv/insns/mhracc.h
  25. 5
      riscv/insns/mhraccsu.h
  26. 5
      riscv/insns/mhraccu.h
  27. 3
      riscv/insns/mqacc_h00.h
  28. 3
      riscv/insns/mqacc_h01.h
  29. 3
      riscv/insns/mqacc_h11.h
  30. 3
      riscv/insns/mqracc_h00.h
  31. 3
      riscv/insns/mqracc_h01.h
  32. 3
      riscv/insns/mqracc_h11.h
  33. 3
      riscv/insns/mseq.h
  34. 3
      riscv/insns/mslt.h
  35. 3
      riscv/insns/msltu.h
  36. 3
      riscv/insns/mul_h00.h
  37. 3
      riscv/insns/mul_h01.h
  38. 3
      riscv/insns/mul_h11.h
  39. 4
      riscv/insns/mulh_h0.h
  40. 4
      riscv/insns/mulh_h1.h
  41. 4
      riscv/insns/mulhr.h
  42. 4
      riscv/insns/mulhrsu.h
  43. 4
      riscv/insns/mulhru.h
  44. 4
      riscv/insns/mulhsu_h0.h
  45. 4
      riscv/insns/mulhsu_h1.h
  46. 7
      riscv/insns/mulq.h
  47. 7
      riscv/insns/mulqr.h
  48. 3
      riscv/insns/mulsu_h00.h
  49. 3
      riscv/insns/mulsu_h11.h
  50. 3
      riscv/insns/mulu_h00.h
  51. 3
      riscv/insns/mulu_h01.h
  52. 3
      riscv/insns/mulu_h11.h
  53. 2
      riscv/insns/mvm.h
  54. 2
      riscv/insns/mvmn.h
  55. 3
      riscv/insns/paadd_b.h
  56. 3
      riscv/insns/paadd_h.h
  57. 3
      riscv/insns/paaddu_b.h
  58. 3
      riscv/insns/paaddu_h.h
  59. 5
      riscv/insns/paas_hx.h
  60. 4
      riscv/insns/pabd_b.h
  61. 4
      riscv/insns/pabd_h.h
  62. 3
      riscv/insns/pabdsumau_b.h
  63. 3
      riscv/insns/pabdsumu_b.h
  64. 3
      riscv/insns/pabdu_b.h
  65. 3
      riscv/insns/pabdu_h.h
  66. 5
      riscv/insns/pack.h
  67. 3
      riscv/insns/padd_b.h
  68. 3
      riscv/insns/padd_bs.h
  69. 3
      riscv/insns/padd_h.h
  70. 3
      riscv/insns/padd_hs.h
  71. 5
      riscv/insns/pas_hx.h
  72. 5
      riscv/insns/pasa_hx.h
  73. 3
      riscv/insns/pasub_b.h
  74. 3
      riscv/insns/pasub_h.h
  75. 3
      riscv/insns/pasubu_b.h
  76. 3
      riscv/insns/pasubu_h.h
  77. 3
      riscv/insns/pli_b.h
  78. 4
      riscv/insns/pli_db.h
  79. 4
      riscv/insns/pli_dh.h
  80. 3
      riscv/insns/pli_h.h
  81. 4
      riscv/insns/plui_dh.h
  82. 3
      riscv/insns/plui_h.h
  83. 3
      riscv/insns/pm2add_h.h
  84. 3
      riscv/insns/pm2add_hx.h
  85. 3
      riscv/insns/pm2adda_h.h
  86. 3
      riscv/insns/pm2adda_hx.h
  87. 3
      riscv/insns/pm2addasu_h.h
  88. 3
      riscv/insns/pm2addau_h.h
  89. 3
      riscv/insns/pm2addsu_h.h
  90. 3
      riscv/insns/pm2addu_h.h
  91. 3
      riscv/insns/pm2sadd_h.h
  92. 3
      riscv/insns/pm2sadd_hx.h
  93. 6
      riscv/insns/pm2sub_h.h
  94. 6
      riscv/insns/pm2sub_hx.h
  95. 6
      riscv/insns/pm2suba_h.h
  96. 6
      riscv/insns/pm2suba_hx.h
  97. 3
      riscv/insns/pm4add_b.h
  98. 3
      riscv/insns/pm4adda_b.h
  99. 3
      riscv/insns/pm4addasu_b.h
  100. 3
      riscv/insns/pm4addau_b.h

1
riscv/insn_template.h

@ -7,6 +7,7 @@
#include "internals.h"
#include "specialize.h"
#include "tracer.h"
#include "p_ext_macros.h"
#include "v_ext_macros.h"
#include "debug_defines.h"
#include <assert.h>

3
riscv/insns/aadd.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD((RS1 + RS2)>>1);

3
riscv/insns/aaddu.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD((0ULL + (uint32_t)RS1 + (uint32_t)RS2)>>1);

4
riscv/insns/abs.h

@ -0,0 +1,4 @@
require_extension('P');
reg_t s1 = RS1;
reg_t result = (int64_t(s1) < 0) ? -s1 : s1;
WRITE_RD(sext_xlen(result));

3
riscv/insns/asub.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD((RS1 - RS2)>>1);

3
riscv/insns/asubu.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD((0ULL + (uint32_t)RS1 - (uint32_t)RS2)>>1);

10
riscv/insns/cls.h

@ -0,0 +1,10 @@
require_extension('P');
reg_t x = xlen - 1;
reg_t msb = (RS1 >> (xlen - 1)) & 1;
for (int i = 0; i < xlen - 1; i++) {
if (msb != ((RS1 >> (xlen - i - 2)) & 1)) {
x = i;
break;
}
}
WRITE_RD(sext_xlen(x));

3
riscv/insns/macc_h00.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + sext(RS1, 16) * sext(RS2, 16));

3
riscv/insns/macc_h01.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + sext(RS1, 16) * sext(RS2 >> 16, 16));

3
riscv/insns/macc_h11.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + sext(RS1 >> 16, 16) * sext(RS2 >> 16, 16));

3
riscv/insns/maccsu_h00.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + sext(RS1, 16) * zext(RS2, 16));

3
riscv/insns/maccsu_h11.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + sext(RS1 >> 16, 16) * zext(RS2 >> 16, 16));

3
riscv/insns/maccu_h00.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + zext(RS1, 16) * zext(RS2, 16));

3
riscv/insns/maccu_h01.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + zext(RS1, 16) * zext(RS2 >> 16, 16));

3
riscv/insns/maccu_h11.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + zext(RS1 >> 16, 16) * zext(RS2 >> 16, 16));

2
riscv/insns/merge.h

@ -0,0 +1,2 @@
require_extension('P');
WRITE_RD((RS2 & RD) | (RS1 & ~RD));

4
riscv/insns/mhacc.h

@ -0,0 +1,4 @@
require_extension('P');
require_rv32;
sreg_t mres = sext32(RS1) * sext32(RS2);
WRITE_RD(RD + (mres >> 32));

4
riscv/insns/mhacc_h0.h

@ -0,0 +1,4 @@
require_extension('P');
require_rv32;
sreg_t mres = sext32(RS1) * sext32(P_FIELD(RS2, 0, 16));
WRITE_RD(RD + (mres >> 32));

4
riscv/insns/mhacc_h1.h

@ -0,0 +1,4 @@
require_extension('P');
require_rv32;
sreg_t mres = sext32(RS1) * sext32(P_FIELD(RS2, 1, 16));
WRITE_RD(RD + (mres >> 32));

4
riscv/insns/mhaccsu.h

@ -0,0 +1,4 @@
require_extension('P');
require_rv32;
sreg_t mres = sext32(RS1) * reg_t((uint32_t)RS2);
WRITE_RD(RD + (mres >> 32));

4
riscv/insns/mhaccsu_h0.h

@ -0,0 +1,4 @@
require_extension('P');
require_rv32;
sreg_t mres = sext32(RS1) * (uint32_t)P_FIELD(RS2, 0, 16);
WRITE_RD(RD + (mres >> 32));

4
riscv/insns/mhaccsu_h1.h

@ -0,0 +1,4 @@
require_extension('P');
require_rv32;
sreg_t mres = sext32(RS1) * (uint32_t)P_FIELD(RS2, 1, 16);
WRITE_RD(RD + (mres >> 32));

4
riscv/insns/mhaccu.h

@ -0,0 +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));

5
riscv/insns/mhracc.h

@ -0,0 +1,5 @@
require_extension('P');
require_rv32;
sreg_t mres = sext32(RS1) * sext32(RS2);
int32_t round = ((mres >> 31) + 1) >> 1;
WRITE_RD(RD + round);

5
riscv/insns/mhraccsu.h

@ -0,0 +1,5 @@
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);

5
riscv/insns/mhraccu.h

@ -0,0 +1,5 @@
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);

3
riscv/insns/mqacc_h00.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + (((int32_t)P_FIELD(RS1, 0, 16) * P_FIELD(RS2, 0, 16)) >> 15));

3
riscv/insns/mqacc_h01.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + (((int32_t)P_FIELD(RS1, 0, 16) * P_FIELD(RS2, 1, 16)) >> 15));

3
riscv/insns/mqacc_h11.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + (((int32_t)P_FIELD(RS1, 1, 16) * P_FIELD(RS2, 1, 16)) >> 15));

3
riscv/insns/mqracc_h00.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + (((int32_t)P_FIELD(RS1, 0, 16) * P_FIELD(RS2, 0, 16) + 0x4000) >> 15));

3
riscv/insns/mqracc_h01.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + (((int32_t)P_FIELD(RS1, 0, 16) * P_FIELD(RS2, 1, 16) + 0x4000) >> 15));

3
riscv/insns/mqracc_h11.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RD + (((int32_t)P_FIELD(RS1, 1, 16) * P_FIELD(RS2, 1, 16) + 0x4000) >> 15));

3
riscv/insns/mseq.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(RS1 == RS2 ? -1 : 0);

3
riscv/insns/mslt.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD((int32_t)RS1 < (int32_t)RS2 ? -1 : 0);

3
riscv/insns/msltu.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD((uint32_t)RS1 < (uint32_t)RS2 ? -1 : 0);

3
riscv/insns/mul_h00.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(sext(RS1, 16) * sext(RS2, 16));

3
riscv/insns/mul_h01.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(sext(RS1, 16) * sext(RS2 >> 16, 16));

3
riscv/insns/mul_h11.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(sext(RS1 >> 16, 16) * sext(RS2 >> 16, 16));

4
riscv/insns/mulh_h0.h

@ -0,0 +1,4 @@
require_extension('P');
require_rv32;
int64_t mres = sext(RS1,64) * sext(P_FIELD(RS2, 0, 16),64);
WRITE_RD(mres>>32);

4
riscv/insns/mulh_h1.h

@ -0,0 +1,4 @@
require_extension('P');
require_rv32;
int64_t mres = sext(RS1,64) * sext(P_FIELD(RS2, 1, 16),64);
WRITE_RD(mres>>32);

4
riscv/insns/mulhr.h

@ -0,0 +1,4 @@
require_extension('P');
require_rv32;
int64_t mres = sext(RS1,64) * sext(RS2,64);
WRITE_RD(((mres >> 31) + 1) >> 1);

4
riscv/insns/mulhrsu.h

@ -0,0 +1,4 @@
require_extension('P');
require_rv32;
sreg_t mres = sext(RS1,64) * reg_t((uint32_t)RS2);
WRITE_RD(((mres >> 31) + 1) >> 1);

4
riscv/insns/mulhru.h

@ -0,0 +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);

4
riscv/insns/mulhsu_h0.h

@ -0,0 +1,4 @@
require_extension('P');
require_rv32;
sreg_t mres = sext32(RS1) * (uint32_t)P_FIELD(RS2, 0, 16);
WRITE_RD(mres >> 32);

4
riscv/insns/mulhsu_h1.h

@ -0,0 +1,4 @@
require_extension('P');
require_rv32;
sreg_t mres = sext32(RS1) * (uint32_t)P_FIELD(RS2, 1, 16);
WRITE_RD(mres >> 32);

7
riscv/insns/mulq.h

@ -0,0 +1,7 @@
require_extension('P');
require_rv32;
if ((RS1 != (reg_t)INT32_MIN) || (RS2 != (reg_t)INT32_MIN)) {
WRITE_RD((RS1 * RS2) >> 31);
} else {
WRITE_RD(INT32_MAX);
}

7
riscv/insns/mulqr.h

@ -0,0 +1,7 @@
require_extension('P');
require_rv32;
if ((RS1 != (reg_t)INT32_MIN) || (RS2 != (reg_t)INT32_MIN)) {
WRITE_RD((((RS1 * RS2) >> 30) + 1) >> 1);
} else {
WRITE_RD(INT32_MAX);
}

3
riscv/insns/mulsu_h00.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(sext(RS1, 16) * zext(RS2, 16));

3
riscv/insns/mulsu_h11.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(sext(RS1 >> 16, 16) * zext(RS2 >> 16, 16));

3
riscv/insns/mulu_h00.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(zext(RS1, 16) * zext(RS2, 16));

3
riscv/insns/mulu_h01.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(zext(RS1, 16) * zext(RS2 >> 16, 16));

3
riscv/insns/mulu_h11.h

@ -0,0 +1,3 @@
require_extension('P');
require_rv32;
WRITE_RD(zext(RS1 >> 16, 16) * zext(RS2 >> 16, 16));

2
riscv/insns/mvm.h

@ -0,0 +1,2 @@
require_extension('P');
WRITE_RD((RS1 & RS2) | (RD & ~RS2));

2
riscv/insns/mvmn.h

@ -0,0 +1,2 @@
require_extension('P');
WRITE_RD((RD & RS2) | (RS1 & ~RS2));

3
riscv/insns/paadd_b.h

@ -0,0 +1,3 @@
P_RD_RS1_RS2_LOOP(8,8,8, {
p_rd = (p_rs1 + p_rs2) >> 1;
})

3
riscv/insns/paadd_h.h

@ -0,0 +1,3 @@
P_RD_RS1_RS2_LOOP(16,16,16, {
p_rd = (p_rs1 + p_rs2) >> 1;
})

3
riscv/insns/paaddu_b.h

@ -0,0 +1,3 @@
P_RD_RS1_RS2_ULOOP(8,8,8, {
p_rd = (p_rs1 + p_rs2) >> 1;
})

3
riscv/insns/paaddu_h.h

@ -0,0 +1,3 @@
P_RD_RS1_RS2_ULOOP(16,16,16, {
p_rd = (p_rs1 + p_rs2) >> 1;
})

5
riscv/insns/paas_hx.h

@ -0,0 +1,5 @@
P_CROSS_LOOP(16, {
p_rd = (p_rs1 + p_rs2) >> 1;
}, {
p_rd = (p_rs1 - p_rs2) >> 1;
})

4
riscv/insns/pabd_b.h

@ -0,0 +1,4 @@
P_RD_RS1_RS2_LOOP(8, 8, 8, {
p_rd = (p_rs1 < p_rs2) ? (int8_t)((uint8_t)p_rs2 - (uint8_t)p_rs1)
: (int8_t)((uint8_t)p_rs1 - (uint8_t)p_rs2);
})

4
riscv/insns/pabd_h.h

@ -0,0 +1,4 @@
P_RD_RS1_RS2_LOOP(16, 16, 16, {
p_rd = (p_rs1 < p_rs2) ? (int16_t)((uint16_t)p_rs2 - (uint16_t)p_rs1)
: (int16_t)((uint16_t)p_rs1 - (uint16_t)p_rs2);
})

3
riscv/insns/pabdsumau_b.h

@ -0,0 +1,3 @@
P_REDUCTION_ULOOP(64, 8, true, false, {
p_res += (p_rs1 > p_rs2 ? p_rs1 - p_rs2 : p_rs2 - p_rs1);
})

3
riscv/insns/pabdsumu_b.h

@ -0,0 +1,3 @@
P_REDUCTION_ULOOP(64, 8, false, false, {
p_res += (p_rs1 > p_rs2 ? p_rs1 - p_rs2 : p_rs2 - p_rs1);
})

3
riscv/insns/pabdu_b.h

@ -0,0 +1,3 @@
P_RD_RS1_RS2_ULOOP(8, 8, 8, {
p_rd = (p_rs1 < p_rs2) ? p_rs2 - p_rs1 : p_rs1 - p_rs2;
})

3
riscv/insns/pabdu_h.h

@ -0,0 +1,3 @@
P_RD_RS1_RS2_ULOOP(16, 16, 16, {
p_rd = (p_rs1 < p_rs2) ? p_rs2 - p_rs1 : p_rs1 - p_rs2;
})

5
riscv/insns/pack.h

@ -1,6 +1,7 @@
// RV32Zbb contains zext.h but not general pack
require(((xlen == 32) && (insn.rs2() == 0) && p->extension_enabled(EXT_ZBB))
|| p->extension_enabled(EXT_ZBKB));
|| p->extension_enabled(EXT_ZBKB)
|| p->extension_enabled('P'));
reg_t lo = zext_xlen(RS1 << (xlen/2)) >> (xlen/2);
reg_t hi = zext_xlen(RS2 << (xlen/2));
WRITE_RD(sext_xlen(lo | hi));
WRITE_RD(sext_xlen(lo | hi));

3
riscv/insns/padd_b.h

@ -0,0 +1,3 @@
P_RD_RS1_RS2_LOOP(8,8,8, {
p_rd = p_rs1 + p_rs2;
})

3
riscv/insns/padd_bs.h

@ -0,0 +1,3 @@
P_RD_RS1_LOOP(8, 8, {
p_rd = p_rs1 + P_FIELD(RS2, 0, 8);
})

3
riscv/insns/padd_h.h

@ -0,0 +1,3 @@
P_RD_RS1_RS2_LOOP(16, 16, 16, {
p_rd = p_rs1 + p_rs2;
})

3
riscv/insns/padd_hs.h

@ -0,0 +1,3 @@
P_RD_RS1_LOOP(16, 16, {
p_rd = p_rs1 + P_FIELD(RS2, 0, 16);
})

5
riscv/insns/pas_hx.h

@ -0,0 +1,5 @@
P_CROSS_LOOP(16, {
p_rd = p_rs1 + p_rs2;
}, {
p_rd = p_rs1 - p_rs2;
})

5
riscv/insns/pasa_hx.h

@ -0,0 +1,5 @@
P_CROSS_LOOP(16, {
p_rd = (p_rs1 - p_rs2) >> 1;
}, {
p_rd = (p_rs1 + p_rs2) >> 1;
})

3
riscv/insns/pasub_b.h

@ -0,0 +1,3 @@
P_RD_RS1_RS2_LOOP(8,8,8, {
p_rd = (p_rs1 - p_rs2) >> 1;
})

3
riscv/insns/pasub_h.h

@ -0,0 +1,3 @@
P_RD_RS1_RS2_LOOP(16,16,16, {
p_rd = (p_rs1 - p_rs2) >> 1;
})

3
riscv/insns/pasubu_b.h

@ -0,0 +1,3 @@
P_RD_RS1_RS2_ULOOP(8,8,8, {
p_rd = (p_rs1 - p_rs2) >> 1;
})

3
riscv/insns/pasubu_h.h

@ -0,0 +1,3 @@
P_RD_RS1_RS2_ULOOP(16,16,16, {
p_rd = (p_rs1 - p_rs2) >> 1;
})

3
riscv/insns/pli_b.h

@ -0,0 +1,3 @@
P_RD_LOOP(8, {
p_rd = insn.p_imm8();
})

4
riscv/insns/pli_db.h

@ -0,0 +1,4 @@
require_rv32;
P_RD_DW_LOOP(8, {
p_rd = insn.p_imm8();
})

4
riscv/insns/pli_dh.h

@ -0,0 +1,4 @@
require_rv32;
P_RD_DW_LOOP(16, {
p_rd = (insn.p_imm10csl() & 0x200) ? (0xfc00 | insn.p_imm10csl()) : insn.p_imm10csl();
})

3
riscv/insns/pli_h.h

@ -0,0 +1,3 @@
P_RD_LOOP(16, {
p_rd = (insn.p_imm10csl() & 0x200) ? (0xfc00 | insn.p_imm10csl()) : insn.p_imm10csl();
})

4
riscv/insns/plui_dh.h

@ -0,0 +1,4 @@
require_rv32;
P_RD_DW_LOOP(16, {
p_rd = insn.p_imm10csr();
})

3
riscv/insns/plui_h.h

@ -0,0 +1,3 @@
P_RD_LOOP(16, {
p_rd = insn.p_imm10csr();
})

3
riscv/insns/pm2add_h.h

@ -0,0 +1,3 @@
P_REDUCTION_LOOP(32, 16, false, false, {
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm2add_hx.h

@ -0,0 +1,3 @@
P_REDUCTION_CROSS_LOOP(32, 16, false, false, {
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm2adda_h.h

@ -0,0 +1,3 @@
P_REDUCTION_LOOP(32, 16, true, false, {
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm2adda_hx.h

@ -0,0 +1,3 @@
P_REDUCTION_CROSS_LOOP(32, 16, true, false, {
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm2addasu_h.h

@ -0,0 +1,3 @@
P_REDUCTION_SULOOP(32, 16, true, false, {
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm2addau_h.h

@ -0,0 +1,3 @@
P_REDUCTION_ULOOP(32, 16, true, false, {
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm2addsu_h.h

@ -0,0 +1,3 @@
P_REDUCTION_SULOOP(32, 16, false, false, {
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm2addu_h.h

@ -0,0 +1,3 @@
P_REDUCTION_ULOOP(32, 16, false, false, {
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm2sadd_h.h

@ -0,0 +1,3 @@
P_REDUCTION_LOOP(32, 16, false, true, {
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm2sadd_hx.h

@ -0,0 +1,3 @@
P_REDUCTION_CROSS_LOOP(32, 16, false, true, {
p_res += p_rs1 * p_rs2;
})

6
riscv/insns/pm2sub_h.h

@ -0,0 +1,6 @@
P_REDUCTION_LOOP(32, 16, false, false, {
if (j & 1)
p_res -= p_rs1 * p_rs2;
else
p_res += p_rs1 * p_rs2;
})

6
riscv/insns/pm2sub_hx.h

@ -0,0 +1,6 @@
P_REDUCTION_CROSS_LOOP(32, 16, false, false, {
if (j & 1)
p_res -= p_rs1 * p_rs2;
else
p_res += p_rs1 * p_rs2;
})

6
riscv/insns/pm2suba_h.h

@ -0,0 +1,6 @@
P_REDUCTION_LOOP(32, 16, true, false, {
if (j & 1)
p_res -= p_rs1 * p_rs2;
else
p_res += p_rs1 * p_rs2;
})

6
riscv/insns/pm2suba_hx.h

@ -0,0 +1,6 @@
P_REDUCTION_CROSS_LOOP(32, 16, true, false, {
if (j & 1)
p_res -= p_rs1 * p_rs2;
else
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm4add_b.h

@ -0,0 +1,3 @@
P_REDUCTION_LOOP(32, 8, false, false, {
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm4adda_b.h

@ -0,0 +1,3 @@
P_REDUCTION_LOOP(32, 8, true, false, {
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm4addasu_b.h

@ -0,0 +1,3 @@
P_REDUCTION_SULOOP(32, 8, true, false, {
p_res += p_rs1 * p_rs2;
})

3
riscv/insns/pm4addau_b.h

@ -0,0 +1,3 @@
P_REDUCTION_ULOOP(32, 8, true, false, {
p_res += p_rs1 * p_rs2;
})

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save