aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorYufeng Zhang <yufeng.zhang@arm.com>2013-11-05 20:50:18 +0000
committerYufeng Zhang <yufeng.zhang@arm.com>2013-11-05 20:50:18 +0000
commit68a642838267d9971f77f9eb487d32044a499c82 (patch)
tree9687f65166a0f885332088bec9166d438007c5d3 /gas
parent4e50d5f863090d22db5ce0ec1e7d9e075806fd91 (diff)
downloadgdb-68a642838267d9971f77f9eb487d32044a499c82.zip
gdb-68a642838267d9971f77f9eb487d32044a499c82.tar.gz
gdb-68a642838267d9971f77f9eb487d32044a499c82.tar.bz2
gas/
* config/tc-aarch64.c (parse_operands): Handle AARCH64_OPND_COND1. gas/testsuite/ * gas/aarch64/alias.s: Add tests. * gas/aarch64/alias.d: Update. * gas/aarch64/no-aliases.d: Update. * gas/aarch64/diagnostic.s: Add tests. * gas/aarch64/diagnostic.l: Update. * gas/aarch64/illegal.s: Add tests. * gas/aarch64/illegal.l: Update. include/opcode/ * aarch64.h (enum aarch64_operand_class): Add AARCH64_OPND_CLASS_COND. (enum aarch64_opnd): Add AARCH64_OPND_COND1. opcodes/ * aarch64-dis.c (convert_ubfm_to_lsl): Check for cond != '111x'. (convert_from_csel): Likewise. * aarch64-opc.c (operand_general_constraint_met_p): Handle AARCH64_OPND_CLASS_COND and AARCH64_OPND_COND1. (aarch64_print_operand): Handle AARCH64_OPND_COND1. * aarch64-tbl.h (aarch64_opcode_table): Use COND1 instead of COND for cinc, cset, cinv, csetm and cneg. (AARCH64_OPERANDS): Add entry for AARCH64_OPND_COND1. * aarch64-asm-2.c: Re-generated. * aarch64-dis-2.c: Ditto. * aarch64-opc-2.c: Ditto.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog4
-rw-r--r--gas/config/tc-aarch64.c8
-rw-r--r--gas/testsuite/ChangeLog10
-rw-r--r--gas/testsuite/gas/aarch64/alias.d10
-rw-r--r--gas/testsuite/gas/aarch64/alias.s11
-rw-r--r--gas/testsuite/gas/aarch64/diagnostic.l4
-rw-r--r--gas/testsuite/gas/aarch64/diagnostic.s4
-rw-r--r--gas/testsuite/gas/aarch64/illegal.l12
-rw-r--r--gas/testsuite/gas/aarch64/illegal.s12
-rw-r--r--gas/testsuite/gas/aarch64/no-aliases.d10
10 files changed, 83 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 7078b22..371326a 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,7 @@
+2013-11-05 Yufeng Zhang <yufeng.zhang@arm.com>
+
+ * config/tc-aarch64.c (parse_operands): Handle AARCH64_OPND_COND1.
+
2013-11-05 Will Newton <will.newton@linaro.org>
PR gas/16103
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 02fe4de..4febbdc 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -4969,6 +4969,7 @@ parse_operands (char *str, const aarch64_opcode *opcode)
break;
case AARCH64_OPND_COND:
+ case AARCH64_OPND_COND1:
info->cond = hash_find_n (aarch64_cond_hsh, str, 2);
str += 2;
if (info->cond == NULL)
@@ -4976,6 +4977,13 @@ parse_operands (char *str, const aarch64_opcode *opcode)
set_syntax_error (_("invalid condition"));
goto failure;
}
+ else if (operands[i] == AARCH64_OPND_COND1
+ && (info->cond->value & 0xe) == 0xe)
+ {
+ /* Not allow AL or NV. */
+ set_default_error ();
+ goto failure;
+ }
break;
case AARCH64_OPND_ADDR_ADRP:
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 8e8cdc5..8a44216 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,5 +1,15 @@
2013-11-05 Yufeng Zhang <yufeng.zhang@arm.com>
+ * gas/aarch64/alias.s: Add tests.
+ * gas/aarch64/alias.d: Update.
+ * gas/aarch64/no-aliases.d: Update.
+ * gas/aarch64/diagnostic.s: Add tests.
+ * gas/aarch64/diagnostic.l: Update.
+ * gas/aarch64/illegal.s: Add tests.
+ * gas/aarch64/illegal.l: Update.
+
+2013-11-05 Yufeng Zhang <yufeng.zhang@arm.com>
+
* gas/aarch64/diagnostic.s: Add tests of ldp/stp.
* gas/aarch64/diagnostic.l: Update.
diff --git a/gas/testsuite/gas/aarch64/alias.d b/gas/testsuite/gas/aarch64/alias.d
index 53cf5e9..5911b21 100644
--- a/gas/testsuite/gas/aarch64/alias.d
+++ b/gas/testsuite/gas/aarch64/alias.d
@@ -96,3 +96,13 @@ Disassembly of section \.text:
160: 2f20a448 uxtl v8.2d, v2.2s
164: 6f20a448 uxtl2 v8.2d, v2.4s
168: 6f20a448 uxtl2 v8.2d, v2.4s
+ 16c: 1a81f420 csinc w0, w1, w1, nv
+ 170: 1a81e420 csinc w0, w1, w1, al
+ 174: 1a9ff7e0 csinc w0, wzr, wzr, nv
+ 178: 1a9fe7e0 csinc w0, wzr, wzr, al
+ 17c: 5a81f020 csinv w0, w1, w1, nv
+ 180: 5a81e020 csinv w0, w1, w1, al
+ 184: 5a9ff3e0 csinv w0, wzr, wzr, nv
+ 188: 5a9fe3e0 csinv w0, wzr, wzr, al
+ 18c: 5a81f420 csneg w0, w1, w1, nv
+ 190: 5a81e420 csneg w0, w1, w1, al
diff --git a/gas/testsuite/gas/aarch64/alias.s b/gas/testsuite/gas/aarch64/alias.s
index 0db9aff..f86b2dc 100644
--- a/gas/testsuite/gas/aarch64/alias.s
+++ b/gas/testsuite/gas/aarch64/alias.s
@@ -117,3 +117,14 @@
asimdshll s
asimdshll u
+
+ csinc w0, w1, w1, nv
+ csinc w0, w1, w1, al
+ csinc w0, wzr, wzr, nv
+ csinc w0, wzr, wzr, al
+ csinv w0, w1, w1, nv
+ csinv w0, w1, w1, al
+ csinv w0, wzr, wzr, nv
+ csinv w0, wzr, wzr, al
+ csneg w0, w1, w1, nv
+ csneg w0, w1, w1, al
diff --git a/gas/testsuite/gas/aarch64/diagnostic.l b/gas/testsuite/gas/aarch64/diagnostic.l
index 015e16a..00a0d7a 100644
--- a/gas/testsuite/gas/aarch64/diagnostic.l
+++ b/gas/testsuite/gas/aarch64/diagnostic.l
@@ -93,3 +93,7 @@
[^:]*: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'
+[^:]*:98: Error: operand 3 should be one of the standard conditions, excluding AL and NV. -- `cinc w0,w1,al'
+[^:]*:99: Error: operand 3 should be one of the standard conditions, excluding AL and NV. -- `cinc w0,w1,nv'
+[^:]*:100: Error: operand 2 should be one of the standard conditions, excluding AL and NV. -- `cset w0,al'
+[^:]*:101: Error: operand 2 should be one of the standard conditions, excluding AL and NV. -- `cset w0,nv'
diff --git a/gas/testsuite/gas/aarch64/diagnostic.s b/gas/testsuite/gas/aarch64/diagnostic.s
index afa04b5..2bb16b0 100644
--- a/gas/testsuite/gas/aarch64/diagnostic.s
+++ b/gas/testsuite/gas/aarch64/diagnostic.s
@@ -95,3 +95,7 @@
stp w0, w1, [x2, #3]
stp w0, w1, [x2, #2]!
stp w0, w1, [x2], #1
+ cinc w0, w1, al
+ cinc w0, w1, nv
+ cset w0, al
+ cset w0, nv
diff --git a/gas/testsuite/gas/aarch64/illegal.l b/gas/testsuite/gas/aarch64/illegal.l
index e36b8fe..044b787 100644
--- a/gas/testsuite/gas/aarch64/illegal.l
+++ b/gas/testsuite/gas/aarch64/illegal.l
@@ -552,4 +552,14 @@
[^:]*:544: Error: .*`fmov s0,#0xC0280000C1400000'
[^:]*:545: Error: .*`fmov d0,#0xC02f800000000000'
[^:]*:550: Error: .*`ands w0,w24,#0xffeefffffffffffd'
-[^:]*:553: Error: .*
+[^:]*:554: Error: .*`cinc w0,w1,al'
+[^:]*:555: Error: .*`cinc w0,w1,nv'
+[^:]*:556: Error: .*`cset w0,al'
+[^:]*:557: Error: .*`cset w0,nv'
+[^:]*:558: Error: .*`cinv w0,w1,al'
+[^:]*:559: Error: .*`cinv w0,w1,nv'
+[^:]*:560: Error: .*`csetm w0,al'
+[^:]*:561: Error: .*`csetm w0,nv'
+[^:]*:562: Error: .*`cneg w0,w1,al'
+[^:]*:563: Error: .*`cneg w0,w1,nv'
+[^:]*:563: Error: .*
diff --git a/gas/testsuite/gas/aarch64/illegal.s b/gas/testsuite/gas/aarch64/illegal.s
index a46946e..4578d97 100644
--- a/gas/testsuite/gas/aarch64/illegal.s
+++ b/gas/testsuite/gas/aarch64/illegal.s
@@ -550,4 +550,14 @@
ands w0, w24, #0xffeefffffffffffd
one_label:
-
+
+ cinc w0, w1, al
+ cinc w0, w1, nv
+ cset w0, al
+ cset w0, nv
+ cinv w0, w1, al
+ cinv w0, w1, nv
+ csetm w0, al
+ csetm w0, nv
+ cneg w0, w1, al
+ cneg w0, w1, nv
diff --git a/gas/testsuite/gas/aarch64/no-aliases.d b/gas/testsuite/gas/aarch64/no-aliases.d
index 1065094..fd94064 100644
--- a/gas/testsuite/gas/aarch64/no-aliases.d
+++ b/gas/testsuite/gas/aarch64/no-aliases.d
@@ -97,3 +97,13 @@ Disassembly of section \.text:
160: 2f20a448 ushll v8.2d, v2.2s, #0
164: 6f20a448 ushll2 v8.2d, v2.4s, #0
168: 6f20a448 ushll2 v8.2d, v2.4s, #0
+ 16c: 1a81f420 csinc w0, w1, w1, nv
+ 170: 1a81e420 csinc w0, w1, w1, al
+ 174: 1a9ff7e0 csinc w0, wzr, wzr, nv
+ 178: 1a9fe7e0 csinc w0, wzr, wzr, al
+ 17c: 5a81f020 csinv w0, w1, w1, nv
+ 180: 5a81e020 csinv w0, w1, w1, al
+ 184: 5a9ff3e0 csinv w0, wzr, wzr, nv
+ 188: 5a9fe3e0 csinv w0, wzr, wzr, al
+ 18c: 5a81f420 csneg w0, w1, w1, nv
+ 190: 5a81e420 csneg w0, w1, w1, al