forked from Minki/linux
powerpc/bpf/jit: Optimize 64-bit Immediate loads
Similar to the LI32() optimization, if the value can be represented in 32-bits, use LI32(). Also handle loading a few specific forms of immediate values in an optimum manner. Acked-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
aaf2f7e099
commit
b1a057879a
@ -244,20 +244,25 @@ DECLARE_LOAD_FUNC(sk_load_byte_msh);
|
||||
} } while(0)
|
||||
|
||||
#define PPC_LI64(d, i) do { \
|
||||
if (!((uintptr_t)(i) & 0xffffffff00000000ULL)) \
|
||||
if ((long)(i) >= -2147483648 && \
|
||||
(long)(i) < 2147483648) \
|
||||
PPC_LI32(d, i); \
|
||||
else { \
|
||||
if (!((uintptr_t)(i) & 0xffff800000000000ULL)) \
|
||||
PPC_LI(d, ((uintptr_t)(i) >> 32) & 0xffff); \
|
||||
else { \
|
||||
PPC_LIS(d, ((uintptr_t)(i) >> 48)); \
|
||||
if ((uintptr_t)(i) & 0x0000ffff00000000ULL) \
|
||||
PPC_ORI(d, d, \
|
||||
((uintptr_t)(i) >> 32) & 0xffff); \
|
||||
} \
|
||||
PPC_SLDI(d, d, 32); \
|
||||
if ((uintptr_t)(i) & 0x00000000ffff0000ULL) \
|
||||
PPC_ORIS(d, d, \
|
||||
((uintptr_t)(i) >> 16) & 0xffff); \
|
||||
if ((uintptr_t)(i) & 0x000000000000ffffULL) \
|
||||
PPC_ORI(d, d, (uintptr_t)(i) & 0xffff); \
|
||||
} } while (0);
|
||||
} } while (0)
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
#define PPC_FUNC_ADDR(d,i) do { PPC_LI64(d, i); } while(0)
|
||||
|
Loading…
Reference in New Issue
Block a user