linux/arch/mips/lib
Maciej W. Rozycki 233d3688bf MIPS: memset: Fix CPU_DADDI_WORKAROUNDS `small_fixup' regression
commit 148b9aba99 upstream.

Fix a commit 8a8158c85e ("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: 8a8158c85e ("MIPS: memset.S: EVA & fault support for small_memset")
Patchwork: https://patchwork.linux-mips.org/patch/20833/
Cc: Ralf Baechle <ralf@linux-mips.org>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2018-12-16 22:09:35 +00:00
..
ashldi3.c [MIPS] Fix optimization for size build. 2006-06-19 17:39:16 +01:00
ashrdi3.c [MIPS] Fix optimization for size build. 2006-06-19 17:39:16 +01:00
bitops.c MIPS: Remove unneeded volatile from arch/mips/lib/bitops.c 2013-05-08 01:19:06 +02:00
cmpdi2.c [MIPS] Add __cmpdi2 2007-08-27 02:17:00 +01:00
csum_partial.S MIPS: csum_partial.S CPU_DADDI_WORKAROUNDS bug fix 2014-05-13 00:29:39 +02:00
delay.c MIPS: __delay ABI-dependent subtraction simplification 2014-05-30 21:01:08 +02:00
dump_tlb.c Revert "MIPS: Allow ASID size to be determined at boot time." 2013-05-16 20:35:42 +02:00
iomap-pci.c mips: use the the PCI controller's io_map_base 2012-01-31 23:20:30 +02:00
iomap.c PCI: Cleanup the includes of <linux/pci.h> 2007-05-02 19:02:35 -07:00
libgcc.h MIPS: libgcc.h: Checkpatch cleanup 2010-04-12 17:26:15 +01:00
lshrdi3.c [MIPS] Fix optimization for size build. 2006-06-19 17:39:16 +01:00
Makefile MIPS: Make irqflags.h functions preempt-safe for non-mipsr2 cpus 2012-11-09 10:59:21 +01:00
memcpy.S MIPS: lib: memcpy: Restore NOP on delay slot before returning to caller 2014-12-01 10:26:05 +00:00
memset.S MIPS: memset: Fix CPU_DADDI_WORKAROUNDS `small_fixup' regression 2018-12-16 22:09:35 +00:00
mips-atomic.c MIPS: MT: Remove SMTC support 2014-05-24 00:07:01 +02:00
r3k_dump_tlb.c Revert "MIPS: Allow ASID size to be determined at boot time." 2013-05-16 20:35:42 +02:00
strlen_user.S MIPS: lib: strlen_user: Add EVA support 2014-03-26 23:09:13 +01:00
strncpy_user.S MIPS: __strncpy_from_user_asm CPU_DADDI_WORKAROUNDS bug fix 2014-05-13 00:29:38 +02:00
strnlen_user.S MIPS: lib: strnlen_user: Add EVA support 2014-03-26 23:09:13 +01:00
ucmpdi2.c [MIPS] Export __ucmpdi2 to modules. 2008-03-12 14:14:41 +00:00
uncached.c mips: delete non-required instances of include <linux/init.h> 2014-01-24 22:39:56 +01:00