diff options
Diffstat (limited to 'gas/config/tc-i386.c')
-rw-r--r-- | gas/config/tc-i386.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 6724bca..d2ec480 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -962,6 +962,8 @@ static const arch_entry cpu_arch[] = CPU_AVX512IFMA_FLAGS, 0 }, { STRING_COMMA_LEN (".avx512vbmi"), PROCESSOR_UNKNOWN, CPU_AVX512VBMI_FLAGS, 0 }, + { STRING_COMMA_LEN (".avx512_4fmaps"), PROCESSOR_UNKNOWN, + CPU_AVX512_4FMAPS_FLAGS, 0 }, { STRING_COMMA_LEN (".clzero"), PROCESSOR_UNKNOWN, CPU_CLZERO_FLAGS, 0 }, { STRING_COMMA_LEN (".mwaitx"), PROCESSOR_UNKNOWN, @@ -999,6 +1001,7 @@ static const noarch_entry cpu_noarch[] = { STRING_COMMA_LEN ("noavx512vl"), CPU_ANY_AVX512VL_FLAGS }, { STRING_COMMA_LEN ("noavx512ifma"), CPU_ANY_AVX512IFMA_FLAGS }, { STRING_COMMA_LEN ("noavx512vbmi"), CPU_ANY_AVX512VBMI_FLAGS }, + { STRING_COMMA_LEN ("noavx512_4fmaps"), CPU_ANY_AVX512_4FMAPS_FLAGS }, }; #ifdef I386COFF @@ -5966,6 +5969,25 @@ duplicate: i.reg_operands--; i.tm.operands--; } + else if (i.tm.opcode_modifier.implicitquadgroup) + { + /* The second operand must be {x,y,z}mmN, where N is a multiple of 4. */ + gas_assert (i.operands >= 2 + && (operand_type_equal (&i.types[1], ®xmm) + || operand_type_equal (&i.types[1], ®ymm) + || operand_type_equal (&i.types[1], ®zmm))); + unsigned int regnum = register_number (i.op[1].regs); + unsigned int first_reg_in_group = regnum & ~3; + unsigned int last_reg_in_group = first_reg_in_group + 3; + if (regnum != first_reg_in_group) { + as_warn (_("the second source register `%s%s' implicitly denotes" + " `%s%.3s%d' to `%s%.3s%d' source group in `%s'"), + register_prefix, i.op[1].regs->reg_name, + register_prefix, i.op[1].regs->reg_name, first_reg_in_group, + register_prefix, i.op[1].regs->reg_name, last_reg_in_group, + i.tm.name); + } + } else if (i.tm.opcode_modifier.regkludge) { /* The imul $imm, %reg instruction is converted into |