target/xtensa: don't specify windowed registers manually

Use libisa to extract whether opcode uses windowed registers and
construct mask based on that. This only leaves special case for the
'entry' opcode, as it needs to probe a register dynamically.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
Max Filippov 2019-02-09 18:30:00 -08:00
parent 571a7e34f9
commit fe7869d69c
3 changed files with 12 additions and 484 deletions

View File

@ -380,7 +380,6 @@ typedef struct XtensaOpcodeOps {
XtensaOpcodeUintTest test_overflow; XtensaOpcodeUintTest test_overflow;
const uint32_t *par; const uint32_t *par;
uint32_t op_flags; uint32_t op_flags;
uint32_t windowed_register_op;
uint32_t coprocessor; uint32_t coprocessor;
} XtensaOpcodeOps; } XtensaOpcodeOps;
@ -438,6 +437,7 @@ struct XtensaConfig {
xtensa_isa isa; xtensa_isa isa;
XtensaOpcodeOps **opcode_ops; XtensaOpcodeOps **opcode_ops;
const XtensaOpcodeTranslators **opcode_translators; const XtensaOpcodeTranslators **opcode_translators;
xtensa_regfile a_regfile;
uint32_t clock_freq_khz; uint32_t clock_freq_khz;

View File

@ -88,6 +88,7 @@ static void init_libisa(XtensaConfig *config)
#endif #endif
config->opcode_ops[i] = ops; config->opcode_ops[i] = ops;
} }
config->a_regfile = xtensa_regfile_lookup(config->isa, "AR");
} }
void xtensa_finalize_config(XtensaConfig *config) void xtensa_finalize_config(XtensaConfig *config)

File diff suppressed because it is too large Load Diff