All of lore.kernel.org
 help / color / mirror / Atom feed
From: "J.A. Magallon" <jamagallon@able.es>
To: Lista Linux-Kernel <linux-kernel@vger.kernel.org>
Subject: gcc -O3 and register usage
Date: Tue, 19 Aug 2003 02:15:07 +0200	[thread overview]
Message-ID: <20030819001507.GA2015@werewolf.able.es> (raw)

Hi all...

I was playing looking at the code gcc gives for some simple operations,
and got this...

Simple C program (do you recognise it ;) ?):

struct list_head
{
	struct list_head *next, *prev;
};

static inline int list_empty(struct list_head *head)
{
	return head->next == head;
}

int use(struct list_head *l)
{
	return list_empty(l);
}

I use gcc 3.3.1.
Compile at -O2:

use:
	pushl	%ebp
	movl	%esp, %ebp
	movl	8(%ebp), %eax
	popl	%ebp
	cmpl	%eax, (%eax)
	sete	%al
	movzbl	%al, %eax
	ret

Compile at -O3:

use:
	pushl	%ebp
	movl	%esp, %ebp
	movl	8(%ebp), %edx
	popl	%ebp
	cmpl	%edx, (%edx)
	sete	%al
	andl	$255, %eax
	ret

Compile at -O3 and (at least) -march=pentiumpro:

use:
	pushl	%ebp
	movl	%esp, %ebp
	movl	8(%ebp), %edx
	popl	%ebp
	cmpl	%edx, (%edx)
	sete	%dl
	movzbl	%dl, %eax
	ret

Go back to -O2, but keep -march=pentiumpro:

use:
	pushl	%ebp
	movl	%esp, %ebp
	movl	8(%ebp), %eax
	popl	%ebp
	cmpl	%eax, (%eax)
	sete	%al
	movzbl	%al, %eax
	ret

Does this mean that since PentiumPro gcc has one other register (%dl)
available, and it uses it only at -O3 ?
This can be a _big_ advantage to reduce register spilling (stack
traffic...)

The above effect is due to the -frename-registers activated in -O3.
This option is used in arch/ia64/Makefile, but it is supposed to
benefit more to arches with few registers (I suppose ia64 has a ton more
that ia32...)

Would if be useful ?

TIA

-- 
J.A. Magallon <jamagallon@able.es>      \                 Software is like sex:
werewolf.able.es                         \           It's better when it's free
Mandrake Linux release 9.2 (Cooker) for i586
Linux 2.4.22-rc2-jam1m (gcc 3.3.1 (Mandrake Linux 9.2 3.3.1-1mdk))

             reply	other threads:[~2003-08-19  0:15 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-08-19  0:15 J.A. Magallon [this message]
2003-08-19 10:17 ` gcc -O3 and register usage Felipe Alfaro Solana

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030819001507.GA2015@werewolf.able.es \
    --to=jamagallon@able.es \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.