@@ -661,6 +661,7 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
661
661
case AArch64::LDTRBi:
662
662
case AArch64::LDTRSBWi:
663
663
case AArch64::LDTRSBXi:
664
+ case AArch64::LDARB:
664
665
return true ;
665
666
default :
666
667
break ;
@@ -699,6 +700,7 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
699
700
case AArch64::LDTRHi:
700
701
case AArch64::LDTRSHWi:
701
702
case AArch64::LDTRSHXi:
703
+ case AArch64::LDARH:
702
704
return true ;
703
705
default :
704
706
break ;
@@ -733,6 +735,7 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
733
735
case AArch64::LDPSWpost:
734
736
case AArch64::LDPSWpre:
735
737
case AArch64::LDNPWi:
738
+ case AArch64::LDARW:
736
739
return true ;
737
740
default :
738
741
break ;
@@ -756,6 +759,7 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
756
759
case AArch64::LDPXi:
757
760
case AArch64::LDPXpost:
758
761
case AArch64::LDPXpre:
762
+ case AArch64::LDARX:
759
763
return true ;
760
764
default :
761
765
break ;
@@ -850,33 +854,55 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
850
854
}
851
855
852
856
bool isAArch64ExclusiveLoad (const MCInst &Inst) const override {
853
- return (Inst.getOpcode () == AArch64::LDXPX ||
854
- Inst.getOpcode () == AArch64::LDXPW ||
855
- Inst.getOpcode () == AArch64::LDXRX ||
856
- Inst.getOpcode () == AArch64::LDXRW ||
857
- Inst.getOpcode () == AArch64::LDXRH ||
858
- Inst.getOpcode () == AArch64::LDXRB ||
859
- Inst.getOpcode () == AArch64::LDAXPX ||
860
- Inst.getOpcode () == AArch64::LDAXPW ||
861
- Inst.getOpcode () == AArch64::LDAXRX ||
862
- Inst.getOpcode () == AArch64::LDAXRW ||
863
- Inst.getOpcode () == AArch64::LDAXRH ||
864
- Inst.getOpcode () == AArch64::LDAXRB);
857
+ const unsigned opcode = Inst.getOpcode ();
858
+ switch (opcode) {
859
+ case AArch64::LDXPX:
860
+ case AArch64::LDXPW:
861
+ case AArch64::LDXRX:
862
+ case AArch64::LDXRW:
863
+ case AArch64::LDXRH:
864
+ case AArch64::LDXRB:
865
+ case AArch64::LDAXPX:
866
+ case AArch64::LDAXPW:
867
+ case AArch64::LDAXRX:
868
+ case AArch64::LDAXRW:
869
+ case AArch64::LDAXRH:
870
+ case AArch64::LDAXRB:
871
+ case AArch64::LDAEX:
872
+ case AArch64::LDAEXB:
873
+ case AArch64::LDAEXH:
874
+ case AArch64::LDAEXD:
875
+ return true ;
876
+ default :
877
+ break ;
878
+ }
879
+ return false ;
865
880
}
866
881
867
882
bool isAArch64ExclusiveStore (const MCInst &Inst) const override {
868
- return (Inst.getOpcode () == AArch64::STXPX ||
869
- Inst.getOpcode () == AArch64::STXPW ||
870
- Inst.getOpcode () == AArch64::STXRX ||
871
- Inst.getOpcode () == AArch64::STXRW ||
872
- Inst.getOpcode () == AArch64::STXRH ||
873
- Inst.getOpcode () == AArch64::STXRB ||
874
- Inst.getOpcode () == AArch64::STLXPX ||
875
- Inst.getOpcode () == AArch64::STLXPW ||
876
- Inst.getOpcode () == AArch64::STLXRX ||
877
- Inst.getOpcode () == AArch64::STLXRW ||
878
- Inst.getOpcode () == AArch64::STLXRH ||
879
- Inst.getOpcode () == AArch64::STLXRB);
883
+ const unsigned opcode = Inst.getOpcode ();
884
+ switch (opcode) {
885
+ case AArch64::STXPX:
886
+ case AArch64::STXPW:
887
+ case AArch64::STXRX:
888
+ case AArch64::STXRW:
889
+ case AArch64::STXRH:
890
+ case AArch64::STXRB:
891
+ case AArch64::STLXPX:
892
+ case AArch64::STLXPW:
893
+ case AArch64::STLXRX:
894
+ case AArch64::STLXRW:
895
+ case AArch64::STLXRH:
896
+ case AArch64::STLXRB:
897
+ case AArch64::STLEX:
898
+ case AArch64::STLEXB:
899
+ case AArch64::STLEXH:
900
+ case AArch64::STLEXD:
901
+ return true ;
902
+ default :
903
+ break ;
904
+ }
905
+ return false ;
880
906
}
881
907
882
908
bool isAArch64ExclusiveClear (const MCInst &Inst) const override {
@@ -1926,9 +1952,23 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
1926
1952
return false ;
1927
1953
};
1928
1954
1955
+ auto isStoreRelease = [&]() {
1956
+ switch (opcode) {
1957
+ case AArch64::STLRB:
1958
+ case AArch64::STLRH:
1959
+ case AArch64::STLRW:
1960
+ case AArch64::STLRX:
1961
+ return true ;
1962
+ default :
1963
+ break ;
1964
+ }
1965
+
1966
+ return false ;
1967
+ };
1968
+
1929
1969
return isStoreRegUnscaleImm () || isStoreRegScaledImm () ||
1930
1970
isStoreRegImmPreIndexed () || isStoreRegImmPostIndexed () ||
1931
- isStoreRegUnscaleUnpriv () || isStoreRegTrunc ();
1971
+ isStoreRegUnscaleUnpriv () || isStoreRegTrunc () || isStoreRelease () ;
1932
1972
}
1933
1973
1934
1974
bool mayStore (const MCInst &Inst) const override {
0 commit comments