Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1441123

Re: [PATCH] mm: migrate: Use bool instead of int for the return value of PageMovable

From Michal Hocko <mhocko@kernel.org>
Newsgroups linux.kernel
Subject Re: [PATCH] mm: migrate: Use bool instead of int for the return value of PageMovable
Date 2016-07-12 09:50 +0200
Message-ID <rU0C6-1W7-3@gated-at.bofh.it> (permalink)
References <rT2Zj-5gh-3@gated-at.bofh.it> <rTxgJ-84p-5@gated-at.bofh.it> <rTPnj-30E-1@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Tue 12-07-16 03:47:42, Chen Gang wrote:
[...]
> In our case, the 2 output size are same, but under x86_64, the insns are
> different. After uses bool, it uses push/pop instead of branch, for me,
> it should be a little better for catching.

The code generated for bool version looks much worse. Look at the fast
path. Gcc tries to reuse the retq from the fast path in the bool case
and so it has to push rbp and rbx on the stack.

That being said, gcc doesn't seem to generate a better code for bool so
I do not think this is really worth it.

> The orig:
> 
>   0000000000001290 <PageMovable>:
>       1290:       48 8b 47 08             mov    0x8(%rdi),%rax
>       1294:       83 e0 03                and    $0x3,%eax
>       1297:       48 83 f8 02             cmp    $0x2,%rax
>       129b:       74 03                   je     12a0 <__SetPageMovable+0x12a0>
>       129d:       31 c0                   xor    %eax,%eax
>       129f:       c3                      retq
>       12a0:       55                      push   %rbp
>       12a1:       48 89 e5                mov    %rsp,%rbp
>       12a4:       e8 00 00 00 00          callq  12a9 <__SetPageMovable+0x12a9>
>       12a9:       48 85 c0                test   %rax,%rax
>       12ac:       74 17                   je     12c5 <__SetPageMovable+0x12c5>
>       12ae:       48 8b 50 68             mov    0x68(%rax),%rdx
>       12b2:       48 85 d2                test   %rdx,%rdx
>       12b5:       74 0e                   je     12c5 <__SetPageMovable+0x12c5>
>       12b7:       48 83 7a 68 00          cmpq   $0x0,0x68(%rdx)
>       12bc:       b8 01 00 00 00          mov    $0x1,%eax
>       12c1:       74 02                   je     12c5 <__SetPageMovable+0x12c5>
>       12c3:       5d                      pop    %rbp
>       12c4:       c3                      retq
>       12c5:       31 c0                   xor    %eax,%eax
>       12c7:       5d                      pop    %rbp
>       12c8:       c3                      retq
>       12c9:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)
> 
> The new:
> 
>   0000000000001290 <PageMovable>:
>       1290:       48 8b 47 08             mov    0x8(%rdi),%rax
>       1294:       55                      push   %rbp
>       1295:       48 89 e5                mov    %rsp,%rbp
>       1298:       53                      push   %rbx
>       1299:       31 db                   xor    %ebx,%ebx
>       129b:       83 e0 03                and    $0x3,%eax
>       129e:       48 83 f8 02             cmp    $0x2,%rax
>       12a2:       74 05                   je     12a9 <__SetPageMovable+0x12a9>
>       12a4:       89 d8                   mov    %ebx,%eax
>       12a6:       5b                      pop    %rbx
>       12a7:       5d                      pop    %rbp
>       12a8:       c3                      retq
>       12a9:       e8 00 00 00 00          callq  12ae <__SetPageMovable+0x12ae>
>       12ae:       48 85 c0                test   %rax,%rax
>       12b1:       74 f1                   je     12a4 <__SetPageMovable+0x12a4>
>       12b3:       48 8b 40 68             mov    0x68(%rax),%rax
>       12b7:       48 85 c0                test   %rax,%rax
>       12ba:       74 e8                   je     12a4 <__SetPageMovable+0x12a4>
>       12bc:       48 83 78 68 00          cmpq   $0x0,0x68(%rax)
>       12c1:       0f 95 c3                setne  %bl
>       12c4:       89 d8                   mov    %ebx,%eax
>       12c6:       5b                      pop    %rbx
>       12c7:       5d                      pop    %rbp
>       12c8:       c3                      retq
>       12c9:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)
> 
> Thanks.
> -- 
> Chen Gang (陈刚)
> 
> Managing Natural Environments is the Duty of Human Beings.

-- 
Michal Hocko
SUSE Labs

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: [PATCH] mm: migrate: Use bool instead of int for the return  value of PageMovable Minchan Kim <minchan@kernel.org> - 2016-07-11 02:30 +0200
  Re: [PATCH] mm: migrate: Use bool instead of int for the return value  of PageMovable Chen Gang <chengang@emindsoft.com.cn> - 2016-07-11 21:50 +0200
    Re: [PATCH] mm: migrate: Use bool instead of int for the return value  of PageMovable Vlastimil Babka <vbabka@suse.cz> - 2016-07-12 09:20 +0200
      Re: [PATCH] mm: migrate: Use bool instead of int for the return value  of PageMovable Chen Gang <chengang@emindsoft.com.cn> - 2016-07-12 18:40 +0200
    Re: [PATCH] mm: migrate: Use bool instead of int for the return  value of PageMovable Michal Hocko <mhocko@kernel.org> - 2016-07-12 09:50 +0200
      Re: [PATCH] mm: migrate: Use bool instead of int for the return value  of PageMovable Chen Gang <chengang@emindsoft.com.cn> - 2016-07-12 18:50 +0200
        Re: [PATCH] mm: migrate: Use bool instead of int for the return  value of PageMovable Michal Hocko <mhocko@kernel.org> - 2016-07-13 10:00 +0200
          Re: [PATCH] mm: migrate: Use bool instead of int for the return value  of PageMovable Chen Gang <chengang@emindsoft.com.cn> - 2016-07-17 03:00 +0200

csiph-web