]> git.baikalelectronics.ru Git - kernel.git/commit
MIPS: memset: Fix CPU_DADDI_WORKAROUNDS `small_fixup' regression
authorMaciej W. Rozycki <macro@linux-mips.org>
Tue, 2 Oct 2018 11:50:11 +0000 (12:50 +0100)
committerPaul Burton <paul.burton@mips.com>
Fri, 5 Oct 2018 16:41:39 +0000 (09:41 -0700)
commit8e338ceb64395347faaf5c0b38d2a5fde111b4e7
tree2fa3342007c28f17123558aba2017b864aea4eb7
parent50f84a91c31b563f4b2daf6a2a18a48cbbe8a0a2
MIPS: memset: Fix CPU_DADDI_WORKAROUNDS `small_fixup' regression

Fix a commit ca7c52e97227 ("MIPS: memset.S: EVA & fault support for
small_memset") regression and remove assembly warnings:

arch/mips/lib/memset.S: Assembler messages:
arch/mips/lib/memset.S:243: Warning: Macro instruction expanded into multiple instructions in a branch delay slot

triggering with the CPU_DADDI_WORKAROUNDS option set and this code:

PTR_SUBU a2, t1, a0
jr ra
 PTR_ADDIU a2, 1

This is because with that option in place the DADDIU instruction, which
the PTR_ADDIU CPP macro expands to, becomes a GAS macro, which in turn
expands to an LI/DADDU (or actually ADDIU/DADDU) sequence:

 13c: 01a4302f  dsubu a2,t1,a0
 140: 03e00008  jr ra
 144: 24010001  li at,1
 148: 00c1302d  daddu a2,a2,at
...

Correct this by switching off the `noreorder' assembly mode and letting
GAS schedule this jump's delay slot, as there is nothing special about
it that would require manual scheduling.  With this change in place
correct code is produced:

 13c: 01a4302f  dsubu a2,t1,a0
 140: 24010001  li at,1
 144: 03e00008  jr ra
 148: 00c1302d  daddu a2,a2,at
...

Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
Signed-off-by: Paul Burton <paul.burton@mips.com>
Fixes: ca7c52e97227 ("MIPS: memset.S: EVA & fault support for small_memset")
Patchwork: https://patchwork.linux-mips.org/patch/20833/
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: stable@vger.kernel.org # 4.17+
arch/mips/lib/memset.S