From: David Woodhouse <dwmw2@infradead.org>
To: Jens Axboe <jens.axboe@oracle.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Ric Wheeler <ricwheeler@gmail.com>,
linux-fsdevel@vger.kernel.org, gilad@codefidence.com,
matthew@wil.cx
Subject: Re: [PATCH 9/7] blktrace: simplify flags handling in __blk_add_trace
Date: Sun, 10 Aug 2008 12:50:15 +0100 [thread overview]
Message-ID: <1218369015.5063.50.camel@pmac.infradead.org> (raw)
In-Reply-To: <1218368902.5063.48.camel@pmac.infradead.org>
On Sun, 2008-08-10 at 12:48 +0100, David Woodhouse wrote:
> On PPC64 this reduces the size of the code calculating these bits by
> about 60%.
(gdb) disass make_what_old
Dump of assembler code for function make_what_old:
0x0000000000000000 <make_what_old+0>: std r30,-16(r1)
0x0000000000000004 <make_what_old+4>: ld r30,0(r2)
0x0000000000000008 <make_what_old+8>: rlwinm r9,r3,29,30,30
0x000000000000000c <make_what_old+12>: rlwinm r10,r3,1,29,29
0x0000000000000010 <make_what_old+16>: extsw r9,r9
0x0000000000000014 <make_what_old+20>: rlwinm r7,r3,0,29,29
0x0000000000000018 <make_what_old+24>: ld r8,-32768(r30)
0x000000000000001c <make_what_old+28>: rldicr r9,r9,2,61
0x0000000000000020 <make_what_old+32>: rlwinm r11,r3,30,28,28
0x0000000000000024 <make_what_old+36>: ld r30,-16(r1)
0x0000000000000028 <make_what_old+40>: extsw r10,r10
0x000000000000002c <make_what_old+44>: rlwinm r0,r3,30,27,27
0x0000000000000030 <make_what_old+48>: rldicr r10,r10,2,61
0x0000000000000034 <make_what_old+52>: extsw r11,r11
0x0000000000000038 <make_what_old+56>: lwzx r9,r8,r9
0x000000000000003c <make_what_old+60>: lwzx r3,r8,r7
0x0000000000000040 <make_what_old+64>: extsw r0,r0
0x0000000000000044 <make_what_old+68>: rldicr r11,r11,2,61
0x0000000000000048 <make_what_old+72>: or r3,r3,r9
0x000000000000004c <make_what_old+76>: rldicr r0,r0,2,61
0x0000000000000050 <make_what_old+80>: lwzx r9,r8,r10
0x0000000000000054 <make_what_old+84>: or r3,r3,r4
0x0000000000000058 <make_what_old+88>: lwzx r11,r8,r11
0x000000000000005c <make_what_old+92>: or r3,r3,r9
0x0000000000000060 <make_what_old+96>: lwzx r0,r8,r0
0x0000000000000064 <make_what_old+100>: or r3,r3,r11
0x0000000000000068 <make_what_old+104>: or r3,r3,r0
0x000000000000006c <make_what_old+108>: clrldi r3,r3,32
0x0000000000000070 <make_what_old+112>: blr
End of assembler dump.
(gdb) disass make_what_new
Dump of assembler code for function make_what_new:
0x0000000000000074 <make_what_new+0>: mr r0,r3
0x0000000000000078 <make_what_new+4>: rlwinm r3,r3,16,13,13
0x000000000000007c <make_what_new+8>: rlwinm r9,r0,15,12,12
0x0000000000000080 <make_what_new+12>: rlwinm r11,r0,26,4,4
0x0000000000000084 <make_what_new+16>: or r3,r3,r9
0x0000000000000088 <make_what_new+20>: rlwinm r9,r0,23,3,3
0x000000000000008c <make_what_new+24>: or r3,r3,r4
0x0000000000000090 <make_what_new+28>: rlwinm r0,r0,23,2,2
0x0000000000000094 <make_what_new+32>: or r3,r3,r11
0x0000000000000098 <make_what_new+36>: or r3,r3,r9
0x000000000000009c <make_what_new+40>: or r3,r3,r0
0x00000000000000a0 <make_what_new+44>: clrldi r3,r3,32
0x00000000000000a4 <make_what_new+48>: blr
End of assembler dump.
> On x86_64 it's less of a win -- only 40%.
(gdb) disass make_what_old
Dump of assembler code for function make_what_old:
0x0000000000000000 <make_what_old+0>: mov %edi,%edx
0x0000000000000002 <make_what_old+2>: mov %rdi,%rax
0x0000000000000005 <make_what_old+5>: push %rbp
0x0000000000000006 <make_what_old+6>: and $0x10,%edx
0x0000000000000009 <make_what_old+9>: and $0x4,%eax
0x000000000000000c <make_what_old+12>: sar $0x3,%edx
0x000000000000000f <make_what_old+15>: mov 0x0(%rax),%eax
0x0000000000000015 <make_what_old+21>: mov %rsp,%rbp
0x0000000000000018 <make_what_old+24>: movslq %edx,%rdx
0x000000000000001b <make_what_old+27>: or 0x0(,%rdx,4),%eax
0x0000000000000022 <make_what_old+34>: mov %edi,%edx
0x0000000000000024 <make_what_old+36>: and $0x2,%edx
0x0000000000000027 <make_what_old+39>: add %edx,%edx
0x0000000000000029 <make_what_old+41>: movslq %edx,%rdx
0x000000000000002c <make_what_old+44>: or %esi,%eax
0x000000000000002e <make_what_old+46>: or 0x0(,%rdx,4),%eax
0x0000000000000035 <make_what_old+53>: mov %edi,%edx
0x0000000000000037 <make_what_old+55>: and $0x20,%edx
0x000000000000003a <make_what_old+58>: and $0x40,%edi
0x000000000000003d <make_what_old+61>: sar $0x2,%edx
0x0000000000000040 <make_what_old+64>: sar $0x2,%edi
0x0000000000000043 <make_what_old+67>: movslq %edx,%rdx
0x0000000000000046 <make_what_old+70>: movslq %edi,%rdi
0x0000000000000049 <make_what_old+73>: or 0x0(,%rdx,4),%eax
0x0000000000000050 <make_what_old+80>: or 0x0(,%rdi,4),%eax
0x0000000000000057 <make_what_old+87>: leaveq
0x0000000000000058 <make_what_old+88>: retq
End of assembler dump.
(gdb) disass make_what_new
Dump of assembler code for function make_what_new:
0x0000000000000059 <make_what_new+0>: mov %edi,%eax
0x000000000000005b <make_what_new+2>: mov %edi,%edx
0x000000000000005d <make_what_new+4>: push %rbp
0x000000000000005e <make_what_new+5>: and $0x4,%eax
0x0000000000000061 <make_what_new+8>: and $0x10,%edx
0x0000000000000064 <make_what_new+11>: shl $0xf,%edx
0x0000000000000067 <make_what_new+14>: shl $0x10,%eax
0x000000000000006a <make_what_new+17>: mov %rsp,%rbp
0x000000000000006d <make_what_new+20>: or %edx,%eax
0x000000000000006f <make_what_new+22>: mov %edi,%edx
0x0000000000000071 <make_what_new+24>: and $0x2,%edx
0x0000000000000074 <make_what_new+27>: or %esi,%eax
0x0000000000000076 <make_what_new+29>: shl $0x1a,%edx
0x0000000000000079 <make_what_new+32>: leaveq
0x000000000000007a <make_what_new+33>: or %edx,%eax
0x000000000000007c <make_what_new+35>: mov %edi,%edx
0x000000000000007e <make_what_new+37>: and $0x40,%edi
0x0000000000000081 <make_what_new+40>: and $0x20,%edx
0x0000000000000084 <make_what_new+43>: shl $0x17,%edi
0x0000000000000087 <make_what_new+46>: shl $0x17,%edx
0x000000000000008a <make_what_new+49>: or %edx,%eax
0x000000000000008c <make_what_new+51>: or %edi,%eax
0x000000000000008e <make_what_new+53>: retq
End of assembler dump.
--
David Woodhouse Open Source Technology Centre
David.Woodhouse@intel.com Intel Corporation
next prev parent reply other threads:[~2008-08-10 11:50 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-09 16:26 [PATCH 0/7] Discard requests, v2 David Woodhouse
2008-08-09 16:29 ` [PATCH 1/7] [BLOCK] Fix typo causing compile error in blk_queue_bounce() David Woodhouse
2008-08-09 16:30 ` [PATCH 2/7] [BLOCK] Fix up comments about matching flags between bio and rq David Woodhouse
2008-08-09 16:30 ` [PATCH 3/7] [BLOCK] Add 'discard' request handling David Woodhouse
2008-08-09 20:39 ` OGAWA Hirofumi
2008-08-09 21:37 ` David Woodhouse
2008-08-10 6:32 ` David Woodhouse
2008-08-09 16:31 ` [PATCH 4/7] [FAT] Let the block device know when sectors can be discarded David Woodhouse
2008-08-09 16:32 ` [PATCH 5/7] [MTD] Support 'discard sectors' operation in translation layer support core David Woodhouse
2008-08-09 16:33 ` [PATCH 6/7] [MTD] [FTL] Support 'discard sectors' operation David Woodhouse
2008-08-09 16:33 ` [PATCH 7/7] [BLOCK] Allow elevators to sort/merge discard requests David Woodhouse
2008-10-03 20:29 ` Andrew Morton
2008-10-07 12:07 ` Jens Axboe
2008-08-09 22:48 ` [PATCH 0/7] Discard requests, v2 OGAWA Hirofumi
2008-08-10 10:25 ` David Woodhouse
2008-08-10 16:37 ` Jamie Lokier
2008-08-10 17:55 ` OGAWA Hirofumi
2008-08-10 20:07 ` David Woodhouse
2008-08-10 21:40 ` OGAWA Hirofumi
2008-08-11 9:40 ` David Woodhouse
2008-08-11 10:25 ` OGAWA Hirofumi
2008-08-11 13:17 ` David Woodhouse
2008-08-11 14:21 ` OGAWA Hirofumi
2008-08-10 10:29 ` [PATCH 8/7] blktrace: support discard requests David Woodhouse
2008-08-10 10:35 ` [USERSPACE PATCH] " David Woodhouse
2008-08-15 8:43 ` Jens Axboe
2008-08-15 9:01 ` David Woodhouse
2008-08-15 9:08 ` Jens Axboe
2008-08-10 10:41 ` [PATCH 8/7] " David Woodhouse
2008-08-13 11:17 ` Jens Axboe
2008-08-10 11:48 ` [PATCH 9/7] blktrace: simplify flags handling in __blk_add_trace David Woodhouse
2008-08-10 11:50 ` David Woodhouse [this message]
2008-08-11 15:11 ` [PATCH 10/7] [BLOCK] Add BLKDISCARD ioctl to allow userspace to discard sectors David Woodhouse
2008-08-11 18:27 ` Matthew Wilcox
2008-08-11 20:52 ` David Woodhouse
2008-08-12 9:14 ` [PATCH 0/7] Discard requests, v2 Jens Axboe
2008-08-12 10:00 ` David Woodhouse
2008-08-12 10:54 ` Jens Axboe
2008-08-12 11:16 ` David Woodhouse
2008-08-12 12:19 ` David Woodhouse
2008-08-12 12:53 ` Jens Axboe
2008-08-12 13:04 ` David Woodhouse
2008-08-12 15:47 ` David Woodhouse
2008-08-12 18:04 ` Jamie Lokier
2008-08-13 10:22 ` David Woodhouse
2008-08-13 12:19 ` Jamie Lokier
2008-08-13 12:26 ` David Woodhouse
2008-08-13 11:15 ` Jens Axboe
2008-08-13 11:23 ` David Woodhouse
2008-08-13 11:32 ` Jens Axboe
2008-08-13 11:34 ` David Woodhouse
2008-08-13 12:07 ` David Woodhouse
2008-08-14 7:49 ` Jens Axboe
2008-08-14 7:52 ` David Woodhouse
2008-08-14 7:25 ` David Woodhouse
2008-08-14 7:33 ` Stephen Rothwell
2008-08-14 7:37 ` David Woodhouse
2008-08-14 7:42 ` Jens Axboe
2008-08-14 7:46 ` Stephen Rothwell
2008-08-12 18:10 ` Jamie Lokier
2008-08-13 10:20 ` David Woodhouse
2008-08-12 11:42 ` Matthew Wilcox
2008-08-12 11:46 ` David Woodhouse
2008-08-12 19:53 ` OGAWA Hirofumi
2008-08-12 20:11 ` OGAWA Hirofumi
2008-08-13 11:39 ` [PATCH 11/7] Kill REQ_TYPE_FLUSH David Woodhouse
2008-08-13 11:58 ` Geert Uytterhoeven
2008-08-13 12:43 ` David Woodhouse
2008-08-13 15:40 ` Jens Axboe
2008-08-13 15:46 ` David Woodhouse
2008-08-16 17:08 ` [PATCH 0/2] MMC discard support (was [PATCH 0/7] Discard requests, v2) Pierre Ossman
2008-08-16 17:11 ` [PATCH 1/2] mmc_block: factor out the mmc request handling Pierre Ossman
2008-08-16 17:12 ` [PATCH 2/2] mmc_block: erase discarded blocks Pierre Ossman
2008-08-16 17:38 ` [PATCH 0/2] MMC discard support (was [PATCH 0/7] Discard requests, v2) David Woodhouse
2008-08-16 17:51 ` Pierre Ossman
2008-08-22 9:24 ` Jens Axboe
2008-08-22 9:45 ` David Woodhouse
2008-08-22 10:50 ` Jens Axboe
2008-08-22 10:58 ` David Woodhouse
2008-08-22 11:11 ` Pierre Ossman
2008-08-22 11:19 ` Jens Axboe
2008-08-22 11:13 ` Pierre Ossman
2008-08-22 11:20 ` Jens Axboe
2008-08-22 14:49 ` OGAWA Hirofumi
2008-08-22 23:02 ` Pierre Ossman
2008-08-22 23:59 ` OGAWA Hirofumi
2008-08-24 11:23 ` Pierre Ossman
2008-08-24 13:39 ` OGAWA Hirofumi
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=1218369015.5063.50.camel@pmac.infradead.org \
--to=dwmw2@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=gilad@codefidence.com \
--cc=jens.axboe@oracle.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=matthew@wil.cx \
--cc=ricwheeler@gmail.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).