x86/SSE2AVX: move checking
It has always been looking a little odd to me that this was done deep in cpu_flags_match(). Move it to match_template() itself - there's no need to do anything complex when encountering such a template while it cannot possibly be used.
This commit is contained in:
parent
ebe82bfdb3
commit
b58829cdef
1 changed files with 10 additions and 11 deletions
|
@ -1980,17 +1980,7 @@ cpu_flags_match (const insn_template *t)
|
|||
|
||||
cpu = cpu_flags_and (any, active);
|
||||
if (cpu_flags_all_zero (&any) || !cpu_flags_all_zero (&cpu))
|
||||
{
|
||||
if (all.bitfield.cpuavx)
|
||||
{
|
||||
/* We need to check SSE2AVX with AVX. */
|
||||
if (!t->opcode_modifier.sse2avx
|
||||
|| (sse2avx && !i.prefix[DATA_PREFIX]))
|
||||
match |= CPU_FLAGS_ARCH_MATCH;
|
||||
}
|
||||
else
|
||||
match |= CPU_FLAGS_ARCH_MATCH;
|
||||
}
|
||||
match |= CPU_FLAGS_ARCH_MATCH;
|
||||
}
|
||||
return match;
|
||||
}
|
||||
|
@ -8542,6 +8532,15 @@ match_template (char mnem_suffix)
|
|||
if (i.operands != t->operands)
|
||||
continue;
|
||||
|
||||
/* Skip SSE2AVX templates when inapplicable. */
|
||||
if (t->opcode_modifier.sse2avx
|
||||
&& (!sse2avx || i.prefix[DATA_PREFIX]))
|
||||
{
|
||||
/* Another non-SSE2AVX template has to follow. */
|
||||
gas_assert (t + 1 < current_templates.end);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Check processor support. */
|
||||
specific_error = progress (unsupported);
|
||||
if (cpu_flags_match (t) != CPU_FLAGS_PERFECT_MATCH)
|
||||
|
|
Loading…
Add table
Reference in a new issue