]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
s390: Do not warn about vector index register 0 in assembly
authorJens Remus <jremus@linux.ibm.com>
Mon, 27 Jan 2025 15:48:58 +0000 (16:48 +0100)
committerJens Remus <jremus@linux.ibm.com>
Mon, 27 Jan 2025 15:48:58 +0000 (16:48 +0100)
Vector index registers are currently only used in the VRV instruction
format.  Unlike general purpose index registers an operand value of
zero (e.g. %v0, 0, or omitted) does not imply a zero value:

"For VRV format instructions, a vector element is used in the formation
of the intermediate value.  This vector element is an unsigned binary
integer value that is added to the base address and 12-bit displacement
to form a 64-bit intermediate sum.  The vector element is designated by
a vector register and an element index.  A zero V field accesses the
element in vector register zero and does not imply a zero value." [1]

Therefore when using s390-specific assembler option "-mwarn-areg-zero"
do not warn if vector index register 0 is specified.

[1]: IBM z/Architecture Principles of Operation, SA22-7832-13, IBM z16,
     https://publibfp.dhe.ibm.com/epubs/pdf/a227832d.pdf

gas/
* config/tc-s390.c (md_gather_operands): Do not warn about
vector index register 0.

gas/testsuite/
* gas/s390/zarch-warn-areg-zero.l (vgef): Do not expect warning
about vector index register 0.

Signed-off-by: Jens Remus <jremus@linux.ibm.com>
gas/config/tc-s390.c
gas/testsuite/gas/s390/zarch-warn-areg-zero.l

index b651acc3cf90bec4d9e267dba82e7dd7c3ac2111..274bd944bab7d0fe010ed7b305ffded1d4b55234 100644 (file)
@@ -1506,6 +1506,7 @@ md_gather_operands (char *str,
                as_bad (_("operand %d: invalid length field specified"),
                        operand_number);
              if ((operand->flags & S390_OPERAND_INDEX)
+                 && !(operand->flags & S390_OPERAND_VR)
                  && ex.X_add_number == 0
                  && warn_areg_zero)
                as_warn (_("operand %d: index register specified but zero"),
index daa23b002bdb528102a2473146d8fce03d8340cb..eed8cc6011163f6cbce1b9b94be424417b2d86b5 100644 (file)
 .*:85: Warning: operand 2: base register specified but zero
 .*:88: Warning: operand 2: base register specified but zero
 .*:89: Warning: operand 2: base register specified but zero
-.*:96: Warning: operand 2: index register specified but zero
-.*:97: Warning: operand 2: index register specified but zero
 .*:100: Warning: operand 2: base register specified but zero
 .*:101: Warning: operand 2: base register specified but zero
-.*:103: Warning: operand 2: index register specified but zero
 .*:103: Warning: operand 2: base register specified but zero
-.*:104: Warning: operand 2: index register specified but zero
 .*:104: Warning: operand 2: base register specified but zero
-.*:105: Warning: operand 2: index register specified but zero
-.*:106: Warning: operand 2: index register specified but zero
 .*:106: Warning: operand 2: base register specified but zero
-.*:107: Warning: operand 2: index register specified but zero
 .*:107: Warning: operand 2: base register specified but zero
-.*:108: Warning: operand 2: index register specified but zero
 .*:109: Warning: operand 2: base register specified but zero
 .*:110: Warning: operand 2: base register specified but zero