[Dwarf-discuss] ISSUE: vector types. V2
Ben Woodard
woodard@redhat.com
Thu Apr 6 20:50:43 GMT 2023
I believe that all three points that you bring up here are correct and I
will fix them in V3 of my proposal.
On 4/6/23 03:44, Metzger, Markus T wrote:
> Hello Ben,
>
>
>> This is version 2 of my vector types submission.
>>
>> Differences from V1:
>> - Made the submission about vector types rather than vector registers.
>> - Substituted Pedro's much better introduction for my own with minor edits.
>> - Removed the modifications to the DWARF Stack. The AMD people like
>> Pedro and Tony have been working on vector registers and vector types
>> for a long time and they do not know of a good reason why we need the
>> capability to a vector register on the DWARF stack. So I'm dropping that
>> part. Furthermore, I could not find any evidence in code that uses the
>> vector types that they needed to put vector types on the DWARF stack for
>> locations.
>> - Removed the variable vector length attribute. This was not existing
>> behavior. I'm fairly certain something like that is going to be
>> necessary but it doesn't need to be in this submission.
>>
>> ----------------------------------------------------------------------------------------------------
>>
>> Vector types
>>
>>
>> Some languages support vector data types, which are not possible to
>> represent today in standard DWARF. A vector is an array of values.
>> These can be allocated to a SIMD vector register, if available, either
>> permanently or temporarily, and operations on vectors make use of SIMD
>> instructions, again if available.
>>
>> For example, as an extension to C and C++, GCC supports defining
>> vector data types as described here:
>>
>> https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html
>>
>> In this C/C++ extension, vector types are similar to arrays, and you
>> can index and initialize them similarly, but they have some important
>> differences. For example:
>>
>> - C arrays automatically decay to pointers. Vector types do not.
>>
>> - Vector types can be passed by value to functions, and likewise
>> functions can return vector types by value. Neither of which can be
>> done with C arrays.
>>
>> - Vector types can be used with a subset of normal C operations: +, -,
>> *, /, unary minus, ^, |, &, ~, %. For example, addition is defined as
>> the addition of the corresponding elements of the operands.
>>
>> A debugger that supports C/C++ expression evaluation will want to be
>> able to support these vector operations on vector objects too.
>>
>> Vector types appear on function prototypes, so they have their own
>> mangling scheme in the Itanium ABI.
>>
>> Other vendors have similar C/C++ extensions. For example, Motorola’s
>> Altivec C/C++ Language Extensions, which predates GCC's extensions.
>>
>> To distinguish these vector types from regular C arrays, GCC's DWARF
>> describes a vector type as an array with the DW_AT_GNU_vector
>> attribute. Clang also supports the GCC vector extensions, and
>> describes the vector types in DWARF using the same attribute as GCC.
>> Support for this DWARF extension has been implemented in GDB for well
>> over a decade.
>>
>> Other languages have support for vector types, with similar ABI and/or
>> API implications, and so DW_AT_GNU_vector is also used for languages
>> beyond C/C++ today.
>>
>> This proposal standardizes the existing behavior.
>>
>> -------------------------------------------------
>>
>> In Section 2.2 Attribute Types, DW_AT_vector and
>> DW_AT_variable_vector_width shall be added to Table 2.2
>>
>> --------------------------------------------------------------------
>> DW_AT_vector | A hardware vector type
>> --------------------------------------------------------------------
> Why hardware and not language? I thought the proposal was changed
> to model language vector types.
>
>> The hyperlink in the "Identifies or Specifies" column shall point to
>> the paragraph added to Section 5.5 below for DW_AT_vector.
>>
>> In Section 5.5 Array Type Entries, replace first paragraph of
>> non-normative text with:
>>
>> --------------------------------------------------------------------
>> [non-normative] Many languages share the concept of an “array,”
>> which is a table of components of identical type. Furthermore,
>> many architectures contain vector types which mirror the
>> language concept of an array.
>> --------------------------------------------------------------------
> This isn't clear to me, but this is probably a consequence of defining
> the attribute as hardware vector type.
>
>> Insert the following paragraph between the first paragraph of
>> normative text describing DW_TAG_array_type and the second paragraph
>> dealing with multidimensional ordering.
>>
>> --------------------------------------------------------------------
>> An array type that refers to a vector type, shall be denoted with
>> DW_AT_vector. The the width of the type shall be specified as an
>> array dimension and the type contained within the register must be
>> a DW_TAG_base_type entry.
>> --------------------------------------------------------------------
> This is still referring to a register.
>
> Regards,
> Markus.
>
> Intel Deutschland GmbH
> Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
> Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de>
> Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva
> Chairperson of the Supervisory Board: Nicole Lau
> Registered Office: Munich
> Commercial Register: Amtsgericht Muenchen HRB 186928
More information about the Dwarf-discuss
mailing list