
Hi Wolfgang,
On Tue, Aug 30, 2011 at 1:08 PM, Wolfgang Denk wd@denx.de wrote:
Dear Mike Frysinger,
In message 201108301558.08010.vapier@gentoo.org you wrote:
Please see my previous posting (http://article.gmane.org/gmane.comp.boot-loaders.u-boot/106810)
I don't think 3 additional addembler instructions really play a big role here.
i'm pretty sure if you define CONFIG_PRE_CON_BUF_SZ as a power of 2 value, you get nice & simple assembly code. so if the generated code is undesirable, pick a CONFIG value that is power-of-2 ?
This was the test code I compiled:
#define CONFIG_SYS_TMP_CON_BUF_SZ 1024
int foo(int i) { return i & (CONFIG_SYS_TMP_CON_BUF_SZ-1); }
int bar(int i) { return i % CONFIG_SYS_TMP_CON_BUF_SZ; }
So was actually checking for a power-of-2 value.
In case it is interesting (which may be unlikely) here is the code generated by my compiler (common code stripped) for your example, and one I added. It seems that % makes it worry about sign.
#define CONFIG_SYS_TMP_CON_BUF_SZ 1024
int foo(int i) { return i & (CONFIG_SYS_TMP_CON_BUF_SZ-1); 14: e1a03b03 lsl r3, r3, #22 18: e1a03b23 lsr r3, r3, #22 }
int bar(int i) { return i % CONFIG_SYS_TMP_CON_BUF_SZ; 40: e1a02fc3 asr r2, r3, #31 44: e1a02b22 lsr r2, r2, #22 48: e0833002 add r3, r3, r2 4c: e1a03b03 lsl r3, r3, #22 50: e1a03b23 lsr r3, r3, #22 54: e0623003 rsb r3, r2, r3 }
int lee(int i) { return i % (CONFIG_SYS_TMP_CON_BUF_SZ - 1); 7c: e3003803 movw r3, #2051 ; 0x803 80: e3483020 movt r3, #32800 ; 0x8020 84: e0c31293 smull r1, r3, r3, r2 88: e0833002 add r3, r3, r2 8c: e1a014c3 asr r1, r3, #9 90: e1a03fc2 asr r3, r2, #31 94: e0633001 rsb r3, r3, r1 98: e1a01003 mov r1, r3 9c: e1a01501 lsl r1, r1, #10 a0: e0631001 rsb r1, r3, r1 a4: e0613002 rsb r3, r1, r2 }
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@denx.de "Maintain an awareness for contribution -- to your schedule, your project, our company." - A Group of Employees