Skip to content

Commit

Permalink
riscv: support building double-float modules
Browse files Browse the repository at this point in the history
The riscv32 toolchain for GCC-12 provided by kernel.org contains libgcc.a
compiled for double-float. To link to it we have to adjust how we build
U-Boot.

As U-Boot actually does not use floating point at all this should not
make a significant difference for the produced binaries.

Signed-off-by: Heinrich Schuchardt <[email protected]>
Reviewed-by: Rick Chen <[email protected]>
Reviewed-by: Leo Yu-Chi Liang <[email protected]>
  • Loading branch information
xypron authored and Leo Yu-Chi Liang committed Oct 20, 2022
1 parent f22db44 commit e67f34f
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
15 changes: 15 additions & 0 deletions arch/riscv/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,21 @@ config RISCV_ISA_C
when building U-Boot, which results in compressed instructions in the
U-Boot binary.

config RISCV_ISA_F
bool "Standard extension for Single-Precision Floating Point"
default y
help
Adds "F" to the ISA string passed to the compiler.

config RISCV_ISA_D
bool "Standard extension for Double-Precision Floating Point"
depends on RISCV_ISA_F
default y
help
Adds "D" to the ISA string passed to the compiler and changes the
riscv32 ABI from ilp32 to ilp32d and the riscv64 ABI from lp64 to
lp64d.

config RISCV_ISA_A
def_bool y

Expand Down
15 changes: 12 additions & 3 deletions arch/riscv/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,22 @@

ifeq ($(CONFIG_ARCH_RV64I),y)
ARCH_BASE = rv64im
ABI = lp64
ABI_BASE = lp64
endif
ifeq ($(CONFIG_ARCH_RV32I),y)
ARCH_BASE = rv32im
ABI = ilp32
ABI_BASE = ilp32
endif
ifeq ($(CONFIG_RISCV_ISA_A),y)
ARCH_A = a
endif
ifeq ($(CONFIG_RISCV_ISA_F),y)
ARCH_F = f
endif
ifeq ($(CONFIG_RISCV_ISA_D),y)
ARCH_D = d
ABI_D = d
endif
ifeq ($(CONFIG_RISCV_ISA_C),y)
ARCH_C = c
endif
Expand All @@ -24,7 +31,9 @@ ifeq ($(CONFIG_CMODEL_MEDANY),y)
CMODEL = medany
endif

RISCV_MARCH = $(ARCH_BASE)$(ARCH_A)$(ARCH_C)

RISCV_MARCH = $(ARCH_BASE)$(ARCH_A)$(ARCH_F)$(ARCH_D)$(ARCH_C)
ABI = $(ABI_BASE)$(ABI_D)

# Newer binutils versions default to ISA spec version 20191213 which moves some
# instructions from the I extension to the Zicsr and Zifencei extensions.
Expand Down

0 comments on commit e67f34f

Please sign in to comment.