On Fri, Feb 11, 2011 at 11:15 AM, kevin diggs <diggskevin38@xxxxxxxxx> wrote: > > In both the 4.2.4 and 4.3.5 compiled versions of mesh, the mesh_start() routine > has a lengthy list of register assignments near the start of the > routine: > > .L241: > lis 9,.LANCHOR0@ha # tmp459, > lis 11,.LC47@ha # tmp461, > la 23,.LANCHOR0@l(9) # tmp460,, tmp459 > lis 9,.LC48@ha # tmp463, > la 19,.LC47@l(11) # tmp462,, tmp461 > la 18,.LC48@l(9) # tmp464,, tmp463 > lis 11,.LC16@ha # tmp465, > lis 9,.LC50@ha # tmp467, > la 17,.LC16@l(11) # tmp466,, tmp465 > la 22,.LC50@l(9) # tmp468,, tmp467 > lis 11,.LC51@ha # tmp469, > lis 9,.LC57@ha # tmp471, > la 21,.LC51@l(11) # tmp470,, tmp469 > la 20,.LC57@l(9) # tmp472,, tmp471 > lis 11,.LC58@ha # tmp473, > lis 9,.LC59@ha # tmp475, > la 16,.LC58@l(11) # tmp474,, tmp473 > la 15,.LC59@l(9) # tmp476,, tmp475 > lis 11,.LC60@ha # tmp477, > lis 9,.LC53@ha # tmp480, > la 14,.LC60@l(11) # tmp478,, tmp477 > la 24,.LC53@l(9) # tmp482,, tmp480 > > Later, when one of these is used you'll see: > > mr 3,19 #, tmp462 > mr 4,31 #, cmd > mr 6,28 #, id > bl printk # > > for .LC47, which is "<4>mesh_start: %p ser=%lu tgt=%d cmd=" > > These all end up in: > > .section .rodata.str1.4,"aMS",@progbits,1 > > and will have addresses close to each other, right? I don't understand > why they can't do something like: > > lis 15,.LANCHOR0@ha > la 15,.LANCHOR0@l(15) > > and then do something like: > > la 3,<some offset>(15) > > when each string is used. What am I missing? > > The above register loads also result in: > > stmw 14,8(1) #, > and > lmw 14,8(1) #, > > for 4.3.5. A smaller set is saved in 4.1.2 > > stmw 25,20(1) #, > and > lmw 25,20(1) #, > > Won't this lead to unneeded memory traffic and/or cache churning? > > kevin > Hi, Before I work on this, has it already been fixed in a newer release? Thanks! kevin