aarch64 1.0.0 → 1.0.1

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 (211) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -2
  3. data/Rakefile +2 -0
  4. data/lib/aarch64/instructions/adc.rb +1 -1
  5. data/lib/aarch64/instructions/adcs.rb +1 -1
  6. data/lib/aarch64/instructions/add_addsub_ext.rb +1 -1
  7. data/lib/aarch64/instructions/and_log_imm.rb +1 -1
  8. data/lib/aarch64/instructions/ands_log_imm.rb +1 -1
  9. data/lib/aarch64/instructions/asrv.rb +1 -1
  10. data/lib/aarch64/instructions/axflag.rb +0 -6
  11. data/lib/aarch64/instructions/cfinv.rb +1 -1
  12. data/lib/aarch64/instructions/crc32.rb +1 -1
  13. data/lib/aarch64/instructions/crc32c.rb +1 -1
  14. data/lib/aarch64/instructions/csdb.rb +1 -8
  15. data/lib/aarch64/instructions/csel.rb +1 -1
  16. data/lib/aarch64/instructions/csneg.rb +1 -1
  17. data/lib/aarch64/instructions/dcps.rb +1 -1
  18. data/lib/aarch64/instructions/dgh.rb +1 -8
  19. data/lib/aarch64/instructions/dmb.rb +1 -1
  20. data/lib/aarch64/instructions/drps.rb +1 -1
  21. data/lib/aarch64/instructions/dsb.rb +1 -1
  22. data/lib/aarch64/instructions/eon.rb +1 -1
  23. data/lib/aarch64/instructions/eor_log_imm.rb +1 -1
  24. data/lib/aarch64/instructions/eor_log_shift.rb +1 -1
  25. data/lib/aarch64/instructions/eret.rb +1 -1
  26. data/lib/aarch64/instructions/ereta.rb +1 -1
  27. data/lib/aarch64/instructions/esb.rb +1 -8
  28. data/lib/aarch64/instructions/extr.rb +1 -1
  29. data/lib/aarch64/instructions/gmi.rb +1 -1
  30. data/lib/aarch64/instructions/hlt.rb +1 -1
  31. data/lib/aarch64/instructions/hvc.rb +1 -1
  32. data/lib/aarch64/instructions/irg.rb +1 -1
  33. data/lib/aarch64/instructions/isb.rb +1 -1
  34. data/lib/aarch64/instructions/ld64b.rb +1 -1
  35. data/lib/aarch64/instructions/ldadd.rb +1 -1
  36. data/lib/aarch64/instructions/ldaddb.rb +1 -1
  37. data/lib/aarch64/instructions/ldaddh.rb +1 -1
  38. data/lib/aarch64/instructions/ldapr.rb +1 -1
  39. data/lib/aarch64/instructions/ldaprb.rb +1 -1
  40. data/lib/aarch64/instructions/ldaprh.rb +1 -1
  41. data/lib/aarch64/instructions/ldapur_gen.rb +1 -1
  42. data/lib/aarch64/instructions/ldar.rb +1 -1
  43. data/lib/aarch64/instructions/ldaxp.rb +1 -1
  44. data/lib/aarch64/instructions/ldaxr.rb +1 -1
  45. data/lib/aarch64/instructions/ldclr.rb +1 -1
  46. data/lib/aarch64/instructions/ldclrb.rb +1 -1
  47. data/lib/aarch64/instructions/ldeor.rb +1 -1
  48. data/lib/aarch64/instructions/ldg.rb +1 -1
  49. data/lib/aarch64/instructions/ldgm.rb +1 -1
  50. data/lib/aarch64/instructions/ldlar.rb +1 -1
  51. data/lib/aarch64/instructions/ldnp_gen.rb +1 -1
  52. data/lib/aarch64/instructions/ldp_gen.rb +1 -1
  53. data/lib/aarch64/instructions/ldpsw.rb +1 -1
  54. data/lib/aarch64/instructions/ldr_imm_gen.rb +1 -1
  55. data/lib/aarch64/instructions/ldr_imm_unsigned.rb +1 -1
  56. data/lib/aarch64/instructions/ldr_lit_gen.rb +1 -1
  57. data/lib/aarch64/instructions/ldr_reg_gen.rb +1 -1
  58. data/lib/aarch64/instructions/ldra.rb +1 -1
  59. data/lib/aarch64/instructions/ldrb_imm.rb +1 -1
  60. data/lib/aarch64/instructions/ldrb_reg.rb +1 -1
  61. data/lib/aarch64/instructions/ldrb_unsigned.rb +1 -1
  62. data/lib/aarch64/instructions/ldrh_imm.rb +1 -1
  63. data/lib/aarch64/instructions/ldrh_reg.rb +1 -1
  64. data/lib/aarch64/instructions/ldrh_unsigned.rb +1 -1
  65. data/lib/aarch64/instructions/ldrsb_imm.rb +1 -1
  66. data/lib/aarch64/instructions/ldrsb_reg.rb +1 -1
  67. data/lib/aarch64/instructions/ldrsb_unsigned.rb +1 -1
  68. data/lib/aarch64/instructions/ldrsh_imm.rb +1 -1
  69. data/lib/aarch64/instructions/ldrsh_reg.rb +1 -1
  70. data/lib/aarch64/instructions/ldrsh_unsigned.rb +1 -1
  71. data/lib/aarch64/instructions/ldrsw_imm.rb +1 -1
  72. data/lib/aarch64/instructions/ldrsw_lit.rb +1 -1
  73. data/lib/aarch64/instructions/ldrsw_reg.rb +1 -1
  74. data/lib/aarch64/instructions/ldrsw_unsigned.rb +1 -1
  75. data/lib/aarch64/instructions/ldset.rb +1 -1
  76. data/lib/aarch64/instructions/ldsetb.rb +1 -1
  77. data/lib/aarch64/instructions/ldseth.rb +1 -1
  78. data/lib/aarch64/instructions/ldsmax.rb +1 -1
  79. data/lib/aarch64/instructions/ldsmaxb.rb +1 -1
  80. data/lib/aarch64/instructions/ldsmaxh.rb +1 -1
  81. data/lib/aarch64/instructions/ldsmin.rb +1 -1
  82. data/lib/aarch64/instructions/ldsminb.rb +1 -1
  83. data/lib/aarch64/instructions/ldsminh.rb +1 -1
  84. data/lib/aarch64/instructions/ldtr.rb +1 -1
  85. data/lib/aarch64/instructions/ldtrb.rb +1 -1
  86. data/lib/aarch64/instructions/ldtrh.rb +1 -1
  87. data/lib/aarch64/instructions/ldtrsb.rb +1 -1
  88. data/lib/aarch64/instructions/ldtrsh.rb +1 -1
  89. data/lib/aarch64/instructions/ldtrsw.rb +1 -1
  90. data/lib/aarch64/instructions/ldumax.rb +1 -1
  91. data/lib/aarch64/instructions/ldumaxb.rb +1 -1
  92. data/lib/aarch64/instructions/ldumaxh.rb +1 -1
  93. data/lib/aarch64/instructions/ldumin.rb +1 -1
  94. data/lib/aarch64/instructions/lduminb.rb +1 -1
  95. data/lib/aarch64/instructions/lduminh.rb +1 -1
  96. data/lib/aarch64/instructions/ldur_gen.rb +1 -1
  97. data/lib/aarch64/instructions/ldursb.rb +1 -1
  98. data/lib/aarch64/instructions/ldursh.rb +1 -1
  99. data/lib/aarch64/instructions/ldursw.rb +1 -1
  100. data/lib/aarch64/instructions/ldxp.rb +1 -1
  101. data/lib/aarch64/instructions/ldxr.rb +1 -1
  102. data/lib/aarch64/instructions/lslv.rb +1 -1
  103. data/lib/aarch64/instructions/lsrv.rb +1 -1
  104. data/lib/aarch64/instructions/madd.rb +1 -1
  105. data/lib/aarch64/instructions/movn.rb +1 -1
  106. data/lib/aarch64/instructions/mrs.rb +1 -1
  107. data/lib/aarch64/instructions/msr_imm.rb +1 -1
  108. data/lib/aarch64/instructions/msr_reg.rb +1 -1
  109. data/lib/aarch64/instructions/msub.rb +1 -1
  110. data/lib/aarch64/instructions/nop.rb +1 -8
  111. data/lib/aarch64/instructions/orn_log_shift.rb +1 -1
  112. data/lib/aarch64/instructions/orr_log_imm.rb +1 -1
  113. data/lib/aarch64/instructions/orr_log_shift.rb +1 -1
  114. data/lib/aarch64/instructions/pacda.rb +1 -1
  115. data/lib/aarch64/instructions/pacdb.rb +1 -1
  116. data/lib/aarch64/instructions/pacga.rb +1 -1
  117. data/lib/aarch64/instructions/pacia.rb +1 -1
  118. data/lib/aarch64/instructions/pacia2.rb +1 -1
  119. data/lib/aarch64/instructions/pacib.rb +1 -1
  120. data/lib/aarch64/instructions/prfm_imm.rb +1 -1
  121. data/lib/aarch64/instructions/prfm_lit.rb +1 -1
  122. data/lib/aarch64/instructions/prfm_reg.rb +1 -1
  123. data/lib/aarch64/instructions/prfum.rb +1 -1
  124. data/lib/aarch64/instructions/psb.rb +1 -1
  125. data/lib/aarch64/instructions/rbit_int.rb +1 -1
  126. data/lib/aarch64/instructions/reta.rb +1 -1
  127. data/lib/aarch64/instructions/rev.rb +1 -1
  128. data/lib/aarch64/instructions/rmif.rb +1 -1
  129. data/lib/aarch64/instructions/rorv.rb +1 -1
  130. data/lib/aarch64/instructions/sb.rb +1 -8
  131. data/lib/aarch64/instructions/sbc.rb +1 -1
  132. data/lib/aarch64/instructions/sbcs.rb +1 -1
  133. data/lib/aarch64/instructions/sdiv.rb +1 -1
  134. data/lib/aarch64/instructions/setf.rb +1 -1
  135. data/lib/aarch64/instructions/sev.rb +1 -1
  136. data/lib/aarch64/instructions/sevl.rb +0 -6
  137. data/lib/aarch64/instructions/smaddl.rb +1 -1
  138. data/lib/aarch64/instructions/smc.rb +1 -1
  139. data/lib/aarch64/instructions/smsubl.rb +1 -1
  140. data/lib/aarch64/instructions/smulh.rb +1 -1
  141. data/lib/aarch64/instructions/st2g.rb +1 -1
  142. data/lib/aarch64/instructions/st64b.rb +1 -1
  143. data/lib/aarch64/instructions/st64bv.rb +1 -1
  144. data/lib/aarch64/instructions/st64bv0.rb +1 -1
  145. data/lib/aarch64/instructions/stg.rb +1 -1
  146. data/lib/aarch64/instructions/stgm.rb +1 -1
  147. data/lib/aarch64/instructions/stgp.rb +1 -1
  148. data/lib/aarch64/instructions/stllr.rb +1 -1
  149. data/lib/aarch64/instructions/stllrb.rb +1 -1
  150. data/lib/aarch64/instructions/stllrh.rb +1 -1
  151. data/lib/aarch64/instructions/stlr.rb +1 -1
  152. data/lib/aarch64/instructions/stlrb.rb +1 -1
  153. data/lib/aarch64/instructions/stlrh.rb +1 -1
  154. data/lib/aarch64/instructions/stlur_gen.rb +1 -1
  155. data/lib/aarch64/instructions/stlxp.rb +1 -1
  156. data/lib/aarch64/instructions/stlxr.rb +1 -1
  157. data/lib/aarch64/instructions/stlxrb.rb +1 -1
  158. data/lib/aarch64/instructions/stlxrh.rb +1 -1
  159. data/lib/aarch64/instructions/stnp_gen.rb +1 -1
  160. data/lib/aarch64/instructions/stp_gen.rb +1 -1
  161. data/lib/aarch64/instructions/str_imm_gen.rb +1 -1
  162. data/lib/aarch64/instructions/str_imm_unsigned.rb +1 -1
  163. data/lib/aarch64/instructions/str_reg_gen.rb +1 -1
  164. data/lib/aarch64/instructions/strb_imm.rb +1 -1
  165. data/lib/aarch64/instructions/strb_imm_unsigned.rb +1 -1
  166. data/lib/aarch64/instructions/strb_reg.rb +1 -1
  167. data/lib/aarch64/instructions/strh_imm.rb +1 -1
  168. data/lib/aarch64/instructions/strh_imm_unsigned.rb +1 -1
  169. data/lib/aarch64/instructions/strh_reg.rb +1 -1
  170. data/lib/aarch64/instructions/sttr.rb +1 -1
  171. data/lib/aarch64/instructions/stur_gen.rb +1 -1
  172. data/lib/aarch64/instructions/stxp.rb +1 -1
  173. data/lib/aarch64/instructions/stxr.rb +1 -1
  174. data/lib/aarch64/instructions/stxrb.rb +1 -1
  175. data/lib/aarch64/instructions/stxrh.rb +1 -1
  176. data/lib/aarch64/instructions/stz2g.rb +1 -1
  177. data/lib/aarch64/instructions/stzg.rb +1 -1
  178. data/lib/aarch64/instructions/stzgm.rb +1 -1
  179. data/lib/aarch64/instructions/sub_addsub_ext.rb +1 -1
  180. data/lib/aarch64/instructions/sub_addsub_imm.rb +1 -1
  181. data/lib/aarch64/instructions/sub_addsub_shift.rb +1 -1
  182. data/lib/aarch64/instructions/subg.rb +1 -1
  183. data/lib/aarch64/instructions/subp.rb +1 -1
  184. data/lib/aarch64/instructions/subps.rb +1 -1
  185. data/lib/aarch64/instructions/svc.rb +1 -1
  186. data/lib/aarch64/instructions/swp.rb +1 -1
  187. data/lib/aarch64/instructions/swpb.rb +1 -1
  188. data/lib/aarch64/instructions/swph.rb +1 -1
  189. data/lib/aarch64/instructions/sys.rb +1 -1
  190. data/lib/aarch64/instructions/sysl.rb +1 -1
  191. data/lib/aarch64/instructions/tbnz.rb +1 -1
  192. data/lib/aarch64/instructions/tbz.rb +1 -1
  193. data/lib/aarch64/instructions/tsb.rb +1 -1
  194. data/lib/aarch64/instructions/ubfm.rb +1 -1
  195. data/lib/aarch64/instructions/udf_perm_undef.rb +1 -1
  196. data/lib/aarch64/instructions/udiv.rb +1 -1
  197. data/lib/aarch64/instructions/umaddl.rb +1 -1
  198. data/lib/aarch64/instructions/umsubl.rb +1 -1
  199. data/lib/aarch64/instructions/umulh.rb +1 -1
  200. data/lib/aarch64/instructions/wfe.rb +1 -1
  201. data/lib/aarch64/instructions/wfet.rb +1 -1
  202. data/lib/aarch64/instructions/wfi.rb +1 -8
  203. data/lib/aarch64/instructions/wfit.rb +1 -1
  204. data/lib/aarch64/instructions/xaflag.rb +1 -8
  205. data/lib/aarch64/instructions/xpac.rb +1 -1
  206. data/lib/aarch64/instructions/xpaclri.rb +0 -6
  207. data/lib/aarch64/instructions/yield.rb +1 -1
  208. data/lib/aarch64/version.rb +1 -1
  209. data/lib/aarch64.rb +72 -161
  210. data/test/dsl_test.rb +8 -0
  211. metadata +6 -6
data/lib/aarch64.rb CHANGED
@@ -291,11 +291,7 @@ module AArch64
291
291
 
292
292
  def asr d, n, m
293
293
  if m.integer?
294
- if d.x?
295
- sbfm d, n, m, 63
296
- else
297
- sbfm d, n, m, 31
298
- end
294
+ sbfm d, n, m, d.size - 1
299
295
  else
300
296
  asrv d, n, m
301
297
  end
@@ -383,14 +379,11 @@ module AArch64
383
379
  end
384
380
 
385
381
  def bfc rd, lsb, width
386
- div = rd.x? ? 64 : 32
387
- rn = rd.x? ? XZR : WZR
388
- bfm(rd, rn, -lsb % div, width - 1)
382
+ bfm(rd, rd.zr, -lsb % rd.size, width - 1)
389
383
  end
390
384
 
391
385
  def bfi rd, rn, lsb, width
392
- div = rd.x? ? 64 : 32
393
- bfm(rd, rn, -lsb % div, width - 1)
386
+ bfm(rd, rn, -lsb % rd.size, width - 1)
394
387
  end
395
388
 
396
389
  def bfm d, n, immr, imms
@@ -579,7 +572,7 @@ module AArch64
579
572
  end
580
573
 
581
574
  def csetm rd, cond
582
- reg = rd.x? ? XZR : WZR
575
+ reg = rd.zr
583
576
  a CSINV.new(rd, reg, reg, Utils.cond2bin(cond) ^ 1, rd.sf)
584
577
  end
585
578
 
@@ -734,8 +727,7 @@ module AArch64
734
727
 
735
728
  if rm.integer?
736
729
  encoding = Utils.encode_mask(rm, rd.size)
737
- n = rd.x? ? encoding.n : 0
738
- a EOR_log_imm.new(rd, rn, n, encoding.immr, encoding.imms, rd.sf)
730
+ a EOR_log_imm.new(rd, rn, encoding.n, encoding.immr, encoding.imms, rd.sf)
739
731
  else
740
732
  shift = [:lsl, :lsr, :asr, :ror].index(shift) || raise(NotImplementedError)
741
733
  a EOR_log_shift.new(rd, rn, rm, shift, amount, rd.sf)
@@ -796,35 +788,19 @@ module AArch64
796
788
  end
797
789
 
798
790
  def ldadd rs, rt, rn
799
- if rs.x?
800
- a LDADD.new(rs, rt, rn.first, 0b11, 0, 0)
801
- else
802
- a LDADD.new(rs, rt, rn.first, 0b10, 0, 0)
803
- end
791
+ a LDADD.new(rs, rt, rn.first, rs.opc2, 0, 0)
804
792
  end
805
793
 
806
794
  def ldadda rs, rt, rn
807
- if rs.x?
808
- a LDADD.new(rs, rt, rn.first, 0b11, 1, 0)
809
- else
810
- a LDADD.new(rs, rt, rn.first, 0b10, 1, 0)
811
- end
795
+ a LDADD.new(rs, rt, rn.first, rs.opc2, 1, 0)
812
796
  end
813
797
 
814
798
  def ldaddal rs, rt, rn
815
- if rs.x?
816
- a LDADD.new(rs, rt, rn.first, 0b11, 1, 1)
817
- else
818
- a LDADD.new(rs, rt, rn.first, 0b10, 1, 1)
819
- end
799
+ a LDADD.new(rs, rt, rn.first, rs.opc2, 1, 1)
820
800
  end
821
801
 
822
802
  def ldaddl rs, rt, rn
823
- if rs.x?
824
- a LDADD.new(rs, rt, rn.first, 0b11, 0, 1)
825
- else
826
- a LDADD.new(rs, rt, rn.first, 0b10, 0, 1)
827
- end
803
+ a LDADD.new(rs, rt, rn.first, rs.opc2, 0, 1)
828
804
  end
829
805
 
830
806
  def ldaddab rs, rt, rn
@@ -860,11 +836,7 @@ module AArch64
860
836
  end
861
837
 
862
838
  def ldapr rt, rn
863
- if rt.x?
864
- a LDAPR.new(rt, rn.first, 0b11)
865
- else
866
- a LDAPR.new(rt, rn.first, 0b10)
867
- end
839
+ a LDAPR.new(rt, rn.first, rt.opc2)
868
840
  end
869
841
 
870
842
  def ldaprb rt, rn
@@ -876,11 +848,7 @@ module AArch64
876
848
  end
877
849
 
878
850
  def ldapur rt, rn
879
- if rt.x?
880
- a LDAPUR_gen.new(0b11, 0b01, rt, rn.first, rn[1] || 0)
881
- else
882
- a LDAPUR_gen.new(0b10, 0b01, rt, rn.first, rn[1] || 0)
883
- end
851
+ a LDAPUR_gen.new(rt.opc2, 0b01, rt, rn.first, rn[1] || 0)
884
852
  end
885
853
 
886
854
  def ldapurb rt, rn
@@ -892,19 +860,11 @@ module AArch64
892
860
  end
893
861
 
894
862
  def ldapursb rt, rn
895
- if rt.x?
896
- a LDAPUR_gen.new(0b00, 0b10, rt, rn.first, rn[1] || 0)
897
- else
898
- a LDAPUR_gen.new(0b00, 0b11, rt, rn.first, rn[1] || 0)
899
- end
863
+ a LDAPUR_gen.new(0b00, rt.opc, rt, rn.first, rn[1] || 0)
900
864
  end
901
865
 
902
866
  def ldapursh rt, rn
903
- if rt.x?
904
- a LDAPUR_gen.new(0b01, 0b10, rt, rn.first, rn[1] || 0)
905
- else
906
- a LDAPUR_gen.new(0b01, 0b11, rt, rn.first, rn[1] || 0)
907
- end
867
+ a LDAPUR_gen.new(0b01, rt.opc, rt, rn.first, rn[1] || 0)
908
868
  end
909
869
 
910
870
  def ldapursw rt, rn
@@ -912,8 +872,7 @@ module AArch64
912
872
  end
913
873
 
914
874
  def ldar rt, rn
915
- size = rt.x? ? 0b11 : 0b10
916
- a LDAR.new(rt, rn.first, size)
875
+ a LDAR.new(rt, rn.first, rt.opc2)
917
876
  end
918
877
 
919
878
  def ldarb rt, rn
@@ -929,8 +888,7 @@ module AArch64
929
888
  end
930
889
 
931
890
  def ldaxr rt1, xn
932
- size = rt1.x? ? 0b11 : 0b10
933
- a LDAXR.new(rt1, xn.first, size)
891
+ a LDAXR.new(rt1, xn.first, rt1.opc2)
934
892
  end
935
893
 
936
894
  def ldaxrb rt1, xn
@@ -942,23 +900,19 @@ module AArch64
942
900
  end
943
901
 
944
902
  def ldclr rs, rt, rn
945
- size = rs.x? ? 0b11 : 0b10
946
- a LDCLR.new(rs, rt, rn.first, 0, 0, size)
903
+ a LDCLR.new(rs, rt, rn.first, 0, 0, rs.opc2)
947
904
  end
948
905
 
949
906
  def ldclra rs, rt, rn
950
- size = rs.x? ? 0b11 : 0b10
951
- a LDCLR.new(rs, rt, rn.first, 1, 0, size)
907
+ a LDCLR.new(rs, rt, rn.first, 1, 0, rs.opc2)
952
908
  end
953
909
 
954
910
  def ldclral rs, rt, rn
955
- size = rs.x? ? 0b11 : 0b10
956
- a LDCLR.new(rs, rt, rn.first, 1, 1, size)
911
+ a LDCLR.new(rs, rt, rn.first, 1, 1, rs.opc2)
957
912
  end
958
913
 
959
914
  def ldclrl rs, rt, rn
960
- size = rs.x? ? 0b11 : 0b10
961
- a LDCLR.new(rs, rt, rn.first, 0, 1, size)
915
+ a LDCLR.new(rs, rt, rn.first, 0, 1, rs.opc2)
962
916
  end
963
917
 
964
918
  def ldclrab rs, rt, rn
@@ -994,23 +948,19 @@ module AArch64
994
948
  end
995
949
 
996
950
  def ldeor rs, rt, rn
997
- size = rs.x? ? 0b11 : 0b10
998
- a LDEOR.new(rs, rt, rn.first, 0, 0, size)
951
+ a LDEOR.new(rs, rt, rn.first, 0, 0, rs.opc2)
999
952
  end
1000
953
 
1001
954
  def ldeora rs, rt, rn
1002
- size = rs.x? ? 0b11 : 0b10
1003
- a LDEOR.new(rs, rt, rn.first, 1, 0, size)
955
+ a LDEOR.new(rs, rt, rn.first, 1, 0, rs.opc2)
1004
956
  end
1005
957
 
1006
958
  def ldeoral rs, rt, rn
1007
- size = rs.x? ? 0b11 : 0b10
1008
- a LDEOR.new(rs, rt, rn.first, 1, 1, size)
959
+ a LDEOR.new(rs, rt, rn.first, 1, 1, rs.opc2)
1009
960
  end
1010
961
 
1011
962
  def ldeorl rs, rt, rn
1012
- size = rs.x? ? 0b11 : 0b10
1013
- a LDEOR.new(rs, rt, rn.first, 0, 1, size)
963
+ a LDEOR.new(rs, rt, rn.first, 0, 1, rs.opc2)
1014
964
  end
1015
965
 
1016
966
  def ldeorab rs, rt, rn
@@ -1054,8 +1004,7 @@ module AArch64
1054
1004
  end
1055
1005
 
1056
1006
  def ldlar rt, rn
1057
- size = rt.x? ? 0b11 : 0b10
1058
- a LDLAR.new(rt, rn.first, size)
1007
+ a LDLAR.new(rt, rn.first, rt.opc2)
1059
1008
  end
1060
1009
 
1061
1010
  def ldlarb rt, rn
@@ -1067,14 +1016,13 @@ module AArch64
1067
1016
  end
1068
1017
 
1069
1018
  def ldnp rt1, rt2, rn
1070
- opc = rt1.x? ? 0b10 : 0b00
1071
- div = rt1.x? ? 8 : 4
1072
- a LDNP_gen.new(rt1, rt2, rn.first, (rn[1] || 0) / div, opc)
1019
+ div = rt1.size / 8
1020
+ a LDNP_gen.new(rt1, rt2, rn.first, (rn[1] || 0) / div, rt1.opc3)
1073
1021
  end
1074
1022
 
1075
1023
  def ldp rt1, rt2, rn, imm = nil
1076
- opc = rt1.x? ? 0b10 : 0b00
1077
- div = rt1.x? ? 8 : 4
1024
+ opc = rt1.opc3
1025
+ div = rt1.size / 8
1078
1026
 
1079
1027
  if imm
1080
1028
  if imm == :!
@@ -1108,7 +1056,7 @@ module AArch64
1108
1056
  end
1109
1057
 
1110
1058
  def ldr rt, rn, simm = nil
1111
- size = rt.x? ? 0b11 : 0b10
1059
+ size = rt.opc2
1112
1060
 
1113
1061
  if simm
1114
1062
  if simm == :!
@@ -1124,7 +1072,7 @@ module AArch64
1124
1072
  if rn.is_a?(Array)
1125
1073
  simm = rn[1] || 0
1126
1074
  if simm.integer?
1127
- div = rt.x? ? 8 : 4
1075
+ div = rt.size / 8
1128
1076
  a LDR_imm_unsigned.new(rt, rn.first, simm / div, size)
1129
1077
  else
1130
1078
  rn, rm, option = *rn
@@ -1155,8 +1103,7 @@ module AArch64
1155
1103
  a LDR_reg_gen.new(rt, rn, rm, size, extend, amount)
1156
1104
  end
1157
1105
  else
1158
- size = rt.x? ? 0b01 : 0b00
1159
- a LDR_lit_gen.new(rt, rn, size)
1106
+ a LDR_lit_gen.new(rt, rn, rt.sf)
1160
1107
  end
1161
1108
  end
1162
1109
  end
@@ -1238,7 +1185,7 @@ module AArch64
1238
1185
  end
1239
1186
 
1240
1187
  def ldrsb wt, xn, imm = nil
1241
- opc = wt.x? ? 0b10 : 0b11
1188
+ opc = wt.opc
1242
1189
 
1243
1190
  if imm
1244
1191
  if imm == :!
@@ -1271,7 +1218,7 @@ module AArch64
1271
1218
  end
1272
1219
 
1273
1220
  def ldrsh wt, xn, imm = nil
1274
- opc = wt.x? ? 0b10 : 0b11
1221
+ opc = wt.opc
1275
1222
 
1276
1223
  if imm
1277
1224
  if imm == :!
@@ -1338,23 +1285,19 @@ module AArch64
1338
1285
  end
1339
1286
 
1340
1287
  def ldset rs, rt, rn
1341
- size = rs.x? ? 0b11 : 0b10
1342
- a LDSET.new(rs, rt, rn.first, size, 0, 0)
1288
+ a LDSET.new(rs, rt, rn.first, rs.opc2, 0, 0)
1343
1289
  end
1344
1290
 
1345
1291
  def ldseta rs, rt, rn
1346
- size = rs.x? ? 0b11 : 0b10
1347
- a LDSET.new(rs, rt, rn.first, size, 1, 0)
1292
+ a LDSET.new(rs, rt, rn.first, rs.opc2, 1, 0)
1348
1293
  end
1349
1294
 
1350
1295
  def ldsetal rs, rt, rn
1351
- size = rs.x? ? 0b11 : 0b10
1352
- a LDSET.new(rs, rt, rn.first, size, 1, 1)
1296
+ a LDSET.new(rs, rt, rn.first, rs.opc2, 1, 1)
1353
1297
  end
1354
1298
 
1355
1299
  def ldsetl rs, rt, rn
1356
- size = rs.x? ? 0b11 : 0b10
1357
- a LDSET.new(rs, rt, rn.first, size, 0, 1)
1300
+ a LDSET.new(rs, rt, rn.first, rs.opc2, 0, 1)
1358
1301
  end
1359
1302
 
1360
1303
  def ldsetb rs, rt, rn
@@ -1390,23 +1333,19 @@ module AArch64
1390
1333
  end
1391
1334
 
1392
1335
  def ldsmax rs, rt, rn
1393
- size = rs.x? ? 0b11 : 0b10
1394
- a LDSMAX.new(rs, rt, rn.first, size, 0, 0)
1336
+ a LDSMAX.new(rs, rt, rn.first, rs.opc2, 0, 0)
1395
1337
  end
1396
1338
 
1397
1339
  def ldsmaxa rs, rt, rn
1398
- size = rs.x? ? 0b11 : 0b10
1399
- a LDSMAX.new(rs, rt, rn.first, size, 1, 0)
1340
+ a LDSMAX.new(rs, rt, rn.first, rs.opc2, 1, 0)
1400
1341
  end
1401
1342
 
1402
1343
  def ldsmaxal rs, rt, rn
1403
- size = rs.x? ? 0b11 : 0b10
1404
- a LDSMAX.new(rs, rt, rn.first, size, 1, 1)
1344
+ a LDSMAX.new(rs, rt, rn.first, rs.opc2, 1, 1)
1405
1345
  end
1406
1346
 
1407
1347
  def ldsmaxl rs, rt, rn
1408
- size = rs.x? ? 0b11 : 0b10
1409
- a LDSMAX.new(rs, rt, rn.first, size, 0, 1)
1348
+ a LDSMAX.new(rs, rt, rn.first, rs.opc2, 0, 1)
1410
1349
  end
1411
1350
 
1412
1351
  def ldsmaxab rs, rt, rn
@@ -1442,23 +1381,19 @@ module AArch64
1442
1381
  end
1443
1382
 
1444
1383
  def ldsmin rs, rt, rn
1445
- size = rs.x? ? 0b11 : 0b10
1446
- a LDSMIN.new(rs, rt, rn.first, size, 0, 0)
1384
+ a LDSMIN.new(rs, rt, rn.first, rs.opc2, 0, 0)
1447
1385
  end
1448
1386
 
1449
1387
  def ldsmina rs, rt, rn
1450
- size = rs.x? ? 0b11 : 0b10
1451
- a LDSMIN.new(rs, rt, rn.first, size, 1, 0)
1388
+ a LDSMIN.new(rs, rt, rn.first, rs.opc2, 1, 0)
1452
1389
  end
1453
1390
 
1454
1391
  def ldsminal rs, rt, rn
1455
- size = rs.x? ? 0b11 : 0b10
1456
- a LDSMIN.new(rs, rt, rn.first, size, 1, 1)
1392
+ a LDSMIN.new(rs, rt, rn.first, rs.opc2, 1, 1)
1457
1393
  end
1458
1394
 
1459
1395
  def ldsminl rs, rt, rn
1460
- size = rs.x? ? 0b11 : 0b10
1461
- a LDSMIN.new(rs, rt, rn.first, size, 0, 1)
1396
+ a LDSMIN.new(rs, rt, rn.first, rs.opc2, 0, 1)
1462
1397
  end
1463
1398
 
1464
1399
  def ldsminb rs, rt, rn
@@ -1494,8 +1429,7 @@ module AArch64
1494
1429
  end
1495
1430
 
1496
1431
  def ldtr rt, rn
1497
- size = rt.x? ? 0b11 : 0b10
1498
- a LDTR.new(rt, rn.first, rn[1] || 0, size)
1432
+ a LDTR.new(rt, rn.first, rn[1] || 0, rt.opc2)
1499
1433
  end
1500
1434
 
1501
1435
  def ldtrb rt, rn
@@ -1507,13 +1441,11 @@ module AArch64
1507
1441
  end
1508
1442
 
1509
1443
  def ldtrsb rt, rn
1510
- opc = rt.x? ? 0b10 : 0b11
1511
- a LDTRSB.new(rt, rn.first, rn[1] || 0, opc)
1444
+ a LDTRSB.new(rt, rn.first, rn[1] || 0, rt.opc)
1512
1445
  end
1513
1446
 
1514
1447
  def ldtrsh rt, rn
1515
- opc = rt.x? ? 0b10 : 0b11
1516
- a LDTRSH.new(rt, rn.first, rn[1] || 0, opc)
1448
+ a LDTRSH.new(rt, rn.first, rn[1] || 0, rt.opc)
1517
1449
  end
1518
1450
 
1519
1451
  def ldtrsw rt, rn
@@ -1521,23 +1453,19 @@ module AArch64
1521
1453
  end
1522
1454
 
1523
1455
  def ldumax rs, rt, rn
1524
- size = rt.x? ? 0b11 : 0b10
1525
- a LDUMAX.new(rs, rt, rn.first, size, 0, 0)
1456
+ a LDUMAX.new(rs, rt, rn.first, rt.opc2, 0, 0)
1526
1457
  end
1527
1458
 
1528
1459
  def ldumaxa rs, rt, rn
1529
- size = rt.x? ? 0b11 : 0b10
1530
- a LDUMAX.new(rs, rt, rn.first, size, 1, 0)
1460
+ a LDUMAX.new(rs, rt, rn.first, rt.opc2, 1, 0)
1531
1461
  end
1532
1462
 
1533
1463
  def ldumaxal rs, rt, rn
1534
- size = rt.x? ? 0b11 : 0b10
1535
- a LDUMAX.new(rs, rt, rn.first, size, 1, 1)
1464
+ a LDUMAX.new(rs, rt, rn.first, rt.opc2, 1, 1)
1536
1465
  end
1537
1466
 
1538
1467
  def ldumaxl rs, rt, rn
1539
- size = rt.x? ? 0b11 : 0b10
1540
- a LDUMAX.new(rs, rt, rn.first, size, 0, 1)
1468
+ a LDUMAX.new(rs, rt, rn.first, rt.opc2, 0, 1)
1541
1469
  end
1542
1470
 
1543
1471
  def ldumaxab rs, rt, rn
@@ -1637,11 +1565,7 @@ module AArch64
1637
1565
  end
1638
1566
 
1639
1567
  def ldur rt, rn
1640
- if rt.x?
1641
- a LDUR_gen.new(rt, rn.first, rn[1] || 0, 0b11)
1642
- else
1643
- a LDUR_gen.new(rt, rn.first, rn[1] || 0, 0b10)
1644
- end
1568
+ a LDUR_gen.new(rt, rn.first, rn[1] || 0, rt.opc2)
1645
1569
  end
1646
1570
 
1647
1571
  def ldurb rt, rn
@@ -1653,11 +1577,7 @@ module AArch64
1653
1577
  end
1654
1578
 
1655
1579
  def ldxr rt, rn
1656
- if rt.x?
1657
- a LDXR.new(rt, rn.first, 0b11)
1658
- else
1659
- a LDXR.new(rt, rn.first, 0b10)
1660
- end
1580
+ a LDXR.new(rt, rn.first, rt.opc2)
1661
1581
  end
1662
1582
 
1663
1583
  def ldxrb rt, rn
@@ -1670,11 +1590,7 @@ module AArch64
1670
1590
 
1671
1591
  def lsl rd, rn, rm
1672
1592
  if rm.integer?
1673
- if rd.x?
1674
- ubfm rd, rn, -rm % 64, 63 - rm
1675
- else
1676
- ubfm rd, rn, -rm % 32, 31 - rm
1677
- end
1593
+ ubfm rd, rn, -rm % rd.size, (rd.size - 1) - rm
1678
1594
  else
1679
1595
  lslv rd, rn, rm
1680
1596
  end
@@ -1686,11 +1602,7 @@ module AArch64
1686
1602
 
1687
1603
  def lsr rd, rn, rm
1688
1604
  if rm.integer?
1689
- if rd.x?
1690
- ubfm rd, rn, rm, 63
1691
- else
1692
- ubfm rd, rn, rm, 31
1693
- end
1605
+ ubfm rd, rn, rm, rd.size - 1
1694
1606
  else
1695
1607
  lsrv rd, rn, rm
1696
1608
  end
@@ -1715,20 +1627,20 @@ module AArch64
1715
1627
  if rm < 65536 || rm % 65536 == 0
1716
1628
  movn(rd, rm)
1717
1629
  else
1718
- orr(rd, rd.x? ? XZR : WZR, ~rm)
1630
+ orr(rd, rd.zr, ~rm)
1719
1631
  end
1720
1632
  else
1721
1633
  if rm < 65536 || rm % 65536 == 0
1722
1634
  movz(rd, rm)
1723
1635
  else
1724
- orr(rd, rd.x? ? XZR : WZR, rm)
1636
+ orr(rd, rd.zr, rm)
1725
1637
  end
1726
1638
  end
1727
1639
  else
1728
1640
  if rd.sp? || rm.sp?
1729
1641
  add rd, rm, 0
1730
1642
  else
1731
- orr(rd, rd.x? ? XZR : WZR, rm)
1643
+ orr(rd, rd.zr, rm)
1732
1644
  end
1733
1645
  end
1734
1646
  end
@@ -2236,11 +2148,11 @@ module AArch64
2236
2148
  end
2237
2149
 
2238
2150
  def stnp rt, rt2, rn
2239
- a STNP_gen.new(rt, rt2, rn.first, (rn[1] || 0) / (rt.x? ? 8 : 4), rt.opc3)
2151
+ a STNP_gen.new(rt, rt2, rn.first, (rn[1] || 0) / (rt.size / 8), rt.opc3)
2240
2152
  end
2241
2153
 
2242
2154
  def stp rt, rt2, rn, imm = nil
2243
- div = rt.x? ? 8 : 4
2155
+ div = rt.size / 8
2244
2156
 
2245
2157
  if imm
2246
2158
  if imm == :!
@@ -2269,7 +2181,7 @@ module AArch64
2269
2181
  imm = rn[1] || 0
2270
2182
  if imm.integer?
2271
2183
  # Unsigned
2272
- div = rt.x? ? 8 : 4
2184
+ div = rt.size / 8
2273
2185
  a STR_imm_unsigned.new(rt, rn.first, imm / div, rt.sizeb)
2274
2186
  else
2275
2187
  rn, rm, opt = *rn
@@ -2504,8 +2416,7 @@ module AArch64
2504
2416
  end
2505
2417
 
2506
2418
  def stxr rs, rt, rn
2507
- size = rt.x? ? 0b11 : 0b10
2508
- a STXR.new(rs, rt, rn.first, size)
2419
+ a STXR.new(rs, rt, rn.first, rt.opc2)
2509
2420
  end
2510
2421
 
2511
2422
  def stxrb rs, rt, rn
@@ -2662,23 +2573,19 @@ module AArch64
2662
2573
  end
2663
2574
 
2664
2575
  def swp rs, rt, rn
2665
- size = rs.x? ? 0b11 : 0b10
2666
- a SWP.new(rs, rt, rn.first, size, 0, 0)
2576
+ a SWP.new(rs, rt, rn.first, rs.opc2, 0, 0)
2667
2577
  end
2668
2578
 
2669
2579
  def swpal rs, rt, rn
2670
- size = rs.x? ? 0b11 : 0b10
2671
- a SWP.new(rs, rt, rn.first, size, 1, 1)
2580
+ a SWP.new(rs, rt, rn.first, rs.opc2, 1, 1)
2672
2581
  end
2673
2582
 
2674
2583
  def swpl rs, rt, rn
2675
- size = rs.x? ? 0b11 : 0b10
2676
- a SWP.new(rs, rt, rn.first, size, 0, 1)
2584
+ a SWP.new(rs, rt, rn.first, rs.opc2, 0, 1)
2677
2585
  end
2678
2586
 
2679
2587
  def swpa rs, rt, rn
2680
- size = rs.x? ? 0b11 : 0b10
2681
- a SWP.new(rs, rt, rn.first, size, 1, 0)
2588
+ a SWP.new(rs, rt, rn.first, rs.opc2, 1, 0)
2682
2589
  end
2683
2590
 
2684
2591
  def swpab rs, rt, rn
@@ -2844,7 +2751,11 @@ module AArch64
2844
2751
  end
2845
2752
 
2846
2753
  def write_to io
2847
- io.write @insns.map(&:encode).pack("L<*")
2754
+ io.write to_binary
2755
+ end
2756
+
2757
+ def to_binary
2758
+ @insns.map(&:encode).pack("L<*")
2848
2759
  end
2849
2760
 
2850
2761
  private
data/test/dsl_test.rb CHANGED
@@ -8,4 +8,12 @@ class DSLTest < AArch64::Test
8
8
  end
9
9
  end
10
10
  end
11
+
12
+ def test_to_binary
13
+ asm = AArch64::Assembler.new
14
+ asm.pretty do
15
+ asm.cmn x4, w5, uxtb(2)
16
+ end
17
+ assert_equal [0x9f,0x08,0x25,0xab], asm.to_binary.bytes
18
+ end
11
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aarch64
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Patterson
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-26 00:00:00.000000000 Z
11
+ date: 2022-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hatstone
@@ -355,7 +355,7 @@ homepage: https://github.com/tenderlove/aarch64
355
355
  licenses:
356
356
  - Apache-2.0
357
357
  metadata: {}
358
- post_install_message:
358
+ post_install_message:
359
359
  rdoc_options: []
360
360
  require_paths:
361
361
  - lib
@@ -370,8 +370,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
370
370
  - !ruby/object:Gem::Version
371
371
  version: '0'
372
372
  requirements: []
373
- rubygems_version: 3.4.0.dev
374
- signing_key:
373
+ rubygems_version: 3.0.3.1
374
+ signing_key:
375
375
  specification_version: 4
376
376
  summary: Write ARM64 assembly in Ruby!
377
377
  test_files: