[OpenBIOS] [PATCH, RFC 6/6] ppc: Fix stack setup

Andreas Färber andreas.faerber at web.de
Mon Oct 11 11:09:39 CEST 2010


Am 11.10.2010 um 04:53 schrieb Segher Boessenkool:

>> +	mfpvr	r14				/* check if ppc64 */
>> +	li		r15, 4
>> +	srw		r14, r14, r15	/* >> 4 */
>
> srwi 14,14,4
>
> but you actually want to shift 16, not 4.

Oops!

>> +	cmplwi	r14, 0x33
>> +	blt		1f
>> +	cmplwi	r14, 0x7033
>> +	bge		1f
>
> This is too simplistic.

Are you saying the original is_ppc64() function I transformed into  
assembler code is wrong, too?

static int is_ppc64(void)
{
	unsigned int pvr;
	asm volatile("mfspr %0, 0x11f" : "=r" (pvr) );

	return ((pvr >= 0x330000) && (pvr < 0x70330000));
}

> Here's something that detects
> whether the CPU is currently in 64-bit mode, without
> using 64-bit-only instructions:
>
> lis 3,0x4000
> add 3,3,3
> addc 3,3,3
> adde 3,3,3
> cmplwi 3,0
> beq 64bit
> bne 32bit

Thanks! I'll give it a try.

> Anyway, can't you always align to 128 bytes, and create
> one frame for the 64-bit ABI?  Or do you really want to
> save those few bytes...

As for "those few bytes", I guess I mixed up bits and hexadecimal  
digits once again. An example:

-m 1024

RAM       0..0x40000000
OpenBIOS   @ 0x3ff00000
Hash table @ 0x3fef0000 vs. 0x3fe00000

We'd be wasting 960 KiB. If that's acceptable, it'll simplify the code  
a little of course.

Andreas



More information about the OpenBIOS mailing list