[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen: arm: correct vfp save/restore asm constraints.
On Mon, 2013-07-08 at 15:19 +0100, Ian Campbell wrote: > Some versions of gcc complain: > > vfp.c: In function 'vfp_restore_state': > > vfp.c:45:27: error: memory input 0 is not directly addressable > > vfp.c:51:31: error: memory input 0 is not directly addressable > > There is no way to express the constraint we want (which is the address of the > array, clobbering the whole array). Therefore we have to fake it up by using > two constraints. > > Signed-off-by: Ian Campbell <ijc@xxxxxxxxxxxxxx> Ahem. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > Acked-by: Will.Deacon@xxxxxxx > --- > xen/arch/arm/arm32/vfp.c | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > diff --git a/xen/arch/arm/arm32/vfp.c b/xen/arch/arm/arm32/vfp.c > index 6780131..0069acd 100644 > --- a/xen/arch/arm/arm32/vfp.c > +++ b/xen/arch/arm/arm32/vfp.c > @@ -22,15 +22,15 @@ void vfp_save_state(struct vcpu *v) > } > > /* Save {d0-d15} */ > - asm volatile("stc p11, cr0, %0, #32*4" > - : "=Q" (v->arch.vfp.fpregs1)); > + asm volatile("stc p11, cr0, [%1], #32*4" > + : "=Q" (*v->arch.vfp.fpregs1) : "r" (v->arch.vfp.fpregs1)); > > /* 32 x 64 bits registers? */ > if ( (READ_CP32(MVFR0) & MVFR0_A_SIMD_MASK) == 2 ) > { > /* Save {d16-d31} */ > - asm volatile("stcl p11, cr0, %0, #32*4" > - : "=Q" (v->arch.vfp.fpregs2)); > + asm volatile("stcl p11, cr0, [%1], #32*4" > + : "=Q" (*v->arch.vfp.fpregs2) : "r" > (v->arch.vfp.fpregs2)); > } > > WRITE_CP32(v->arch.vfp.fpexc & ~(FPEXC_EN), FPEXC); > @@ -38,17 +38,18 @@ void vfp_save_state(struct vcpu *v) > > void vfp_restore_state(struct vcpu *v) > { > + //uint64_t test[16]; > WRITE_CP32(READ_CP32(FPEXC) | FPEXC_EN, FPEXC); > > /* Restore {d0-d15} */ > - asm volatile("ldc p11, cr0, %0, #32*4" > - : : "Q" (v->arch.vfp.fpregs1)); > + asm volatile("ldc p11, cr0, [%1], #32*4" > + : : "Q" (*v->arch.vfp.fpregs1), "r" (v->arch.vfp.fpregs1)); > > /* 32 x 64 bits registers? */ > if ( (READ_CP32(MVFR0) & MVFR0_A_SIMD_MASK) == 2 ) /* 32 x 64 bits > registers */ > /* Restore {d16-d31} */ > - asm volatile("ldcl p11, cr0, %0, #32*4" > - : : "Q" (v->arch.vfp.fpregs2)); > + asm volatile("ldcl p11, cr0, [%1], #32*4" > + : : "Q" (*v->arch.vfp.fpregs2), "r" > (v->arch.vfp.fpregs2)); > > if ( v->arch.vfp.fpexc & FPEXC_EX ) > { _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |