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
next prev 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).