[PATCH 0/4] s390: Make vector index register operands mandatory
Jens Remus
jremus@linux.ibm.com
Mon Jan 27 15:49:47 GMT 2025
Thanks! Committed to mainline.
Regards,
Jens
On 27.01.2025 10:39, Andreas Krebbel wrote:
> 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(-)
>>
--
Jens Remus
Linux on Z Development (D3303)
+49-7031-16-1128 Office
jremus@de.ibm.com
IBM
IBM Deutschland Research & Development GmbH; Vorsitzender des Aufsichtsrats: Wolfgang Wendt; Geschäftsführung: David Faller; Sitz der Gesellschaft: Böblingen; Registergericht: Amtsgericht Stuttgart, HRB 243294
IBM Data Privacy Statement: https://www.ibm.com/privacy/
More information about the Binutils
mailing list