[U-Boot] [PATCH V2] console: Implement pre-console buffer
Simon Glass
sjg at chromium.org
Tue Aug 30 23:02:20 CEST 2011
Hi Wolfgang,
On Tue, Aug 30, 2011 at 1:57 PM, Wolfgang Denk <wd at denx.de> wrote:
> Dear Simon Glass,
>
> In message <CAPnjgZ1dQXMVeFk47=Gg5y+TCHG7WTdGk0b1WjSqOBhu2d0xnQ at mail.gmail.com> you wrote:
>>
>> In case it is interesting (which may be unlikely) here is the code
>> generated by my compiler (common code stripped) for your example, and
>
> Which architecture / which compiler is this?
It was ARM, gcc version 4.4.3.
>
>> one I added. It seems that % makes it worry about sign.
>
> Indeed! We should use unsigned numbers here. MUCH better now:
>
Yes it is much better. Perhaps an (unsigned) cast in the C code is
better than hoping that the board author uses 1024U or similar.
>
> unsigned int ufoo(unsigned int i)
> {
> return i & (CONFIG_SYS_TMP_CON_BUF_SZ-1);
> }
>
> For ARM, BUF_SZ = 1024
>
> mov r0, r0, asl #22
> mov r0, r0, lsr #22
>
> For PPC, BUF_SZ = 1024
>
> rlwinm 3,3,0,22,31
>
> The following two entries make no sense, just for completeness:
>
> For ARM, BUF_SZ = 1021 (Note: 1021 is a prime number)
>
> and r0, r0, #1020
>
> For PPC, BUF_SZ = 1021
>
> rlwinm 3,3,0,22,29
>
>
>
> unsigned int ubar(unsigned int i)
> {
> return i % CONFIG_SYS_TMP_CON_BUF_SZ;
> }
>
> For ARM, BUF_SZ = 1024
>
> mov r0, r0, asl #22
> mov r0, r0, lsr #22
>
> For PPC, BUF_SZ = 1024
>
> rlwinm 3,3,0,22,31
>
> For ARM, BUF_SZ = 1021
>
> ldr r2, .L11
> mov ip, r0
> umull r1, r3, r2, r0
> rsb r1, r3, r0
> add r3, r3, r1, lsr #1
> mov r3, r3, lsr #9
> mov r0, r3, asl #10
> sub r0, r0, r3, asl #2
> add r0, r0, r3
> rsb r0, r0, ip
>
> For PPC, BUF_SZ = 1021
>
> lis 0,0xc0
> ori 0,0,36973
> mulhwu 0,3,0
> subf 9,0,3
> srwi 9,9,1
> add 0,0,9
> srwi 0,0,9
> mulli 0,0,1021
> subf 3,0,3
>
>
> So indeed we should use unsigned arithmetics, and try to use
> power-of-two sizes where possible.
>
Yes indeed.
Regards,
Simon
> Best regards,
>
> Wolfgang Denk
>
> --
> DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
> You can't evaluate a man by logic alone.
> -- McCoy, "I, Mudd", stardate 4513.3
>
More information about the U-Boot
mailing list