Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0ae2d26f authored by Babu Moger's avatar Babu Moger Committed by David S. Miller
Browse files

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: default avatarBabu Moger <babu.moger@oracle.com>
Reviewed-by: default avatarRob Gardner <rob.gardner@oracle.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent adfae8a5
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ sparc64_boot:
	andn	%g1, PSTATE_AM, %g1
	wrpr	%g1, 0x0, %pstate
	ba,a,pt	%xcc, 1f
	 nop

	.globl	prom_finddev_name, prom_chosen_path, prom_root_node
	.globl	prom_getprop_name, prom_mmu_name, prom_peer_name
@@ -613,6 +614,7 @@ niagara_tlb_fixup:
	 nop

	ba,a,pt	%xcc, 80f
	 nop
niagara4_patch:
	call	niagara4_patch_copyops
	 nop
@@ -622,6 +624,7 @@ niagara4_patch:
	 nop

	ba,a,pt	%xcc, 80f
	 nop

niagara2_patch:
	call	niagara2_patch_copyops
@@ -632,6 +635,7 @@ niagara2_patch:
	 nop

	ba,a,pt	%xcc, 80f
	 nop

niagara_patch:
	call	niagara_patch_copyops
+1 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ do_stdfmna:
	call		handle_stdfmna
	 add		%sp, PTREGS_OFF, %o0
	ba,a,pt		%xcc, rtrap
	 nop
	.size		do_stdfmna,.-do_stdfmna

	.type		breakpoint_trap,#function
+1 −0
Original line number Diff line number Diff line
@@ -237,6 +237,7 @@ rt_continue: ldx [%sp + PTREGS_OFF + PT_V9_G1], %g1
		bne,pt			%xcc, user_rtt_fill_32bit
		 wrpr			%g1, %cwp
		ba,a,pt			%xcc, user_rtt_fill_64bit
		 nop

user_rtt_fill_fixup_dax:
		ba,pt	%xcc, user_rtt_fill_fixup_common
+1 −0
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ __spitfire_cee_trap_continue:
	 rd		%pc, %g7

	ba,a,pt		%xcc, 2f
	 nop

1:	ba,pt		%xcc, etrap_irq
	 rd		%pc, %g7
+1 −0
Original line number Diff line number Diff line
@@ -352,6 +352,7 @@ sun4v_mna:
	call	sun4v_do_mna
	 add	%sp, PTREGS_OFF, %o0
	ba,a,pt	%xcc, rtrap
	 nop

	/* Privileged Action.  */
sun4v_privact:
Loading