(len % 1) != 0

David Daney ddaney@avtrex.com
Tue Feb 19 18:47:00 GMT 2008


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



More information about the Gdb mailing list