diff options
author | Yufeng Zhang <yufeng.zhang@arm.com> | 2013-01-17 16:09:41 +0000 |
---|---|---|
committer | Yufeng Zhang <yufeng.zhang@arm.com> | 2013-01-17 16:09:41 +0000 |
commit | 4115573c559012518b56222c6608ba920d11244f (patch) | |
tree | d0032b85675514a209e31fcfd4ff402b3394968f /gas/config/tc-aarch64.c | |
parent | f9bec2729c5dea1eb178a2559f516279f6fff8cd (diff) | |
download | binutils-redhat-4115573c559012518b56222c6608ba920d11244f.tar.gz |
include/opcode/
2013-01-17 Yufeng Zhang <yufeng.zhang@arm.com>
* aarch64.h (aarch64_op): Remove OP_V_MOVI_B.
opcodes/
2013-01-17 Yufeng Zhang <yufeng.zhang@arm.com>
* aarch64-asm.c (aarch64_ins_advsimd_imm_modified): Handle 8-bit MOVI.
* aarch64-dis.c (aarch64_ext_advsimd_imm_modified): Likewise.
* aarch64-opc.c (operand_general_constraint_met_p): For
AARCH64_MOD_LSL, move the range check on the shift amount before the
alignment check; change to call set_sft_amount_out_of_range_error
instead of set_imm_out_of_range_error.
* aarch64-tbl.h (QL_SIMD_IMM_B): Replace NIL with LSL.
(aarch64_opcode_table): Remove the OP enumerator from the asimdimm
8-bit MOVI entry; change the 2nd operand from SIMD_IMM to
SIMD_IMM_SFT.
gas/
2013-01-17 Yufeng Zhang <yufeng.zhang@arm.com>
* config/tc-aarch64.c (output_operand_error_record): Change to output
the out-of-range error message as value-expected message if there is
only one single value in the expected range.
(programmer_friendly_fixup): Remove the handling of 8-bit MOVI with
LSL #0 as a programmer-friendly feature.
gas/testsuite/
2013-01-17 Yufeng Zhang <yufeng.zhang@arm.com>
* gas/aarch64/diagnostic.l: Update.
* gas/aarch64/movi.s: Add tests.
* gas/aarch64/movi.d: Update.
* gas/aarch64/programmer-friendly.s: Add comment.
Diffstat (limited to 'gas/config/tc-aarch64.c')
-rw-r--r-- | gas/config/tc-aarch64.c | 30 |
1 files changed, 8 insertions, 22 deletions
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index 3220d2b012..f9b4cd08fc 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -3926,9 +3926,14 @@ output_operand_error_record (const operand_error_record *record, char *str) break; case AARCH64_OPDE_OUT_OF_RANGE: - as_bad (_("%s out of range %d to %d at operand %d -- `%s'"), - detail->error ? detail->error : _("immediate value"), - detail->data[0], detail->data[1], detail->index + 1, str); + if (detail->data[0] != detail->data[1]) + as_bad (_("%s out of range %d to %d at operand %d -- `%s'"), + detail->error ? detail->error : _("immediate value"), + detail->data[0], detail->data[1], detail->index + 1, str); + else + as_bad (_("%s expected to be %d at operand %d -- `%s'"), + detail->error ? detail->error : _("immediate value"), + detail->data[0], detail->index + 1, str); break; case AARCH64_OPDE_REG_LIST: @@ -5259,25 +5264,6 @@ programmer_friendly_fixup (aarch64_instruction *instr) } } break; - case asimdimm: - /* Allow MOVI V0.16B, 97, LSL 0, although the preferred architectural - syntax requires that the LSL shifter can only be used when the - destination register has the shape of 4H, 8H, 2S or 4S. */ - if (op == OP_V_MOVI_B && operands[1].shifter.kind == AARCH64_MOD_LSL - && (operands[0].qualifier == AARCH64_OPND_QLF_V_8B - || operands[0].qualifier == AARCH64_OPND_QLF_V_16B)) - { - if (operands[1].shifter.amount != 0) - { - record_operand_error (opcode, 1, - AARCH64_OPDE_OTHER_ERROR, - _("shift amount non-zero")); - return FALSE; - } - operands[1].shifter.kind = AARCH64_MOD_NONE; - operands[1].qualifier = AARCH64_OPND_QLF_NIL; - } - break; case log_shift: case bitfield: /* UXT[BHW] Wd, Wn |