Advertisement
cr88192

Working Spec: XG3RV Sub-ISA Idea

Oct 24th, 2024
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.56 KB | None | 0 0
  1. BSR4K / XG3:
  2. * Repack of XG2RV Encoding Space to be compatible with RISC-V OP32 Encodings.
  3. ** Some mostly minor differences will exist.
  4. * Would exist in a separate operating mode from RV64GC.
  5. ** XG3RV uses the same encoding space as the RISC-V 'C' extension.
  6. * XG3RV will require a 32-bit instruction alignment.
  7.  
  8. Original XG2/XG2RV Encoding:
  9. * NMOP-YwYY-nnnn-mmmm ZZZZ-Qnmo-oooo-XXXX (F0/F3/F9)
  10. * NMJP-YwYY-nnnn-mmmm ZZZZ-Qnmo-oooo-oooo (F1/F2)
  11. * NABP-YwYY-ZZZn-nnnn iiii-iiii-iiii-iiii (F8)
  12. * ABC1-111Y-jjjj-jjjj iiii-iiii-iiii-iiii (FE/FF)
  13.  
  14. Repack:
  15. * XXXX-oooooo-mmmmmm-ZZZZ-nnnnnn-QY-YYPw (F0)
  16. * jiii-iiiiii-mmmmmm-ZZZZ-nnnnnn-QY-YYPw (F1/F2)
  17. * iiii-iiiiii-iiiiii-aZZZ-nnnnnn-bY-YYPw (F8)
  18. * iiii-iiiiii-iiiiii-aZZZ-jjjjjj-bY-YYPw (BRA)
  19. * iiii-iiiiii-iiiiii-jjjj-jjjjab-c1-1Y10 (FE/FF)
  20.  
  21. Pw:
  22. * 00: OP?T (Conditional True)
  23. * 01: OP?F (Conditional False)
  24. * 10: OP
  25. * 11: RV OP32
  26.  
  27. Where, YYY:
  28. 000: F0 (3R ops)
  29. 001: F1 (LD/ST Disp10)
  30. 010: F2 (3RI Imm10 Ops)
  31. 011: F3 (Reserved / User)
  32. 100: F8 (Imm16 ops)
  33. 101: F9 (Reserved)
  34. 110: FE (Jumbo Prefix)
  35. 111: FF (Jumbo Prefix)
  36.  
  37. Exact repacking rules will depend on the encoding block.
  38. * F1/F2/F8: Will modify repacking such that immed bits are contiguous.
  39. * F3 and F9 will use same repacking as F0.
  40.  
  41. Changes (from BJX2 / XG2):
  42. * FA/FB, EA/EB/EE/EF: Will be N/E.
  43. * WEX is N/E.
  44. * PrWEX is N/E.
  45. * Will relocate BRA/BSR to the F8 block.
  46. ** Will be relative to BasePC vs NextPC.
  47. ** This will be to match RISC-V behavior.
  48.  
  49.  
  50. Registers:
  51. * R0: ZR (Zero Register)
  52. * R1: LR (Link Register)
  53. * R2: SP (Stack Pointer)
  54. * R3: GP (Global Pointer)
  55. * R4: TP (Task Pointer)
  56. * R5..R31: GRPs
  57. * R32..R63: GRPs (Aliased to F0..F31)
  58.  
  59. Can note that Rn notation will specify a single register being used, wheres Xn will specify a 128-bit register pair.
  60.  
  61. R0 and R1 will be special if used as the base register of a Load/Store:
  62. * R0: PC
  63. * R1: Reserved
  64.  
  65.  
  66. 0000-oooooo-mmmmmm-0000-nnnnnn-Q0-0010
  67.  
  68. * F0zz_0zzZ
  69. ** 0000-oooooo-mmmmmm-0000-nnnnnn-00-0010 (N/A)
  70. ** 0000-oooooo-mmmmmm-0000-nnnnnn-10-0010 (N/A)
  71. ** 0001-oooooo-mmmmmm-0000-nnnnnn-00-0010 (N/A)
  72. ** 0001-oooooo-mmmmmm-0000-nnnnnn-10-0010 (N/A)
  73. ** 0010-oooooo-mmmmmm-0000-nnnnnn-00-0010 (N/A)
  74. ** 0010-oooooo-mmmmmm-0000-nnnnnn-10-0010 (N/A)
  75. ** 0011-oooooo-mmmmmm-0000-nnnnnn-00-0010 (N/A)
  76. ** 0011-oooooo-mmmmmm-0000-nnnnnn-10-0010 (N/A)
  77. ** 0100-oooooo-mmmmmm-0000-nnnnnn-00-0010 MOV.B Rn, (Rm, Ro) //SB
  78. ** 0100-oooooo-mmmmmm-0000-nnnnnn-10-0010 LEA.B (Rm, Ro), Rn
  79. ** 0101-oooooo-mmmmmm-0000-nnnnnn-00-0010 MOV.W Rn, (Rm, Ro) //SH
  80. ** 0101-oooooo-mmmmmm-0000-nnnnnn-10-0010 LEA.W (Rm, Ro), Rn
  81. ** 0110-oooooo-mmmmmm-0000-nnnnnn-00-0010 MOV.L Rn, (Rm, Ro) //SW
  82. ** 0110-oooooo-mmmmmm-0000-nnnnnn-10-0010 LEA.L (Rm, Ro), Rn
  83. ** 0111-oooooo-mmmmmm-0000-nnnnnn-00-0010 MOV.Q Rn, (Rm, Ro) //SD
  84. ** 0111-oooooo-mmmmmm-0000-nnnnnn-10-0010 LEA.Q (Rm, Ro), Rn
  85. ** 1000-oooooo-mmmmmm-0000-nnnnnn-00-0010 (N/A)
  86. ** 1000-oooooo-mmmmmm-0000-nnnnnn-10-0010 (N/A)
  87. ** 1001-oooooo-mmmmmm-0000-nnnnnn-00-0010 (N/A)
  88. ** 1001-oooooo-mmmmmm-0000-nnnnnn-10-0010 (N/A)
  89. ** 1010-oooooo-mmmmmm-0000-nnnnnn-00-0010 (N/A)
  90. ** 1010-oooooo-mmmmmm-0000-nnnnnn-10-0010 (N/A)
  91. ** 1011-oooooo-mmmmmm-0000-nnnnnn-00-0010 (N/A)
  92. ** 1011-oooooo-mmmmmm-0000-nnnnnn-10-0010 LDTEX (Rm, Ro), Rn
  93. ** 1100-oooooo-mmmmmm-0000-nnnnnn-00-0010 MOV.B (Rm, Ro), Rn //LB
  94. ** 1100-oooooo-mmmmmm-0000-nnnnnn-10-0010 MOVU.B (Rm, Ro), Rn //LBU
  95. ** 1101-oooooo-mmmmmm-0000-nnnnnn-00-0010 MOV.W (Rm, Ro), Rn //LH
  96. ** 1101-oooooo-mmmmmm-0000-nnnnnn-10-0010 MOVU.W (Rm, Ro), Rn //LHU
  97. ** 1110-oooooo-mmmmmm-0000-nnnnnn-00-0010 MOV.L (Rm, Ro), Rn //LW
  98. ** 1110-oooooo-mmmmmm-0000-nnnnnn-10-0010 MOVU.L (Rm, Ro), Rn //LWU
  99. ** 1111-oooooo-mmmmmm-0000-nnnnnn-00-0010 MOV.Q (Rm, Ro), Rn //LD
  100. ** 1111-oooooo-mmmmmm-0000-nnnnnn-10-0010 LDTEX2
  101.  
  102. * F0zz_1zzZ
  103. ** 0000-oooooo-mmmmmm-0001-nnnnnn-00-0010 ADD Rm, Ro, Rn
  104. ** 0000-oooooo-mmmmmm-0001-nnnnnn-10-0010 ADDX Xm, Xo, Xn
  105. ** 0001-oooooo-mmmmmm-0001-nnnnnn-00-0010 SUB Rm, Ro, Rn
  106. ** 0001-oooooo-mmmmmm-0001-nnnnnn-10-0010 SUBX Xm, Xo, Xn
  107. ** 0010-oooooo-mmmmmm-0001-nnnnnn-00-0010 MULS.L Rm, Ro, Rn
  108. ** 0010-oooooo-mmmmmm-0001-nnnnnn-10-0010 MULS.Q Rm, Ro, Rn
  109. ** 0011-oooooo-mmmmmm-0001-nnnnnn-00-0010 MULU.L Rm, Ro, Rn
  110. ** 0011-oooooo-mmmmmm-0001-nnnnnn-10-0010 MULU.Q Rm, Ro, Rn
  111. ** 0100-oooooo-mmmmmm-0001-nnnnnn-00-0010 MIN Rm, Ro, Rn
  112. ** 0100-oooooo-mmmmmm-0001-nnnnnn-10-0010 MAX Rm, Ro, Rn
  113. ** 0101-oooooo-mmmmmm-0001-nnnnnn-00-0010 AND Rm, Ro, Rn
  114. ** 0101-oooooo-mmmmmm-0001-nnnnnn-10-0010 ANDX Xm, Xo, Xn
  115. ** 0110-oooooo-mmmmmm-0001-nnnnnn-00-0010 OR Rm, Ro, Rn
  116. ** 0110-oooooo-mmmmmm-0001-nnnnnn-10-0010 ORX Xm, Xo, Xn
  117. ** 0111-oooooo-mmmmmm-0001-nnnnnn-00-0010 XOR Rm, Ro, Rn
  118. ** 0111-oooooo-mmmmmm-0001-nnnnnn-10-0010 XORX Xm, Xo, Xn
  119.  
  120. * F0zz_2zzz (More 3R Ops)
  121. ** 0000-oooooo-mmmmmm-0010-nnnnnn-00-0010 PADD.W Rm, Ro, Rn
  122. ** 0000-oooooo-mmmmmm-0010-nnnnnn-10-0010 PADD.L Rm, Ro, Rn
  123. ** 0001-oooooo-mmmmmm-0010-nnnnnn-00-0010 PSUB.W Rm, Ro, Rn
  124. ** 0001-oooooo-mmmmmm-0010-nnnnnn-10-0010 PSUB.L Rm, Ro, Rn
  125. ** 0010-oooooo-mmmmmm-0010-nnnnnn-00-0010 SHAR.L Rm, Ro, Rn
  126. ** 0010-oooooo-mmmmmm-0010-nnnnnn-10-0010 SHAR.Q Rm, Ro, Rn
  127. ** 0011-oooooo-mmmmmm-0010-nnnnnn-00-0010 SHLR.L Rm, Ro, Rn
  128. ** 0011-oooooo-mmmmmm-0010-nnnnnn-10-0010 SHLR.Q Rm, Ro, Rn
  129. ** 0100-oooooo-mmmmmm-0010-nnnnnn-00-0010 PCSELT.W Rm, Ro, Rn
  130. ** 0100-oooooo-mmmmmm-0010-nnnnnn-10-0010 PCSELT.L Rm, Ro, Rn
  131. ** 0101-oooooo-mmmmmm-0010-nnnnnn-00-0010 PADD.F Rm, Ro, Rn
  132. ** 0101-oooooo-mmmmmm-0010-nnnnnn-10-0010 PADDX.F Xm, Xo, Xn
  133. ** 0110-oooooo-mmmmmm-0010-nnnnnn-00-0010 PSUB.F Rm, Ro, Rn
  134. ** 0110-oooooo-mmmmmm-0010-nnnnnn-10-0010 PSUBX.F Xm, Xo, Xn
  135. ** 0111-oooooo-mmmmmm-0010-nnnnnn-00-0010 PMUL.F Rm, Ro, Rn
  136. ** 0111-oooooo-mmmmmm-0010-nnnnnn-10-0010 PMULX.F Xm, Xo, Xn
  137. ** 1000-oooooo-mmmmmm-0010-nnnnnn-00-0010 MOVHD Rm, Ro, Rn
  138. ** 1000-oooooo-mmmmmm-0010-nnnnnn-10-0010 MOVLD Rm, Ro, Rn
  139. ** 1001-oooooo-mmmmmm-0010-nnnnnn-00-0010 MOVHLD Rm, Ro, Rn
  140. ** 1001-oooooo-mmmmmm-0010-nnnnnn-10-0010 MOVLHD Rm, Ro, Rn
  141. ** 1010-oooooo-mmmmmm-0010-nnnnnn-00-0010 PSCHEQ.W Rm, Ro, Rn
  142. ** 1010-oooooo-mmmmmm-0010-nnnnnn-10-0010 PSCHEQ.B Rm, Ro, Rn
  143. ** 1011-oooooo-mmmmmm-0010-nnnnnn-00-0010 PSCHNE.W Rm, Ro, Rn
  144. ** 1011-oooooo-mmmmmm-0010-nnnnnn-10-0010 PSCHNE.B Rm, Ro, Rn
  145. ** 1100-oooooo-mmmmmm-0010-nnnnnn-00-0010 BLKUTX1 Rm, Ro, Rn
  146. ** 1100-oooooo-mmmmmm-0010-nnnnnn-10-0010 BLKUTX2 Rm, Ro, Rn
  147. ** 1101-oooooo-mmmmmm-0010-nnnnnn-00-0010 PADD.H Rm, Ro, Rn
  148. ** 1101-oooooo-mmmmmm-0010-nnnnnn-10-0010 PADDX.D Xm, Xo, Xn
  149. ** 1110-oooooo-mmmmmm-0010-nnnnnn-00-0010 PSUB.H Rm, Ro, Rn
  150. ** 1110-oooooo-mmmmmm-0010-nnnnnn-10-0010 PSUBX.D Xm, Xo, Xn
  151. ** 1111-oooooo-mmmmmm-0010-nnnnnn-00-0010 PMUL.H Rm, Ro, Rn
  152. ** 1111-oooooo-mmmmmm-0010-nnnnnn-10-0010 PMULX.D Xm, Xo, Xn
  153.  
  154. ** 0001-oooooo-mmmmmm-0011-nnnnnn-00-0010 MOVTT Rm, Ri, Rn
  155. ** 0001-oooooo-mmmmmm-0011-nnnnnn-10-0010 MOVTT Rm, Imm6u, Rn
  156. ** 0010-oooooo-mmmmmm-0011-nnnnnn-00-0010 ROTLQ Rm, Ro, Rn
  157. ** 0010-oooooo-mmmmmm-0011-nnnnnn-10-0010 SHARX Xm, Ro, Xn
  158. ** 0011-oooooo-mmmmmm-0011-nnnnnn-00-0010 ROTRQ Rm, Ro, Rn
  159. ** 0011-oooooo-mmmmmm-0011-nnnnnn-10-0010 SHLRX Xm, Ro, Xn
  160. ** 0100-oooooo-mmmmmm-0011-nnnnnn-00-0010 MULHS.Q Rm, Ro, Rn
  161. ** 0100-oooooo-mmmmmm-0011-nnnnnn-10-0010 SHADX Xm, Ro, Xn
  162. ** 0101-oooooo-mmmmmm-0011-nnnnnn-00-0010 MULHU.Q Rm, Ro, Rn
  163. ** 0101-oooooo-mmmmmm-0011-nnnnnn-10-0010 SHLDX Xm, Ro, Xn
  164. ** 0110-oooooo-mmmmmm-0011-nnnnnn-00-0010 ROTL.L Rm, Ro, Rn
  165. ** 0110-oooooo-mmmmmm-0011-nnnnnn-10-0010 ROTLX Xm, Ro, Xn
  166.  
  167. * F0nm_4eoz
  168. ** 0000-oooooo-mmmmmm-0100-nnnnnn-00-0010 MOV.X Xn, (Rm, Disp6s)
  169. ** 0000-oooooo-mmmmmm-0100-nnnnnn-10-0010 LEAT.B (Rm, Disp6s), Rn
  170. ** 0001-oooooo-mmmmmm-0100-nnnnnn-00-0010 (N/A)
  171. ** 0001-oooooo-mmmmmm-0100-nnnnnn-10-0010 LEAT.W (Rm, Disp6s), Rn
  172. ** 0010-oooooo-mmmmmm-0100-nnnnnn-00-0010 FMOV.S Rn, (Rm, Disp6s)
  173. ** 0010-oooooo-mmmmmm-0100-nnnnnn-10-0010 LEAT.L (Rm, Disp6s), Rn
  174. ** 0011-oooooo-mmmmmm-0100-nnnnnn-00-0010 FMOV.H Rn, (Rm, Disp6s)
  175. ** 0011-oooooo-mmmmmm-0100-nnnnnn-10-0010 LEAT.Q (Rm, Disp6s), Rn
  176. ** 0100-oooooo-mmmmmm-0100-nnnnnn-00-0010 MOV.X Xn, (Rm, Ro)
  177. ** 0100-oooooo-mmmmmm-0100-nnnnnn-10-0010 LEAT.B (Rm, Ro), Rn
  178. ** 0101-oooooo-mmmmmm-0100-nnnnnn-00-0010 (N/A)
  179. ** 0101-oooooo-mmmmmm-0100-nnnnnn-10-0010 LEAT.W (Rm, Ro), Rn
  180. ** 0110-oooooo-mmmmmm-0100-nnnnnn-00-0010 FMOV.S Rn, (Rm, Ro)
  181. ** 0110-oooooo-mmmmmm-0100-nnnnnn-10-0010 LEAT.L (Rm, Ro), Rn
  182. ** 0111-oooooo-mmmmmm-0100-nnnnnn-00-0010 FMOV.H Rn, (Rm, Ro)
  183. ** 0111-oooooo-mmmmmm-0100-nnnnnn-10-0010 LEAT.Q (Rm, Ro), Rn
  184. ** 1000-oooooo-mmmmmm-0100-nnnnnn-00-0010 MOV.X (Rm, Disp6s), Xn
  185. ** 1000-oooooo-mmmmmm-0100-nnnnnn-10-0010 -
  186. ** 1001-oooooo-mmmmmm-0100-nnnnnn-00-0010 (N/A)
  187. ** 1001-oooooo-mmmmmm-0100-nnnnnn-10-0010 -
  188. ** 1010-oooooo-mmmmmm-0100-nnnnnn-00-0010 FMOV.S (Rm, Disp6s), Rn
  189. ** 1010-oooooo-mmmmmm-0100-nnnnnn-10-0010 PMOV.F8 (Rm, Disp6s), Rn
  190. ** 1011-oooooo-mmmmmm-0100-nnnnnn-00-0010 FMOV.H (Rm, Disp6s), Rn
  191. ** 1011-oooooo-mmmmmm-0100-nnnnnn-10-0010 PMOV.2H (Rm, Disp6s), Rn
  192. ** 1100-oooooo-mmmmmm-0100-nnnnnn-00-0010 MOV.X (Rm, Ro), Xn
  193. ** 1100-oooooo-mmmmmm-0100-nnnnnn-10-0010 -
  194. ** 1101-oooooo-mmmmmm-0100-nnnnnn-00-0010 (N/A)
  195. ** 1101-oooooo-mmmmmm-0100-nnnnnn-10-0010 -
  196. ** 1110-oooooo-mmmmmm-0100-nnnnnn-00-0010 FMOV.S (Rm, Ro), Rn
  197. ** 1110-oooooo-mmmmmm-0100-nnnnnn-10-0010 PMOV.F8 (Rm, Ro), Rn
  198. ** 1111-oooooo-mmmmmm-0100-nnnnnn-00-0010 FMOV.H (Rm, Ro), Rn
  199. ** 1111-oooooo-mmmmmm-0100-nnnnnn-10-0010 PMOV.2H (Rm, Ro), Rn
  200.  
  201. * F0zz_5zzz
  202. ** 0000-oooooo-mmmmmm-0101-nnnnnn-00-0010 CSELT Rm, Ro, Rn
  203. ** 0000-oooooo-mmmmmm-0101-nnnnnn-10-0010 (N/A)
  204. ** 0001-oooooo-mmmmmm-0101-nnnnnn-00-0010 PMULS.W Rm, Ro, Rn
  205. ** 0001-oooooo-mmmmmm-0101-nnnnnn-10-0010 PMULU.W Rm, Ro, Rn
  206. ** 0010-oooooo-mmmmmm-0101-nnnnnn-00-0010 DMULS.L Rm, Ro, Rn
  207. ** 0010-oooooo-mmmmmm-0101-nnnnnn-10-0010 DMULS.Q Rm, Ro, Xn
  208. ** 0011-oooooo-mmmmmm-0101-nnnnnn-00-0010 DMULU.L Rm, Ro, Rn
  209. ** 0011-oooooo-mmmmmm-0101-nnnnnn-10-0010 DMULU.Q Rm, Ro, Xn
  210. ** 0100-oooooo-mmmmmm-0101-nnnnnn-00-0010 SHAD.L Rm, Ro, Rn
  211. ** 0100-oooooo-mmmmmm-0101-nnnnnn-10-0010 SHAD.Q Rm, Ro, Rn
  212. ** 0101-oooooo-mmmmmm-0101-nnnnnn-00-0010 SHLD.L Rm, Ro, Rn
  213. ** 0101-oooooo-mmmmmm-0101-nnnnnn-10-0010 SHLD.Q Rm, Ro, Rn
  214. ** 0110-oooooo-mmmmmm-0101-nnnnnn-00-0010 PMULS.LW Rm, Ro, Rn
  215. ** 0110-oooooo-mmmmmm-0101-nnnnnn-10-0010 PMULU.LW Rm, Ro, Rn
  216. ** 0111-oooooo-mmmmmm-0101-nnnnnn-00-0010 PMULS.HW Rm, Ro, Rn
  217. ** 0111-oooooo-mmmmmm-0101-nnnnnn-10-0010 PMULU.HW Rm, Ro, Rn
  218. ** 1000-oooooo-mmmmmm-0101-nnnnnn-00-0010 FADD Rm, Ro, Rn
  219. ** 1000-oooooo-mmmmmm-0101-nnnnnn-10-0010 FADDX Xm, Xo, Xn
  220. ** 1001-oooooo-mmmmmm-0101-nnnnnn-00-0010 FSUB Rm, Ro, Rn
  221. ** 1001-oooooo-mmmmmm-0101-nnnnnn-10-0010 FSUBX Xm, Xo, Xn
  222. ** 1010-oooooo-mmmmmm-0101-nnnnnn-00-0010 FMUL Rm, Ro, Rn
  223. ** 1010-oooooo-mmmmmm-0101-nnnnnn-10-0010 FMULX Xm, Xo, Xn
  224. ** 1011-oooooo-mmmmmm-0101-nnnnnn-00-0010 FMAC Rm, Ro, Rn
  225. ** 1011-oooooo-mmmmmm-0101-nnnnnn-10-0010 FMAC.X Xm, Xo, Xn
  226. ** 1100-oooooo-mmmmmm-0101-nnnnnn-00-0010 ADDS.L Rm, Ro, Rn
  227. ** 1100-oooooo-mmmmmm-0101-nnnnnn-10-0010 ADDU.L Rm, Ro, Rn
  228. ** 1101-oooooo-mmmmmm-0101-nnnnnn-00-0010 SUBS.L Rm, Ro, Rn
  229. ** 1101-oooooo-mmmmmm-0101-nnnnnn-10-0010 SUBU.L Rm, Ro, Rn
  230. ** 1110-oooooo-mmmmmm-0101-nnnnnn-00-0010 MULS.W Rm, Ro, Rn
  231. ** 1110-oooooo-mmmmmm-0101-nnnnnn-10-0010 MULS.W Rm, Imm6u, Rn
  232. ** 1111-oooooo-mmmmmm-0101-nnnnnn-00-0010 MULU.W Rm, Ro, Rn
  233. ** 1111-oooooo-mmmmmm-0101-nnnnnn-10-0010 MULU.W Rm, Imm6u, Rn
  234.  
  235. * F0zz_6zzz
  236. ** 0000-oooooo-mmmmmm-0110-nnnnnn-00-0010 MACS.L Rm, Ro, Rn
  237. ** 0000-oooooo-mmmmmm-0110-nnnnnn-10-0010 MACS.L Rm, Imm6u, Rn
  238. ** 0001-oooooo-mmmmmm-0110-nnnnnn-00-0010 MACU.L Rm, Ro, Rn
  239. ** 0001-oooooo-mmmmmm-0110-nnnnnn-10-0010 MACU.L Rm, Imm6u, Rn
  240. ** 0010-oooooo-mmmmmm-0110-nnnnnn-00-0010 DMACS.L Rm, Ro, Rn
  241. ** 0010-oooooo-mmmmmm-0110-nnnnnn-10-0010 DMACS.L Rm, Imm6u, Rn
  242. ** 0011-oooooo-mmmmmm-0110-nnnnnn-00-0010 DMACU.L Rm, Ro, Rn
  243. ** 0011-oooooo-mmmmmm-0110-nnnnnn-10-0010 DMACU.L Rm, Imm6u, Rn
  244. ** 0100-oooooo-mmmmmm-0110-nnnnnn-00-0010 DIVS.Q Rm, Ro, Rn
  245. ** 0100-oooooo-mmmmmm-0110-nnnnnn-10-0010 DIVU.Q Rm, Ro, Rn
  246. ** 0101-oooooo-mmmmmm-0110-nnnnnn-00-0010 MODS.Q Rm, Ro, Rn
  247. ** 0101-oooooo-mmmmmm-0110-nnnnnn-10-0010 MODU.Q Rm, Ro, Rn
  248. ** 0110-oooooo-mmmmmm-0110-nnnnnn-00-0010 FDIV Rm, Ro, Rn
  249. ** 0110-oooooo-mmmmmm-0110-nnnnnn-10-0010 FDIVX Rm, Ro, Rn
  250. ** 0111-oooooo-mmmmmm-0110-nnnnnn-00-0010 FDIVA Rm, Ro, Rn
  251. ** 0111-oooooo-mmmmmm-0110-nnnnnn-10-0010 FDIVXA Rm, Ro, Rn
  252. ** 1000-oooooo-mmmmmm-0110-nnnnnn-00-0010 -
  253. ** 1000-oooooo-mmmmmm-0110-nnnnnn-10-0010 BLKUTX3H Xm, Ro, Rn
  254. ** 1001-oooooo-mmmmmm-0110-nnnnnn-00-0010 BLERP Rm, Ro, Rn
  255. ** 1001-oooooo-mmmmmm-0110-nnnnnn-10-0010 BLKUTX3L Xm, Ro, Rn
  256. ** 1010-oooooo-mmmmmm-0110-nnnnnn-00-0010 BLINTA Rm, Ro, Rn
  257. ** 1010-oooooo-mmmmmm-0110-nnnnnn-10-0010 BLINT Xm, Xo, Xn
  258. ** 1011-oooooo-mmmmmm-0110-nnnnnn-00-0010 BITSEL Rm, Ro, Rn
  259. ** 1011-oooooo-mmmmmm-0110-nnnnnn-10-0010 BITSELX Xm, Xo, Xn
  260. ** 1100-oooooo-mmmmmm-0110-nnnnnn-00-0010 BLKUAB1 Rm, Ro, Rn
  261. ** 1100-oooooo-mmmmmm-0110-nnnnnn-10-0010 BLKUAB2 Rm, Ro, Rn
  262. ** 1101-oooooo-mmmmmm-0110-nnnnnn-00-0010 FADDG Rm, Ro, Rn
  263. ** 1101-oooooo-mmmmmm-0110-nnnnnn-10-0010 FADD Rm, Imm6fp, Rn
  264. ** 1110-oooooo-mmmmmm-0110-nnnnnn-00-0010 FSUBG Rm, Ro, Rn
  265. ** 1110-oooooo-mmmmmm-0110-nnnnnn-10-0010 FSUB Rm, Imm6fp, Rn
  266. ** 1111-oooooo-mmmmmm-0110-nnnnnn-00-0010 FMULG Rm, Ro, Rn
  267. ** 1111-oooooo-mmmmmm-0110-nnnnnn-10-0010 FMUL Rm, Imm6fp, Rn
  268.  
  269. * F0zz_7zzz
  270. ** 0000-oooooo-mmmmmm-0111-nnnnnn-00-0010 FADDA Rm, Ro, Rn
  271. ** 0000-oooooo-mmmmmm-0111-nnnnnn-10-0010 FMIN Rm, Ro, Rn
  272. ** 0001-oooooo-mmmmmm-0111-nnnnnn-00-0010 FSUBA Rm, Ro, Rn
  273. ** 0001-oooooo-mmmmmm-0111-nnnnnn-10-0010 FMAX Rm, Ro, Rn
  274. ** 0010-oooooo-mmmmmm-0111-nnnnnn-00-0010 FMULA Rm, Ro, Rn
  275. ** 0010-oooooo-mmmmmm-0111-nnnnnn-10-0010 BITNN Rm, Ro, Rn
  276. ** 0011-oooooo-mmmmmm-0111-nnnnnn-00-0010 MOVHW Rm, Ro, Rn
  277. ** 0011-oooooo-mmmmmm-0111-nnnnnn-10-0010 MOVLW Rm, Ro, Rn
  278. ** 0100-oooooo-mmmmmm-0111-nnnnnn-00-0010 DIVS.L Rm, Ro, Rn
  279. ** 0100-oooooo-mmmmmm-0111-nnnnnn-10-0010 DIVU.L Rm, Ro, Rn
  280. ** 0101-oooooo-mmmmmm-0111-nnnnnn-00-0010 MODS.L Rm, Ro, Rn
  281. ** 0101-oooooo-mmmmmm-0111-nnnnnn-10-0010 MODU.L Rm, Ro, Rn
  282. ** 0110-oooooo-mmmmmm-0111-nnnnnn-00-0010 RGB5CCENC Rm, Ro, Rn
  283. ** 0110-oooooo-mmmmmm-0111-nnnnnn-10-0010 PMUL.F8H Rm, Ro, Rn
  284.  
  285. * F0zz_8zzz (XMOV Block; Only valid if XMOV is allowed)
  286. ** 0000-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.B Rn, (Xm, Disp6s)
  287. ** 0000-oooooo-mmmmmm-1000-nnnnnn-10-0010 XLEA.B (Xm, Disp6s), Xn
  288. ** 0001-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.W Rn, (Xm, Disp6s)
  289. ** 0001-oooooo-mmmmmm-1000-nnnnnn-10-0010 -
  290. ** 0010-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.L Rn, (Xm, Disp6s)
  291. ** 0010-oooooo-mmmmmm-1000-nnnnnn-10-0010 -
  292. ** 0011-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.Q Rn, (Xm, Disp6s)
  293. ** 0011-oooooo-mmmmmm-1000-nnnnnn-10-0010 XMOV.X Xn, (Xm, Disp6s)
  294. ** 0100-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.B Rn, (Xm, Ro)
  295. ** 0100-oooooo-mmmmmm-1000-nnnnnn-10-0010 XLEA.B (Xm, Ro), Xn
  296. ** 0101-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.W Rn, (Xm, Ro)
  297. ** 0101-oooooo-mmmmmm-1000-nnnnnn-10-0010 CAS.Q Rn, Ro, (Rm)
  298. ** 0110-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.L Rn, (Xm, Ro)
  299. ** 0110-oooooo-mmmmmm-1000-nnnnnn-10-0010 XMOVTT Xm, Ro, Xn
  300. ** 0111-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.Q Rn, (Xm, Ro)
  301. ** 0111-oooooo-mmmmmm-1000-nnnnnn-10-0010 XMOV.X Xn, (Xm, Ro)
  302. ** 1000-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.B (Xm, Disp6s), Rn
  303. ** 1000-oooooo-mmmmmm-1000-nnnnnn-10-0010 XMOVU.B (Xm, Disp6s), Rn
  304. ** 1001-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.W (Xm, Disp6s), Rn
  305. ** 1001-oooooo-mmmmmm-1000-nnnnnn-10-0010 XMOVU.W (Xm, Disp6s), Rn
  306. ** 1010-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.L (Xm, Disp6s), Rn
  307. ** 1010-oooooo-mmmmmm-1000-nnnnnn-10-0010 XMOVU.L (Xm, Disp6s), Rn
  308. ** 1011-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.Q (Xm, Disp6s), Rn
  309. ** 1011-oooooo-mmmmmm-1000-nnnnnn-10-0010 XMOV.X (Xm, Disp6s), Xn
  310. ** 1100-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.B (Xm, Ro), Rn //
  311. ** 1100-oooooo-mmmmmm-1000-nnnnnn-10-0010 XMOVU.B (Xm, Ro), Rn //
  312. ** 1101-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.W (Xm, Ro), Rn //
  313. ** 1101-oooooo-mmmmmm-1000-nnnnnn-10-0010 XMOVU.W (Xm, Ro), Rn //
  314. ** 1110-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.L (Xm, Ro), Rn //
  315. ** 1110-oooooo-mmmmmm-1000-nnnnnn-10-0010 XMOVU.L (Xm, Ro), Rn //
  316. ** 1111-oooooo-mmmmmm-1000-nnnnnn-00-0010 XMOV.Q (Xm, Ro), Rn //
  317. ** 1111-oooooo-mmmmmm-1000-nnnnnn-10-0010 XMOV.X (Xm, Ro), Xn //
  318.  
  319.  
  320. * F0nm_9eoZ
  321. ** 0000-oooooo-mmmmmm-1001-nnnnnn-00-0010 (N/A)
  322. ** 0000-oooooo-mmmmmm-1001-nnnnnn-10-0010 CMPEQ.Q Rm, Imm6s, Rn
  323. ** 0001-oooooo-mmmmmm-1001-nnnnnn-00-0010 (N/A)
  324. ** 0001-oooooo-mmmmmm-1001-nnnnnn-10-0010 CMPGT.Q Rm, Imm6s, Rn
  325. ** 0010-oooooo-mmmmmm-1001-nnnnnn-00-0010 (N/A)
  326. ** 0010-oooooo-mmmmmm-1001-nnnnnn-10-0010 CMPNE.Q Rm, Imm6s, Rn
  327. ** 0011-oooooo-mmmmmm-1001-nnnnnn-00-0010 (N/A)
  328. ** 0011-oooooo-mmmmmm-1001-nnnnnn-10-0010 CMPLT.Q Rm, Imm6s, Rn
  329.  
  330. ** 0100-oooooo-mmmmmm-1001-nnnnnn-00-0010 (N/A)
  331. ** 0100-oooooo-mmmmmm-1001-nnnnnn-10-0010 CMPEQ.Q Rm, Ro, Rn
  332. ** 0101-oooooo-mmmmmm-1001-nnnnnn-00-0010 (N/A)
  333. ** 0101-oooooo-mmmmmm-1001-nnnnnn-10-0010 CMPGT.Q Rm, Ro, Rn
  334. ** 0110-oooooo-mmmmmm-1001-nnnnnn-00-0010 (N/A)
  335. ** 0110-oooooo-mmmmmm-1001-nnnnnn-10-0010 CMPNE.Q Rm, Ro, Rn
  336. ** 0111-oooooo-mmmmmm-1001-nnnnnn-00-0010 (N/A)
  337. ** 0111-oooooo-mmmmmm-1001-nnnnnn-10-0010 CMPGE.Q Rm, Ro, Rn
  338.  
  339. If a CMPxx instruction is encoded with Rn=ZR, this will update SR.T based on the result, else it will put the result into Rn.
  340.  
  341.  
  342. * F1nm_Zeii (MOV Disp10s Block)
  343. ** iiiiiiiiii-mmmmmm-0000-nnnnnn-00-0110 MOV.B Rn, (Rm, Disp10s)
  344. ** iiiiiiiiii-mmmmmm-0000-nnnnnn-10-0110 LEA.B (Rm, Disp10s), Rn
  345. ** iiiiiiiiii-mmmmmm-0001-nnnnnn-00-0110 MOV.W Rn, (Rm, Disp10s)
  346. ** iiiiiiiiii-mmmmmm-0001-nnnnnn-10-0110 LEA.W (Rm, Disp10s), Rn
  347. ** iiiiiiiiii-mmmmmm-0010-nnnnnn-00-0110 MOV.L Rn, (Rm, Disp10s)
  348. ** iiiiiiiiii-mmmmmm-0010-nnnnnn-10-0110 LEA.L (Rm, Disp10s), Rn
  349. ** iiiiiiiiii-mmmmmm-0011-nnnnnn-00-0110 MOV.Q Rn, (Rm, Disp10s)
  350. ** iiiiiiiiii-mmmmmm-0011-nnnnnn-10-0110 LEA.Q (Rm, Disp10s), Rn
  351. ** iiiiiiiiii-mmmmmm-0100-nnnnnn-00-0110 FMOV.S Rn, (Rm, Disp10s)
  352. ** iiiiiiiiii-mmmmmm-0100-nnnnnn-10-0110 FMOV.H Rn, (Rm, Disp10s)
  353. ** iiiiiiiiii-mmmmmm-0101-nnnnnn-00-0110 (N/A)
  354. ** iiiiiiiiii-mmmmmm-0101-nnnnnn-10-0110 MOV.X Rn, (Rm, Disp10s)
  355. ** iiiiiiiiii-mmmmmm-0110-nnnnnn-00-0110 FMOV.S (Rm, Disp10s), Rn
  356. ** iiiiiiiiii-mmmmmm-0110-nnnnnn-10-0110 FMOV.H (Rm, Disp10s), Rn
  357. ** iiiiiiiiii-mmmmmm-0111-nnnnnn-00-0110 (N/A)
  358. ** iiiiiiiiii-mmmmmm-0111-nnnnnn-10-0110 MOV.X (Rm, Disp10s), Rn
  359.  
  360. ** iiiiiiiiii-mmmmmm-1000-nnnnnn-00-0110 MOV.B (Rm, Disp10s), Rn
  361. ** iiiiiiiiii-mmmmmm-1000-nnnnnn-10-0110 MOVU.B (Rm, Disp10s), Rn
  362. ** iiiiiiiiii-mmmmmm-1001-nnnnnn-00-0110 MOV.W (Rm, Disp10s), Rn
  363. ** iiiiiiiiii-mmmmmm-1001-nnnnnn-10-0110 MOVU.W (Rm, Disp10s), Rn
  364. ** iiiiiiiiii-mmmmmm-1010-nnnnnn-00-0110 MOV.L (Rm, Disp10s), Rn
  365. ** iiiiiiiiii-mmmmmm-1010-nnnnnn-10-0110 MOVU.L (Rm, Disp10s), Rn
  366. ** iiiiiiiiii-mmmmmm-1011-nnnnnn-00-0110 MOV.Q (Rm, Disp10s), Rn
  367. ** iiiiiiiiii-mmmmmm-1011-nnnnnn-10-0110 -
  368.  
  369. ** F1zz_Czzz
  370. *** iiiiiiiiii-mmmmmm-1100-nnnnnn-00-0110 ? BTST Rm, Rn, Disp10s
  371. *** iiiiiiiiii-mmmmmm-1100-nnnnnn-10-0110 ? BNTST Rm, Rn, Disp10s
  372. *** iiiiiiiiii-mmmmmm-1101-nnnnnn-00-0110 ? BGT Rm, Rn, Disp10s
  373. *** iiiiiiiiii-mmmmmm-1101-nnnnnn-10-0110 ? BLE Rm, Rn, Disp10s
  374. *** iiiiiiiiii-mmmmmm-1110-nnnnnn-00-0110 ? BGTU Rm, Rn, Disp10s
  375. *** iiiiiiiiii-mmmmmm-1110-nnnnnn-10-0110 ? BLEU Rm, Rn, Disp10s
  376. *** iiiiiiiiii-mmmmmm-1111-nnnnnn-00-0110 ? BEQ Rm, Rn, Disp10s
  377. *** iiiiiiiiii-mmmmmm-1111-nnnnnn-10-0110 ? BNE Rm, Rn, Disp10s
  378.  
  379. For the relative branch cases, these will be modified to be relative to BasePC and use a 4 byte scale (+/- 2K).
  380. * BTST, Branch if (Rm AND Rn)
  381. * BNTST, Branch if !(Rm AND Rn)
  382.  
  383.  
  384. * F2nm_Zgjj
  385.  
  386. * iiiiiiiiii-mmmmmm-0000-nnnnnn-00-1010 ADD Rm, Imm10u, Rn
  387. * iiiiiiiiii-mmmmmm-0001-nnnnnn-00-1010 ADD Rm, Imm10n, Rn
  388. * iiiiiiiiii-mmmmmm-0010-nnnnnn-00-1010 MULS.L Rm, Imm10u, Rn
  389. * iiiiiiiiii-mmmmmm-0010-nnnnnn-10-1010 MULU.L Rm, Imm10u, Rn
  390. * iiiiiiiiii-mmmmmm-0011-nnnnnn-00-1010 ADDS.L Rm, Imm10u, Rn
  391. * iiiiiiiiii-mmmmmm-0011-nnnnnn-10-1010 ADDU.L Rm, Imm10u, Rn
  392. * iiiiiiiiii-mmmmmm-0100-nnnnnn-00-1010 ADDS.L Rm, Imm10n, Rn
  393. * iiiiiiiiii-mmmmmm-0100-nnnnnn-10-1010 ADDU.L Rm, Imm10n, Rn
  394. * iiiiiiiiii-mmmmmm-0101-nnnnnn-00-1010 AND Rm, Imm10us, Rn
  395. * iiiiiiiiii-mmmmmm-0101-nnnnnn-10-1010 RSUB Rm, Imm10us, Rn
  396. * iiiiiiiiii-mmmmmm-0110-nnnnnn-00-1010 OR Rm, Imm10u, Rn
  397. * 00iiiiiiii-mmmmmm-0110-nnnnnn-10-1010 SHAD.X Xm, Imm8s, Xn
  398. * iiiiiiiiii-mmmmmm-0111-nnnnnn-00-1010 XOR Rm, Imm10u, Rn
  399. * 00iiiiiiii-mmmmmm-0111-nnnnnn-10-1010 SHLD.X Xm, Imm8s, Xn
  400. * 00iiiiiiii-mmmmmm-1000-nnnnnn-00-1010 SHAD.L Rm, Imm8s, Rn
  401. * 00iiiiiiii-mmmmmm-1000-nnnnnn-10-1010 SHAD.Q Rm, Imm8s, Rn
  402. * 01iiiiiiii-mmmmmm-1000-nnnnnn-00-1010 PSHUF.B Rm, Imm8u, Rn
  403. * 01iiiiiiii-mmmmmm-1000-nnnnnn-10-1010 PSHUF.W Rm, Imm8u, Rn
  404. * 00iiiiiiii-mmmmmm-1001-nnnnnn-00-1010 SHLD.L Rm, Imm8s, Rn
  405. * 00iiiiiiii-mmmmmm-1001-nnnnnn-10-1010 SHLD.Q Rm, Imm8s, Rn
  406. * 01iiiiiiii-mmmmmm-1001-nnnnnn-00-1010 PCONV Rm, Imm8u, Rn
  407. * 01iiiiiiii-mmmmmm-1001-nnnnnn-10-1010 PCONVX Rm, Imm8u, Rn
  408.  
  409. * F2nz_Aejj (2RI Space)
  410. * F2nz_Bejj (2RI Space)
  411. * F2nz_Cfjj
  412. * F2nz_Dfjj
  413. * F2nz_Efjj
  414. * F2nz_Ffjj
  415.  
  416. For now, the 2RI encodings are not being carried over.
  417. Many were functionally redundant in this case, or were optimization cases.
  418.  
  419.  
  420. * F8Zn_iiii
  421. ** iiii-iiiiii-iiiiii-0000-nnnnnn-01-0010 LDIZ Imm16u, Rn
  422. ** iiii-iiiiii-iiiiii-0001-nnnnnn-01-0010 LDIN Imm16n, Rn
  423. ** iiii-iiiiii-iiiiii-0010-nnnnnn-01-0010 ADD Imm16s, Rn
  424. ** iiii-iiiiii-iiiiii-0011-nnnnnn-01-0010 SHORI Imm16u, Rn
  425. ** iiii-iiiiii-iiiiii-0100-nnnnnn-01-0010 FLDCH Imm16u, Rn
  426. ** iiii-iiiiii-iiiiii-0101-nnnnnn-01-0010 LEA.Q (GBR, Disp16u), Rn
  427. ** iiii-iiiiii-iiiiii-0110-nnnnnn-01-0010 -
  428. ** iiii-iiiiii-iiiiii-0111-jjjjjj-k1-00Pw BRA (PC, Disp23s)
  429. ** iiii-iiiiii-iiiiii-1000-nnnnnn-01-0010 -
  430. ** iiii-iiiiii-iiiiii-1001-nnnnnn-01-0010 -
  431. ** iiii-iiiiii-iiiiii-1010-nnnnnn-01-0010 -
  432. ** iiii-iiiiii-iiiiii-1011-nnnnnn-01-0010 -
  433. ** iiii-iiiiii-iiiiii-1100-nnnnnn-01-0010 -
  434. ** iiii-iiiiii-iiiiii-1101-nnnnnn-01-0010 -
  435. ** iiii-iiiiii-iiiiii-1110-nnnnnn-01-0010 -
  436. ** iiii-iiiiii-iiiiii-1111-jjjjjj-k1-00Pw BSR (PC, Disp23s)
  437.  
  438. BRA/BSR:
  439. * i field gives (17: 2)
  440. * j field gives (23:18)
  441. * k field gives (33:24), as a sign-extension bit
  442.  
  443. The reason for changing the BRA/BSR encoding:
  444. * The F0 block encoding would be very ugly in the repacked form.
  445. * In RISC-V terms, BRA will be a "JAL X0, Disp" and BSR "JAL X1, Disp".
  446. * Branh reach will be +/- 16MB
  447.  
  448.  
Tags: RISC-V XG2 XG3RV
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement