From 4e50d5f863090d22db5ce0ec1e7d9e075806fd91 Mon Sep 17 00:00:00 2001 From: Yufeng Zhang Date: Tue, 5 Nov 2013 20:46:24 +0000 Subject: opcodes/ * aarch64-opc.c (set_syntax_error): New function. (operand_general_constraint_met_p): Replace set_other_error with set_syntax_error. gas/testsuite/ * gas/aarch64/diagnostic.s: Add tests of ldp/stp. * gas/aarch64/diagnostic.l: Update. --- gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/aarch64/diagnostic.l | 6 ++++++ gas/testsuite/gas/aarch64/diagnostic.s | 6 ++++++ opcodes/ChangeLog | 6 ++++++ opcodes/aarch64-opc.c | 17 +++++++++++++---- 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 19a6138..8e8cdc5 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-11-05 Yufeng Zhang + + * gas/aarch64/diagnostic.s: Add tests of ldp/stp. + * gas/aarch64/diagnostic.l: Update. + 2013-11-05 Will Newton * gas/aarch64/advsimd-mov-bad.d: New file. diff --git a/gas/testsuite/gas/aarch64/diagnostic.l b/gas/testsuite/gas/aarch64/diagnostic.l index cca8881..015e16a 100644 --- a/gas/testsuite/gas/aarch64/diagnostic.l +++ b/gas/testsuite/gas/aarch64/diagnostic.l @@ -87,3 +87,9 @@ [^:]*:89: Error: shift amount expected to be 0 at operand 2 -- `movi v1.8b,97,lsl#8' [^:]*:90: Error: unknown or missing system register name at operand 1 -- `msr dummy,x1' [^:]*:91: Error: invalid floating-point constant at operand 2 -- `fmov s0,0x42000000' +[^:]*:92: Error: immediate value should be a multiple of 8 at operand 3 -- `ldp x0,x1,\[x2,#4\]' +[^:]*:93: Error: immediate value should be a multiple of 8 at operand 3 -- `ldp x0,x1,\[x2,#4\]!' +[^:]*:94: Error: immediate value should be a multiple of 8 at operand 3 -- `ldp x0,x1,\[x2\],#4' +[^:]*:95: Error: immediate value should be a multiple of 4 at operand 3 -- `stp w0,w1,\[x2,#3\]' +[^:]*:96: Error: immediate value should be a multiple of 4 at operand 3 -- `stp w0,w1,\[x2,#2\]!' +[^:]*:97: Error: immediate value should be a multiple of 4 at operand 3 -- `stp w0,w1,\[x2\],#1' diff --git a/gas/testsuite/gas/aarch64/diagnostic.s b/gas/testsuite/gas/aarch64/diagnostic.s index e5443ab..afa04b5 100644 --- a/gas/testsuite/gas/aarch64/diagnostic.s +++ b/gas/testsuite/gas/aarch64/diagnostic.s @@ -89,3 +89,9 @@ movi v1.8b, 97, lsl #8 msr dummy, x1 fmov s0, 0x42000000 + ldp x0, x1, [x2, #4] + ldp x0, x1, [x2, #4]! + ldp x0, x1, [x2], #4 + stp w0, w1, [x2, #3] + stp w0, w1, [x2, #2]! + stp w0, w1, [x2], #1 diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index c96df92..424c27f 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,9 @@ +2013-11-05 Yufeng Zhang + + * aarch64-opc.c (set_syntax_error): New function. + (operand_general_constraint_met_p): Replace set_other_error + with set_syntax_error. + 2013-10-30 Andreas Arnez * s390-dis.c (init_disasm): Default to full 'zarch' opcode diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c index f32ee5e..0d16bd6 100644 --- a/opcodes/aarch64-opc.c +++ b/opcodes/aarch64-opc.c @@ -1122,6 +1122,15 @@ set_error (aarch64_operand_error *mismatch_detail, } static inline void +set_syntax_error (aarch64_operand_error *mismatch_detail, int idx, + const char* error) +{ + if (mismatch_detail == NULL) + return; + set_error (mismatch_detail, AARCH64_OPDE_SYNTAX_ERROR, idx, error); +} + +static inline void set_out_of_range_error (aarch64_operand_error *mismatch_detail, int idx, int lower_bound, int upper_bound, const char* error) @@ -1288,8 +1297,8 @@ operand_general_constraint_met_p (const aarch64_opnd_info *opnds, int idx, case ldst_unpriv: if (opnd->addr.writeback == 1) { - set_other_error (mismatch_detail, idx, - _("unexpected address writeback")); + set_syntax_error (mismatch_detail, idx, + _("unexpected address writeback")); return 0; } break; @@ -1299,8 +1308,8 @@ operand_general_constraint_met_p (const aarch64_opnd_info *opnds, int idx, case asisdlsop: if (opnd->addr.writeback == 0) { - set_other_error (mismatch_detail, idx, - _("address writeback expected")); + set_syntax_error (mismatch_detail, idx, + _("address writeback expected")); return 0; } break; -- cgit v1.1