Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1174780

Re: gcc feature request / RFC: extra clobbered regs

From "H. Peter Anvin" <hpa@zytor.com>
Newsgroups linux.kernel
Subject Re: gcc feature request / RFC: extra clobbered regs
Date 2015-06-30 23:40 +0200
Message-ID <pHbq3-5IH-27@gated-at.bofh.it> (permalink)
References <pHbgo-5xn-41@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On 06/30/2015 02:22 PM, Andy Lutomirski wrote:
> Hi all-
> 
> I'm working on a massive set of cleanups to Linux's syscall handling.
> We currently have a nasty optimization in which we don't save rbx,
> rbp, r12, r13, r14, and r15 on x86_64 before calling C functions.
> This works, but it makes the code a huge mess.  I'd rather save all
> regs in asm and then call C code.
> 
> Unfortunately, this will add five cycles (on SNB) to one of the
> hottest paths in the kernel.  To counteract it, I have a gcc feature
> request that might not be all that crazy.  When writing C functions
> intended to be called from asm, what if we could do:
> 
> __attribute__((extra_clobber("rbx", "rbp", "r12", "r13", "r14",
> "r15"))) void func(void);
> 
> This will save enough pushes and pops that it could easily give us our
> five cycles back and then some.  It's also easy to be compatible with
> old GCC versions -- we could just omit the attribute, since preserving
> a register is always safe.
> 
> Thoughts?  Is this totally crazy?  Is it easy to implement?
> 
> (I'm not necessarily suggesting that we do this for the syscall bodies
> themselves.  I want to do it for the entry and exit helpers, so we'd
> still lose the five cycles in the full fast-path case, but we'd do
> better in the slower paths, and the slower paths are becoming
> increasingly important in real workloads.)
> 

Some gcc targets have done this in the past.  There are command-line
options to do that, but using attributes you have to handle cross-ABI
compilation.

However, I don't see this being done in the upstream gcc.

Keep in mind the runway that we'll need, though.

	-hpa


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

gcc feature request / RFC: extra clobbered regs Andy Lutomirski <luto@kernel.org> - 2015-06-30 23:30 +0200
  Re: gcc feature request / RFC: extra clobbered regs Jakub Jelinek <jakub@redhat.com> - 2015-06-30 23:40 +0200
    Re: gcc feature request / RFC: extra clobbered regs "H. Peter Anvin" <hpa@zytor.com> - 2015-06-30 23:50 +0200
      Re: gcc feature request / RFC: extra clobbered regs Andy Lutomirski <luto@amacapital.net> - 2015-06-30 23:50 +0200
        Re: gcc feature request / RFC: extra clobbered regs "H. Peter Anvin" <hpa@zytor.com> - 2015-07-01 00:00 +0200
          Re: gcc feature request / RFC: extra clobbered regs Andy Lutomirski <luto@amacapital.net> - 2015-07-01 00:00 +0200
            Re: gcc feature request / RFC: extra clobbered regs "H. Peter Anvin" <hpa@zytor.com> - 2015-07-01 00:10 +0200
  Re: gcc feature request / RFC: extra clobbered regs "H. Peter Anvin" <hpa@zytor.com> - 2015-06-30 23:40 +0200

csiph-web