* [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.