Re: [Fastboot] [PATCH]IA64 kexec/kdump patch for INIT

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Kernel]     [Sparc Linux]     [DCCP]     [Linux ARM]     [Yosemite News]     [Linux SCSI]     [Linux x86_64]     [Linux for Ham Radio]

  Powered by Linux