| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| From: Ard Biesheuvel <ard.biesheuvel@linaro.org> |
| Date: Tue, 3 Apr 2018 10:38:28 -0700 |
| Subject: FROMLIST: arm64/lib: copy_page: avoid x18 register in assembler code |
| |
| Register x18 will no longer be used as a caller save register in the |
| future, so stop using it in the copy_page() code. |
| |
| Bug: 145210207 |
| Change-Id: Iffd77db101d6e83ec8c5e12b11d9f0fef09a630b |
| (am from https://lore.kernel.org/patchwork/patch/1149064/) |
| Link: https://patchwork.kernel.org/patch/9836869/ |
| Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> |
| Reviewed-by: Mark Rutland <mark.rutland@arm.com> |
| [Sami: changed the offset and bias to be explicit] |
| Signed-off-by: Sami Tolvanen <samitolvanen@google.com> |
| --- |
| arch/arm64/lib/copy_page.S | 38 +++++++++++++++++++------------------- |
| 1 file changed, 19 insertions(+), 19 deletions(-) |
| |
| diff --git a/arch/arm64/lib/copy_page.S b/arch/arm64/lib/copy_page.S |
| index bbb8562396af..290dd3c5266c 100644 |
| --- a/arch/arm64/lib/copy_page.S |
| +++ b/arch/arm64/lib/copy_page.S |
| @@ -34,45 +34,45 @@ alternative_else_nop_endif |
| ldp x14, x15, [x1, #96] |
| ldp x16, x17, [x1, #112] |
| |
| - mov x18, #(PAGE_SIZE - 128) |
| + add x0, x0, #256 |
| add x1, x1, #128 |
| 1: |
| - subs x18, x18, #128 |
| + tst x0, #(PAGE_SIZE - 1) |
| |
| alternative_if ARM64_HAS_NO_HW_PREFETCH |
| prfm pldl1strm, [x1, #384] |
| alternative_else_nop_endif |
| |
| - stnp x2, x3, [x0] |
| + stnp x2, x3, [x0, #-256] |
| ldp x2, x3, [x1] |
| - stnp x4, x5, [x0, #16] |
| + stnp x4, x5, [x0, #16 - 256] |
| ldp x4, x5, [x1, #16] |
| - stnp x6, x7, [x0, #32] |
| + stnp x6, x7, [x0, #32 - 256] |
| ldp x6, x7, [x1, #32] |
| - stnp x8, x9, [x0, #48] |
| + stnp x8, x9, [x0, #48 - 256] |
| ldp x8, x9, [x1, #48] |
| - stnp x10, x11, [x0, #64] |
| + stnp x10, x11, [x0, #64 - 256] |
| ldp x10, x11, [x1, #64] |
| - stnp x12, x13, [x0, #80] |
| + stnp x12, x13, [x0, #80 - 256] |
| ldp x12, x13, [x1, #80] |
| - stnp x14, x15, [x0, #96] |
| + stnp x14, x15, [x0, #96 - 256] |
| ldp x14, x15, [x1, #96] |
| - stnp x16, x17, [x0, #112] |
| + stnp x16, x17, [x0, #112 - 256] |
| ldp x16, x17, [x1, #112] |
| |
| add x0, x0, #128 |
| add x1, x1, #128 |
| |
| - b.gt 1b |
| + b.ne 1b |
| |
| - stnp x2, x3, [x0] |
| - stnp x4, x5, [x0, #16] |
| - stnp x6, x7, [x0, #32] |
| - stnp x8, x9, [x0, #48] |
| - stnp x10, x11, [x0, #64] |
| - stnp x12, x13, [x0, #80] |
| - stnp x14, x15, [x0, #96] |
| - stnp x16, x17, [x0, #112] |
| + stnp x2, x3, [x0, #-256] |
| + stnp x4, x5, [x0, #16 - 256] |
| + stnp x6, x7, [x0, #32 - 256] |
| + stnp x8, x9, [x0, #48 - 256] |
| + stnp x10, x11, [x0, #64 - 256] |
| + stnp x12, x13, [x0, #80 - 256] |
| + stnp x14, x15, [x0, #96 - 256] |
| + stnp x16, x17, [x0, #112 - 256] |
| |
| ret |
| ENDPROC(copy_page) |