Keith Owens schrieb:

On Mon, 24 Jan 2005 08:51:17 +0100, Christian Hildner <[EMAIL PROTECTED]> wrote:


Chen, Kenneth W schrieb:


Can we position the __gp somewhat more optimally, to cover more of these
symbols? Something like the following patch would make all of them fall
into the 22-bit immediate offset relative to gp.



Did you have benchmarks? Or at least a comparison of the resulting code size. The code size should shrink when more items can be addressed directly. Furthermore the code size should be a good indicator for the performance gain you could achive.



The IA64 ABI supports link time rewriting of instructions if the linker can determine that the field being loaded can be access via __gp instead of via the linkage offset table. One of the restrictions of link time rewriting is that the code offsets cannot change, which means that the code size cannot change either. This code snippet will result in two different run time sequences, depending on whether jiffies can be referenced via __gp or not.

   addl r20=0,r1;;      // LTOFF22X  jiffies
   ld8 r16=[r20];;      // LDXMOV    jiffies
   ld8.acq r23=[r16]    // value of jiffies

When jiffies is within 22 bit range of __gp, the linker writes the
sequence as

   addl r20=offset_of(jiffies,__gp),r1;;
   mov r16=r20;;
   ld8.acq r23=[r16]    // value of jiffies

Is there a restriction to not rewrite to

   addl r16=offset_of(jiffies,__gp),r1;;
   ld8.acq r23=[r16]    // value of jiffies
   nop.i 0

because that would save at least one cycle and would make bundling easier 
(dependend of additional instructions, of course).

Christian


- To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html

Reply via email to