target/mips: Fix df_extract_val() and df_extract_df() dfe lookup

Actually look into dfe structure data so that df_extract_val() and
df_extract_df() can return immediate and datafield other than BYTE.

Fixes: 4701d23aef ("target/mips: Convert MSA BIT instruction format to decodetree")
Signed-off-by: Ni Hui <shuizhuyuanluo@126.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20220503130708.272850-2-shuizhuyuanluo@126.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
This commit is contained in:
Ni Hui 2022-05-03 21:07:06 +08:00 committed by Philippe Mathieu-Daudé
parent 954d1658bd
commit 7fc235c67f

View File

@ -68,8 +68,8 @@ struct dfe {
static int df_extract_val(DisasContext *ctx, int x, const struct dfe *s)
{
for (unsigned i = 0; i < 4; i++) {
if (extract32(x, s->start, s->length) == s->mask) {
return extract32(x, 0, s->start);
if (extract32(x, s[i].start, s[i].length) == s[i].mask) {
return extract32(x, 0, s[i].start);
}
}
return -1;
@ -82,7 +82,7 @@ static int df_extract_val(DisasContext *ctx, int x, const struct dfe *s)
static int df_extract_df(DisasContext *ctx, int x, const struct dfe *s)
{
for (unsigned i = 0; i < 4; i++) {
if (extract32(x, s->start, s->length) == s->mask) {
if (extract32(x, s[i].start, s[i].length) == s[i].mask) {
return i;
}
}