From 9909769c0ab5daf78152717e935674c208d24fd0 Mon Sep 17 00:00:00 2001 From: Hongyu Liu Date: Tue, 15 Apr 2025 12:26:32 +0200 Subject: [PATCH] updates to make 64bit compiling --- bare-metal-bsp | 2 +- benchmarks/coremark/CMakeLists.txt | 9 ++++- benchmarks/coremark/CMakePresets.json | 47 ++++++++++++++++++++++++-- benchmarks/dhrystone/CMakeLists.txt | 11 ++++++ benchmarks/dhrystone/CMakePresets.json | 47 ++++++++++++++++++++++++-- hello-world/hello.c | 9 ++--- 6 files changed, 115 insertions(+), 10 deletions(-) diff --git a/bare-metal-bsp b/bare-metal-bsp index e0807b8..853d1c3 160000 --- a/bare-metal-bsp +++ b/bare-metal-bsp @@ -1 +1 @@ -Subproject commit e0807b8cddb07c2eb91dfe0b230d3121897b7a96 +Subproject commit 853d1c33ecab1a7096bed7c3f94893d0a27437f3 diff --git a/benchmarks/coremark/CMakeLists.txt b/benchmarks/coremark/CMakeLists.txt index 05c75a1..16981bd 100644 --- a/benchmarks/coremark/CMakeLists.txt +++ b/benchmarks/coremark/CMakeLists.txt @@ -3,6 +3,12 @@ project(coremark C) set(TARGET coremark) #set(CMAKE_BUILD_TYPE Release) +option(HAVE_NO_INIT_FINI "Enable NO_INIT_FINI" OFF) + +if(HAVE_NO_INIT_FINI) + #if HAVE_NO_INIT_FINI is ON + add_definitions(-DHAVE_NO_INIT_FINI) +endif() # Source files @@ -21,7 +27,8 @@ set(SOURCES # Create executable add_executable(coremark ${SOURCES}) target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}/cm) -target_compile_options(${TARGET} PRIVATE -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -fno-common -funroll-loops -finline-functions -falign-functions=16 -falign-jumps=4 -falign-loops=4 -finline-limit=1000 -fno-if-conversion2 -fselective-scheduling -fno-crossjumping -freorder-blocks-and-partition -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -fno-common -funroll-loops -finline-functions -falign-functions=16 -falign-jumps=4 -falign-loops=4 -finline-limit=1000 -fno-if-conversion2 -fselective-scheduling -fno-crossjumping -freorder-blocks-and-partition ) +target_compile_options(${TARGET} PRIVATE -mcmodel=medany) +target_compile_options(${TARGET} PRIVATE -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -fno-builtin-strnlen -fno-common -funroll-loops -finline-functions -falign-functions=16 -falign-jumps=4 -falign-loops=4 -finline-limit=1000 -fno-if-conversion2 -fselective-scheduling -fno-crossjumping -freorder-blocks-and-partition -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -fno-common -funroll-loops -finline-functions -falign-functions=16 -falign-jumps=4 -falign-loops=4 -finline-limit=1000 -fno-if-conversion2 -fselective-scheduling -fno-crossjumping -freorder-blocks-and-partition ) target_compile_definitions(${TARGET} PRIVATE PERFORMANCE_RUN=1 CLOCKS_PER_SEC=10000000 FLAGS_STR="" PERFORMANCE_RUN=1 CLOCKS_PER_SEC=10000000 ITERATIONS=600) set(BOARD "iss" CACHE STRING "Target board") diff --git a/benchmarks/coremark/CMakePresets.json b/benchmarks/coremark/CMakePresets.json index 1814549..345cd99 100644 --- a/benchmarks/coremark/CMakePresets.json +++ b/benchmarks/coremark/CMakePresets.json @@ -10,14 +10,57 @@ }, "configurePresets": [ { - "name": "dbg", + "name": "debug", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv32imc.cmake" } }, { - "name": "rel", + "name": "debug_moon", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "BOARD": "moonlight", + "HAVE_NO_INIT_FINI": "ON", + "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv32imc.cmake" + } + }, + { + "name": "debug_tgc", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "BOARD": "tgc_vp", + "HAVE_NO_INIT_FINI": "ON", + "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv32imc.cmake" + } + }, + { + "name": "debug_64", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv64gc.cmake" + } + }, + { + "name": "debug_64_moon", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "BOARD": "moonlight", + "HAVE_NO_INIT_FINI": "ON", + "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv64gc.cmake" + } + }, + { + "name": "debug_64_tgc", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "BOARD": "tgc_vp", + "HAVE_NO_INIT_FINI": "ON", + "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv64gc.cmake" + } + }, + { + "name": "release", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv32imc.cmake" diff --git a/benchmarks/dhrystone/CMakeLists.txt b/benchmarks/dhrystone/CMakeLists.txt index e27f81d..3854668 100644 --- a/benchmarks/dhrystone/CMakeLists.txt +++ b/benchmarks/dhrystone/CMakeLists.txt @@ -2,9 +2,18 @@ cmake_minimum_required(VERSION 3.21) project(dhrystone C) set(TARGET dhrystone) +option(HAVE_NO_INIT_FINI "Enable NO_INIT_FINI" OFF) + +if(HAVE_NO_INIT_FINI) + #if HAVE_NO_INIT_FINI is ON + add_definitions(-DHAVE_NO_INIT_FINI) +endif() + set(ITERATIONS 50000) # 20000 for TGC add_executable(${TARGET} dhry_1.c dhry_2.c dhry_stubs.c) +target_compile_options(${TARGET} PRIVATE -mcmodel=medany) +#target_compile_options(${TARGET} PRIVATE -mcmodel=medany -fPIC) target_include_directories(${TARGET} PRIVATE ${CMAKE_CURRENT_LIST_DIR}) target_compile_options(${TARGET} PRIVATE -fno-inline -fno-builtin-printf -fno-common -Wno-implicit -funroll-loops -fpeel-loops -fgcse-sm -fgcse-las) target_compile_definitions(${TARGET} PRIVATE ITERATIONS=${ITERATIONS} HZ=32768 TIME NO_INIT) @@ -13,6 +22,8 @@ set(BOARD "iss" CACHE STRING "Target board") add_subdirectory(../../bare-metal-bsp bsp) target_link_libraries(${TARGET} PRIVATE bsp) target_link_options(${TARGET} PRIVATE LINKER:--wrap=scanf) +#target_link_options(${TARGET} PRIVATE LINKER:--wrap=scanf -Wl,--no-gc-sections) + target_link_options(${TARGET} PRIVATE -Wl,-Map=${TARGET}.map) include(CMakePrintHelpers) cmake_print_properties(TARGETS ${TARGET} PROPERTIES COMPILE_DEFINITIONS COMPILE_OPTIONS LINK_OPTIONS INTERFACE_LINK_OPTIONS) diff --git a/benchmarks/dhrystone/CMakePresets.json b/benchmarks/dhrystone/CMakePresets.json index 1814549..345cd99 100644 --- a/benchmarks/dhrystone/CMakePresets.json +++ b/benchmarks/dhrystone/CMakePresets.json @@ -10,14 +10,57 @@ }, "configurePresets": [ { - "name": "dbg", + "name": "debug", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv32imc.cmake" } }, { - "name": "rel", + "name": "debug_moon", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "BOARD": "moonlight", + "HAVE_NO_INIT_FINI": "ON", + "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv32imc.cmake" + } + }, + { + "name": "debug_tgc", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "BOARD": "tgc_vp", + "HAVE_NO_INIT_FINI": "ON", + "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv32imc.cmake" + } + }, + { + "name": "debug_64", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv64gc.cmake" + } + }, + { + "name": "debug_64_moon", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "BOARD": "moonlight", + "HAVE_NO_INIT_FINI": "ON", + "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv64gc.cmake" + } + }, + { + "name": "debug_64_tgc", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "BOARD": "tgc_vp", + "HAVE_NO_INIT_FINI": "ON", + "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv64gc.cmake" + } + }, + { + "name": "release", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", "CMAKE_TOOLCHAIN_FILE": "../../bare-metal-bsp/cmake/rv32imc.cmake" diff --git a/hello-world/hello.c b/hello-world/hello.c index 2d574b8..090d3bd 100644 --- a/hello-world/hello.c +++ b/hello-world/hello.c @@ -15,11 +15,12 @@ int factorial(int i) { } return result; } +extern volatile uintptr_t tohost; -void write_tohost(char* string) { - volatile uint64_t payload[4] = {64, 0, (uintptr_t)string, - (strlen(string) + 1)}; - tohost = (uintptr_t)payload; +void write_tohost(char *string) { + volatile uint64_t payload[4] = {64, 0, (uintptr_t)string, + (strlen(string) + 1)}; + tohost = (uintptr_t)payload; } int main() {