cluster-devel.redhat.com archive mirror
 help / color / mirror / Atom feed
From: H. Peter Anvin <hpa@zytor.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] Re: [PATCH] gfs2: better code for translating characters
Date: Sun, 12 Aug 2007 22:51:53 -0700	[thread overview]
Message-ID: <46BFF179.8060308@zytor.com> (raw)
In-Reply-To: <91b13c310708122206v5e4023f2w7464611a96ae67d9@mail.gmail.com>

rae l wrote:
>>>
>> Only if the compiler is stupid.
> What? Did you know I really say? Could you tell a little more clear?
> 
> if the string in sdp->sd_table_name has many '/' chars, the latter
> algorithm will be better.
> but if there's no '/' char, one assignment will be wasted.
> 

You seem to have confused modern compiled C with an old BASIC interpreter.

Consider the code in point:

-       while ((table = strchr(sdp->sd_table_name, '/')))
+       table = sdp->sd_table_name;
+       while ((table = strchr(table, '/')))
  		*table = '_';

sdp->sd_table_name refers to a memory location, and will have to be
loaded from memory into a register before it can be transmitted to the
strchr() function.  In the latter case, we call this register "table";
since the value is immediately killed after the function call, there is
no reason for the compiler to carry it across the function.

Consider x86-64 as an example:

	# Assume sdp is held in %r15 at this point, and assume
	# the offset of sd_table_name is 0x30.

	# First case
.L1:
	movq	30(%r15), %rdi	# First argument register
	movb	'/', %sil	# Second argument register
	call	strchr
	testq	%rax, %rax	# Result register
	jz	.L2
	movb	'_', (%rax)
	jmp	.L1
.L2:

	# Second case
	movq	30(%r15), %rdi
.L1:
	movb	'/', %sil
	call	strchr
	testq	%rax, %rax
	jz	.L2
	movq	%rax, %rdi
	movb	'_', (%rax)
	jmp	.L1


As you can see, in the zero case, the instruction sequence is exactly
the same, whereas in the nonzero case, we have replaced a memory load
with a register-register copy.  On most architectures (x86-64, Alpha and
MIPS are the oddballs here) we wouldn't even need the copy.

	-hpa



  parent reply	other threads:[~2007-08-13  5:51 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <11869741183677-git-send-email-crquan@gmail.com>
     [not found] ` <91b13c310708122008w27b86359n5b135df3e229e616@mail.gmail.com>
2007-08-13  4:27   ` [Cluster-devel] Re: [PATCH] gfs2: better code for translating characters H. Peter Anvin
     [not found]     ` <91b13c310708122206v5e4023f2w7464611a96ae67d9@mail.gmail.com>
2007-08-13  5:51       ` H. Peter Anvin [this message]
2007-08-13  9:19         ` rae l
2007-08-13 16:35           ` H. Peter Anvin
2007-08-14 10:31             ` Steven Whitehouse
2007-08-14 10:25           ` Steven Whitehouse

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=46BFF179.8060308@zytor.com \
    --to=hpa@zytor.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).