Message ID | 20191104085533.2892-1-frankja@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [kvm-unit-tests] s390x: Use loop to save and restore fprs | expand |
On 04.11.19 09:55, Janosch Frank wrote: > Let's save some lines in the assembly by using a loop to save and > restore the fprs. > > Signed-off-by: Janosch Frank <frankja@linux.ibm.com> > --- > s390x/cstart64.S | 38 ++++++-------------------------------- > 1 file changed, 6 insertions(+), 32 deletions(-) > > diff --git a/s390x/cstart64.S b/s390x/cstart64.S > index 5dc1577..8e2b21e 100644 > --- a/s390x/cstart64.S > +++ b/s390x/cstart64.S > @@ -99,44 +99,18 @@ memsetxc: > lctlg %c0, %c0, 0(%r1) > /* save fprs 0-15 + fpc */ > la %r1, GEN_LC_SW_INT_FPRS > - std %f0, 0(%r1) > - std %f1, 8(%r1) > - std %f2, 16(%r1) > - std %f3, 24(%r1) > - std %f4, 32(%r1) > - std %f5, 40(%r1) > - std %f6, 48(%r1) > - std %f7, 56(%r1) > - std %f8, 64(%r1) > - std %f9, 72(%r1) > - std %f10, 80(%r1) > - std %f11, 88(%r1) > - std %f12, 96(%r1) > - std %f13, 104(%r1) > - std %f14, 112(%r1) > - std %f15, 120(%r1) > + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 > + std \i, \i * 8(%r1) > + .endr > stfpc GEN_LC_SW_INT_FPC > .endm > > .macro RESTORE_REGS > /* restore fprs 0-15 + fpc */ > la %r1, GEN_LC_SW_INT_FPRS > - ld %f0, 0(%r1) > - ld %f1, 8(%r1) > - ld %f2, 16(%r1) > - ld %f3, 24(%r1) > - ld %f4, 32(%r1) > - ld %f5, 40(%r1) > - ld %f6, 48(%r1) > - ld %f7, 56(%r1) > - ld %f8, 64(%r1) > - ld %f9, 72(%r1) > - ld %f10, 80(%r1) > - ld %f11, 88(%r1) > - ld %f12, 96(%r1) > - ld %f13, 104(%r1) > - ld %f14, 112(%r1) > - ld %f15, 120(%r1) > + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 > + ld \i, \i * 8(%r1) > + .endr > lfpc GEN_LC_SW_INT_FPC > /* restore cr0 */ > lctlg %c0, %c0, GEN_LC_SW_INT_CR0 > Looks good to me! Queued to https://github.com/davidhildenbrand/kvm-unit-tests.git s390x-next For now, but waiting for more review.
On 04/11/2019 09.55, Janosch Frank wrote: > Let's save some lines in the assembly by using a loop to save and > restore the fprs. > > Signed-off-by: Janosch Frank <frankja@linux.ibm.com> > --- > s390x/cstart64.S | 38 ++++++-------------------------------- > 1 file changed, 6 insertions(+), 32 deletions(-) > > diff --git a/s390x/cstart64.S b/s390x/cstart64.S > index 5dc1577..8e2b21e 100644 > --- a/s390x/cstart64.S > +++ b/s390x/cstart64.S > @@ -99,44 +99,18 @@ memsetxc: > lctlg %c0, %c0, 0(%r1) > /* save fprs 0-15 + fpc */ > la %r1, GEN_LC_SW_INT_FPRS > - std %f0, 0(%r1) > - std %f1, 8(%r1) > - std %f2, 16(%r1) > - std %f3, 24(%r1) > - std %f4, 32(%r1) > - std %f5, 40(%r1) > - std %f6, 48(%r1) > - std %f7, 56(%r1) > - std %f8, 64(%r1) > - std %f9, 72(%r1) > - std %f10, 80(%r1) > - std %f11, 88(%r1) > - std %f12, 96(%r1) > - std %f13, 104(%r1) > - std %f14, 112(%r1) > - std %f15, 120(%r1) > + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 > + std \i, \i * 8(%r1) > + .endr > stfpc GEN_LC_SW_INT_FPC > .endm > > .macro RESTORE_REGS > /* restore fprs 0-15 + fpc */ > la %r1, GEN_LC_SW_INT_FPRS > - ld %f0, 0(%r1) > - ld %f1, 8(%r1) > - ld %f2, 16(%r1) > - ld %f3, 24(%r1) > - ld %f4, 32(%r1) > - ld %f5, 40(%r1) > - ld %f6, 48(%r1) > - ld %f7, 56(%r1) > - ld %f8, 64(%r1) > - ld %f9, 72(%r1) > - ld %f10, 80(%r1) > - ld %f11, 88(%r1) > - ld %f12, 96(%r1) > - ld %f13, 104(%r1) > - ld %f14, 112(%r1) > - ld %f15, 120(%r1) > + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 > + ld \i, \i * 8(%r1) > + .endr > lfpc GEN_LC_SW_INT_FPC > /* restore cr0 */ > lctlg %c0, %c0, GEN_LC_SW_INT_CR0 > Produces exactly the same code as before. Tested-by: Thomas Huth <thuth@redhat.com>
On 11/8/19 10:15 AM, Thomas Huth wrote: > On 04/11/2019 09.55, Janosch Frank wrote: >> Let's save some lines in the assembly by using a loop to save and >> restore the fprs. >> >> Signed-off-by: Janosch Frank <frankja@linux.ibm.com> >> --- >> s390x/cstart64.S | 38 ++++++-------------------------------- >> 1 file changed, 6 insertions(+), 32 deletions(-) >> >> diff --git a/s390x/cstart64.S b/s390x/cstart64.S >> index 5dc1577..8e2b21e 100644 >> --- a/s390x/cstart64.S >> +++ b/s390x/cstart64.S >> @@ -99,44 +99,18 @@ memsetxc: >> lctlg %c0, %c0, 0(%r1) >> /* save fprs 0-15 + fpc */ >> la %r1, GEN_LC_SW_INT_FPRS >> - std %f0, 0(%r1) >> - std %f1, 8(%r1) >> - std %f2, 16(%r1) >> - std %f3, 24(%r1) >> - std %f4, 32(%r1) >> - std %f5, 40(%r1) >> - std %f6, 48(%r1) >> - std %f7, 56(%r1) >> - std %f8, 64(%r1) >> - std %f9, 72(%r1) >> - std %f10, 80(%r1) >> - std %f11, 88(%r1) >> - std %f12, 96(%r1) >> - std %f13, 104(%r1) >> - std %f14, 112(%r1) >> - std %f15, 120(%r1) >> + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 >> + std \i, \i * 8(%r1) >> + .endr >> stfpc GEN_LC_SW_INT_FPC >> .endm >> .macro RESTORE_REGS >> /* restore fprs 0-15 + fpc */ >> la %r1, GEN_LC_SW_INT_FPRS >> - ld %f0, 0(%r1) >> - ld %f1, 8(%r1) >> - ld %f2, 16(%r1) >> - ld %f3, 24(%r1) >> - ld %f4, 32(%r1) >> - ld %f5, 40(%r1) >> - ld %f6, 48(%r1) >> - ld %f7, 56(%r1) >> - ld %f8, 64(%r1) >> - ld %f9, 72(%r1) >> - ld %f10, 80(%r1) >> - ld %f11, 88(%r1) >> - ld %f12, 96(%r1) >> - ld %f13, 104(%r1) >> - ld %f14, 112(%r1) >> - ld %f15, 120(%r1) >> + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 >> + ld \i, \i * 8(%r1) >> + .endr >> lfpc GEN_LC_SW_INT_FPC >> /* restore cr0 */ >> lctlg %c0, %c0, GEN_LC_SW_INT_CR0 >> > > Produces exactly the same code as before. > > Tested-by: Thomas Huth <thuth@redhat.com> > Good for me, makes the code smaller ... is better Reviewed-by: Pierre Morel <pmorel@linux.ibm.com>
diff --git a/s390x/cstart64.S b/s390x/cstart64.S index 5dc1577..8e2b21e 100644 --- a/s390x/cstart64.S +++ b/s390x/cstart64.S @@ -99,44 +99,18 @@ memsetxc: lctlg %c0, %c0, 0(%r1) /* save fprs 0-15 + fpc */ la %r1, GEN_LC_SW_INT_FPRS - std %f0, 0(%r1) - std %f1, 8(%r1) - std %f2, 16(%r1) - std %f3, 24(%r1) - std %f4, 32(%r1) - std %f5, 40(%r1) - std %f6, 48(%r1) - std %f7, 56(%r1) - std %f8, 64(%r1) - std %f9, 72(%r1) - std %f10, 80(%r1) - std %f11, 88(%r1) - std %f12, 96(%r1) - std %f13, 104(%r1) - std %f14, 112(%r1) - std %f15, 120(%r1) + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + std \i, \i * 8(%r1) + .endr stfpc GEN_LC_SW_INT_FPC .endm .macro RESTORE_REGS /* restore fprs 0-15 + fpc */ la %r1, GEN_LC_SW_INT_FPRS - ld %f0, 0(%r1) - ld %f1, 8(%r1) - ld %f2, 16(%r1) - ld %f3, 24(%r1) - ld %f4, 32(%r1) - ld %f5, 40(%r1) - ld %f6, 48(%r1) - ld %f7, 56(%r1) - ld %f8, 64(%r1) - ld %f9, 72(%r1) - ld %f10, 80(%r1) - ld %f11, 88(%r1) - ld %f12, 96(%r1) - ld %f13, 104(%r1) - ld %f14, 112(%r1) - ld %f15, 120(%r1) + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + ld \i, \i * 8(%r1) + .endr lfpc GEN_LC_SW_INT_FPC /* restore cr0 */ lctlg %c0, %c0, GEN_LC_SW_INT_CR0
Let's save some lines in the assembly by using a loop to save and restore the fprs. Signed-off-by: Janosch Frank <frankja@linux.ibm.com> --- s390x/cstart64.S | 38 ++++++-------------------------------- 1 file changed, 6 insertions(+), 32 deletions(-)