summaryrefslogtreecommitdiff
path: root/gas/config/tc-aarch64.c
diff options
context:
space:
mode:
authorYufeng Zhang <yufeng.zhang@arm.com>2013-01-17 16:09:41 +0000
committerYufeng Zhang <yufeng.zhang@arm.com>2013-01-17 16:09:41 +0000
commit4115573c559012518b56222c6608ba920d11244f (patch)
treed0032b85675514a209e31fcfd4ff402b3394968f /gas/config/tc-aarch64.c
parentf9bec2729c5dea1eb178a2559f516279f6fff8cd (diff)
downloadbinutils-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.c30
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