Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: "Dave Korn" <dave.korn@artimi.com>
To: "'David Daney'" <ddaney@avtrex.com>
Cc: <gdb@sourceware.org>
Subject: RE: (len % 1) != 0
Date: Tue, 19 Feb 2008 19:08:00 -0000	[thread overview]
Message-ID: <008101c87328$19bde2e0$2e08a8c0@CAM.ARTIMI.COM> (raw)
In-Reply-To: <47BB2168.7090600@avtrex.com>

On 19 February 2008 18:35, David Daney wrote:

> Dave Korn wrote:
>> On 19 February 2008 18:23, Paul Koning wrote:
>> 
>>>>>>>> "Dave" == Dave Korn <dave.korn@artimi.com> writes:
>>>  Dave> On 19 February 2008 16:30, Sheng-Liang Song wrote:  >> or
>>>  >>
>>>  >> (len & 1) != 0 <=> (len % 2) != 0
>>>  >>
>>> 
>>>  Dave> That would have the advantage of not requiring a divide  Dave>
>>> operation :) 
>>> 
>>> It shouldn't matter -- the optimizer will do the right thing, as I
>>> recall.
>> 
>>   NB len == signed int.
>> 
>>   Yes, it can simplify it to a bunch of shifts and sign extends and masks
>> without using an explicit divide, but it's not as good as a simple AND
>> operation.  (Maybe VRP in 4.x could handle that by knowing that the result
>> of strlen has to be >= 0, but 3.x series won't do it).
>> 
> 
> ??  Not to be pedantic, but on 3.4.3 for mipsel-linux I get:
> 
> $ cat j.c
> int f1 (int a)
> {
>      return (a % 2) != 0;
> }
> $ mipsel-linux-gcc -c -O3 j.c
> $ mipsel-linux-objdump -d j.o
> 
> j.o:     file format elf32-tradlittlemips
> 
> Disassembly of section .text:
> 
> 00000000 <f1>:
>     0:   03e00008        jr      ra
>     4:   30820001        andi    v0,a0,0x1

   <lightbulb>   Ah, it's the !=0 that allows the compiler to go that last
step of the way, I was just testing 


int bar (int len)
{
  return len % 2;
}

int baz (int len)
{
  return len & 1;
}


  Hmm, 3.4.4 on x86 still doesn't optimise it quite as well:

/artimi/boards $ gcc -xc -S -oo.s -O2 -


int bar (int len)
{
  return len % 2;
}

int baz (int len)
{
  return len & 1;
}

int bat (int len)
{
  return (len % 2) != 0;
}

int quux (int len)
{
  return (len & 1) != 0;
}

/artimi/boards $ cat o.s
        .file   ""
        .text
.globl _bar
        .def    _bar;   .scl    2;      .type   32;     .endef
_bar:
        pushl   %ebp
        movl    %esp, %ebp
        movl    8(%ebp), %eax
        popl    %ebp
        movl    %eax, %edx
        shrl    $31, %edx
        leal    (%eax,%edx), %edx
        andl    $-2, %edx
        subl    %edx, %eax
        ret
        .p2align 4,,15
.globl _baz
        .def    _baz;   .scl    2;      .type   32;     .endef
_baz:
        pushl   %ebp
        movl    %esp, %ebp
        movl    8(%ebp), %eax
        popl    %ebp
        andl    $1, %eax
        ret
        .p2align 4,,15
.globl _bat
        .def    _bat;   .scl    2;      .type   32;     .endef
_bat:
        pushl   %ebp
        xorl    %eax, %eax
        movl    %esp, %ebp
        testb   $1, 8(%ebp)
        popl    %ebp
        setne   %al
        ret
        .p2align 4,,15
.globl _quux
        .def    _quux;  .scl    2;      .type   32;     .endef
_quux:
        pushl   %ebp
        movl    %esp, %ebp
        movl    8(%ebp), %eax
        popl    %ebp
        andl    $1, %eax
        ret

/artimi/boards/Kitsman/Test Boards/A200_TPCB002 $

    cheers,
      DaveK
-- 
Can't think of a witty .sigline today....


  parent reply	other threads:[~2008-02-19 18:49 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-17  5:57 Bin Chen
2008-02-17 14:13 ` Eli Zaretskii
2008-02-17 14:41   ` Bin Chen
2008-02-17 15:26     ` Daniel Jacobowitz
2008-02-19 16:32       ` Sheng-Liang Song
2008-02-19 18:25         ` Dave Korn
2008-02-19 18:30           ` David Daney
     [not found]           ` <18363.7810.91075.314867@gargle.gargle.HOWL>
2008-02-19 18:35             ` Dave Korn
2008-02-19 18:47               ` David Daney
2008-02-19 18:49                 ` Daniel Jacobowitz
2008-02-19 19:08                 ` Dave Korn [this message]
2008-02-19 21:41           ` Andreas Schwab

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='008101c87328$19bde2e0$2e08a8c0@CAM.ARTIMI.COM' \
    --to=dave.korn@artimi.com \
    --cc=ddaney@avtrex.com \
    --cc=gdb@sourceware.org \
    /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