aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-s390.c
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel@linux.ibm.com>2018-10-23 18:02:37 +0200
committerAndreas Krebbel <krebbel@linux.ibm.com>2018-10-23 18:13:01 +0200
commitf47998d69f8d290564c022b010e63d5886a1fd7d (patch)
treeb626e20fa1cc3b8cd27137236e92803a87aa2d18 /gas/config/tc-s390.c
parent51d21d60b37f1e1a0aa6fd1f5439b22591fa6d5f (diff)
downloadgdb-f47998d69f8d290564c022b010e63d5886a1fd7d.zip
gdb-f47998d69f8d290564c022b010e63d5886a1fd7d.tar.gz
gdb-f47998d69f8d290564c022b010e63d5886a1fd7d.tar.bz2
S/390: Support vector alignment hints
This patch adds the vector alignment hints to the vector load and store instructions as documented in the IBM z14 Principles of Operations manual: http://publibfi.boulder.ibm.com/epubs/pdf/dz9zr011.pdf opcodes/ChangeLog: 2018-10-23 Andreas Krebbel <krebbel@linux.ibm.com> * s390-opc.txt: Add vector load/store instructions with additional alignment parameter. gas/ChangeLog: 2018-10-23 Andreas Krebbel <krebbel@linux.ibm.com> * config/tc-s390.c (md_gather_operands): Fix for optional operands following memory addresses. * testsuite/gas/s390/zarch-arch12.d: Add regexp checks for new instruction variants. * testsuite/gas/s390/zarch-arch12.s: Emit new instruction variants.
Diffstat (limited to 'gas/config/tc-s390.c')
-rw-r--r--gas/config/tc-s390.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gas/config/tc-s390.c b/gas/config/tc-s390.c
index b53e33a..5a485e0 100644
--- a/gas/config/tc-s390.c
+++ b/gas/config/tc-s390.c
@@ -1510,6 +1510,21 @@ md_gather_operands (char *str,
if (*str++ != ')')
as_bad (_("syntax error; missing ')' after base register"));
skip_optional = 0;
+
+ if ((opcode->flags & (S390_INSTR_FLAG_OPTPARM
+ | S390_INSTR_FLAG_OPTPARM2))
+ && opindex_ptr[1] != '\0'
+ && opindex_ptr[2] == '\0'
+ && *str == '\0')
+ continue;
+
+ if ((opcode->flags & S390_INSTR_FLAG_OPTPARM2)
+ && opindex_ptr[1] != '\0'
+ && opindex_ptr[2] != '\0'
+ && opindex_ptr[3] == '\0'
+ && *str == '\0')
+ continue;
+
/* If there is a next operand it must be separated by a comma. */
if (opindex_ptr[1] != '\0')
{