kernel-ark/arch/sparc/lib
Babu Moger 0ae2d26ffe arch/sparc: Avoid DCTI Couples
Avoid un-intended DCTI Couples. Use of DCTI couples is deprecated.
Also address the "Programming Note" for optimal performance.

Here is the complete text from Oracle SPARC Architecture Specs.

6.3.4.7 DCTI Couples
"A delayed control transfer instruction (DCTI) in the delay slot of
another DCTI is referred to as a “DCTI couple”. The use of DCTI couples
is deprecated in the Oracle SPARC Architecture; no new software should
place a DCTI in the delay slot of another DCTI, because on future Oracle
SPARC Architecture implementations DCTI couples may execute either
slowly or differently than the programmer assumes it will.

SPARC V8 and SPARC V9 Compatibility Note
The SPARC V8 architecture left behavior undefined for a DCTI couple. The
SPARC V9 architecture defined behavior in that case, but as of
UltraSPARC Architecture 2005, use of DCTI couples was deprecated.
Software should not expect high performance from DCTI couples, and
performance of DCTI couples should be expected to decline further in
future processors.

Programming Note
As noted in TABLE 6-5 on page 115, an annulled branch-always
(branch-always with a = 1) instruction is not architecturally a DCTI.
However, since not all implementations make that distinction, for
optimal performance, a DCTI should not be placed in the instruction word
immediately following an annulled branch-always instruction (BA,A or
BPA,A)."

Signed-off-by: Babu Moger <babu.moger@oracle.com>
Reviewed-by: Rob Gardner <rob.gardner@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-03-27 21:51:40 -07:00
..
ashldi3.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
ashrdi3.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
atomic32.c locking/atomic, arch/sparc: Implement atomic{,64}_fetch_{add,sub,and,or,xor}() 2016-06-16 10:48:30 +02:00
atomic_64.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
bitext.c sparc/srmmu: clear trailing edge of bitmap properly 2013-03-31 19:29:12 -04:00
bitops.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
blockops.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
bzero.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
checksum_32.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
checksum_64.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
clear_page.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
cmpdi2.c
copy_in_user.S sparc64: Convert copy_in_user to accurate exception reporting. 2016-10-24 11:31:58 -07:00
copy_page.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
copy_user.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
COPYING.LIB
csum_copy_from_user.S
csum_copy_to_user.S
csum_copy.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
divdi3.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
ffs.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
GENbzero.S
GENcopy_from_user.S sparc64: Convert GENcopy_{from,to}_user to accurate exception reporting. 2016-10-24 11:31:58 -07:00
GENcopy_to_user.S sparc64: Convert GENcopy_{from,to}_user to accurate exception reporting. 2016-10-24 11:31:58 -07:00
GENmemcpy.S sparc64: Convert GENcopy_{from,to}_user to accurate exception reporting. 2016-10-24 11:31:58 -07:00
GENpage.S
GENpatch.S
hweight.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
iomap.c sparc: switch to GENERIC_PCI_IOMAP 2011-12-04 15:59:49 +02:00
ipcsum.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
libgcc.h
locks.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
lshrdi3.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
Makefile sparc64: Delete now unused user copy fixup functions. 2016-10-24 21:26:04 -07:00
mcount.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
memcmp.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
memcpy.S sparc32: debride memcpy.S a bit 2016-08-07 23:55:49 -04:00
memmove.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
memscan_32.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
memscan_64.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
memset.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
muldi3.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
NG2copy_from_user.S sparc64: Convert NG2copy_{from,to}_user to accurate exception reporting. 2016-10-24 20:46:44 -07:00
NG2copy_to_user.S sparc64: Convert NG2copy_{from,to}_user to accurate exception reporting. 2016-10-24 20:46:44 -07:00
NG2memcpy.S arch/sparc: Avoid DCTI Couples 2017-03-27 21:51:40 -07:00
NG2patch.S
NG4clear_page.S sparc64: Niagara-4 bzero/memset, plus use MRU stores in page copy. 2012-10-05 13:45:26 -07:00
NG4copy_from_user.S sparc64: Convert NG4copy_{from,to}_user to accurate exception reporting. 2016-10-24 18:58:05 -07:00
NG4copy_page.S sparc64: Niagara-4 bzero/memset, plus use MRU stores in page copy. 2012-10-05 13:45:26 -07:00
NG4copy_to_user.S sparc64: Convert NG4copy_{from,to}_user to accurate exception reporting. 2016-10-24 18:58:05 -07:00
NG4memcpy.S arch/sparc: Avoid DCTI Couples 2017-03-27 21:51:40 -07:00
NG4memset.S arch/sparc: Avoid DCTI Couples 2017-03-27 21:51:40 -07:00
NG4patch.S sparc64: Niagara-4 bzero/memset, plus use MRU stores in page copy. 2012-10-05 13:45:26 -07:00
NGbzero.S
NGcopy_from_user.S sparc64: Convert NGcopy_{from,to}_user to accurate exception reporting. 2016-10-24 19:32:12 -07:00
NGcopy_to_user.S sparc64: Convert NGcopy_{from,to}_user to accurate exception reporting. 2016-10-24 19:32:12 -07:00
NGmemcpy.S arch/sparc: Avoid DCTI Couples 2017-03-27 21:51:40 -07:00
NGpage.S sparc64: Add SPARC-T4 optimized memcpy. 2012-09-27 00:35:11 -07:00
NGpatch.S
PeeCeeI.c sparc64: update IO access functions in PeeCeeI 2014-07-21 21:43:18 -07:00
strlen.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
strncmp_32.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
strncmp_64.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
U1copy_from_user.S sparc64: Convert U1copy_{from,to}_user to accurate exception reporting. 2016-10-24 11:32:12 -07:00
U1copy_to_user.S sparc64: Convert U1copy_{from,to}_user to accurate exception reporting. 2016-10-24 11:32:12 -07:00
U1memcpy.S sparc64: Convert U1copy_{from,to}_user to accurate exception reporting. 2016-10-24 11:32:12 -07:00
U3copy_from_user.S sparc64: Convert U3copy_{from,to}_user to accurate exception reporting. 2016-10-24 21:20:35 -07:00
U3copy_to_user.S sparc64: Convert U3copy_{from,to}_user to accurate exception reporting. 2016-10-24 21:20:35 -07:00
U3memcpy.S sparc64: Convert U3copy_{from,to}_user to accurate exception reporting. 2016-10-24 21:20:35 -07:00
U3patch.S
ucmpdi2.c sparc32: add ucmpdi2 2012-05-19 15:23:57 -07:00
udivdi3.S sparc32: Kill off software 32-bit multiply/divide routines. 2012-05-15 11:23:47 -07:00
VISsave.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00
xor.S sparc: move exports to definitions 2016-08-07 23:55:43 -04:00