[RFC][PATCH] powerpc/64s: stop using r14 register
Naveen N. Rao
naveen.n.rao at linux.vnet.ibm.com
Wed May 31 05:08:17 AEST 2017
On 2017/05/22 12:00AM, Nicholas Piggin wrote:
> I'd like to take over the r14 register for use as a per-cpu kernel
> register similar to the way r13 is used for the paca.
>
> r14 being the last non-volatile register gcc allocates, appears with
> about 0.5% the frequency as r31 in (static) instructions. I haven't
> counted dynamically how many extra spills and fills that removing it
> causes, but I should. My guess is the memory ops saved by using
> it as a per-cpu variable will significantly outweigh the cost of
> losing it as a general use register.
>
> This part of the patch is pretty mechanical. A couple of places (prom)
> still have to use it, and I haven't quite understood the KVM code yet.
>
> Question is whether this approach seems okay, and whether we should do
> the same for 64e.
>
> Thanks,
> Nick
>
> ---
[snip]
> diff --git a/arch/powerpc/net/bpf_jit32.h
> b/arch/powerpc/net/bpf_jit32.h
> index a8cd7e289ecd..52a30db033c1 100644
> --- a/arch/powerpc/net/bpf_jit32.h
> +++ b/arch/powerpc/net/bpf_jit32.h
> @@ -44,9 +44,11 @@
> * A register r4
> * X register r5
> * addr param r6
> - * r7-r10 scratch
> - * skb->data r14
> - * skb headlen r15 (skb->len - skb->data_len)
> + * scratch r7-r8
> + * skb headlen r9 (skb->len - skb->data_len)
> + * skb->data r10
> + * fixed regs r13-r14
> + * unused r15
> * m[0] r16
> * m[...] ...
> * m[15] r31
> @@ -58,8 +60,8 @@
> #define r_addr 6
> #define r_scratch1 7
> #define r_scratch2 8
> -#define r_D 14
> -#define r_HL 15
> +#define r_HL 9
> +#define r_D 10
You'll also need changes in the JIT code itself, at least in
bpf_jit_build_prologue() and elsewhere -- some code expects r_D and r_HL
to be NVRs. It's probably easier to just choose other NVRs here...
> #define r_M 16
>
> #ifndef __ASSEMBLY__
> diff --git a/arch/powerpc/net/bpf_jit_asm.S b/arch/powerpc/net/bpf_jit_asm.S
> index 3dd9c43d40c9..5b06152052f6 100644
> --- a/arch/powerpc/net/bpf_jit_asm.S
> +++ b/arch/powerpc/net/bpf_jit_asm.S
> @@ -19,8 +19,8 @@
> * r3 skb
> * r4,r5 A,X
> * r6 *** address parameter to helper ***
> - * r7-r10 scratch
> - * r14 skb->data
> + * r7-r9 scratch
> + * r10 skb->data
> * r15 skb headlen
> * r16-31 M[]
This doesn't match the updates to bpf_jit32.h.
- Naveen
More information about the Linuxppc-dev
mailing list