[fpc-pascal] Reversing bit-order of byte
Thomas Schatzl
tom_at_work at gmx.at
Fri May 4 14:31:23 CEST 2012
Hi,
On Fri, 2012-05-04 at 14:14 +0200, Koenraad Lelong wrote:
> On 03-05-12 13:27, Thomas Schatzl wrote:
> ...
> > function reverse(b : byte) : byte; assembler; nostackframe;
> > asm
> > .long 0xe6ff0f30 // rbit r0, r0
> > lsr r0, r0, #23
> > end;
> >
>
> Hi,
>
> I've been looking a bit further at this.
> I disassembled the code and this is the result :
>
> 8000150: e6ff0f30 rbit r0, r0
> 8000154: ea4f 50d0 mov.w r0, r0, lsr #23
The constant is wrong here, it should be #24, not #23 imo... typo.
> 8000158: 46f7 mov pc, lr
>
It might be good to compile with -Cparmv6 (or -Cparmv7, do not know what
type the processor you use is), this generates a "better" return
instruction ("bx lr") - and for the rbit instruction you need armv6
already.
> Wouldn't it be possible to do
> rbit r0, r0, lsr #23
> When reading the ARM programming manual I believe it should.
>
No, rbit does not allow the "flexible operand" encoding.
> But do I gain something ?
>
If it were possible, at most a few cpu cycles.
Compared to the other variants (e.g. with the multiplies, except for the
table lookup) you already save a lot of cycles - although I guess they
would be sufficiently fast anyway, considering the typical uart speeds.
Thomas
More information about the fpc-pascal
mailing list