All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] arm64: Avoid breakage caused by .altmacro in fpsimd save/restore macros
@ 2015-01-29 16:24 Dave Martin
  2015-01-29 16:34 ` Ard Biesheuvel
  2015-01-29 17:24 ` Catalin Marinas
  0 siblings, 2 replies; 4+ messages in thread
From: Dave Martin @ 2015-01-29 16:24 UTC (permalink / raw)
  To: linux-arm-kernel

Alternate macro mode is not a property of a macro definition, but a
gas runtime state that alters the way macros are expanded for ever
after (until .noaltmacro is seen).

This means that subsequent assembly code that calls other macros can
break if fpsimdmacros.h is included.

Since these instruction sequences are simple (if dull -- but in a
good way), this patch solves the problem by simply expanding the
.irp loops.  The pre-existing fpsimd_{save,restore} macros weren't
rolled with .irp anyway and the sequences affected are short, so
this change restores consistency at little cost.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
---
 arch/arm64/include/asm/fpsimdmacros.h |   43 ++++++++++++++++++++++++---------
 1 file changed, 32 insertions(+), 11 deletions(-)

diff --git a/arch/arm64/include/asm/fpsimdmacros.h b/arch/arm64/include/asm/fpsimdmacros.h
index 007618b..a2daf12 100644
--- a/arch/arm64/include/asm/fpsimdmacros.h
+++ b/arch/arm64/include/asm/fpsimdmacros.h
@@ -76,7 +76,6 @@
 	fpsimd_restore_fpcr x\tmpnr, \state
 .endm
 
-.altmacro
 .macro fpsimd_save_partial state, numnr, tmpnr1, tmpnr2
 	mrs	x\tmpnr1, fpsr
 	str	w\numnr, [\state, #8]
@@ -86,11 +85,22 @@
 	add	\state, \state, x\numnr, lsl #4
 	sub	x\tmpnr1, x\tmpnr1, x\numnr, lsl #1
 	br	x\tmpnr1
-	.irp	qa, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0
-	.irp	qb, %(qa + 1)
-	stp	q\qa, q\qb, [\state, # -16 * \qa - 16]
-	.endr
-	.endr
+	stp	q30, q31, [\state, #-16 * 30 - 16]
+	stp	q28, q29, [\state, #-16 * 28 - 16]
+	stp	q26, q27, [\state, #-16 * 26 - 16]
+	stp	q24, q25, [\state, #-16 * 24 - 16]
+	stp	q22, q23, [\state, #-16 * 22 - 16]
+	stp	q20, q21, [\state, #-16 * 20 - 16]
+	stp	q18, q19, [\state, #-16 * 18 - 16]
+	stp	q16, q17, [\state, #-16 * 16 - 16]
+	stp	q14, q15, [\state, #-16 * 14 - 16]
+	stp	q12, q13, [\state, #-16 * 12 - 16]
+	stp	q10, q11, [\state, #-16 * 10 - 16]
+	stp	q8, q9, [\state, #-16 * 8 - 16]
+	stp	q6, q7, [\state, #-16 * 6 - 16]
+	stp	q4, q5, [\state, #-16 * 4 - 16]
+	stp	q2, q3, [\state, #-16 * 2 - 16]
+	stp	q0, q1, [\state, #-16 * 0 - 16]
 0:
 .endm
 
@@ -103,10 +113,21 @@
 	add	\state, \state, x\tmpnr2, lsl #4
 	sub	x\tmpnr1, x\tmpnr1, x\tmpnr2, lsl #1
 	br	x\tmpnr1
-	.irp	qa, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0
-	.irp	qb, %(qa + 1)
-	ldp	q\qa, q\qb, [\state, # -16 * \qa - 16]
-	.endr
-	.endr
+	ldp	q30, q31, [\state, #-16 * 30 - 16]
+	ldp	q28, q29, [\state, #-16 * 28 - 16]
+	ldp	q26, q27, [\state, #-16 * 26 - 16]
+	ldp	q24, q25, [\state, #-16 * 24 - 16]
+	ldp	q22, q23, [\state, #-16 * 22 - 16]
+	ldp	q20, q21, [\state, #-16 * 20 - 16]
+	ldp	q18, q19, [\state, #-16 * 18 - 16]
+	ldp	q16, q17, [\state, #-16 * 16 - 16]
+	ldp	q14, q15, [\state, #-16 * 14 - 16]
+	ldp	q12, q13, [\state, #-16 * 12 - 16]
+	ldp	q10, q11, [\state, #-16 * 10 - 16]
+	ldp	q8, q9, [\state, #-16 * 8 - 16]
+	ldp	q6, q7, [\state, #-16 * 6 - 16]
+	ldp	q4, q5, [\state, #-16 * 4 - 16]
+	ldp	q2, q3, [\state, #-16 * 2 - 16]
+	ldp	q0, q1, [\state, #-16 * 0 - 16]
 0:
 .endm
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH] arm64: Avoid breakage caused by .altmacro in fpsimd save/restore macros
  2015-01-29 16:24 [PATCH] arm64: Avoid breakage caused by .altmacro in fpsimd save/restore macros Dave Martin
@ 2015-01-29 16:34 ` Ard Biesheuvel
  2015-01-29 16:51   ` Dave P Martin
  2015-01-29 17:24 ` Catalin Marinas
  1 sibling, 1 reply; 4+ messages in thread
From: Ard Biesheuvel @ 2015-01-29 16:34 UTC (permalink / raw)
  To: linux-arm-kernel

On 29 January 2015 at 16:24, Dave Martin <Dave.Martin@arm.com> wrote:
> Alternate macro mode is not a property of a macro definition, but a
> gas runtime state that alters the way macros are expanded for ever
> after (until .noaltmacro is seen).
>
> This means that subsequent assembly code that calls other macros can
> break if fpsimdmacros.h is included.
>
> Since these instruction sequences are simple (if dull -- but in a
> good way), this patch solves the problem by simply expanding the
> .irp loops.  The pre-existing fpsimd_{save,restore} macros weren't
> rolled with .irp anyway and the sequences affected are short, so
> this change restores consistency at little cost.
>
> Signed-off-by: Dave Martin <Dave.Martin@arm.com>

Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> ---
>  arch/arm64/include/asm/fpsimdmacros.h |   43 ++++++++++++++++++++++++---------
>  1 file changed, 32 insertions(+), 11 deletions(-)
>
> diff --git a/arch/arm64/include/asm/fpsimdmacros.h b/arch/arm64/include/asm/fpsimdmacros.h
> index 007618b..a2daf12 100644
> --- a/arch/arm64/include/asm/fpsimdmacros.h
> +++ b/arch/arm64/include/asm/fpsimdmacros.h
> @@ -76,7 +76,6 @@
>         fpsimd_restore_fpcr x\tmpnr, \state
>  .endm
>
> -.altmacro
>  .macro fpsimd_save_partial state, numnr, tmpnr1, tmpnr2
>         mrs     x\tmpnr1, fpsr
>         str     w\numnr, [\state, #8]
> @@ -86,11 +85,22 @@
>         add     \state, \state, x\numnr, lsl #4
>         sub     x\tmpnr1, x\tmpnr1, x\numnr, lsl #1
>         br      x\tmpnr1
> -       .irp    qa, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0
> -       .irp    qb, %(qa + 1)
> -       stp     q\qa, q\qb, [\state, # -16 * \qa - 16]
> -       .endr
> -       .endr
> +       stp     q30, q31, [\state, #-16 * 30 - 16]
> +       stp     q28, q29, [\state, #-16 * 28 - 16]
> +       stp     q26, q27, [\state, #-16 * 26 - 16]
> +       stp     q24, q25, [\state, #-16 * 24 - 16]
> +       stp     q22, q23, [\state, #-16 * 22 - 16]
> +       stp     q20, q21, [\state, #-16 * 20 - 16]
> +       stp     q18, q19, [\state, #-16 * 18 - 16]
> +       stp     q16, q17, [\state, #-16 * 16 - 16]
> +       stp     q14, q15, [\state, #-16 * 14 - 16]
> +       stp     q12, q13, [\state, #-16 * 12 - 16]
> +       stp     q10, q11, [\state, #-16 * 10 - 16]
> +       stp     q8, q9, [\state, #-16 * 8 - 16]
> +       stp     q6, q7, [\state, #-16 * 6 - 16]
> +       stp     q4, q5, [\state, #-16 * 4 - 16]
> +       stp     q2, q3, [\state, #-16 * 2 - 16]
> +       stp     q0, q1, [\state, #-16 * 0 - 16]
>  0:
>  .endm
>
> @@ -103,10 +113,21 @@
>         add     \state, \state, x\tmpnr2, lsl #4
>         sub     x\tmpnr1, x\tmpnr1, x\tmpnr2, lsl #1
>         br      x\tmpnr1
> -       .irp    qa, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0
> -       .irp    qb, %(qa + 1)
> -       ldp     q\qa, q\qb, [\state, # -16 * \qa - 16]
> -       .endr
> -       .endr
> +       ldp     q30, q31, [\state, #-16 * 30 - 16]
> +       ldp     q28, q29, [\state, #-16 * 28 - 16]
> +       ldp     q26, q27, [\state, #-16 * 26 - 16]
> +       ldp     q24, q25, [\state, #-16 * 24 - 16]
> +       ldp     q22, q23, [\state, #-16 * 22 - 16]
> +       ldp     q20, q21, [\state, #-16 * 20 - 16]
> +       ldp     q18, q19, [\state, #-16 * 18 - 16]
> +       ldp     q16, q17, [\state, #-16 * 16 - 16]
> +       ldp     q14, q15, [\state, #-16 * 14 - 16]
> +       ldp     q12, q13, [\state, #-16 * 12 - 16]
> +       ldp     q10, q11, [\state, #-16 * 10 - 16]
> +       ldp     q8, q9, [\state, #-16 * 8 - 16]
> +       ldp     q6, q7, [\state, #-16 * 6 - 16]
> +       ldp     q4, q5, [\state, #-16 * 4 - 16]
> +       ldp     q2, q3, [\state, #-16 * 2 - 16]
> +       ldp     q0, q1, [\state, #-16 * 0 - 16]
>  0:
>  .endm
> --
> 1.7.10.4
>
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] arm64: Avoid breakage caused by .altmacro in fpsimd save/restore macros
  2015-01-29 16:34 ` Ard Biesheuvel
@ 2015-01-29 16:51   ` Dave P Martin
  0 siblings, 0 replies; 4+ messages in thread
From: Dave P Martin @ 2015-01-29 16:51 UTC (permalink / raw)
  To: linux-arm-kernel

On Thu, Jan 29, 2015 at 04:34:05PM +0000, Ard Biesheuvel wrote:
> On 29 January 2015 at 16:24, Dave Martin <Dave.Martin@arm.com> wrote:
> > Alternate macro mode is not a property of a macro definition, but a
> > gas runtime state that alters the way macros are expanded for ever
> > after (until .noaltmacro is seen).
> >
> > This means that subsequent assembly code that calls other macros can
> > break if fpsimdmacros.h is included.
> >
> > Since these instruction sequences are simple (if dull -- but in a
> > good way), this patch solves the problem by simply expanding the
> > .irp loops.  The pre-existing fpsimd_{save,restore} macros weren't
> > rolled with .irp anyway and the sequences affected are short, so
> > this change restores consistency at little cost.
> >
> > Signed-off-by: Dave Martin <Dave.Martin@arm.com>
> 
> Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

Thanks

(Also, apologies for accidentally missing you from cc)

Cheers
---Dave

> 
> > ---
> >  arch/arm64/include/asm/fpsimdmacros.h |   43 ++++++++++++++++++++++++---------
> >  1 file changed, 32 insertions(+), 11 deletions(-)
> >
> > diff --git a/arch/arm64/include/asm/fpsimdmacros.h b/arch/arm64/include/asm/fpsimdmacros.h
> > index 007618b..a2daf12 100644
> > --- a/arch/arm64/include/asm/fpsimdmacros.h
> > +++ b/arch/arm64/include/asm/fpsimdmacros.h
> > @@ -76,7 +76,6 @@
> >         fpsimd_restore_fpcr x\tmpnr, \state
> >  .endm
> >
> > -.altmacro
> >  .macro fpsimd_save_partial state, numnr, tmpnr1, tmpnr2
> >         mrs     x\tmpnr1, fpsr
> >         str     w\numnr, [\state, #8]
> > @@ -86,11 +85,22 @@
> >         add     \state, \state, x\numnr, lsl #4
> >         sub     x\tmpnr1, x\tmpnr1, x\numnr, lsl #1
> >         br      x\tmpnr1
> > -       .irp    qa, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0
> > -       .irp    qb, %(qa + 1)
> > -       stp     q\qa, q\qb, [\state, # -16 * \qa - 16]
> > -       .endr
> > -       .endr
> > +       stp     q30, q31, [\state, #-16 * 30 - 16]
> > +       stp     q28, q29, [\state, #-16 * 28 - 16]
> > +       stp     q26, q27, [\state, #-16 * 26 - 16]
> > +       stp     q24, q25, [\state, #-16 * 24 - 16]
> > +       stp     q22, q23, [\state, #-16 * 22 - 16]
> > +       stp     q20, q21, [\state, #-16 * 20 - 16]
> > +       stp     q18, q19, [\state, #-16 * 18 - 16]
> > +       stp     q16, q17, [\state, #-16 * 16 - 16]
> > +       stp     q14, q15, [\state, #-16 * 14 - 16]
> > +       stp     q12, q13, [\state, #-16 * 12 - 16]
> > +       stp     q10, q11, [\state, #-16 * 10 - 16]
> > +       stp     q8, q9, [\state, #-16 * 8 - 16]
> > +       stp     q6, q7, [\state, #-16 * 6 - 16]
> > +       stp     q4, q5, [\state, #-16 * 4 - 16]
> > +       stp     q2, q3, [\state, #-16 * 2 - 16]
> > +       stp     q0, q1, [\state, #-16 * 0 - 16]
> >  0:
> >  .endm
> >
> > @@ -103,10 +113,21 @@
> >         add     \state, \state, x\tmpnr2, lsl #4
> >         sub     x\tmpnr1, x\tmpnr1, x\tmpnr2, lsl #1
> >         br      x\tmpnr1
> > -       .irp    qa, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0
> > -       .irp    qb, %(qa + 1)
> > -       ldp     q\qa, q\qb, [\state, # -16 * \qa - 16]
> > -       .endr
> > -       .endr
> > +       ldp     q30, q31, [\state, #-16 * 30 - 16]
> > +       ldp     q28, q29, [\state, #-16 * 28 - 16]
> > +       ldp     q26, q27, [\state, #-16 * 26 - 16]
> > +       ldp     q24, q25, [\state, #-16 * 24 - 16]
> > +       ldp     q22, q23, [\state, #-16 * 22 - 16]
> > +       ldp     q20, q21, [\state, #-16 * 20 - 16]
> > +       ldp     q18, q19, [\state, #-16 * 18 - 16]
> > +       ldp     q16, q17, [\state, #-16 * 16 - 16]
> > +       ldp     q14, q15, [\state, #-16 * 14 - 16]
> > +       ldp     q12, q13, [\state, #-16 * 12 - 16]
> > +       ldp     q10, q11, [\state, #-16 * 10 - 16]
> > +       ldp     q8, q9, [\state, #-16 * 8 - 16]
> > +       ldp     q6, q7, [\state, #-16 * 6 - 16]
> > +       ldp     q4, q5, [\state, #-16 * 4 - 16]
> > +       ldp     q2, q3, [\state, #-16 * 2 - 16]
> > +       ldp     q0, q1, [\state, #-16 * 0 - 16]
> >  0:
> >  .endm
> > --
> > 1.7.10.4
> >
> >
> >
> > _______________________________________________
> > linux-arm-kernel mailing list
> > linux-arm-kernel at lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> 

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] arm64: Avoid breakage caused by .altmacro in fpsimd save/restore macros
  2015-01-29 16:24 [PATCH] arm64: Avoid breakage caused by .altmacro in fpsimd save/restore macros Dave Martin
  2015-01-29 16:34 ` Ard Biesheuvel
@ 2015-01-29 17:24 ` Catalin Marinas
  1 sibling, 0 replies; 4+ messages in thread
From: Catalin Marinas @ 2015-01-29 17:24 UTC (permalink / raw)
  To: linux-arm-kernel

On Thu, Jan 29, 2015 at 04:24:43PM +0000, Dave P Martin wrote:
> Alternate macro mode is not a property of a macro definition, but a
> gas runtime state that alters the way macros are expanded for ever
> after (until .noaltmacro is seen).
> 
> This means that subsequent assembly code that calls other macros can
> break if fpsimdmacros.h is included.
> 
> Since these instruction sequences are simple (if dull -- but in a
> good way), this patch solves the problem by simply expanding the
> .irp loops.  The pre-existing fpsimd_{save,restore} macros weren't
> rolled with .irp anyway and the sequences affected are short, so
> this change restores consistency at little cost.
> 
> Signed-off-by: Dave Martin <Dave.Martin@arm.com>

Applied. Thanks.

-- 
Catalin

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-01-29 17:24 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-29 16:24 [PATCH] arm64: Avoid breakage caused by .altmacro in fpsimd save/restore macros Dave Martin
2015-01-29 16:34 ` Ard Biesheuvel
2015-01-29 16:51   ` Dave P Martin
2015-01-29 17:24 ` Catalin Marinas

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.