linux-hardened/arch/powerpc
Christophe Leroy 55a0edf083 powerpc/64: optimises from64to32()
The current implementation of from64to32() gives a poor result:

0000000000000270 <.from64to32>:
 270:	38 00 ff ff 	li      r0,-1
 274:	78 69 00 22 	rldicl  r9,r3,32,32
 278:	78 00 00 20 	clrldi  r0,r0,32
 27c:	7c 60 00 38 	and     r0,r3,r0
 280:	7c 09 02 14 	add     r0,r9,r0
 284:	78 09 00 22 	rldicl  r9,r0,32,32
 288:	7c 00 4a 14 	add     r0,r0,r9
 28c:	78 03 00 20 	clrldi  r3,r0,32
 290:	4e 80 00 20 	blr

This patch modifies from64to32() to operate in the same
spirit as csum_fold()

It swaps the two 32-bit halves of sum then it adds it with the
unswapped sum. If there is a carry from adding the two 32-bit halves,
it will carry from the lower half into the upper half, giving us the
correct sum in the upper half.

The resulting code is:

0000000000000260 <.from64to32>:
 260:	78 60 00 02 	rotldi  r0,r3,32
 264:	7c 60 1a 14 	add     r3,r0,r3
 268:	78 63 00 22 	rldicl  r3,r3,32,32
 26c:	4e 80 00 20 	blr

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2018-06-04 00:39:16 +10:00
..
boot Merge branch 'topic/kbuild' into next 2018-06-03 20:24:15 +10:00
configs powerpc/config: powernv_defconfig updates 2018-05-10 23:25:07 +10:00
crypto
include powerpc/64: optimises from64to32() 2018-06-04 00:39:16 +10:00
kernel powerpc/dma: remove unnecessary BUG() 2018-06-04 00:39:14 +10:00
kvm Merge branch 'topic/ppc-kvm' into next 2018-05-15 22:28:19 +10:00
lib powerpc/sstep: Fix emulate_step test if VSX not present 2018-06-04 00:39:14 +10:00
math-emu
mm powerpc/mm: Remove stale_map[] handling on non SMP processors 2018-06-04 00:39:16 +10:00
net
oprofile powerpc: Use sizeof(*foo) rather than sizeof(struct foo) 2018-03-20 16:47:53 +11:00
perf powerpc/perf: Unregister thread-imc if core-imc not supported 2018-06-03 20:43:37 +10:00
platforms powerpc/64s: Enable barrier_nospec based on firmware settings 2018-06-03 20:43:45 +10:00
purgatory
sysdev powerpc/xics: Add missing of_node_put() in error path 2018-06-03 20:43:35 +10:00
tools powerpc/kbuild: Use flags variables rather than overriding LD/CC/AS 2018-06-01 23:08:09 +10:00
xmon powerpc/64: Save stack pointer when we hard disable interrupts 2018-06-03 20:43:42 +10:00
Kconfig powerpc: always enable RTC_LIB 2018-06-03 20:43:33 +10:00
Kconfig.debug
Makefile powerpc/kbuild: Use flags variables rather than overriding LD/CC/AS 2018-06-01 23:08:09 +10:00
Makefile.postlink