On Thu, Sep 07, 2006 at 11:08:34AM +0200, Andreas Schwab wrote: > Takao Indoh <indou.takao@xxxxxxxxxxxxxx> writes: > > > The disassemble code: > > a000000100047080: 0b 38 01 02 00 24 [MMI] addl r39=0,r1;; > > a000000100047086: 50 02 9c 00 42 00 mov r37=r39 > > a00000010004708c: 00 00 04 00 nop.i 0x0;; > > a000000100047090: 0a 08 00 4a 00 21 [MMI] mov r1=r37;; > > a000000100047096: c0 02 80 00 42 00 mov r44=r32 > > a00000010004709c: 00 00 04 00 nop.i 0x0 > > a0000001000470a0: 17 00 02 51 02 14 [BBB] br.call.sptk.many b0=a0000001000db4a0 <crash_kexec> > > > > This disassembled code does not change content of r1. > > It does: > > a000000100047090: 0a 08 00 4a 00 21 [MMI] mov r1=r37;; But looking before that instruction r37 is a copy of r39 (mov r37=r39). r39 was calculated by "addl r39=0,r1" i.e. r1+0, also known as "r1". So this sequence just takes the original value from r1 and puts it into r1 (passing through two other registers along the way). Not only unhelpful, but inefficient too :-) Perhaps just make a tiny function: GLOBAL_ENTRY(ia64_set_gp) movl r1=__gp br.ret.sptk.many b0 END(ia64_set_gp) and put it in head.S to bypass this "cleverness" by gcc and also avoid the need for inline asm. -Tony --- Yarn store opening in Sunnyvale, CA on Oct 14th. http://purlescenceyarns.com - To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |