mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
target/arm: Implement SME2 BMOPA
Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20250704142112.1018902-28-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
committed by
Peter Maydell
parent
e9de40e538
commit
24b5220f4c
@@ -153,3 +153,6 @@ DEF_HELPER_FLAGS_6(sme_sumopa_d, TCG_CALL_NO_RWG,
|
||||
void, ptr, ptr, ptr, ptr, ptr, i32)
|
||||
DEF_HELPER_FLAGS_6(sme_usmopa_d, TCG_CALL_NO_RWG,
|
||||
void, ptr, ptr, ptr, ptr, ptr, i32)
|
||||
|
||||
DEF_HELPER_FLAGS_6(sme2_bmopa_s, TCG_CALL_NO_RWG,
|
||||
void, ptr, ptr, ptr, ptr, ptr, i32)
|
||||
|
||||
@@ -165,3 +165,5 @@ SMOPA_d 1010000 0 11 0 ..... ... ... ..... . 0 ... @op_64
|
||||
SUMOPA_d 1010000 0 11 1 ..... ... ... ..... . 0 ... @op_64
|
||||
USMOPA_d 1010000 1 11 0 ..... ... ... ..... . 0 ... @op_64
|
||||
UMOPA_d 1010000 1 11 1 ..... ... ... ..... . 0 ... @op_64
|
||||
|
||||
BMOPA 1000000 0 10 0 ..... ... ... ..... . 10 .. @op_32
|
||||
|
||||
+24
-10
@@ -1297,17 +1297,31 @@ DEF_IMOP_64(umopa_d, uint16_t, uint16_t)
|
||||
DEF_IMOP_64(sumopa_d, int16_t, uint16_t)
|
||||
DEF_IMOP_64(usmopa_d, uint16_t, int16_t)
|
||||
|
||||
#define DEF_IMOPH(NAME, S) \
|
||||
void HELPER(sme_##NAME##_##S)(void *vza, void *vzn, void *vzm, \
|
||||
#define DEF_IMOPH(P, NAME, S) \
|
||||
void HELPER(P##_##NAME##_##S)(void *vza, void *vzn, void *vzm, \
|
||||
void *vpn, void *vpm, uint32_t desc) \
|
||||
{ do_imopa_##S(vza, vzn, vzm, vpn, vpm, desc, NAME##_##S); }
|
||||
|
||||
DEF_IMOPH(smopa, s)
|
||||
DEF_IMOPH(umopa, s)
|
||||
DEF_IMOPH(sumopa, s)
|
||||
DEF_IMOPH(usmopa, s)
|
||||
DEF_IMOPH(sme, smopa, s)
|
||||
DEF_IMOPH(sme, umopa, s)
|
||||
DEF_IMOPH(sme, sumopa, s)
|
||||
DEF_IMOPH(sme, usmopa, s)
|
||||
|
||||
DEF_IMOPH(smopa, d)
|
||||
DEF_IMOPH(umopa, d)
|
||||
DEF_IMOPH(sumopa, d)
|
||||
DEF_IMOPH(usmopa, d)
|
||||
DEF_IMOPH(sme, smopa, d)
|
||||
DEF_IMOPH(sme, umopa, d)
|
||||
DEF_IMOPH(sme, sumopa, d)
|
||||
DEF_IMOPH(sme, usmopa, d)
|
||||
|
||||
static uint32_t bmopa_s(uint32_t n, uint32_t m, uint32_t a, uint8_t p, bool neg)
|
||||
{
|
||||
uint32_t sum = ctpop32(~(n ^ m));
|
||||
if (neg) {
|
||||
sum = -sum;
|
||||
}
|
||||
if (!(p & 1)) {
|
||||
sum = 0;
|
||||
}
|
||||
return a + sum;
|
||||
}
|
||||
|
||||
DEF_IMOPH(sme2, bmopa, s)
|
||||
|
||||
@@ -539,3 +539,5 @@ TRANS_FEAT(SMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_64, gen_helper_sme_smopa_
|
||||
TRANS_FEAT(UMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_64, gen_helper_sme_umopa_d)
|
||||
TRANS_FEAT(SUMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_64, gen_helper_sme_sumopa_d)
|
||||
TRANS_FEAT(USMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_64, gen_helper_sme_usmopa_d)
|
||||
|
||||
TRANS_FEAT(BMOPA, aa64_sme2, do_outprod, a, MO_32, gen_helper_sme2_bmopa_s)
|
||||
|
||||
Reference in New Issue
Block a user