aarch64 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/Rakefile +37 -0
  4. data/aarch64.gemspec +1 -0
  5. data/lib/aarch64/instructions/adc.rb +10 -10
  6. data/lib/aarch64/instructions/adcs.rb +10 -10
  7. data/lib/aarch64/instructions/add_addsub_ext.rb +14 -14
  8. data/lib/aarch64/instructions/add_addsub_imm.rb +12 -12
  9. data/lib/aarch64/instructions/add_addsub_shift.rb +14 -14
  10. data/lib/aarch64/instructions/addg.rb +10 -10
  11. data/lib/aarch64/instructions/adds_addsub_ext.rb +14 -14
  12. data/lib/aarch64/instructions/adds_addsub_imm.rb +12 -12
  13. data/lib/aarch64/instructions/adds_addsub_shift.rb +14 -14
  14. data/lib/aarch64/instructions/adr.rb +7 -7
  15. data/lib/aarch64/instructions/adrp.rb +7 -7
  16. data/lib/aarch64/instructions/and_log_imm.rb +14 -14
  17. data/lib/aarch64/instructions/and_log_shift.rb +14 -14
  18. data/lib/aarch64/instructions/ands_log_imm.rb +14 -14
  19. data/lib/aarch64/instructions/ands_log_shift.rb +14 -14
  20. data/lib/aarch64/instructions/asrv.rb +10 -10
  21. data/lib/aarch64/instructions/autda.rb +9 -12
  22. data/lib/aarch64/instructions/autdb.rb +9 -12
  23. data/lib/aarch64/instructions/autia.rb +9 -12
  24. data/lib/aarch64/instructions/autib.rb +9 -12
  25. data/lib/aarch64/instructions/axflag.rb +1 -1
  26. data/lib/aarch64/instructions/b_cond.rb +5 -5
  27. data/lib/aarch64/instructions/b_uncond.rb +3 -3
  28. data/lib/aarch64/instructions/bc_cond.rb +5 -5
  29. data/lib/aarch64/instructions/bfm.rb +13 -13
  30. data/lib/aarch64/instructions/bic_log_shift.rb +14 -14
  31. data/lib/aarch64/instructions/bics.rb +14 -14
  32. data/lib/aarch64/instructions/bl.rb +3 -3
  33. data/lib/aarch64/instructions/blr.rb +4 -4
  34. data/lib/aarch64/instructions/blra.rb +10 -10
  35. data/lib/aarch64/instructions/br.rb +4 -4
  36. data/lib/aarch64/instructions/bra.rb +10 -10
  37. data/lib/aarch64/instructions/brk.rb +3 -3
  38. data/lib/aarch64/instructions/bti.rb +3 -3
  39. data/lib/aarch64/instructions/cas.rb +14 -14
  40. data/lib/aarch64/instructions/casb.rb +12 -12
  41. data/lib/aarch64/instructions/cash.rb +12 -12
  42. data/lib/aarch64/instructions/casp.rb +14 -14
  43. data/lib/aarch64/instructions/cbnz.rb +7 -7
  44. data/lib/aarch64/instructions/cbz.rb +7 -7
  45. data/lib/aarch64/instructions/ccmn_imm.rb +12 -12
  46. data/lib/aarch64/instructions/ccmn_reg.rb +12 -12
  47. data/lib/aarch64/instructions/ccmp_imm.rb +12 -12
  48. data/lib/aarch64/instructions/ccmp_reg.rb +12 -12
  49. data/lib/aarch64/instructions/cfinv.rb +2 -9
  50. data/lib/aarch64/instructions/clrex.rb +3 -3
  51. data/lib/aarch64/instructions/cls_int.rb +8 -8
  52. data/lib/aarch64/instructions/clz_int.rb +8 -8
  53. data/lib/aarch64/instructions/crc32.rb +12 -12
  54. data/lib/aarch64/instructions/crc32c.rb +12 -12
  55. data/lib/aarch64/instructions/csdb.rb +1 -1
  56. data/lib/aarch64/instructions/csel.rb +12 -12
  57. data/lib/aarch64/instructions/csinc.rb +12 -12
  58. data/lib/aarch64/instructions/csinv.rb +12 -12
  59. data/lib/aarch64/instructions/csneg.rb +12 -12
  60. data/lib/aarch64/instructions/dcps.rb +5 -5
  61. data/lib/aarch64/instructions/dgh.rb +1 -1
  62. data/lib/aarch64/instructions/dmb.rb +3 -3
  63. data/lib/aarch64/instructions/drps.rb +2 -9
  64. data/lib/aarch64/instructions/dsb.rb +3 -3
  65. data/lib/aarch64/instructions/eon.rb +14 -14
  66. data/lib/aarch64/instructions/eor_log_imm.rb +14 -14
  67. data/lib/aarch64/instructions/eor_log_shift.rb +14 -14
  68. data/lib/aarch64/instructions/eret.rb +2 -9
  69. data/lib/aarch64/instructions/ereta.rb +3 -3
  70. data/lib/aarch64/instructions/esb.rb +1 -1
  71. data/lib/aarch64/instructions/extr.rb +13 -13
  72. data/lib/aarch64/instructions/gmi.rb +8 -8
  73. data/lib/aarch64/instructions/hint.rb +5 -5
  74. data/lib/aarch64/instructions/hlt.rb +3 -3
  75. data/lib/aarch64/instructions/hvc.rb +3 -3
  76. data/lib/aarch64/instructions/irg.rb +8 -8
  77. data/lib/aarch64/instructions/isb.rb +3 -3
  78. data/lib/aarch64/instructions/ld64b.rb +6 -6
  79. data/lib/aarch64/instructions/ldadd.rb +14 -14
  80. data/lib/aarch64/instructions/ldaddb.rb +12 -12
  81. data/lib/aarch64/instructions/ldaddh.rb +12 -12
  82. data/lib/aarch64/instructions/ldapr.rb +8 -8
  83. data/lib/aarch64/instructions/ldaprb.rb +6 -6
  84. data/lib/aarch64/instructions/ldaprh.rb +6 -6
  85. data/lib/aarch64/instructions/ldapur_gen.rb +12 -12
  86. data/lib/aarch64/instructions/ldar.rb +8 -8
  87. data/lib/aarch64/instructions/ldaxp.rb +10 -10
  88. data/lib/aarch64/instructions/ldaxr.rb +8 -8
  89. data/lib/aarch64/instructions/ldclr.rb +14 -14
  90. data/lib/aarch64/instructions/ldclrb.rb +14 -14
  91. data/lib/aarch64/instructions/ldeor.rb +14 -14
  92. data/lib/aarch64/instructions/ldg.rb +8 -8
  93. data/lib/aarch64/instructions/ldgm.rb +6 -6
  94. data/lib/aarch64/instructions/ldlar.rb +8 -8
  95. data/lib/aarch64/instructions/ldnp_gen.rb +12 -12
  96. data/lib/aarch64/instructions/ldp_gen.rb +14 -14
  97. data/lib/aarch64/instructions/ldpsw.rb +12 -12
  98. data/lib/aarch64/instructions/ldr_imm_gen.rb +12 -12
  99. data/lib/aarch64/instructions/ldr_imm_unsigned.rb +10 -10
  100. data/lib/aarch64/instructions/ldr_lit_gen.rb +7 -7
  101. data/lib/aarch64/instructions/ldr_reg_gen.rb +14 -14
  102. data/lib/aarch64/instructions/ldra.rb +14 -14
  103. data/lib/aarch64/instructions/ldrb_imm.rb +10 -10
  104. data/lib/aarch64/instructions/ldrb_reg.rb +12 -12
  105. data/lib/aarch64/instructions/ldrb_unsigned.rb +8 -8
  106. data/lib/aarch64/instructions/ldrh_imm.rb +10 -10
  107. data/lib/aarch64/instructions/ldrh_reg.rb +12 -12
  108. data/lib/aarch64/instructions/ldrh_unsigned.rb +8 -8
  109. data/lib/aarch64/instructions/ldrsb_imm.rb +12 -12
  110. data/lib/aarch64/instructions/ldrsb_reg.rb +14 -14
  111. data/lib/aarch64/instructions/ldrsb_unsigned.rb +10 -10
  112. data/lib/aarch64/instructions/ldrsh_imm.rb +12 -12
  113. data/lib/aarch64/instructions/ldrsh_reg.rb +14 -14
  114. data/lib/aarch64/instructions/ldrsh_unsigned.rb +10 -10
  115. data/lib/aarch64/instructions/ldrsw_imm.rb +10 -10
  116. data/lib/aarch64/instructions/ldrsw_lit.rb +5 -5
  117. data/lib/aarch64/instructions/ldrsw_reg.rb +12 -12
  118. data/lib/aarch64/instructions/ldrsw_unsigned.rb +8 -8
  119. data/lib/aarch64/instructions/ldset.rb +14 -14
  120. data/lib/aarch64/instructions/ldsetb.rb +12 -12
  121. data/lib/aarch64/instructions/ldseth.rb +12 -12
  122. data/lib/aarch64/instructions/ldsmax.rb +14 -14
  123. data/lib/aarch64/instructions/ldsmaxb.rb +12 -12
  124. data/lib/aarch64/instructions/ldsmaxh.rb +12 -12
  125. data/lib/aarch64/instructions/ldsmin.rb +14 -14
  126. data/lib/aarch64/instructions/ldsminb.rb +12 -12
  127. data/lib/aarch64/instructions/ldsminh.rb +12 -12
  128. data/lib/aarch64/instructions/ldtr.rb +10 -10
  129. data/lib/aarch64/instructions/ldtrb.rb +8 -8
  130. data/lib/aarch64/instructions/ldtrh.rb +8 -8
  131. data/lib/aarch64/instructions/ldtrsb.rb +10 -10
  132. data/lib/aarch64/instructions/ldtrsh.rb +10 -10
  133. data/lib/aarch64/instructions/ldtrsw.rb +8 -8
  134. data/lib/aarch64/instructions/ldumax.rb +14 -14
  135. data/lib/aarch64/instructions/ldumaxb.rb +12 -12
  136. data/lib/aarch64/instructions/ldumaxh.rb +12 -12
  137. data/lib/aarch64/instructions/ldumin.rb +14 -14
  138. data/lib/aarch64/instructions/lduminb.rb +12 -12
  139. data/lib/aarch64/instructions/lduminh.rb +12 -12
  140. data/lib/aarch64/instructions/ldur_gen.rb +10 -10
  141. data/lib/aarch64/instructions/ldursb.rb +10 -10
  142. data/lib/aarch64/instructions/ldursh.rb +10 -10
  143. data/lib/aarch64/instructions/ldursw.rb +8 -8
  144. data/lib/aarch64/instructions/ldxp.rb +10 -10
  145. data/lib/aarch64/instructions/ldxr.rb +8 -8
  146. data/lib/aarch64/instructions/lslv.rb +10 -10
  147. data/lib/aarch64/instructions/lsrv.rb +10 -10
  148. data/lib/aarch64/instructions/madd.rb +12 -12
  149. data/lib/aarch64/instructions/movk.rb +10 -10
  150. data/lib/aarch64/instructions/movn.rb +10 -10
  151. data/lib/aarch64/instructions/movz.rb +10 -10
  152. data/lib/aarch64/instructions/mrs.rb +14 -14
  153. data/lib/aarch64/instructions/msr_imm.rb +7 -7
  154. data/lib/aarch64/instructions/msr_reg.rb +14 -14
  155. data/lib/aarch64/instructions/msub.rb +12 -12
  156. data/lib/aarch64/instructions/nop.rb +1 -1
  157. data/lib/aarch64/instructions/orn_log_shift.rb +14 -14
  158. data/lib/aarch64/instructions/orr_log_imm.rb +14 -14
  159. data/lib/aarch64/instructions/orr_log_shift.rb +14 -14
  160. data/lib/aarch64/instructions/pacda.rb +8 -8
  161. data/lib/aarch64/instructions/pacdb.rb +8 -8
  162. data/lib/aarch64/instructions/pacga.rb +8 -8
  163. data/lib/aarch64/instructions/pacia.rb +8 -8
  164. data/lib/aarch64/instructions/pacia2.rb +5 -5
  165. data/lib/aarch64/instructions/pacib.rb +8 -8
  166. data/lib/aarch64/instructions/prfm_imm.rb +8 -8
  167. data/lib/aarch64/instructions/prfm_lit.rb +8 -8
  168. data/lib/aarch64/instructions/prfm_reg.rb +12 -12
  169. data/lib/aarch64/instructions/prfum.rb +8 -8
  170. data/lib/aarch64/instructions/psb.rb +2 -9
  171. data/lib/aarch64/instructions/rbit_int.rb +8 -8
  172. data/lib/aarch64/instructions/ret.rb +4 -4
  173. data/lib/aarch64/instructions/reta.rb +3 -3
  174. data/lib/aarch64/instructions/rev.rb +10 -10
  175. data/lib/aarch64/instructions/rmif.rb +8 -8
  176. data/lib/aarch64/instructions/rorv.rb +10 -10
  177. data/lib/aarch64/instructions/sb.rb +1 -1
  178. data/lib/aarch64/instructions/sbc.rb +10 -10
  179. data/lib/aarch64/instructions/sbcs.rb +10 -10
  180. data/lib/aarch64/instructions/sbfm.rb +13 -13
  181. data/lib/aarch64/instructions/sdiv.rb +10 -10
  182. data/lib/aarch64/instructions/setf.rb +6 -6
  183. data/lib/aarch64/instructions/sev.rb +1 -7
  184. data/lib/aarch64/instructions/sevl.rb +1 -1
  185. data/lib/aarch64/instructions/smaddl.rb +10 -10
  186. data/lib/aarch64/instructions/smc.rb +3 -3
  187. data/lib/aarch64/instructions/smsubl.rb +10 -10
  188. data/lib/aarch64/instructions/smulh.rb +8 -8
  189. data/lib/aarch64/instructions/st2g.rb +10 -10
  190. data/lib/aarch64/instructions/st64b.rb +6 -6
  191. data/lib/aarch64/instructions/st64bv.rb +8 -8
  192. data/lib/aarch64/instructions/st64bv0.rb +8 -8
  193. data/lib/aarch64/instructions/stg.rb +10 -10
  194. data/lib/aarch64/instructions/stgm.rb +6 -6
  195. data/lib/aarch64/instructions/stgp.rb +12 -12
  196. data/lib/aarch64/instructions/stllr.rb +8 -8
  197. data/lib/aarch64/instructions/stllrb.rb +6 -6
  198. data/lib/aarch64/instructions/stllrh.rb +6 -6
  199. data/lib/aarch64/instructions/stlr.rb +8 -8
  200. data/lib/aarch64/instructions/stlrb.rb +6 -6
  201. data/lib/aarch64/instructions/stlrh.rb +6 -6
  202. data/lib/aarch64/instructions/stlur_gen.rb +10 -10
  203. data/lib/aarch64/instructions/stlxp.rb +12 -12
  204. data/lib/aarch64/instructions/stlxr.rb +10 -10
  205. data/lib/aarch64/instructions/stlxrb.rb +8 -8
  206. data/lib/aarch64/instructions/stlxrh.rb +8 -8
  207. data/lib/aarch64/instructions/stnp_gen.rb +12 -12
  208. data/lib/aarch64/instructions/stp_gen.rb +14 -14
  209. data/lib/aarch64/instructions/str_imm_gen.rb +12 -12
  210. data/lib/aarch64/instructions/str_imm_unsigned.rb +10 -10
  211. data/lib/aarch64/instructions/str_reg_gen.rb +14 -14
  212. data/lib/aarch64/instructions/strb_imm.rb +10 -10
  213. data/lib/aarch64/instructions/strb_imm_unsigned.rb +8 -8
  214. data/lib/aarch64/instructions/strb_reg.rb +12 -12
  215. data/lib/aarch64/instructions/strh_imm.rb +10 -10
  216. data/lib/aarch64/instructions/strh_imm_unsigned.rb +8 -8
  217. data/lib/aarch64/instructions/strh_reg.rb +12 -12
  218. data/lib/aarch64/instructions/sttr.rb +10 -10
  219. data/lib/aarch64/instructions/stur_gen.rb +10 -10
  220. data/lib/aarch64/instructions/stxp.rb +12 -12
  221. data/lib/aarch64/instructions/stxr.rb +10 -10
  222. data/lib/aarch64/instructions/stxrb.rb +8 -8
  223. data/lib/aarch64/instructions/stxrh.rb +8 -8
  224. data/lib/aarch64/instructions/stz2g.rb +10 -10
  225. data/lib/aarch64/instructions/stzg.rb +10 -10
  226. data/lib/aarch64/instructions/stzgm.rb +6 -6
  227. data/lib/aarch64/instructions/sub_addsub_ext.rb +14 -14
  228. data/lib/aarch64/instructions/sub_addsub_imm.rb +12 -12
  229. data/lib/aarch64/instructions/sub_addsub_shift.rb +14 -14
  230. data/lib/aarch64/instructions/subg.rb +10 -10
  231. data/lib/aarch64/instructions/subp.rb +8 -8
  232. data/lib/aarch64/instructions/subps.rb +8 -8
  233. data/lib/aarch64/instructions/subs_addsub_ext.rb +14 -14
  234. data/lib/aarch64/instructions/subs_addsub_imm.rb +12 -12
  235. data/lib/aarch64/instructions/subs_addsub_shift.rb +14 -14
  236. data/lib/aarch64/instructions/svc.rb +3 -3
  237. data/lib/aarch64/instructions/swp.rb +14 -14
  238. data/lib/aarch64/instructions/swpb.rb +12 -12
  239. data/lib/aarch64/instructions/swph.rb +12 -12
  240. data/lib/aarch64/instructions/sys.rb +12 -12
  241. data/lib/aarch64/instructions/sysl.rb +12 -12
  242. data/lib/aarch64/instructions/tbnz.rb +9 -9
  243. data/lib/aarch64/instructions/tbz.rb +9 -9
  244. data/lib/aarch64/instructions/tsb.rb +1 -7
  245. data/lib/aarch64/instructions/ubfm.rb +13 -13
  246. data/lib/aarch64/instructions/udf_perm_undef.rb +3 -3
  247. data/lib/aarch64/instructions/udiv.rb +10 -10
  248. data/lib/aarch64/instructions/umaddl.rb +10 -10
  249. data/lib/aarch64/instructions/umsubl.rb +10 -10
  250. data/lib/aarch64/instructions/umulh.rb +8 -8
  251. data/lib/aarch64/instructions/wfe.rb +2 -9
  252. data/lib/aarch64/instructions/wfet.rb +4 -4
  253. data/lib/aarch64/instructions/wfi.rb +1 -1
  254. data/lib/aarch64/instructions/wfit.rb +4 -4
  255. data/lib/aarch64/instructions/xaflag.rb +1 -1
  256. data/lib/aarch64/instructions/xpac.rb +6 -6
  257. data/lib/aarch64/instructions/xpaclri.rb +1 -1
  258. data/lib/aarch64/instructions/yield.rb +2 -9
  259. data/lib/aarch64/instructions.rb +26 -8
  260. data/lib/aarch64/parser.rb +227 -0
  261. data/lib/aarch64/parser.tab.rb +6534 -0
  262. data/lib/aarch64/parser.y +1394 -0
  263. data/lib/aarch64/utils.rb +34 -0
  264. data/lib/aarch64/version.rb +1 -1
  265. data/lib/aarch64.rb +128 -58
  266. data/test/base_instructions_test.rb +34 -4
  267. data/test/helper.rb +48 -8
  268. data/test/parser_test.rb +1820 -0
  269. metadata +25 -14
  270. data/lib/aarch64/instructions/setgp.rb +0 -25
  271. data/lib/aarch64/instructions/setgpn.rb +0 -25
  272. data/lib/aarch64/instructions/setgpt.rb +0 -25
  273. data/lib/aarch64/instructions/setgptn.rb +0 -25
  274. data/lib/aarch64/instructions/setp.rb +0 -25
  275. data/lib/aarch64/instructions/setpn.rb +0 -25
  276. data/lib/aarch64/instructions/setpt.rb +0 -25
  277. data/lib/aarch64/instructions/setptn.rb +0 -25
@@ -4,26 +4,26 @@ module AArch64
4
4
  # Store-Release Exclusive Register
5
5
  # STLXR <Ws>, <Wt>, [<Xn|SP>{,#0}]
6
6
  # STLXR <Ws>, <Xt>, [<Xn|SP>{,#0}]
7
- class STLXR
7
+ class STLXR < Instruction
8
8
  def initialize rs, rt, rn, size
9
- @rs = rs
10
- @rt = rt
11
- @rn = rn
12
- @size = size
9
+ @rs = check_mask(rs, 0x1f)
10
+ @rt = check_mask(rt, 0x1f)
11
+ @rn = check_mask(rn, 0x1f)
12
+ @size = check_mask(size, 0x03)
13
13
  end
14
14
 
15
15
  def encode
16
- STLXR(@size, @rs.to_i, @rn.to_i, @rt.to_i)
16
+ STLXR(@size, @rs, @rn, @rt)
17
17
  end
18
18
 
19
19
  private
20
20
 
21
21
  def STLXR size, rs, rn, rt
22
22
  insn = 0b00_001000_0_0_0_00000_1_11111_00000_00000
23
- insn |= ((size & 0x3) << 30)
24
- insn |= ((rs & 0x1f) << 16)
25
- insn |= ((rn & 0x1f) << 5)
26
- insn |= (rt & 0x1f)
23
+ insn |= ((size) << 30)
24
+ insn |= ((rs) << 16)
25
+ insn |= ((rn) << 5)
26
+ insn |= (rt)
27
27
  insn
28
28
  end
29
29
  end
@@ -3,24 +3,24 @@ module AArch64
3
3
  # STLXRB -- A64
4
4
  # Store-Release Exclusive Register Byte
5
5
  # STLXRB <Ws>, <Wt>, [<Xn|SP>{,#0}]
6
- class STLXRB
6
+ class STLXRB < Instruction
7
7
  def initialize rs, rt, rn
8
- @rs = rs
9
- @rt = rt
10
- @rn = rn
8
+ @rs = check_mask(rs, 0x1f)
9
+ @rt = check_mask(rt, 0x1f)
10
+ @rn = check_mask(rn, 0x1f)
11
11
  end
12
12
 
13
13
  def encode
14
- STLXRB(@rs.to_i, @rn.to_i, @rt.to_i)
14
+ STLXRB(@rs, @rn, @rt)
15
15
  end
16
16
 
17
17
  private
18
18
 
19
19
  def STLXRB rs, rn, rt
20
20
  insn = 0b00_001000_0_0_0_00000_1_11111_00000_00000
21
- insn |= ((rs & 0x1f) << 16)
22
- insn |= ((rn & 0x1f) << 5)
23
- insn |= (rt & 0x1f)
21
+ insn |= ((rs) << 16)
22
+ insn |= ((rn) << 5)
23
+ insn |= (rt)
24
24
  insn
25
25
  end
26
26
  end
@@ -3,24 +3,24 @@ module AArch64
3
3
  # STLXRH -- A64
4
4
  # Store-Release Exclusive Register Halfword
5
5
  # STLXRH <Ws>, <Wt>, [<Xn|SP>{,#0}]
6
- class STLXRH
6
+ class STLXRH < Instruction
7
7
  def initialize rs, rt, rn
8
- @rs = rs
9
- @rt = rt
10
- @rn = rn
8
+ @rs = check_mask(rs, 0x1f)
9
+ @rt = check_mask(rt, 0x1f)
10
+ @rn = check_mask(rn, 0x1f)
11
11
  end
12
12
 
13
13
  def encode
14
- STLXRH(@rs.to_i, @rn.to_i, @rt.to_i)
14
+ STLXRH(@rs, @rn, @rt)
15
15
  end
16
16
 
17
17
  private
18
18
 
19
19
  def STLXRH rs, rn, rt
20
20
  insn = 0b01_001000_0_0_0_00000_1_11111_00000_00000
21
- insn |= ((rs & 0x1f) << 16)
22
- insn |= ((rn & 0x1f) << 5)
23
- insn |= (rt & 0x1f)
21
+ insn |= ((rs) << 16)
22
+ insn |= ((rn) << 5)
23
+ insn |= (rt)
24
24
  insn
25
25
  end
26
26
  end
@@ -4,28 +4,28 @@ module AArch64
4
4
  # Store Pair of Registers, with non-temporal hint
5
5
  # STNP <Wt1>, <Wt2>, [<Xn|SP>{, #<imm>}]
6
6
  # STNP <Xt1>, <Xt2>, [<Xn|SP>{, #<imm>}]
7
- class STNP_gen
7
+ class STNP_gen < Instruction
8
8
  def initialize rt, rt2, rn, imm7, opc
9
- @rt = rt
10
- @rt2 = rt2
11
- @rn = rn
12
- @imm7 = imm7
13
- @opc = opc
9
+ @rt = check_mask(rt, 0x1f)
10
+ @rt2 = check_mask(rt2, 0x1f)
11
+ @rn = check_mask(rn, 0x1f)
12
+ @imm7 = check_mask(imm7, 0x7f)
13
+ @opc = check_mask(opc, 0x03)
14
14
  end
15
15
 
16
16
  def encode
17
- STNP_gen(@opc, @imm7, @rt2.to_i, @rn.to_i, @rt.to_i)
17
+ STNP_gen(@opc, @imm7, @rt2, @rn, @rt)
18
18
  end
19
19
 
20
20
  private
21
21
 
22
22
  def STNP_gen opc, imm7, rt2, rn, rt
23
23
  insn = 0b00_101_0_000_0_0000000_00000_00000_00000
24
- insn |= ((opc & 0x3) << 30)
25
- insn |= ((imm7 & 0x7f) << 15)
26
- insn |= ((rt2 & 0x1f) << 10)
27
- insn |= ((rn & 0x1f) << 5)
28
- insn |= (rt & 0x1f)
24
+ insn |= ((opc) << 30)
25
+ insn |= ((imm7) << 15)
26
+ insn |= ((rt2) << 10)
27
+ insn |= ((rn) << 5)
28
+ insn |= (rt)
29
29
  insn
30
30
  end
31
31
  end
@@ -8,30 +8,30 @@ module AArch64
8
8
  # STP <Xt1>, <Xt2>, [<Xn|SP>, #<imm>]!
9
9
  # STP <Wt1>, <Wt2>, [<Xn|SP>{, #<imm>}]
10
10
  # STP <Xt1>, <Xt2>, [<Xn|SP>{, #<imm>}]
11
- class STP_gen
11
+ class STP_gen < Instruction
12
12
  def initialize rt, rt2, rn, imm7, opc, option
13
- @rt = rt
14
- @rt2 = rt2
15
- @rn = rn
16
- @imm7 = imm7
17
- @opc = opc
18
- @option = option
13
+ @rt = check_mask(rt, 0x1f)
14
+ @rt2 = check_mask(rt2, 0x1f)
15
+ @rn = check_mask(rn, 0x1f)
16
+ @imm7 = check_mask(imm7, 0x7f)
17
+ @opc = check_mask(opc, 0x03)
18
+ @option = check_mask(option, 0x07)
19
19
  end
20
20
 
21
21
  def encode
22
- STP_gen(@opc, @option, @imm7, @rt2.to_i, @rn.to_i, @rt.to_i)
22
+ STP_gen(@opc, @option, @imm7, @rt2, @rn, @rt)
23
23
  end
24
24
 
25
25
  private
26
26
 
27
27
  def STP_gen opc, option, imm7, rt2, rn, rt
28
28
  insn = 0b00_101_0_000_0_0000000_00000_00000_00000
29
- insn |= ((opc & 0x3) << 30)
30
- insn |= ((option & 0x7) << 23)
31
- insn |= ((imm7 & 0x7f) << 15)
32
- insn |= ((rt2 & 0x1f) << 10)
33
- insn |= ((rn & 0x1f) << 5)
34
- insn |= (rt & 0x1f)
29
+ insn |= ((opc) << 30)
30
+ insn |= ((option) << 23)
31
+ insn |= ((imm7) << 15)
32
+ insn |= ((rt2) << 10)
33
+ insn |= ((rn) << 5)
34
+ insn |= (rt)
35
35
  insn
36
36
  end
37
37
  end
@@ -8,28 +8,28 @@ module AArch64
8
8
  # STR <Xt>, [<Xn|SP>, #<simm>]!
9
9
  # STR <Wt>, [<Xn|SP>{, #<pimm>}]
10
10
  # STR <Xt>, [<Xn|SP>{, #<pimm>}]
11
- class STR_imm_gen
11
+ class STR_imm_gen < Instruction
12
12
  def initialize rt, rn, imm9, opt, size
13
- @rt = rt
14
- @rn = rn
15
- @imm9 = imm9
16
- @opt = opt
17
- @size = size
13
+ @rt = check_mask(rt, 0x1f)
14
+ @rn = check_mask(rn, 0x1f)
15
+ @imm9 = check_mask(imm9, 0x1ff)
16
+ @opt = check_mask(opt, 0x03)
17
+ @size = check_mask(size, 0x03)
18
18
  end
19
19
 
20
20
  def encode
21
- STR_imm_gen(@size, @imm9, @opt, @rn.to_i, @rt.to_i)
21
+ STR_imm_gen(@size, @imm9, @opt, @rn, @rt)
22
22
  end
23
23
 
24
24
  private
25
25
 
26
26
  def STR_imm_gen size, imm9, opt, rn, rt
27
27
  insn = 0b00_111_0_00_00_0_000000000_00_00000_00000
28
- insn |= ((size & 0x3) << 30)
29
- insn |= ((imm9 & 0x1ff) << 12)
30
- insn |= ((opt & 0x3) << 10)
31
- insn |= ((rn & 0x1f) << 5)
32
- insn |= (rt & 0x1f)
28
+ insn |= ((size) << 30)
29
+ insn |= ((imm9) << 12)
30
+ insn |= ((opt) << 10)
31
+ insn |= ((rn) << 5)
32
+ insn |= (rt)
33
33
  insn
34
34
  end
35
35
  end
@@ -4,26 +4,26 @@ module AArch64
4
4
  # Store Register (immediate)
5
5
  # STR <Wt>, [<Xn|SP>{, #<pimm>}]
6
6
  # STR <Xt>, [<Xn|SP>{, #<pimm>}]
7
- class STR_imm_unsigned
7
+ class STR_imm_unsigned < Instruction
8
8
  def initialize rt, rn, imm12, size
9
- @rt = rt
10
- @rn = rn
11
- @imm12 = imm12
12
- @size = size
9
+ @rt = check_mask(rt, 0x1f)
10
+ @rn = check_mask(rn, 0x1f)
11
+ @imm12 = check_mask(imm12, 0xfff)
12
+ @size = check_mask(size, 0x03)
13
13
  end
14
14
 
15
15
  def encode
16
- STR_imm_gen(@size, @imm12, @rn.to_i, @rt.to_i)
16
+ STR_imm_gen(@size, @imm12, @rn, @rt)
17
17
  end
18
18
 
19
19
  private
20
20
 
21
21
  def STR_imm_gen size, imm12, rn, rt
22
22
  insn = 0b00_111_0_01_00_0_000000000_00_00000_00000
23
- insn |= ((size & 0x3) << 30)
24
- insn |= ((imm12 & 0xfff) << 10)
25
- insn |= ((rn & 0x1f) << 5)
26
- insn |= (rt & 0x1f)
23
+ insn |= ((size) << 30)
24
+ insn |= ((imm12) << 10)
25
+ insn |= ((rn) << 5)
26
+ insn |= (rt)
27
27
  insn
28
28
  end
29
29
  end
@@ -4,30 +4,30 @@ module AArch64
4
4
  # Store Register (register)
5
5
  # STR <Wt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]
6
6
  # STR <Xt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]
7
- class STR_reg_gen
7
+ class STR_reg_gen < Instruction
8
8
  def initialize rt, rn, rm, option, s, size
9
- @rt = rt
10
- @rn = rn
11
- @rm = rm
12
- @option = option
13
- @s = s
14
- @size = size
9
+ @rt = check_mask(rt, 0x1f)
10
+ @rn = check_mask(rn, 0x1f)
11
+ @rm = check_mask(rm, 0x1f)
12
+ @option = check_mask(option, 0x07)
13
+ @s = check_mask(s, 0x01)
14
+ @size = check_mask(size, 0x03)
15
15
  end
16
16
 
17
17
  def encode
18
- STR_reg_gen(@size, @rm.to_i, @option, @s, @rn.to_i, @rt.to_i)
18
+ STR_reg_gen(@size, @rm, @option, @s, @rn, @rt)
19
19
  end
20
20
 
21
21
  private
22
22
 
23
23
  def STR_reg_gen size, rm, option, s, rn, rt
24
24
  insn = 0b00_111_0_00_00_1_00000_000_0_10_00000_00000
25
- insn |= ((size & 0x3) << 30)
26
- insn |= ((rm & 0x1f) << 16)
27
- insn |= ((option & 0x7) << 13)
28
- insn |= ((s & 0x1) << 12)
29
- insn |= ((rn & 0x1f) << 5)
30
- insn |= (rt & 0x1f)
25
+ insn |= ((size) << 30)
26
+ insn |= ((rm) << 16)
27
+ insn |= ((option) << 13)
28
+ insn |= ((s) << 12)
29
+ insn |= ((rn) << 5)
30
+ insn |= (rt)
31
31
  insn
32
32
  end
33
33
  end
@@ -5,26 +5,26 @@ module AArch64
5
5
  # STRB <Wt>, [<Xn|SP>], #<simm>
6
6
  # STRB <Wt>, [<Xn|SP>, #<simm>]!
7
7
  # STRB <Wt>, [<Xn|SP>{, #<pimm>}]
8
- class STRB_imm
8
+ class STRB_imm < Instruction
9
9
  def initialize rt, rn, imm9, opt
10
- @rt = rt
11
- @rn = rn
12
- @imm9 = imm9
13
- @opt = opt
10
+ @rt = check_mask(rt, 0x1f)
11
+ @rn = check_mask(rn, 0x1f)
12
+ @imm9 = check_mask(imm9, 0x1ff)
13
+ @opt = check_mask(opt, 0x03)
14
14
  end
15
15
 
16
16
  def encode
17
- STRB_imm(@imm9, @opt, @rn.to_i, @rt.to_i)
17
+ STRB_imm(@imm9, @opt, @rn, @rt)
18
18
  end
19
19
 
20
20
  private
21
21
 
22
22
  def STRB_imm imm9, opt, rn, rt
23
23
  insn = 0b00_111_0_00_00_0_000000000_00_00000_00000
24
- insn |= ((imm9 & 0x1ff) << 12)
25
- insn |= ((opt & 0x3) << 10)
26
- insn |= ((rn & 0x1f) << 5)
27
- insn |= (rt & 0x1f)
24
+ insn |= ((imm9) << 12)
25
+ insn |= ((opt) << 10)
26
+ insn |= ((rn) << 5)
27
+ insn |= (rt)
28
28
  insn
29
29
  end
30
30
  end
@@ -3,24 +3,24 @@ module AArch64
3
3
  # STRB (immediate) -- A64
4
4
  # Store Register Byte (immediate)
5
5
  # STRB <Wt>, [<Xn|SP>{, #<pimm>}]
6
- class STRB_imm_unsigned
6
+ class STRB_imm_unsigned < Instruction
7
7
  def initialize rt, rn, imm12
8
- @rt = rt
9
- @rn = rn
10
- @imm12 = imm12
8
+ @rt = check_mask(rt, 0x1f)
9
+ @rn = check_mask(rn, 0x1f)
10
+ @imm12 = check_mask(imm12, 0xfff)
11
11
  end
12
12
 
13
13
  def encode
14
- STRB_imm_unsigned(@imm12, @rn.to_i, @rt.to_i)
14
+ STRB_imm_unsigned(@imm12, @rn, @rt)
15
15
  end
16
16
 
17
17
  private
18
18
 
19
19
  def STRB_imm_unsigned imm12, rn, rt
20
20
  insn = 0b00_111_0_01_00_0_000000000_00_00000_00000
21
- insn |= ((imm12 & 0xfff) << 10)
22
- insn |= ((rn & 0x1f) << 5)
23
- insn |= (rt & 0x1f)
21
+ insn |= ((imm12) << 10)
22
+ insn |= ((rn) << 5)
23
+ insn |= (rt)
24
24
  insn
25
25
  end
26
26
  end
@@ -4,28 +4,28 @@ module AArch64
4
4
  # Store Register Byte (register)
5
5
  # STRB <Wt>, [<Xn|SP>, (<Wm>|<Xm>), <extend> {<amount>}]
6
6
  # STRB <Wt>, [<Xn|SP>, <Xm>{, LSL <amount>}]
7
- class STRB_reg
7
+ class STRB_reg < Instruction
8
8
  def initialize rt, rn, rm, option, s
9
- @rt = rt
10
- @rn = rn
11
- @rm = rm
12
- @option = option
13
- @s = s
9
+ @rt = check_mask(rt, 0x1f)
10
+ @rn = check_mask(rn, 0x1f)
11
+ @rm = check_mask(rm, 0x1f)
12
+ @option = check_mask(option, 0x07)
13
+ @s = check_mask(s, 0x01)
14
14
  end
15
15
 
16
16
  def encode
17
- STRB_reg(@rm.to_i, @option, @s, @rn.to_i, @rt.to_i)
17
+ STRB_reg(@rm, @option, @s, @rn, @rt)
18
18
  end
19
19
 
20
20
  private
21
21
 
22
22
  def STRB_reg rm, option, s, rn, rt
23
23
  insn = 0b00_111_0_00_00_1_00000_000_0_10_00000_00000
24
- insn |= ((rm & 0x1f) << 16)
25
- insn |= ((option & 0x7) << 13)
26
- insn |= ((s & 0x1) << 12)
27
- insn |= ((rn & 0x1f) << 5)
28
- insn |= (rt & 0x1f)
24
+ insn |= ((rm) << 16)
25
+ insn |= ((option) << 13)
26
+ insn |= ((s) << 12)
27
+ insn |= ((rn) << 5)
28
+ insn |= (rt)
29
29
  insn
30
30
  end
31
31
  end
@@ -5,26 +5,26 @@ module AArch64
5
5
  # STRH <Wt>, [<Xn|SP>], #<simm>
6
6
  # STRH <Wt>, [<Xn|SP>, #<simm>]!
7
7
  # STRH <Wt>, [<Xn|SP>{, #<pimm>}]
8
- class STRH_imm
8
+ class STRH_imm < Instruction
9
9
  def initialize rt, rn, imm9, opt
10
- @rt = rt
11
- @rn = rn
12
- @imm9 = imm9
13
- @opt = opt
10
+ @rt = check_mask(rt, 0x1f)
11
+ @rn = check_mask(rn, 0x1f)
12
+ @imm9 = check_mask(imm9, 0x1ff)
13
+ @opt = check_mask(opt, 0x03)
14
14
  end
15
15
 
16
16
  def encode
17
- STRH_imm(@imm9, @opt, @rn.to_i, @rt.to_i)
17
+ STRH_imm(@imm9, @opt, @rn, @rt)
18
18
  end
19
19
 
20
20
  private
21
21
 
22
22
  def STRH_imm imm9, opt, rn, rt
23
23
  insn = 0b01_111_0_00_00_0_000000000_00_00000_00000
24
- insn |= ((imm9 & 0x1ff) << 12)
25
- insn |= ((opt & 0x3) << 10)
26
- insn |= ((rn & 0x1f) << 5)
27
- insn |= (rt & 0x1f)
24
+ insn |= ((imm9) << 12)
25
+ insn |= ((opt) << 10)
26
+ insn |= ((rn) << 5)
27
+ insn |= (rt)
28
28
  insn
29
29
  end
30
30
  end
@@ -3,24 +3,24 @@ module AArch64
3
3
  # STRH (immediate) -- A64
4
4
  # Store Register Halfword (immediate)
5
5
  # STRH <Wt>, [<Xn|SP>{, #<pimm>}]
6
- class STRH_imm_unsigned
6
+ class STRH_imm_unsigned < Instruction
7
7
  def initialize rt, rn, imm12
8
- @rt = rt
9
- @rn = rn
10
- @imm12 = imm12
8
+ @rt = check_mask(rt, 0x1f)
9
+ @rn = check_mask(rn, 0x1f)
10
+ @imm12 = check_mask(imm12, 0xfff)
11
11
  end
12
12
 
13
13
  def encode
14
- STRH_imm_unsigned(@imm12, @rn.to_i, @rt.to_i)
14
+ STRH_imm_unsigned(@imm12, @rn, @rt)
15
15
  end
16
16
 
17
17
  private
18
18
 
19
19
  def STRH_imm_unsigned imm12, rn, rt
20
20
  insn = 0b01_111_0_01_00_0_000000000_00_00000_00000
21
- insn |= ((imm12 & 0xfff) << 10)
22
- insn |= ((rn & 0x1f) << 5)
23
- insn |= (rt & 0x1f)
21
+ insn |= ((imm12) << 10)
22
+ insn |= ((rn) << 5)
23
+ insn |= (rt)
24
24
  insn
25
25
  end
26
26
  end
@@ -3,28 +3,28 @@ module AArch64
3
3
  # STRH (register) -- A64
4
4
  # Store Register Halfword (register)
5
5
  # STRH <Wt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]
6
- class STRH_reg
6
+ class STRH_reg < Instruction
7
7
  def initialize rt, rn, rm, option, s
8
- @rt = rt
9
- @rn = rn
10
- @rm = rm
11
- @option = option
12
- @s = s
8
+ @rt = check_mask(rt, 0x1f)
9
+ @rn = check_mask(rn, 0x1f)
10
+ @rm = check_mask(rm, 0x1f)
11
+ @option = check_mask(option, 0x07)
12
+ @s = check_mask(s, 0x01)
13
13
  end
14
14
 
15
15
  def encode
16
- STRH_reg(@rm.to_i, @option, @s, @rn.to_i, @rt.to_i)
16
+ STRH_reg(@rm, @option, @s, @rn, @rt)
17
17
  end
18
18
 
19
19
  private
20
20
 
21
21
  def STRH_reg rm, option, s, rn, rt
22
22
  insn = 0b01_111_0_00_00_1_00000_000_0_10_00000_00000
23
- insn |= ((rm & 0x1f) << 16)
24
- insn |= ((option & 0x7) << 13)
25
- insn |= ((s & 0x1) << 12)
26
- insn |= ((rn & 0x1f) << 5)
27
- insn |= (rt & 0x1f)
23
+ insn |= ((rm) << 16)
24
+ insn |= ((option) << 13)
25
+ insn |= ((s) << 12)
26
+ insn |= ((rn) << 5)
27
+ insn |= (rt)
28
28
  insn
29
29
  end
30
30
  end
@@ -4,26 +4,26 @@ module AArch64
4
4
  # Store Register (unprivileged)
5
5
  # STTR <Wt>, [<Xn|SP>{, #<simm>}]
6
6
  # STTR <Xt>, [<Xn|SP>{, #<simm>}]
7
- class STTR
7
+ class STTR < Instruction
8
8
  def initialize rt, rn, imm9, size
9
- @rt = rt
10
- @rn = rn
11
- @imm9 = imm9
12
- @size = size
9
+ @rt = check_mask(rt, 0x1f)
10
+ @rn = check_mask(rn, 0x1f)
11
+ @imm9 = check_mask(imm9, 0x1ff)
12
+ @size = check_mask(size, 0x03)
13
13
  end
14
14
 
15
15
  def encode
16
- STTR(@size, @imm9, @rn.to_i, @rt.to_i)
16
+ STTR(@size, @imm9, @rn, @rt)
17
17
  end
18
18
 
19
19
  private
20
20
 
21
21
  def STTR size, imm9, rn, rt
22
22
  insn = 0b00_111_0_00_00_0_000000000_10_00000_00000
23
- insn |= ((size & 0x3) << 30)
24
- insn |= ((imm9 & 0x1ff) << 12)
25
- insn |= ((rn & 0x1f) << 5)
26
- insn |= (rt & 0x1f)
23
+ insn |= ((size) << 30)
24
+ insn |= ((imm9) << 12)
25
+ insn |= ((rn) << 5)
26
+ insn |= (rt)
27
27
  insn
28
28
  end
29
29
  end
@@ -4,26 +4,26 @@ module AArch64
4
4
  # Store Register (unscaled)
5
5
  # STUR <Wt>, [<Xn|SP>{, #<simm>}]
6
6
  # STUR <Xt>, [<Xn|SP>{, #<simm>}]
7
- class STUR_gen
7
+ class STUR_gen < Instruction
8
8
  def initialize rt, rn, imm9, size
9
- @rt = rt
10
- @rn = rn
11
- @imm9 = imm9
12
- @size = size
9
+ @rt = check_mask(rt, 0x1f)
10
+ @rn = check_mask(rn, 0x1f)
11
+ @imm9 = check_mask(imm9, 0x1ff)
12
+ @size = check_mask(size, 0x03)
13
13
  end
14
14
 
15
15
  def encode
16
- STUR_gen(@size, @imm9, @rn.to_i, @rt.to_i)
16
+ STUR_gen(@size, @imm9, @rn, @rt)
17
17
  end
18
18
 
19
19
  private
20
20
 
21
21
  def STUR_gen size, imm9, rn, rt
22
22
  insn = 0b00_111_0_00_00_0_000000000_00_00000_00000
23
- insn |= ((size & 0x3) << 30)
24
- insn |= ((imm9 & 0x1ff) << 12)
25
- insn |= ((rn & 0x1f) << 5)
26
- insn |= (rt & 0x1f)
23
+ insn |= ((size) << 30)
24
+ insn |= ((imm9) << 12)
25
+ insn |= ((rn) << 5)
26
+ insn |= (rt)
27
27
  insn
28
28
  end
29
29
  end
@@ -4,28 +4,28 @@ module AArch64
4
4
  # Store Exclusive Pair of registers
5
5
  # STXP <Ws>, <Wt1>, <Wt2>, [<Xn|SP>{,#0}]
6
6
  # STXP <Ws>, <Xt1>, <Xt2>, [<Xn|SP>{,#0}]
7
- class STXP
7
+ class STXP < Instruction
8
8
  def initialize rs, rt1, rt2, rn, sf
9
- @rs = rs
10
- @rt1 = rt1
11
- @rt2 = rt2
12
- @rn = rn
13
- @sf = sf
9
+ @rs = check_mask(rs, 0x1f)
10
+ @rt1 = check_mask(rt1, 0x1f)
11
+ @rt2 = check_mask(rt2, 0x1f)
12
+ @rn = check_mask(rn, 0x1f)
13
+ @sf = check_mask(sf, 0x01)
14
14
  end
15
15
 
16
16
  def encode
17
- STXP(@sf, @rs.to_i, @rt2.to_i, @rn.to_i, @rt1.to_i)
17
+ STXP(@sf, @rs, @rt2, @rn, @rt1)
18
18
  end
19
19
 
20
20
  private
21
21
 
22
22
  def STXP sz, rs, rt2, rn, rt
23
23
  insn = 0b1_0_001000_0_0_1_00000_0_00000_00000_00000
24
- insn |= ((sz & 0x1) << 30)
25
- insn |= ((rs & 0x1f) << 16)
26
- insn |= ((rt2 & 0x1f) << 10)
27
- insn |= ((rn & 0x1f) << 5)
28
- insn |= (rt & 0x1f)
24
+ insn |= ((sz) << 30)
25
+ insn |= ((rs) << 16)
26
+ insn |= ((rt2) << 10)
27
+ insn |= ((rn) << 5)
28
+ insn |= (rt)
29
29
  insn
30
30
  end
31
31
  end