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 _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal