[Bug target/40603] unnecessary conversion from unsigned byte load to signed byte load
carrot at google dot com
gcc-bugzilla@gcc.gnu.org
Wed Jul 1 10:25:00 GMT 2009
------- Comment #3 from carrot at google dot com 2009-07-01 10:24 -------
(In reply to comment #2)
> Subject: Re: New: unnecessary conversion from unsigned
> byte load to signed byte load
>
>
> > Unfortunately in thumb mode, loading a signed byte costs more than loading an
> > unsigned byte and comparing with 0 has same cost as comparing with 0x7F.
>
> I don't know of any core where loading a signed byte is more expensive
> than unsigned byte in thumb mode. What did you have in mind ?
>
> I suspect what you mean is that the sign extension here is not required
> and we could get away with ldrb.
>
In thumb1, instruction ldrb has an addressing mode of Rn + imm5, but ldrsb has
only addressing mode of Rn + Rm. So loading unsigned byte from p[8] needs only
one instruction
ldrb r3, [r0, 8]
But loading singed byte from p[8] needs two instructions:
mov r3, 8
ldrsb r3, [r0, r3]
So in this case (base + constant offset), loading a signed byte is more
expensive than unsigned byte in thumb mode.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40603
More information about the Gcc-bugs
mailing list