This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch, AArch64] Restructure arm_neon.h vector types' implementation.


On Fri, 22 Aug 2014, Tejas Belagod wrote:

On 28/06/14 11:25, Marc Glisse wrote:
On Mon, 23 Jun 2014, Tejas Belagod wrote:

Here is a patch that restructures neon builtins to use vector types based on
standard base types. We previously defined arm_neon.h's neon vector
types(int8x8_t) using gcc's front-end vector extensions. We now move away
from that and use types built internally(e.g. __Int8x8_t). These internal
types names are defined by the AAPCS64 and we build arm_neon.h's public
vector types over these internal types. e.g.

  typedef __Int8x8_t int8x8_t;

as opposed to

  typedef __builtin_aarch64_simd_qi int8x8_t
    __attribute__ ((__vector_size__ (8)));

Impact on mangling:

This patch does away with these builtin scalar types that the vector types
were based on. These were previously used to look up mangling names. We now
use the internal vector type names(e.g. __Int8x8_t) to lookup mangling for
the arm_neon.h-exported vector types. There are a few internal scalar
types(__builtin_aarch64_simd_oi etc.) that is needed to efficiently implement some NEON Intrinsics. These will be declared in the back-end and registered
in the front-end and aarch64-specific builtin types, but are not
user-visible. These, along with a few scalar __builtin types that aren't
user-visible will have implementation-defined mangling. Because we don't have
strong-typing across all builtins yet, we still have to maintain the old
builtin scalar types - they will be removed once we move over to a
strongly-typed builtin system implemented by the qualifier infrastructure.

Marc Glisse's patch in this thread exposed this issue
https://gcc.gnu.org/ml/gcc-patches/2014-04/msg00618.html. I've tested my
patch with the change that his patch introduced, and it seems to work fine -
specifically these two lines:

+  for (tree t = registered_builtin_types; t; t = TREE_CHAIN (t))
+    emit_support_tinfo_1 (TREE_VALUE (t));

If you still have that build somewhere, could you try:
nm -C libsupc++.a | grep typeinfo
and check how much your builtins appear there? With my patch you may have
half-floats in addition to what you get without the patch (I think that's
a good thing), but I hope not too much more...

Thanks for working on this,


Marc,

Revisiting this old thread - sorry for the delay in getting back.

When I do this, I see no aarch64 builtin types listed with my patch and the above two lines from your patch. Is this expected?

I think it is good that they don't appear :-)

Thanks,

--
Marc Glisse


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]