This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
FW: PROPOSAL: Extend inline asm syntax with size spec
- From: David Laight <David dot Laight at ACULAB dot COM>
- To: "'gcc at gcc dot gnu dot org'" <gcc at gcc dot gnu dot org>
- Date: Tue, 9 Oct 2018 06:56:19 +0000
- Subject: FW: PROPOSAL: Extend inline asm syntax with size spec
Resend to gcc@gcc.gnu.org to avoid spam filter
> From: Michael Matz
> > Sent: 07 October 2018 16:53
> ...
> > I think the examples I saw from Boris were all indirect inlines:
> >
> > static inline void foo() { asm("large-looking-but-small-asm"); }
> > static void bar1() { ... foo() ... }
> > static void bar2() { ... foo() ... }
> > void goo (void) { bar1(); } // bar1 should have been inlined
> >
> > So, while the immediate asm user was marked as always inline that in turn
> > caused users of it to become non-inlined. I'm assuming the kernel guys
> > did proper measurements that they _really_ get some non-trivial speed
> > benefit by inlining bar1/bar2, but for some reasons (I didn't inquire)
> > didn't want to mark them all as inline as well.
>
> Could you add a 'size' attribute to the 'always inlined' foo() above
> rather than trying to add one to the asm() statement itself.
> Then add a warning in the documentation that small size attributes
> might make the assembly fail due to limited branch offsets (etc).
>
> Size '1' probably ought to be reserved for things that definitely
> fit in a delay slot.
>
> David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)