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.
- checksums.yaml +4 -4
- data/README.md +5 -2
- data/Rakefile +2 -0
- data/lib/aarch64/instructions/adc.rb +1 -1
- data/lib/aarch64/instructions/adcs.rb +1 -1
- data/lib/aarch64/instructions/add_addsub_ext.rb +1 -1
- data/lib/aarch64/instructions/and_log_imm.rb +1 -1
- data/lib/aarch64/instructions/ands_log_imm.rb +1 -1
- data/lib/aarch64/instructions/asrv.rb +1 -1
- data/lib/aarch64/instructions/axflag.rb +0 -6
- data/lib/aarch64/instructions/cfinv.rb +1 -1
- data/lib/aarch64/instructions/crc32.rb +1 -1
- data/lib/aarch64/instructions/crc32c.rb +1 -1
- data/lib/aarch64/instructions/csdb.rb +1 -8
- data/lib/aarch64/instructions/csel.rb +1 -1
- data/lib/aarch64/instructions/csneg.rb +1 -1
- data/lib/aarch64/instructions/dcps.rb +1 -1
- data/lib/aarch64/instructions/dgh.rb +1 -8
- data/lib/aarch64/instructions/dmb.rb +1 -1
- data/lib/aarch64/instructions/drps.rb +1 -1
- data/lib/aarch64/instructions/dsb.rb +1 -1
- data/lib/aarch64/instructions/eon.rb +1 -1
- data/lib/aarch64/instructions/eor_log_imm.rb +1 -1
- data/lib/aarch64/instructions/eor_log_shift.rb +1 -1
- data/lib/aarch64/instructions/eret.rb +1 -1
- data/lib/aarch64/instructions/ereta.rb +1 -1
- data/lib/aarch64/instructions/esb.rb +1 -8
- data/lib/aarch64/instructions/extr.rb +1 -1
- data/lib/aarch64/instructions/gmi.rb +1 -1
- data/lib/aarch64/instructions/hlt.rb +1 -1
- data/lib/aarch64/instructions/hvc.rb +1 -1
- data/lib/aarch64/instructions/irg.rb +1 -1
- data/lib/aarch64/instructions/isb.rb +1 -1
- data/lib/aarch64/instructions/ld64b.rb +1 -1
- data/lib/aarch64/instructions/ldadd.rb +1 -1
- data/lib/aarch64/instructions/ldaddb.rb +1 -1
- data/lib/aarch64/instructions/ldaddh.rb +1 -1
- data/lib/aarch64/instructions/ldapr.rb +1 -1
- data/lib/aarch64/instructions/ldaprb.rb +1 -1
- data/lib/aarch64/instructions/ldaprh.rb +1 -1
- data/lib/aarch64/instructions/ldapur_gen.rb +1 -1
- data/lib/aarch64/instructions/ldar.rb +1 -1
- data/lib/aarch64/instructions/ldaxp.rb +1 -1
- data/lib/aarch64/instructions/ldaxr.rb +1 -1
- data/lib/aarch64/instructions/ldclr.rb +1 -1
- data/lib/aarch64/instructions/ldclrb.rb +1 -1
- data/lib/aarch64/instructions/ldeor.rb +1 -1
- data/lib/aarch64/instructions/ldg.rb +1 -1
- data/lib/aarch64/instructions/ldgm.rb +1 -1
- data/lib/aarch64/instructions/ldlar.rb +1 -1
- data/lib/aarch64/instructions/ldnp_gen.rb +1 -1
- data/lib/aarch64/instructions/ldp_gen.rb +1 -1
- data/lib/aarch64/instructions/ldpsw.rb +1 -1
- data/lib/aarch64/instructions/ldr_imm_gen.rb +1 -1
- data/lib/aarch64/instructions/ldr_imm_unsigned.rb +1 -1
- data/lib/aarch64/instructions/ldr_lit_gen.rb +1 -1
- data/lib/aarch64/instructions/ldr_reg_gen.rb +1 -1
- data/lib/aarch64/instructions/ldra.rb +1 -1
- data/lib/aarch64/instructions/ldrb_imm.rb +1 -1
- data/lib/aarch64/instructions/ldrb_reg.rb +1 -1
- data/lib/aarch64/instructions/ldrb_unsigned.rb +1 -1
- data/lib/aarch64/instructions/ldrh_imm.rb +1 -1
- data/lib/aarch64/instructions/ldrh_reg.rb +1 -1
- data/lib/aarch64/instructions/ldrh_unsigned.rb +1 -1
- data/lib/aarch64/instructions/ldrsb_imm.rb +1 -1
- data/lib/aarch64/instructions/ldrsb_reg.rb +1 -1
- data/lib/aarch64/instructions/ldrsb_unsigned.rb +1 -1
- data/lib/aarch64/instructions/ldrsh_imm.rb +1 -1
- data/lib/aarch64/instructions/ldrsh_reg.rb +1 -1
- data/lib/aarch64/instructions/ldrsh_unsigned.rb +1 -1
- data/lib/aarch64/instructions/ldrsw_imm.rb +1 -1
- data/lib/aarch64/instructions/ldrsw_lit.rb +1 -1
- data/lib/aarch64/instructions/ldrsw_reg.rb +1 -1
- data/lib/aarch64/instructions/ldrsw_unsigned.rb +1 -1
- data/lib/aarch64/instructions/ldset.rb +1 -1
- data/lib/aarch64/instructions/ldsetb.rb +1 -1
- data/lib/aarch64/instructions/ldseth.rb +1 -1
- data/lib/aarch64/instructions/ldsmax.rb +1 -1
- data/lib/aarch64/instructions/ldsmaxb.rb +1 -1
- data/lib/aarch64/instructions/ldsmaxh.rb +1 -1
- data/lib/aarch64/instructions/ldsmin.rb +1 -1
- data/lib/aarch64/instructions/ldsminb.rb +1 -1
- data/lib/aarch64/instructions/ldsminh.rb +1 -1
- data/lib/aarch64/instructions/ldtr.rb +1 -1
- data/lib/aarch64/instructions/ldtrb.rb +1 -1
- data/lib/aarch64/instructions/ldtrh.rb +1 -1
- data/lib/aarch64/instructions/ldtrsb.rb +1 -1
- data/lib/aarch64/instructions/ldtrsh.rb +1 -1
- data/lib/aarch64/instructions/ldtrsw.rb +1 -1
- data/lib/aarch64/instructions/ldumax.rb +1 -1
- data/lib/aarch64/instructions/ldumaxb.rb +1 -1
- data/lib/aarch64/instructions/ldumaxh.rb +1 -1
- data/lib/aarch64/instructions/ldumin.rb +1 -1
- data/lib/aarch64/instructions/lduminb.rb +1 -1
- data/lib/aarch64/instructions/lduminh.rb +1 -1
- data/lib/aarch64/instructions/ldur_gen.rb +1 -1
- data/lib/aarch64/instructions/ldursb.rb +1 -1
- data/lib/aarch64/instructions/ldursh.rb +1 -1
- data/lib/aarch64/instructions/ldursw.rb +1 -1
- data/lib/aarch64/instructions/ldxp.rb +1 -1
- data/lib/aarch64/instructions/ldxr.rb +1 -1
- data/lib/aarch64/instructions/lslv.rb +1 -1
- data/lib/aarch64/instructions/lsrv.rb +1 -1
- data/lib/aarch64/instructions/madd.rb +1 -1
- data/lib/aarch64/instructions/movn.rb +1 -1
- data/lib/aarch64/instructions/mrs.rb +1 -1
- data/lib/aarch64/instructions/msr_imm.rb +1 -1
- data/lib/aarch64/instructions/msr_reg.rb +1 -1
- data/lib/aarch64/instructions/msub.rb +1 -1
- data/lib/aarch64/instructions/nop.rb +1 -8
- data/lib/aarch64/instructions/orn_log_shift.rb +1 -1
- data/lib/aarch64/instructions/orr_log_imm.rb +1 -1
- data/lib/aarch64/instructions/orr_log_shift.rb +1 -1
- data/lib/aarch64/instructions/pacda.rb +1 -1
- data/lib/aarch64/instructions/pacdb.rb +1 -1
- data/lib/aarch64/instructions/pacga.rb +1 -1
- data/lib/aarch64/instructions/pacia.rb +1 -1
- data/lib/aarch64/instructions/pacia2.rb +1 -1
- data/lib/aarch64/instructions/pacib.rb +1 -1
- data/lib/aarch64/instructions/prfm_imm.rb +1 -1
- data/lib/aarch64/instructions/prfm_lit.rb +1 -1
- data/lib/aarch64/instructions/prfm_reg.rb +1 -1
- data/lib/aarch64/instructions/prfum.rb +1 -1
- data/lib/aarch64/instructions/psb.rb +1 -1
- data/lib/aarch64/instructions/rbit_int.rb +1 -1
- data/lib/aarch64/instructions/reta.rb +1 -1
- data/lib/aarch64/instructions/rev.rb +1 -1
- data/lib/aarch64/instructions/rmif.rb +1 -1
- data/lib/aarch64/instructions/rorv.rb +1 -1
- data/lib/aarch64/instructions/sb.rb +1 -8
- data/lib/aarch64/instructions/sbc.rb +1 -1
- data/lib/aarch64/instructions/sbcs.rb +1 -1
- data/lib/aarch64/instructions/sdiv.rb +1 -1
- data/lib/aarch64/instructions/setf.rb +1 -1
- data/lib/aarch64/instructions/sev.rb +1 -1
- data/lib/aarch64/instructions/sevl.rb +0 -6
- data/lib/aarch64/instructions/smaddl.rb +1 -1
- data/lib/aarch64/instructions/smc.rb +1 -1
- data/lib/aarch64/instructions/smsubl.rb +1 -1
- data/lib/aarch64/instructions/smulh.rb +1 -1
- data/lib/aarch64/instructions/st2g.rb +1 -1
- data/lib/aarch64/instructions/st64b.rb +1 -1
- data/lib/aarch64/instructions/st64bv.rb +1 -1
- data/lib/aarch64/instructions/st64bv0.rb +1 -1
- data/lib/aarch64/instructions/stg.rb +1 -1
- data/lib/aarch64/instructions/stgm.rb +1 -1
- data/lib/aarch64/instructions/stgp.rb +1 -1
- data/lib/aarch64/instructions/stllr.rb +1 -1
- data/lib/aarch64/instructions/stllrb.rb +1 -1
- data/lib/aarch64/instructions/stllrh.rb +1 -1
- data/lib/aarch64/instructions/stlr.rb +1 -1
- data/lib/aarch64/instructions/stlrb.rb +1 -1
- data/lib/aarch64/instructions/stlrh.rb +1 -1
- data/lib/aarch64/instructions/stlur_gen.rb +1 -1
- data/lib/aarch64/instructions/stlxp.rb +1 -1
- data/lib/aarch64/instructions/stlxr.rb +1 -1
- data/lib/aarch64/instructions/stlxrb.rb +1 -1
- data/lib/aarch64/instructions/stlxrh.rb +1 -1
- data/lib/aarch64/instructions/stnp_gen.rb +1 -1
- data/lib/aarch64/instructions/stp_gen.rb +1 -1
- data/lib/aarch64/instructions/str_imm_gen.rb +1 -1
- data/lib/aarch64/instructions/str_imm_unsigned.rb +1 -1
- data/lib/aarch64/instructions/str_reg_gen.rb +1 -1
- data/lib/aarch64/instructions/strb_imm.rb +1 -1
- data/lib/aarch64/instructions/strb_imm_unsigned.rb +1 -1
- data/lib/aarch64/instructions/strb_reg.rb +1 -1
- data/lib/aarch64/instructions/strh_imm.rb +1 -1
- data/lib/aarch64/instructions/strh_imm_unsigned.rb +1 -1
- data/lib/aarch64/instructions/strh_reg.rb +1 -1
- data/lib/aarch64/instructions/sttr.rb +1 -1
- data/lib/aarch64/instructions/stur_gen.rb +1 -1
- data/lib/aarch64/instructions/stxp.rb +1 -1
- data/lib/aarch64/instructions/stxr.rb +1 -1
- data/lib/aarch64/instructions/stxrb.rb +1 -1
- data/lib/aarch64/instructions/stxrh.rb +1 -1
- data/lib/aarch64/instructions/stz2g.rb +1 -1
- data/lib/aarch64/instructions/stzg.rb +1 -1
- data/lib/aarch64/instructions/stzgm.rb +1 -1
- data/lib/aarch64/instructions/sub_addsub_ext.rb +1 -1
- data/lib/aarch64/instructions/sub_addsub_imm.rb +1 -1
- data/lib/aarch64/instructions/sub_addsub_shift.rb +1 -1
- data/lib/aarch64/instructions/subg.rb +1 -1
- data/lib/aarch64/instructions/subp.rb +1 -1
- data/lib/aarch64/instructions/subps.rb +1 -1
- data/lib/aarch64/instructions/svc.rb +1 -1
- data/lib/aarch64/instructions/swp.rb +1 -1
- data/lib/aarch64/instructions/swpb.rb +1 -1
- data/lib/aarch64/instructions/swph.rb +1 -1
- data/lib/aarch64/instructions/sys.rb +1 -1
- data/lib/aarch64/instructions/sysl.rb +1 -1
- data/lib/aarch64/instructions/tbnz.rb +1 -1
- data/lib/aarch64/instructions/tbz.rb +1 -1
- data/lib/aarch64/instructions/tsb.rb +1 -1
- data/lib/aarch64/instructions/ubfm.rb +1 -1
- data/lib/aarch64/instructions/udf_perm_undef.rb +1 -1
- data/lib/aarch64/instructions/udiv.rb +1 -1
- data/lib/aarch64/instructions/umaddl.rb +1 -1
- data/lib/aarch64/instructions/umsubl.rb +1 -1
- data/lib/aarch64/instructions/umulh.rb +1 -1
- data/lib/aarch64/instructions/wfe.rb +1 -1
- data/lib/aarch64/instructions/wfet.rb +1 -1
- data/lib/aarch64/instructions/wfi.rb +1 -8
- data/lib/aarch64/instructions/wfit.rb +1 -1
- data/lib/aarch64/instructions/xaflag.rb +1 -8
- data/lib/aarch64/instructions/xpac.rb +1 -1
- data/lib/aarch64/instructions/xpaclri.rb +0 -6
- data/lib/aarch64/instructions/yield.rb +1 -1
- data/lib/aarch64/version.rb +1 -1
- data/lib/aarch64.rb +72 -161
- data/test/dsl_test.rb +8 -0
- 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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
1071
|
-
|
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.
|
1077
|
-
div = rt1.
|
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.
|
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.
|
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
|
-
|
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.
|
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.
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
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
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.
|
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-
|
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.
|
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:
|