|
|
|
@ -3237,7 +3237,7 @@ static bool trans_LDXP(DisasContext *s, arg_stxr *a) |
|
|
|
|
|
|
|
static bool trans_CASP(DisasContext *s, arg_CASP *a) |
|
|
|
{ |
|
|
|
if (!dc_isar_feature(aa64_atomics, s)) { |
|
|
|
if (!dc_isar_feature(aa64_lse, s)) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
if (((a->rt | a->rs) & 1) != 0) { |
|
|
|
@ -3250,7 +3250,7 @@ static bool trans_CASP(DisasContext *s, arg_CASP *a) |
|
|
|
|
|
|
|
static bool trans_CAS(DisasContext *s, arg_CAS *a) |
|
|
|
{ |
|
|
|
if (!dc_isar_feature(aa64_atomics, s)) { |
|
|
|
if (!dc_isar_feature(aa64_lse, s)) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
gen_compare_and_swap(s, a->rs, a->rt, a->rn, a->sz); |
|
|
|
@ -3743,15 +3743,15 @@ static bool do_atomic_ld(DisasContext *s, arg_atomic *a, AtomicThreeOpFn *fn, |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
TRANS_FEAT(LDADD, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_add_i64, 0, false) |
|
|
|
TRANS_FEAT(LDCLR, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_and_i64, 0, true) |
|
|
|
TRANS_FEAT(LDEOR, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_xor_i64, 0, false) |
|
|
|
TRANS_FEAT(LDSET, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_or_i64, 0, false) |
|
|
|
TRANS_FEAT(LDSMAX, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_smax_i64, MO_SIGN, false) |
|
|
|
TRANS_FEAT(LDSMIN, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_smin_i64, MO_SIGN, false) |
|
|
|
TRANS_FEAT(LDUMAX, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_umax_i64, 0, false) |
|
|
|
TRANS_FEAT(LDUMIN, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_fetch_umin_i64, 0, false) |
|
|
|
TRANS_FEAT(SWP, aa64_atomics, do_atomic_ld, a, tcg_gen_atomic_xchg_i64, 0, false) |
|
|
|
TRANS_FEAT(LDADD, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_add_i64, 0, false) |
|
|
|
TRANS_FEAT(LDCLR, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_and_i64, 0, true) |
|
|
|
TRANS_FEAT(LDEOR, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_xor_i64, 0, false) |
|
|
|
TRANS_FEAT(LDSET, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_or_i64, 0, false) |
|
|
|
TRANS_FEAT(LDSMAX, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_smax_i64, MO_SIGN, false) |
|
|
|
TRANS_FEAT(LDSMIN, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_smin_i64, MO_SIGN, false) |
|
|
|
TRANS_FEAT(LDUMAX, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_umax_i64, 0, false) |
|
|
|
TRANS_FEAT(LDUMIN, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_fetch_umin_i64, 0, false) |
|
|
|
TRANS_FEAT(SWP, aa64_lse, do_atomic_ld, a, tcg_gen_atomic_xchg_i64, 0, false) |
|
|
|
|
|
|
|
static bool trans_LDAPR(DisasContext *s, arg_LDAPR *a) |
|
|
|
{ |
|
|
|
@ -3759,7 +3759,7 @@ static bool trans_LDAPR(DisasContext *s, arg_LDAPR *a) |
|
|
|
TCGv_i64 clean_addr; |
|
|
|
MemOp mop; |
|
|
|
|
|
|
|
if (!dc_isar_feature(aa64_atomics, s) || |
|
|
|
if (!dc_isar_feature(aa64_lse, s) || |
|
|
|
!dc_isar_feature(aa64_rcpc_8_3, s)) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|