[binutils][aarch64] New sve_size_013 iclass.
Add sve_size_013 instruction class This new iclass handles instructions such as pmullb whose size specifier can only be encoded as 0, 1, or 3. include/ChangeLog: 2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> * opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_013 iclass. opcodes/ChangeLog: 2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com> * aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle sve_size_013 iclass encode. * aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle sve_size_013 iclass decode.
This commit is contained in:
parent
3c705960ca
commit
cd50a87ae2
|
@ -1,3 +1,7 @@
|
|||
2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com>
|
||||
|
||||
* opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_013 iclass.
|
||||
|
||||
2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com>
|
||||
|
||||
* opcode/aarch64.h (enum aarch64_insn_class): Add sve_size_bh iclass.
|
||||
|
|
|
@ -596,6 +596,7 @@ enum aarch64_insn_class
|
|||
sve_size_sd,
|
||||
sve_size_bh,
|
||||
sve_size_sd2,
|
||||
sve_size_013,
|
||||
testbranch,
|
||||
cryptosm3,
|
||||
cryptosm4,
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com>
|
||||
|
||||
* aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle
|
||||
sve_size_013 iclass encode.
|
||||
* aarch64-dis.c (aarch64_decode_variant_using_iclass): Handle
|
||||
sve_size_013 iclass decode.
|
||||
|
||||
2019-05-09 Matthew Malcomson <matthew.malcomson@arm.com>
|
||||
|
||||
* aarch64-asm.c (aarch64_encode_variant_using_iclass): Handle
|
||||
|
|
|
@ -1613,6 +1613,7 @@ do_special_encoding (struct aarch64_inst *inst)
|
|||
static void
|
||||
aarch64_encode_variant_using_iclass (struct aarch64_inst *inst)
|
||||
{
|
||||
int variant = 0;
|
||||
switch (inst->opcode->iclass)
|
||||
{
|
||||
case sve_cpy:
|
||||
|
@ -1669,6 +1670,13 @@ aarch64_encode_variant_using_iclass (struct aarch64_inst *inst)
|
|||
aarch64_get_variant (inst) + 1, 0);
|
||||
break;
|
||||
|
||||
case sve_size_013:
|
||||
variant = aarch64_get_variant (inst);
|
||||
if (variant == 2)
|
||||
variant = 3;
|
||||
insert_field (FLD_size, &inst->value, variant, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -2822,6 +2822,16 @@ aarch64_decode_variant_using_iclass (aarch64_inst *inst)
|
|||
variant = i - 1;
|
||||
break;
|
||||
|
||||
case sve_size_013:
|
||||
i = extract_field (FLD_size, inst->value, 0);
|
||||
if (i == 2)
|
||||
return FALSE;
|
||||
if (i == 3)
|
||||
variant = 2;
|
||||
else
|
||||
variant = i;
|
||||
break;
|
||||
|
||||
default:
|
||||
/* No mapping between instruction class and qualifiers. */
|
||||
return TRUE;
|
||||
|
|
Loading…
Reference in New Issue