From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Tue, 30 Aug 2011 13:18:35 -0700 Subject: [U-Boot] [PATCH V2] console: Implement pre-console buffer In-Reply-To: <20110830200817.059BE18C46FE@gemini.denx.de> References: <1314620046-26187-3-git-send-email-graeme.russ@gmail.com> <20110830195238.CC16118C46FE@gemini.denx.de> <201108301558.08010.vapier@gentoo.org> <20110830200817.059BE18C46FE@gemini.denx.de> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Wolfgang, On Tue, Aug 30, 2011 at 1:08 PM, Wolfgang Denk 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 at denx.de > "Maintain an awareness for contribution -- ?to ?your ?schedule, ?your > project, our company." ? ? ? ? ? ? ? ? ? ? ? ? - A Group of Employees >