diff options
author | Max Filippov <jcmvbkbc@gmail.com> | 2022-05-01 22:57:49 -0700 |
---|---|---|
committer | Max Filippov <jcmvbkbc@gmail.com> | 2022-05-06 15:37:10 -0700 |
commit | 59491e97f89eaeee275f57fb6bb40f0152429fb3 (patch) | |
tree | 5661c3a6ffd7147f72c799ee64409ac14f0c291f /target/xtensa | |
parent | 4be4c5b826989bed67a16f6e5b931d8374589c08 (diff) |
target/xtensa: implement cache test option opcodes
We don't model caches, so for l*ct opcodes return tags with all bits
(including Valid) set to 0. For all other opcodes don't do anything.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Diffstat (limited to 'target/xtensa')
-rw-r--r-- | target/xtensa/translate.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c index b0576d90fa..70e11eeb45 100644 --- a/target/xtensa/translate.c +++ b/target/xtensa/translate.c @@ -1766,6 +1766,12 @@ static void translate_ldst(DisasContext *dc, const OpcodeArg arg[], tcg_temp_free(addr); } +static void translate_lct(DisasContext *dc, const OpcodeArg arg[], + const uint32_t par[]) +{ + tcg_gen_movi_i32(arg[0].out, 0); +} + static void translate_l32r(DisasContext *dc, const OpcodeArg arg[], const uint32_t par[]) { @@ -3320,6 +3326,14 @@ static const XtensaOpcodeOps core_ops[] = { .par = (const uint32_t[]){MO_UB, false, false}, .op_flags = XTENSA_OP_LOAD, }, { + .name = "ldct", + .translate = translate_lct, + .op_flags = XTENSA_OP_PRIVILEGED, + }, { + .name = "ldcw", + .translate = translate_nop, + .op_flags = XTENSA_OP_PRIVILEGED, + }, { .name = "lddec", .translate = translate_mac16, .par = (const uint32_t[]){MAC16_NONE, 0, -4}, @@ -3333,6 +3347,14 @@ static const XtensaOpcodeOps core_ops[] = { .name = "ldpte", .op_flags = XTENSA_OP_ILL, }, { + .name = "lict", + .translate = translate_lct, + .op_flags = XTENSA_OP_PRIVILEGED, + }, { + .name = "licw", + .translate = translate_nop, + .op_flags = XTENSA_OP_PRIVILEGED, + }, { .name = (const char * const[]) { "loop", "loop.w15", NULL, }, @@ -4636,12 +4658,28 @@ static const XtensaOpcodeOps core_ops[] = { .translate = translate_salt, .par = (const uint32_t[]){TCG_COND_LTU}, }, { + .name = "sdct", + .translate = translate_nop, + .op_flags = XTENSA_OP_PRIVILEGED, + }, { + .name = "sdcw", + .translate = translate_nop, + .op_flags = XTENSA_OP_PRIVILEGED, + }, { .name = "setb_expstate", .translate = translate_setb_expstate, }, { .name = "sext", .translate = translate_sext, }, { + .name = "sict", + .translate = translate_nop, + .op_flags = XTENSA_OP_PRIVILEGED, + }, { + .name = "sicw", + .translate = translate_nop, + .op_flags = XTENSA_OP_PRIVILEGED, + }, { .name = "simcall", .translate = translate_simcall, .test_exceptions = test_exceptions_simcall, |