S/390: Support vector alignment hints
authorAndreas Krebbel <krebbel@linux.ibm.com>
Tue, 23 Oct 2018 16:02:37 +0000 (18:02 +0200)
committerAndreas Krebbel <krebbel@linux.ibm.com>
Tue, 23 Oct 2018 16:13:01 +0000 (18:13 +0200)
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.

gas/config/tc-s390.c
gas/testsuite/gas/s390/zarch-arch12.d
gas/testsuite/gas/s390/zarch-arch12.s
opcodes/s390-opc.txt

index b53e33a..5a485e0 100644 (file)
@@ -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')
            {
index 0a6796b..ac01648 100644 (file)
@@ -201,3 +201,11 @@ Disassembly of section .text:
 .*:    b9 3c 00 69 [    ]*prno %r6,%r9
 .*:    b9 a1 00 69 [    ]*tpei %r6,%r9
 .*:    b9 ac 00 69 [    ]*irbm %r6,%r9
+.*:    e7 f6 9f a0 00 06 [      ]*vl   %v15,4000\(%r6,%r9\)
+.*:    e7 f6 9f a0 d0 06 [      ]*vl   %v15,4000\(%r6,%r9\),13
+.*:    e7 f1 6f a0 04 36 [      ]*vlm  %v15,%v17,4000\(%r6\)
+.*:    e7 f1 6f a0 d4 36 [      ]*vlm  %v15,%v17,4000\(%r6\),13
+.*:    e7 f6 9f a0 00 0e [      ]*vst  %v15,4000\(%r6,%r9\)
+.*:    e7 f6 9f a0 d0 0e [      ]*vst  %v15,4000\(%r6,%r9\),13
+.*:    e7 f1 6f a0 04 3e [      ]*vstm %v15,%v17,4000\(%r6\)
+.*:    e7 f1 6f a0 d4 3e [      ]*vstm %v15,%v17,4000\(%r6\),13
index 1dd7434..51b1690 100644 (file)
@@ -195,3 +195,11 @@ foo:
        prno    %r6,%r9
        tpei    %r6,%r9
        irbm    %r6,%r9
+       vl      %v15,4000(%r6,%r9)
+       vl      %v15,4000(%r6,%r9),13
+       vlm     %v15,%v17,4000(%r6)
+       vlm     %v15,%v17,4000(%r6),13
+       vst     %v15,4000(%r6,%r9)
+       vst     %v15,4000(%r6,%r9),13
+       vstm    %v15,%v17,4000(%r6)
+       vstm    %v15,%v17,4000(%r6),13
index d8a9cce..c782aa9 100644 (file)
@@ -1880,3 +1880,10 @@ b929 kma RRF_R0RR "cipher message with galois counter mode" arch12 zarch
 b93c prno RRE_RR "perform pseudorandom number operation" arch12 zarch
 b9a1 tpei RRE_RR "test pending external interruption" arch12 zarch
 b9ac irbm RRE_RR "insert reference bits multiple" arch12 zarch
+
+# Aligned vector store hints
+
+e70000000006 vl VRX_VRRDU "vector memory load" arch12 zarch optparm
+e70000000036 vlm VRS_VVRDU "vector load multiple" arch12 zarch optparm
+e7000000000e vst VRX_VRRDU "vector store" arch12 zarch optparm
+e7000000003e vstm VRS_VVRDU "vector store multiple" arch12 zarch optparm