Commit 8c30b001 authored by chenmiao's avatar chenmiao Committed by Stafford Horne
Browse files

openrisc: Add jump label support

Supported a complete jump_label implementation based on the ARM64 and
RV64 version and add the CONFIG_JUMP_LABEL=y to the defconfig.

Testing was conducted using a dedicated test module jump-label-test,
provided in the link below. For detailed steps, please refer to the
README also at the provided link.

Link: https://github.com/ChenMiaoi/GSoC-2025-Final-Report/tree/main/tests/jump-label-test

Test Environment:
  - Hardware: QEMU emulated OR1K
  - Kernel Version: 6.17.0-rc3-dirty
  - Configs: CONFIG_MODULES=y,CONFIG_MODULE_UNLOAD=y
  - Toolchain: or1k-none-linux-musl-gcc 15.1.0

Test Results:
$ insmod jump_label_test.ko
[   32.590000] Jump label performance test module loaded
[   35.250000] Normal branch time: 1241327150 ns (124 ns per iteration)
[   35.250000] Jump label (false) time: 706422700 ns (70 ns per iteration)
[   35.250000] Jump label (true) time: 708913450 ns (70 ns per iteration)
$ rmmod jump_label_test.ko
[   72.210000] Jump label test module unloaded

The results show approximately 43% improvement in branch performance
when using jump labels compared to traditional branches.

Link: https://lore.kernel.org/openrisc/aLsZ9S3X0OpKy1RM@antec/T/#u


Signed-off-by: default avatarchenmiao <chenmiao.ku@gmail.com>
Signed-off-by: default avatarStafford Horne <shorne@gmail.com>
parent 09a27fc3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
    |  microblaze: | TODO |
    |        mips: |  ok  |
    |       nios2: | TODO |
    |    openrisc: | TODO |
    |    openrisc: |  ok  |
    |      parisc: |  ok  |
    |     powerpc: |  ok  |
    |       riscv: |  ok  |
+2 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ config OPENRISC
	select GENERIC_PCI_IOMAP
	select GENERIC_IOREMAP
	select GENERIC_CPU_DEVICES
	select HAVE_ARCH_JUMP_LABEL
	select HAVE_ARCH_JUMP_LABEL_RELATIVE
	select HAVE_PCI
	select HAVE_UID16
	select HAVE_PAGE_SIZE_8KB
+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ CONFIG_EXPERT=y
# CONFIG_KALLSYMS is not set
CONFIG_BUILTIN_DTB_NAME="or1ksim"
CONFIG_HZ_100=y
CONFIG_JUMP_LABEL=y
CONFIG_MODULES=y
# CONFIG_BLOCK is not set
CONFIG_SLUB_TINY=y
+1 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ CONFIG_NR_CPUS=8
CONFIG_SMP=y
CONFIG_HZ_100=y
# CONFIG_OPENRISC_NO_SPR_SR_DSX is not set
CONFIG_JUMP_LABEL=y
# CONFIG_COMPAT_BRK is not set
CONFIG_NET=y
CONFIG_PACKET=y
+3 −0
Original line number Diff line number Diff line
@@ -9,4 +9,7 @@
/* or1k instructions are always 32 bits. */
#define	OPENRISC_INSN_SIZE		4

/* or1k nop instruction code */
#define OPENRISC_INSN_NOP     0x15000000U

#endif /* __ASM_OPENRISC_INSN_DEF_H */
Loading