aarch64 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|