All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Ball <cjb@laptop.org>
To: Nicolas Pitre <nico@fluxnic.net>
Cc: linux-mmc@vger.kernel.org
Subject: Re: [PATCH 1/3] mmc: initialize struct mmc_command at declaration time
Date: Thu, 14 Apr 2011 23:11:46 -0400	[thread overview]
Message-ID: <m3fwpktdhp.fsf@pullcord.laptop.org> (raw)
In-Reply-To: <alpine.LFD.2.00.1104141931100.24613@xanadu.home> (Nicolas Pitre's message of "Thu, 14 Apr 2011 19:37:20 -0400 (EDT)")

Hi,

On Thu, Apr 14 2011, Nicolas Pitre wrote:
> Did you disassemble the resulting binary to make sure this is actually 
> as performant?
>
> I'm asking because gcc used to do a horrible dumb job with such patterns 
> where it would allocate two instances of the structure on the stack i.e. 
> one for the named variable and one for the initializer, then fill the 
> later with zeroes, and then call memcpy() to copy the initializer over 
> to the named instance.

Nothing horrible as far as I can tell; in fact, the code size on ARM
(stripped mmc_core.ko) decreases by 216 bytes after the patchset here.

Here's a sample disassembly of one function on ARM with gcc-4.6.0, and
diff -y.  Explicit memset (which calls __memzero) on the left, and {0}
initializer (which calls memset) on the right:

00000698 <mmc_set_relative_addr>:			      |	000006c8 <mmc_set_relative_addr>:
 698:	e92d4010 	push	{r4, lr}		      |	 6c8:	e92d4010 	push	{r4, lr}
 69c:	e2504000 	subs	r4, r0, #0		      |	 6cc:	e24dd030 	sub	sp, sp, #48	; 0x30
 6a0:	e24dd030 	sub	sp, sp, #48	; 0x30	      |	 6d0:	e1a04000 	mov	r4, r0
 6a4:	059f0058 	ldreq	r0, [pc, #88]	; 704 <mmc_se |	 6d4:	e3a01000 	mov	r1, #0
 6a8:	03a010ce 	moveq	r1, #206	; 0xce	      |	 6d8:	e1a0000d 	mov	r0, sp
 6ac:	0a000004 	beq	6c4 <mmc_set_relative_addr+0x |	 6dc:	e3a02030 	mov	r2, #48	; 0x30
 6b0:	e5943000 	ldr	r3, [r4]		      |	 6e0:	ebfffffe 	bl	0 <memset>
 6b4:	e3530000 	cmp	r3, #0			      |	 6e4:	e3540000 	cmp	r4, #0
 6b8:	1a000002 	bne	6c8 <mmc_set_relative_addr+0x |	 6e8:	059f0048 	ldreq	r0, [pc, #72]	; 738 <mmc_se
 6bc:	e59f0040 	ldr	r0, [pc, #64]	; 704 <mmc_se |	 6ec:	03a010c4 	moveq	r1, #196	; 0xc4
 6c0:	e3a010cf 	mov	r1, #207	; 0xcf	      |	 6f0:	0a000004 	beq	708 <mmc_set_relative_addr+0x
 6c4:	ebfffffe 	bl	0 <__bug>		      |	 6f4:	e5940000 	ldr	r0, [r4]
 6c8:	e1a0000d 	mov	r0, sp			      |	 6f8:	e3500000 	cmp	r0, #0
 6cc:	e3a01030 	mov	r1, #48	; 0x30		      |	 6fc:	1a000002 	bne	70c <mmc_set_relative_addr+0x
 6d0:	ebfffffe 	bl	0 <__memzero>		      |	 700:	e59f0030 	ldr	r0, [pc, #48]	; 738 <mmc_se
 6d4:	e59430c8 	ldr	r3, [r4, #200]	; 0xc8	      |	 704:	e3a010c5 	mov	r1, #197	; 0xc5
 6d8:	e3a02003 	mov	r2, #3			      |	 708:	ebfffffe 	bl	0 <__bug>
 6dc:	e1a03803 	lsl	r3, r3, #16		      |	 70c:	e59430c8 	ldr	r3, [r4, #200]	; 0xc8
 6e0:	e58d3004 	str	r3, [sp, #4]		      |	 710:	e3a02003 	mov	r2, #3
 6e4:	e5940000 	ldr	r0, [r4]		      |	 714:	e1a03803 	lsl	r3, r3, #16
 6e8:	e3a03015 	mov	r3, #21			      |	 718:	e58d3004 	str	r3, [sp, #4]
 6ec:	e1a0100d 	mov	r1, sp			      |	 71c:	e1a0100d 	mov	r1, sp
 6f0:	e58d2000 	str	r2, [sp]		      |	 720:	e3a03015 	mov	r3, #21
 6f4:	e58d3018 	str	r3, [sp, #24]		      |	 724:	e58d2000 	str	r2, [sp]
 6f8:	ebfffffe 	bl	0 <mmc_wait_for_cmd>	      |	 728:	e58d3018 	str	r3, [sp, #24]
 6fc:	e28dd030 	add	sp, sp, #48	; 0x30	      |	 72c:	ebfffffe 	bl	0 <mmc_wait_for_cmd>
 700:	e8bd8010 	pop	{r4, pc}		      |	 730:	e28dd030 	add	sp, sp, #48	; 0x30
 704:	0000001d 	.word	0x0000001d		      |	 734:	e8bd8010 	pop	{r4, pc}
							      >	 738:	0000001d 	.word	0x0000001d

Thanks,

- Chris.
-- 
Chris Ball   <cjb@laptop.org>   <http://printf.net/>
One Laptop Per Child

  reply	other threads:[~2011-04-15  3:07 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-14  3:57 [PATCH 1/3] mmc: initialize struct mmc_command at declaration time Chris Ball
2011-04-14  4:07 ` [PATCHv2 " Chris Ball
2011-04-14 23:37 ` [PATCH " Nicolas Pitre
2011-04-15  3:11   ` Chris Ball [this message]
2011-04-15 18:06     ` Chris Ball
2011-04-15 22:37       ` Nicolas Pitre

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=m3fwpktdhp.fsf@pullcord.laptop.org \
    --to=cjb@laptop.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=nico@fluxnic.net \
    /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.