Subject: Re: [PATCH 5/16] hypervisor functions for Celleb

From: Arnd Bergmann <[email-masked]>
Date: Wed, 15 Nov 2006 23:04:45 +0100

On Wednesday 15 November 2006 19:37, Christoph Hellwig wrote:
> > +static inline int64_t beat_allocate_memory(uint64_t __in0, uint64_t
> > __in1, uint64_t __in2, uint64_t __in3,void** __out0,uint64_t* __out1) {
> > +=A0=A0=A0=A0=A0register uint64_t __reg0 __asm__("r3");
> > +=A0=A0=A0=A0=A0register uint64_t __reg1 __asm__("r4");
> > +=A0=A0=A0=A0=A0register uint64_t __reg2 __asm__("r5");
> > +=A0=A0=A0=A0=A0register uint64_t __reg3 __asm__("r6");
> > +=A0=A0=A0=A0=A0register uint64_t __sn __asm__("r11") =3D (0UL);
>
> No point in declaring this a register variable, gcc ignores the
> specifier. =A0

Actually, this is the one place where gcc forces you to use the
'register' keyword, the '__asm__("r3")' specifier does not work
for variables declared without it.

> Is there any chance to not duplicate the inline assembly=20
> for every single hypercall but have generic call with n arguments
> helper, as for the phyp hvcalls?

It's not easy to do it the way phyp does, because the assembly
needs to pass the call number in %r11, which is not one of the
argument registers.

I'd like to unify the hcall mechanism at least between celleb
and ps3, since they are very similar. I need to forward-port
the patch I had for this.

	Arnd <><