[RFC,PATCH] Introduce -msdata=explicit for powerpc

Alexandre Oliva oliva@gnu.org
Wed Aug 8 03:39:00 GMT 2018


On Aug  7, 2018, Segher Boessenkool <segher@kernel.crashing.org> wrote:

> Hi!

Hi!

> On Tue, Aug 07, 2018 at 02:18:59AM -0300, Alexandre Oliva wrote:

>> I saw comments, docs and init code that suggested the possibility of
>> using r2/.sdata2 for small data, but I couldn't get code to be generated
>> for such access, even with very old toolchains.  I'm not sure I'm just
>> missing how this magic comes about, or whether it hasn't been available
>> for a very long time but nobody removed the comments/docs.  Assuming I'm
>> missing something, I put in the possibility of using r2 in the test in
>> the patch, but I'm sure I have not exercised it to make sure I got it
>> right.  Help?

> attribute(section("sdata2")))  works, perhaps.  Nothing is put there
> implicitly afais.

Yeah, that's the point.  Docs say:

@item -msdata=eabi
@opindex msdata=eabi
On System V.4 and embedded PowerPC systems, put small initialized
@code{const} global and static data in the @code{.sdata2} section, which
is pointed to by register @code{r2}.  Put small initialized
non-@code{const} global and static data in the @code{.sdata} section,
which is pointed to by register @code{r13}.  [...]

and rs6000.c contains:

rs6000_elf_asm_init_sections (void)
{
[...]
  sdata2_section
    = get_unnamed_section (SECTION_WRITE, output_section_asm_op,
			   SDATA2_SECTION_ASM_OP);

but sdata2_section seems to be unused, and I don't see anything that
selects r2 over SMALL_DATA_REG.


>> I have not YET given this much testing.  I'm posting it so as to give
>> ppc maintainers an opportunity to comment on the proposed approach, in
>> hopes of getting buy-in for the idea, if not necessarily for the patch,
>> but I welcome alternate suggestions to enable users to choose what goes
>> in faster sdata when there's too much data for size-based assignment to
>> place interesting variables in sdata without overflowing its range.

> There is 64kB of sdata, and the maximum size of an object to be put there
> is 8 bytes by default.  That will require an awful lot of manual markup.

In this case, it's machine-generated code we're talking about.  IIUC one
large-ish data set is performance critical, and another data set that
would take them both over the edge isn't, though they're both used
together in the same translation units.

I suppose defining a fastint C macro / Fast_Integer Ada subtype in some
C header file or Ada package could make it a lot more appealing and easy
to use ;-)

> Well I'm sure you try it out on a reasonably sized
> project, and you'll find out if it is handy or not :-)

I wanted to run this design through port maintainers to check for
objections before offering it to the interested customer.  If you tell
me there's no fundamental objection, I will have it run through the
customer to confirm it will indeed meet their needs.

Thanks,

-- 
Alexandre Oliva, freedom fighter   https://FSFLA.org/blogs/lxo
Be the change, be Free!         FSF Latin America board member
GNU Toolchain Engineer                Free Software Evangelist



More information about the Gcc-patches mailing list