0039-RISC-V-Added-Removed-Updated-instructions-to-the-ris.patch 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. From 9f3047973b9f80b2b95989c86762502e456e59cf Mon Sep 17 00:00:00 2001
  2. From: Nelson Chu <nelson.chu@sifive.com>
  3. Date: Thu, 3 Dec 2020 15:35:49 +0800
  4. Subject: [PATCH 39/48] RISC-V: Added/Removed/Updated instructions to the
  5. riscv-bitmanip-20201107.
  6. * Added xperm.[nbhw] instructions.
  7. * Regularized min vs. minu encoding to match slt vs. sltu (swap minu and max).
  8. * Removed add[i]wu, subwu and clmul[rh]w.
  9. ---
  10. include/opcode/riscv-opc.h | 34 ++++++++++++++--------------------
  11. opcodes/riscv-opc.c | 10 ++++------
  12. 2 files changed, 18 insertions(+), 26 deletions(-)
  13. diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h
  14. index 426db0ca5f..500be26f0f 100644
  15. --- a/include/opcode/riscv-opc.h
  16. +++ b/include/opcode/riscv-opc.h
  17. @@ -279,9 +279,9 @@
  18. #define MASK_CLMULH 0xfe00707f
  19. #define MATCH_MIN 0xa004033
  20. #define MASK_MIN 0xfe00707f
  21. -#define MATCH_MAX 0xa005033
  22. +#define MATCH_MAX 0xa006033
  23. #define MASK_MAX 0xfe00707f
  24. -#define MATCH_MINU 0xa006033
  25. +#define MATCH_MINU 0xa005033
  26. #define MASK_MINU 0xfe00707f
  27. #define MATCH_MAXU 0xa007033
  28. #define MASK_MAXU 0xfe00707f
  29. @@ -289,6 +289,12 @@
  30. #define MASK_SHFL 0xfe00707f
  31. #define MATCH_UNSHFL 0x8005033
  32. #define MASK_UNSHFL 0xfe00707f
  33. +#define MATCH_XPERMN 0x28002033
  34. +#define MASK_XPERMN 0xfe00707f
  35. +#define MATCH_XPERMB 0x28004033
  36. +#define MASK_XPERMB 0xfe00707f
  37. +#define MATCH_XPERMH 0x28006033
  38. +#define MASK_XPERMH 0xfe00707f
  39. #define MATCH_BEXT 0x8006033
  40. #define MASK_BEXT 0xfe00707f
  41. #define MATCH_BDEP 0x48006033
  42. @@ -315,14 +321,8 @@
  43. #define MASK_BMATOR 0xfe00707f
  44. #define MATCH_BMATXOR 0x48003033
  45. #define MASK_BMATXOR 0xfe00707f
  46. -#define MATCH_ADDIWU 0x401b
  47. -#define MASK_ADDIWU 0x707f
  48. #define MATCH_SLLIU_W 0x800101b
  49. #define MASK_SLLIU_W 0xfc00707f
  50. -#define MATCH_ADDWU 0xa00003b
  51. -#define MASK_ADDWU 0xfe00707f
  52. -#define MATCH_SUBWU 0x4a00003b
  53. -#define MASK_SUBWU 0xfe00707f
  54. #define MATCH_ADDU_W 0x800003b
  55. #define MASK_ADDU_W 0xfe00707f
  56. #define MATCH_SUBU_W 0x4800003b
  57. @@ -381,16 +381,12 @@
  58. #define MASK_SH2ADDU_W 0xfe00707f
  59. #define MATCH_SH3ADDU_W 0x2000603b
  60. #define MASK_SH3ADDU_W 0xfe00707f
  61. -#define MATCH_CLMULW 0xa00103b
  62. -#define MASK_CLMULW 0xfe00707f
  63. -#define MATCH_CLMULRW 0xa00203b
  64. -#define MASK_CLMULRW 0xfe00707f
  65. -#define MATCH_CLMULHW 0xa00303b
  66. -#define MASK_CLMULHW 0xfe00707f
  67. #define MATCH_SHFLW 0x800103b
  68. #define MASK_SHFLW 0xfe00707f
  69. #define MATCH_UNSHFLW 0x800503b
  70. #define MASK_UNSHFLW 0xfe00707f
  71. +#define MATCH_XPERMW 0x28000033
  72. +#define MASK_XPERMW 0xfe00707f
  73. #define MATCH_BEXTW 0x800603b
  74. #define MASK_BEXTW 0xfe00707f
  75. #define MATCH_BDEPW 0x4800603b
  76. @@ -3706,6 +3702,9 @@ DECLARE_INSN(minu, MATCH_MINU, MASK_MINU)
  77. DECLARE_INSN(maxu, MATCH_MAXU, MASK_MAXU)
  78. DECLARE_INSN(shfl, MATCH_SHFL, MASK_SHFL)
  79. DECLARE_INSN(unshfl, MATCH_UNSHFL, MASK_UNSHFL)
  80. +DECLARE_INSN(xperm_n, MATCH_XPERMN, MASK_XPERMN)
  81. +DECLARE_INSN(xperm_b, MATCH_XPERMB, MASK_XPERMB)
  82. +DECLARE_INSN(xperm_h, MATCH_XPERMH, MASK_XPERMH)
  83. DECLARE_INSN(bext, MATCH_BEXT, MASK_BEXT)
  84. DECLARE_INSN(bdep, MATCH_BDEP, MASK_BDEP)
  85. DECLARE_INSN(pack, MATCH_PACK, MASK_PACK)
  86. @@ -3719,10 +3718,7 @@ DECLARE_INSN(crc32_d, MATCH_CRC32_D, MASK_CRC32_D)
  87. DECLARE_INSN(crc32c_d, MATCH_CRC32C_D, MASK_CRC32C_D)
  88. DECLARE_INSN(bmator, MATCH_BMATOR, MASK_BMATOR)
  89. DECLARE_INSN(bmatxor, MATCH_BMATXOR, MASK_BMATXOR)
  90. -DECLARE_INSN(addiwu, MATCH_ADDIWU, MASK_ADDIWU)
  91. DECLARE_INSN(slliu_w, MATCH_SLLIU_W, MASK_SLLIU_W)
  92. -DECLARE_INSN(addwu, MATCH_ADDWU, MASK_ADDWU)
  93. -DECLARE_INSN(subwu, MATCH_SUBWU, MASK_SUBWU)
  94. DECLARE_INSN(addu_w, MATCH_ADDU_W, MASK_ADDU_W)
  95. DECLARE_INSN(subu_w, MATCH_SUBU_W, MASK_SUBU_W)
  96. DECLARE_INSN(slow, MATCH_SLOW, MASK_SLOW)
  97. @@ -3752,11 +3748,9 @@ DECLARE_INSN(pcntw, MATCH_PCNTW, MASK_PCNTW)
  98. DECLARE_INSN(sh1addu_w, MATCH_SH1ADDU_W, MASK_SH1ADDU_W)
  99. DECLARE_INSN(sh2addu_w, MATCH_SH2ADDU_W, MASK_SH2ADDU_W)
  100. DECLARE_INSN(sh3addu_w, MATCH_SH3ADDU_W, MASK_SH3ADDU_W)
  101. -DECLARE_INSN(clmulw, MATCH_CLMULW, MASK_CLMULW)
  102. -DECLARE_INSN(clmulrw, MATCH_CLMULRW, MASK_CLMULRW)
  103. -DECLARE_INSN(clmulhw, MATCH_CLMULHW, MASK_CLMULHW)
  104. DECLARE_INSN(shflw, MATCH_SHFLW, MASK_SHFLW)
  105. DECLARE_INSN(unshflw, MATCH_UNSHFLW, MASK_UNSHFLW)
  106. +DECLARE_INSN(xperm_w, MATCH_XPERMW, MASK_XPERMW)
  107. DECLARE_INSN(bextw, MATCH_BEXTW, MASK_BEXTW)
  108. DECLARE_INSN(bdepw, MATCH_BDEPW, MASK_BDEPW)
  109. DECLARE_INSN(packw, MATCH_PACKW, MASK_PACKW)
  110. diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c
  111. index bf36ada39c..f55e1281ed 100644
  112. --- a/opcodes/riscv-opc.c
  113. +++ b/opcodes/riscv-opc.c
  114. @@ -1056,6 +1056,9 @@ const struct riscv_opcode riscv_opcodes[] =
  115. {"shfl", 0, INSN_CLASS_B_OR_ZBP, "d,s,|", MATCH_SHFLI, MASK_SHFLI, match_opcode, INSN_ALIAS },
  116. {"unshfl", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_UNSHFL, MASK_UNSHFL, match_opcode, 0 },
  117. {"unshfl", 0, INSN_CLASS_B_OR_ZBP, "d,s,|", MATCH_UNSHFLI, MASK_UNSHFLI, match_opcode, INSN_ALIAS },
  118. +{"xperm.n", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_XPERMN, MASK_XPERMN, match_opcode, 0 },
  119. +{"xperm.b", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_XPERMB, MASK_XPERMB, match_opcode, 0 },
  120. +{"xperm.h", 0, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_XPERMH, MASK_XPERMH, match_opcode, 0 },
  121. {"bdep", 0, INSN_CLASS_B_OR_ZBE, "d,s,t", MATCH_BDEP, MASK_BDEP, match_opcode, 0 },
  122. {"bext", 0, INSN_CLASS_B_OR_ZBE, "d,s,t", MATCH_BEXT, MASK_BEXT, match_opcode, 0 },
  123. {"pack", 0, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_PACK, MASK_PACK, match_opcode, 0 },
  124. @@ -1064,10 +1067,7 @@ const struct riscv_opcode riscv_opcodes[] =
  125. {"bmator", 64, INSN_CLASS_B_OR_ZBM, "d,s,t", MATCH_BMATOR, MASK_BMATOR, match_opcode, 0 },
  126. {"bmatxor", 64, INSN_CLASS_B_OR_ZBM, "d,s,t", MATCH_BMATXOR, MASK_BMATXOR, match_opcode, 0 },
  127. {"bfp", 0, INSN_CLASS_B_OR_ZBF, "d,s,t", MATCH_BFP, MASK_BFP, match_opcode, 0 },
  128. -{"addiwu", 64, INSN_CLASS_B_OR_ZBB, "d,s,j", MATCH_ADDIWU, MASK_ADDIWU, match_opcode, 0 },
  129. {"slliu.w", 64, INSN_CLASS_B_OR_ZBB, "d,s,>", MATCH_SLLIU_W, MASK_SLLIU_W, match_opcode, 0 },
  130. -{"addwu", 64, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_ADDWU, MASK_ADDWU, match_opcode, 0 },
  131. -{"subwu", 64, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_SUBWU, MASK_SUBWU, match_opcode, 0 },
  132. {"addu.w", 64, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_ADDU_W, MASK_ADDU_W, match_opcode, 0 },
  133. {"subu.w", 64, INSN_CLASS_B_OR_ZBB, "d,s,t", MATCH_SUBU_W, MASK_SUBU_W, match_opcode, 0 },
  134. {"sloiw", 64, INSN_CLASS_B_OR_ZBP, "d,s,<", MATCH_SLOIW, MASK_SLOIW, match_opcode, 0 },
  135. @@ -1110,11 +1110,9 @@ const struct riscv_opcode riscv_opcodes[] =
  136. {"sh1addu.w",64, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH1ADDU_W, MASK_SH1ADDU_W, match_opcode, 0 },
  137. {"sh2addu.w",64, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH2ADDU_W, MASK_SH2ADDU_W, match_opcode, 0 },
  138. {"sh3addu.w",64, INSN_CLASS_B_OR_ZBA, "d,s,t", MATCH_SH3ADDU_W, MASK_SH3ADDU_W, match_opcode, 0 },
  139. -{"clmulw", 64, INSN_CLASS_B_OR_ZBC, "d,s,t", MATCH_CLMULW, MASK_CLMULW, match_opcode, 0 },
  140. -{"clmulhw", 64, INSN_CLASS_B_OR_ZBC, "d,s,t", MATCH_CLMULHW, MASK_CLMULHW, match_opcode, 0 },
  141. -{"clmulrw", 64, INSN_CLASS_B_OR_ZBC, "d,s,t", MATCH_CLMULRW, MASK_CLMULRW, match_opcode, 0 },
  142. {"shflw", 64, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_SHFLW, MASK_SHFLW, match_opcode, 0 },
  143. {"unshflw", 64, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_UNSHFLW, MASK_UNSHFLW, match_opcode, 0 },
  144. +{"xperm.w", 64, INSN_CLASS_B_OR_ZBP, "d,s,t", MATCH_XPERMW, MASK_XPERMW, match_opcode, 0 },
  145. {"bdepw", 64, INSN_CLASS_B_OR_ZBE, "d,s,t", MATCH_BDEPW, MASK_BDEPW, match_opcode, 0 },
  146. {"bextw", 64, INSN_CLASS_B_OR_ZBE, "d,s,t", MATCH_BEXTW, MASK_BEXTW, match_opcode, 0 },
  147. {"packw", 64, INSN_CLASS_B_OR_ZBB_OR_ZBP, "d,s,t", MATCH_PACKW, MASK_PACKW, match_opcode, 0 },
  148. --
  149. 2.33.0