From mboxrd@z Thu Jan 1 00:00:00 1970 From: YanMin Qiao Date: Sat, 04 Jan 2003 10:45:27 +0800 Subject: [U-Boot-Users] relocate_code References: <15932.1041646938@msa.cmst.csiro.au> Message-ID: <3E164AC7.1050505@sohu.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Murray Jensen wrote: >On Sat, 04 Jan 2003 00:22:21 +0800, YanMin Qiao writes: >... > > >> cmplw cr1,r3,r4 >> >> >... > > >> bge cr1,2f >> >> >... > > >>1: lwzu r0,4(r8) >> stwu r0,4(r7) >> bdnz 1b >> b 4f >> >>2: slwi r0,r0,2 <<----------------- i think above code will >>be enough for the two >> add r8,r4,r0 situation >> add r7,r3,r0 >>3: lwzu r0,-4(r8) >> stwu r0,-4(r7) >> bdnz 3b >> >> > >One is copying forwards, the other is copying backwards - you can see the >lwzu/stwu pair of instructions either add +4 or -4 to the registers >containing the source and destination addresses (the "u" means to update the >index register with the resulting memory address). > First thanks for your answer, howerever, my question is Why we copy _forward_ when _memory address_ =CFG_MONITOR_BASE we will have to _copy backword_? Is it because some overlapping problem when copy? > >Be careful with the first "bge" above - it isn't testing the result of the >previous instruction, it is testing the result of the "cmplw" done quite a >few instructions beforehand and stored in "cr1" i.e. it will branch if "r3" >(the destination address) is >= "r4" (the source address) i.e. if it is >possible that the copy will overwrite the source. > thanks, I know > >The Powerpc CPU has four(?) condition code sets where results of operations >can be stored. While I don't understand the details, I presume it has >something to do with the instruction pipeline and avoiding unnecessary >flushes - esp. when you consider that the programmer can indicate whether a >branch is likely or not with a bit in the instruction - I presume (again) >that this determines whether the processor does pre-fetching or something >like that. Details of all this stuff is in the Powerpc Programmer's >Environment Manual (I think). > >If you look through the latest linux kernel source you often see things like > > if (unlikely()) { > >or > > if (likely()) { > >On powerpc (I'm guessing) these macros will set an attribute for the compiler >which will result in this bit being set or cleared in the branch instruction >of the resulting assembly code - I guess it does something similar for later >Pentium processors (and nothing at all if the processor doesn't have these >sort of features). Cheers! > Murray... >-- >Murray Jensen, CSIRO Manufacturing & Infra. Tech. Phone: +61 3 9662 7763 >Locked Bag No. 9, Preston, Vic, 3072, Australia. Fax: +61 3 9662 7853 >Internet: Murray.Jensen at csiro.au > >Hymod project: http://www.msa.cmst.csiro.au/projects/Hymod/ > >To the extent permitted by law, CSIRO does not represent, warrant and/or >guarantee that the integrity of this communication has been maintained or >that the communication is free of errors, virus, interception or interference. > >The information contained in this e-mail may be confidential or privileged. >Any unauthorised use or disclosure is prohibited. If you have received this >e-mail in error, please delete it immediately and notify Murray Jensen on >+61 3 9662 7763. Thank you. > > > >