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

Commit c1a0e9bc authored by Paul Burton's avatar Paul Burton Committed by Ralf Baechle
Browse files

MIPS: Allow compact branch policy to be changed



When debugging it can be helpful to change the policy for compiler use
of MIPSr6 compact branches, in order to rule out or home in on their
involvement in bugs. Allow the GCC -mcompact-branches= flag to be set
via Kconfig under the "Kernel hacking" menu.

Signed-off-by: default avatarPaul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/11178/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 05513992
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -113,4 +113,40 @@ config SPINLOCK_TEST
	help
	  Add several files to the debugfs to test spinlock speed.

if CPU_MIPSR6

choice
	prompt "Compact branch policy"
	default MIPS_COMPACT_BRANCHES_OPTIMAL

config MIPS_COMPACT_BRANCHES_NEVER
	bool "Never (force delay slot branches)"
	help
	  Pass the -mcompact-branches=never flag to the compiler in order to
	  force it to always emit branches with delay slots, and make no use
	  of the compact branch instructions introduced by MIPSr6. This is
	  useful if you suspect there may be an issue with compact branches in
	  either the compiler or the CPU.

config MIPS_COMPACT_BRANCHES_OPTIMAL
	bool "Optimal (use where beneficial)"
	help
	  Pass the -mcompact-branches=optimal flag to the compiler in order for
	  it to make use of compact branch instructions where it deems them
	  beneficial, and use branches with delay slots elsewhere. This is the
	  default compiler behaviour, and should be used unless you have a
	  reason to choose otherwise.

config MIPS_COMPACT_BRANCHES_ALWAYS
	bool "Always (force compact branches)"
	help
	  Pass the -mcompact-branches=always flag to the compiler in order to
	  force it to always emit compact branches, making no use of branch
	  instructions with delay slots. This can result in more compact code
	  which may be beneficial in some scenarios.

endchoice

endif # CPU_MIPSR6

endmenu
+4 −0
Original line number Diff line number Diff line
@@ -204,6 +204,10 @@ toolchain-msa := $(call cc-option-yn,$(mips-cflags) -mhard-float -mfp64 -Wa$(
cflags-$(toolchain-msa)			+= -DTOOLCHAIN_SUPPORTS_MSA
endif

cflags-$(CONFIG_MIPS_COMPACT_BRANCHES_NEVER)	+= -mcompact-branches=never
cflags-$(CONFIG_MIPS_COMPACT_BRANCHES_OPTIMAL)	+= -mcompact-branches=optimal
cflags-$(CONFIG_MIPS_COMPACT_BRANCHES_ALWAYS)	+= -mcompact-branches=always

#
# Firmware support
#