[PATCH 0/4] s390: Make vector index register operands mandatory

Andreas Krebbel krebbel@linux.ibm.com
Mon Jan 27 09:39:24 GMT 2025


Hi Jens,

the patches are ok. Thanks for taking care of this! Clearly an oversight 
in my initial implementation :(

Bye,

Andreas


On 1/24/25 12:52 PM, Jens Remus wrote:
> Index register operands in a conventional displacement D, index X, and
> base (B) triplet "D(X,B)" are treated as optional.  This is because
> register 0 contents are not used in conventional addressing
> computations.  Instead a value of zero is implied.
> The assembler therefore implies register 0, if an index/base register
> is omitted (e.g. when coding "D(,B)" or "D(B)").
> The disassembler disassembles index/base register 0 as "0" instead of
> "%r0", as this clarifies that a value of zero is implied instead of
> using the contents of register 0.
>
> Vector index register operands, so far only used in the VRV instruction
> format, are different though.  Vector index register 0 contents are used
> in the addressing computation:
>
> "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 make the following changes to the assembler and disassembler:
>
> Patch 2 changes the disassembler to no longer omit vector index
> register 0 operands in disassembly.  Furthermore it disassembles them
> as "%v0" instead of "0" to clarify, that the vector register 0 value is
> used in the addressing computation.
>
> Patch 3 changes the assembler not to warn about vector index register 0
> being used.
>
> Patch 4 changes the assembler to require the specification of vector
> index register operands.  That is they may no longer be omitted.  This
> is a non-backward compatible change.  The rationale is that any (very
> unlikely) existing assembler code that omits the specification of
> vector index register 0, may potentially be in error, as the programmer
> may likely have assumed a value of zero to be implied instead of vector
> register 0 contents to be used.
>
> Regards,
> Jens
>
> Jens Remus (4):
>    s390: Additional tests for omitted base register operands
>    s390: Do not omit vector index register 0 in disassembly
>    s390: Do not warn about vector index register 0 in assembly
>    s390: Error if vector index register omitted in assembly
>
>   gas/config/tc-s390.c                          | 13 ++++-
>   .../gas/s390/zarch-base-index-0-err.l         | 18 ++++--
>   .../gas/s390/zarch-base-index-0-err.s         | 10 +++-
>   gas/testsuite/gas/s390/zarch-base-index-0.d   | 26 +++------
>   gas/testsuite/gas/s390/zarch-base-index-0.s   | 18 +++---
>   .../gas/s390/zarch-omitted-base-index-err.l   | 37 ++++++------
>   .../gas/s390/zarch-omitted-base-index-err.s   |  3 +
>   .../gas/s390/zarch-omitted-base-index.d       |  5 +-
>   .../gas/s390/zarch-omitted-base-index.s       |  6 +-
>   gas/testsuite/gas/s390/zarch-warn-areg-zero.l | 16 +++---
>   gas/testsuite/gas/s390/zarch-warn-areg-zero.s | 56 +++++++++----------
>   opcodes/s390-dis.c                            | 13 ++---
>   12 files changed, 121 insertions(+), 100 deletions(-)
>


More information about the Binutils mailing list