@@ -1594,7 +1594,8 @@ def PseudoAtomicLoadMinCap : PseudoAMO<GPCR> { let Size = 24; }
1594
1594
def PseudoAtomicLoadUMaxCap : PseudoAMO<GPCR> { let Size = 24; }
1595
1595
def PseudoAtomicLoadUMinCap : PseudoAMO<GPCR> { let Size = 24; }
1596
1596
def PseudoAtomicLoadNandCap : PseudoAMO<GPCR> { let Size = 24; }
1597
- def PseudoCmpXchgCap : PseudoCmpXchg<GPCR> { let Size = 16; }
1597
+ def PseudoCmpXchgCapAddr : PseudoCmpXchg<GPCR> { let Size = 16; }
1598
+ def PseudoCmpXchgCapExact : PseudoCmpXchg<GPCR> { let Size = 16; }
1598
1599
} // Predicates = [HasCheri, HasStdExtA]f
1599
1600
1600
1601
let Predicates = [HasCheri, HasStdExtA, NotCapMode] in {
@@ -1608,7 +1609,8 @@ defm : PseudoAMOPat<"atomic_load_min_cap", PseudoAtomicLoadMinCap, GPCR>;
1608
1609
defm : PseudoAMOPat<"atomic_load_umax_cap", PseudoAtomicLoadUMaxCap, GPCR>;
1609
1610
defm : PseudoAMOPat<"atomic_load_umin_cap", PseudoAtomicLoadUMinCap, GPCR>;
1610
1611
defm : PseudoAMOPat<"atomic_load_nand_cap", PseudoAtomicLoadNandCap, GPCR>;
1611
- defm : PseudoCmpXchgPat<"atomic_cmp_swap_cap", PseudoCmpXchgCap, GPCR>;
1612
+ defm : PseudoCmpXchgPat<"atomic_cmp_swap_cap_addr", PseudoCmpXchgCapAddr, GPCR>;
1613
+ defm : PseudoCmpXchgPat<"atomic_cmp_swap_cap_exact", PseudoCmpXchgCapExact, GPCR>;
1612
1614
} // Predicates = [HasCheri, HasStdExtA, NotCapMode]
1613
1615
1614
1616
/// Capability Mode Instructions
@@ -1751,7 +1753,8 @@ def PseudoCheriAtomicLoadMinCap : PseudoCheriAMO<GPCR> { let Size = 24; }
1751
1753
def PseudoCheriAtomicLoadUMaxCap : PseudoCheriAMO<GPCR> { let Size = 24; }
1752
1754
def PseudoCheriAtomicLoadUMinCap : PseudoCheriAMO<GPCR> { let Size = 24; }
1753
1755
def PseudoCheriAtomicLoadNandCap : PseudoCheriAMO<GPCR> { let Size = 24; }
1754
- def PseudoCheriCmpXchgCap : PseudoCheriCmpXchg<GPCR> { let Size = 16; }
1756
+ def PseudoCheriCmpXchgCapAddr : PseudoCheriCmpXchg<GPCR> { let Size = 16; }
1757
+ def PseudoCheriCmpXchgCapExact : PseudoCheriCmpXchg<GPCR> { let Size = 16; }
1755
1758
} // Predicates = [HasCheri, HasStdExtA]
1756
1759
1757
1760
let Predicates = [HasCheri, HasStdExtA, IsRV64] in {
@@ -1950,7 +1953,8 @@ defm : PseudoCheriCmpXchgPat<"atomic_cmp_swap_8", PseudoCheriCmpXchg8>;
1950
1953
defm : PseudoCheriCmpXchgPat<"atomic_cmp_swap_16", PseudoCheriCmpXchg16>;
1951
1954
defm : PseudoCheriCmpXchgPat<"atomic_cmp_swap_32", PseudoCheriCmpXchg32>;
1952
1955
1953
- defm : PseudoCheriCmpXchgPat<"atomic_cmp_swap_cap", PseudoCheriCmpXchgCap, GPCR>;
1956
+ defm : PseudoCheriCmpXchgPat<"atomic_cmp_swap_cap_addr", PseudoCheriCmpXchgCapAddr, GPCR>;
1957
+ defm : PseudoCheriCmpXchgPat<"atomic_cmp_swap_cap_exact", PseudoCheriCmpXchgCapExact, GPCR>;
1954
1958
1955
1959
} // Predicates = [HasCheri, HasStdExtA, IsCapMode]
1956
1960
0 commit comments