-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[AArch64][SVE 24/32] Add AARCH64_OPND_SVE_PATTERN_SCALED
Some SVE instructions count the number of elements in a given vector pattern and allow a scale factor of [1, 16] to be applied to the result. This scale factor is written ", MUL #n", where "MUL" is a new operator. E.g.: UQINCD X0, POW2, MUL #2 This patch adds support for this kind of operand. All existing operators were shifts of some kind, so there was a natural range of [0, 63] regardless of context. This was then narrowered further by later checks (e.g. to [0, 31] when used for 32-bit values). In contrast, MUL doesn't really have a natural context-independent range. Rather than pick one arbitrarily, it seemed better to make the "shift" amount a full 64-bit value and leave the range test to the usual operand-checking code. I've rearranged the fields of aarch64_opnd_info so that this doesn't increase the size of the structure (although I don't think its size is critical anyway). include/ * opcode/aarch64.h (AARCH64_OPND_SVE_PATTERN_SCALED): New aarch64_opnd. (AARCH64_MOD_MUL): New aarch64_modifier_kind. (aarch64_opnd_info): Make shifter.amount an int64_t and rearrange the fields. opcodes/ * aarch64-tbl.h (AARCH64_OPERANDS): Add an entry for AARCH64_OPND_SVE_PATTERN_SCALED. * aarch64-opc.h (FLD_SVE_imm4): New aarch64_field_kind. * aarch64-opc.c (fields): Add a corresponding entry. (set_multiplier_out_of_range_error): New function. (aarch64_operand_modifiers): Add entry for AARCH64_MOD_MUL. (operand_general_constraint_met_p): Handle AARCH64_OPND_SVE_PATTERN_SCALED. (print_register_offset_address): Use PRIi64 to print the shift amount. (aarch64_print_operand): Likewise. Handle AARCH64_OPND_SVE_PATTERN_SCALED. * aarch64-opc-2.c: Regenerate. * aarch64-asm.h (ins_sve_scale): New inserter. * aarch64-asm.c (aarch64_ins_sve_scale): New function. * aarch64-asm-2.c: Regenerate. * aarch64-dis.h (ext_sve_scale): New inserter. * aarch64-dis.c (aarch64_ext_sve_scale): New function. * aarch64-dis-2.c: Regenerate. gas/ * config/tc-aarch64.c (SHIFTED_MUL): New parse_shift_mode. (parse_shift): Handle it. Reject AARCH64_MOD_MUL for all other shift modes. Skip range tests for AARCH64_MOD_MUL. (process_omitted_operand): Handle AARCH64_OPND_SVE_PATTERN_SCALED. (parse_operands): Likewise.
- Loading branch information
1 parent
245d2e3
commit 2442d84
Showing
15 changed files
with
186 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,11 @@ | ||
2016-09-21 Richard Sandiford <[email protected]> | ||
|
||
* config/tc-aarch64.c (SHIFTED_MUL): New parse_shift_mode. | ||
(parse_shift): Handle it. Reject AARCH64_MOD_MUL for all other | ||
shift modes. Skip range tests for AARCH64_MOD_MUL. | ||
(process_omitted_operand): Handle AARCH64_OPND_SVE_PATTERN_SCALED. | ||
(parse_operands): Likewise. | ||
|
||
2016-09-21 Richard Sandiford <[email protected]> | ||
|
||
* config/tc-aarch64.c (parse_enum_string): New function. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,11 @@ | ||
2016-09-21 Richard Sandiford <[email protected]> | ||
|
||
* opcode/aarch64.h (AARCH64_OPND_SVE_PATTERN_SCALED): New | ||
aarch64_opnd. | ||
(AARCH64_MOD_MUL): New aarch64_modifier_kind. | ||
(aarch64_opnd_info): Make shifter.amount an int64_t and | ||
rearrange the fields. | ||
|
||
2016-09-21 Richard Sandiford <[email protected]> | ||
|
||
* opcode/aarch64.h (AARCH64_OPND_SVE_PATTERN): New aarch64_opnd. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,25 @@ | ||
2016-09-21 Richard Sandiford <[email protected]> | ||
|
||
* aarch64-tbl.h (AARCH64_OPERANDS): Add an entry for | ||
AARCH64_OPND_SVE_PATTERN_SCALED. | ||
* aarch64-opc.h (FLD_SVE_imm4): New aarch64_field_kind. | ||
* aarch64-opc.c (fields): Add a corresponding entry. | ||
(set_multiplier_out_of_range_error): New function. | ||
(aarch64_operand_modifiers): Add entry for AARCH64_MOD_MUL. | ||
(operand_general_constraint_met_p): Handle | ||
AARCH64_OPND_SVE_PATTERN_SCALED. | ||
(print_register_offset_address): Use PRIi64 to print the | ||
shift amount. | ||
(aarch64_print_operand): Likewise. Handle | ||
AARCH64_OPND_SVE_PATTERN_SCALED. | ||
* aarch64-opc-2.c: Regenerate. | ||
* aarch64-asm.h (ins_sve_scale): New inserter. | ||
* aarch64-asm.c (aarch64_ins_sve_scale): New function. | ||
* aarch64-asm-2.c: Regenerate. | ||
* aarch64-dis.h (ext_sve_scale): New inserter. | ||
* aarch64-dis.c (aarch64_ext_sve_scale): New function. | ||
* aarch64-dis-2.c: Regenerate. | ||
|
||
2016-09-21 Richard Sandiford <[email protected]> | ||
|
||
* aarch64-tbl.h (AARCH64_OPERANDS): Add entries for | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.