mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-27 16:02:37 +00:00
build: target x86-64-v3 without floating-point contraction
This commit is contained in:
1 parent
6cee2dc0bd
commit
fd6b28c4b2
3 files changed
+25
-1
No files matched your search
@@ -407,6 +407,8 @@ add_executable(scalar_provenance_tests EXCLUDE_FROM_ALL
|
|||||||
target_link_libraries(scalar_provenance_tests fmt::fmt xbyak::xbyak)
|
target_link_libraries(scalar_provenance_tests fmt::fmt xbyak::xbyak)
|
||||||
target_include_directories(scalar_provenance_tests PRIVATE ${inc_headers})
|
target_include_directories(scalar_provenance_tests PRIVATE ${inc_headers})
|
||||||
|
|
||||||
|
add_executable(build_flags_tests EXCLUDE_FROM_ALL "${KYTY_TESTS_DIR}/BuildFlagsTests.cpp")
|
||||||
|
|
||||||
add_executable(page_manager_tests EXCLUDE_FROM_ALL
|
add_executable(page_manager_tests EXCLUDE_FROM_ALL
|
||||||
"${KYTY_TESTS_DIR}/PageManagerTests.cpp"
|
"${KYTY_TESTS_DIR}/PageManagerTests.cpp"
|
||||||
"${KYTY_SOURCE_DIR}/graphics/host_gpu/pageManager.cpp"
|
"${KYTY_SOURCE_DIR}/graphics/host_gpu/pageManager.cpp"
|
||||||
@@ -650,6 +652,7 @@ if(BUILD_TESTING)
|
|||||||
add_test(NAME image_page_table COMMAND $<TARGET_FILE:image_page_table_tests>)
|
add_test(NAME image_page_table COMMAND $<TARGET_FILE:image_page_table_tests>)
|
||||||
add_test(NAME memory_tracker COMMAND $<TARGET_FILE:memory_tracker_tests>)
|
add_test(NAME memory_tracker COMMAND $<TARGET_FILE:memory_tracker_tests>)
|
||||||
add_test(NAME page_manager COMMAND $<TARGET_FILE:page_manager_tests>)
|
add_test(NAME page_manager COMMAND $<TARGET_FILE:page_manager_tests>)
|
||||||
|
add_test(NAME build_flags COMMAND $<TARGET_FILE:build_flags_tests>)
|
||||||
add_test(NAME archive_file COMMAND $<TARGET_FILE:archive_file_tests>)
|
add_test(NAME archive_file COMMAND $<TARGET_FILE:archive_file_tests>)
|
||||||
add_test(NAME trophy_system COMMAND $<TARGET_FILE:trophy_system_tests>)
|
add_test(NAME trophy_system COMMAND $<TARGET_FILE:trophy_system_tests>)
|
||||||
add_test(NAME avplayer_file COMMAND $<TARGET_FILE:avplayer_file_tests>)
|
add_test(NAME avplayer_file COMMAND $<TARGET_FILE:avplayer_file_tests>)
|
||||||
@@ -743,6 +746,7 @@ if(BUILD_TESTING)
|
|||||||
image_page_table_tests
|
image_page_table_tests
|
||||||
memory_tracker_tests
|
memory_tracker_tests
|
||||||
page_manager_tests
|
page_manager_tests
|
||||||
|
build_flags_tests
|
||||||
archive_file_tests
|
archive_file_tests
|
||||||
trophy_system_tests
|
trophy_system_tests
|
||||||
avplayer_file_tests
|
avplayer_file_tests
|
||||||
|
|||||||
+4
-1
@@ -65,6 +65,8 @@ else()
|
|||||||
SET(CMAKE_NINJA_FORCE_RESPONSE_FILE 1 CACHE INTERNAL "")
|
SET(CMAKE_NINJA_FORCE_RESPONSE_FILE 1 CACHE INTERNAL "")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Guest code runs natively and needs x86-64-v3 (AVX2, BMI2, FMA), so every host has it.
|
||||||
|
# No FMA contraction: a * b + c keeps both roundings.
|
||||||
if(KYTY_CLANG_CL)
|
if(KYTY_CLANG_CL)
|
||||||
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
||||||
string(REGEX REPLACE "/W[0-4]" "/W3" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
string(REGEX REPLACE "/W[0-4]" "/W3" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
@@ -79,7 +81,7 @@ if(KYTY_CLANG_CL)
|
|||||||
string(REGEX REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
|
string(REGEX REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
|
||||||
string(REGEX REPLACE "/MD" "/MT" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
string(REGEX REPLACE "/MD" "/MT" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||||
|
|
||||||
set(KYTY_CPP_FLAGS "${KYTY_CPP_FLAGS} /utf-8 /Oy- /wd4244 /wd4305 /wd4800 /wd4345")
|
set(KYTY_CPP_FLAGS "${KYTY_CPP_FLAGS} /utf-8 /Oy- /clang:-march=x86-64-v3 /clang:-ffp-contract=off /wd4244 /wd4305 /wd4800 /wd4345")
|
||||||
|
|
||||||
if(KYTY_WARNINGS_ARE_ERRORS)
|
if(KYTY_WARNINGS_ARE_ERRORS)
|
||||||
#set(KYTY_CPP_FLAGS "${KYTY_CPP_FLAGS} /WX")
|
#set(KYTY_CPP_FLAGS "${KYTY_CPP_FLAGS} /WX")
|
||||||
@@ -103,6 +105,7 @@ elseif(CLANG OR GCC)
|
|||||||
else()
|
else()
|
||||||
set(KYTY_CPP_FLAGS "${KYTY_CPP_FLAGS} -fno-exceptions -fdiagnostics-color=always -finput-charset=UTF-8 -fexec-charset=UTF-8 -static-libgcc -static-libstdc++ -g -fno-strict-aliasing -fno-omit-frame-pointer -Wall -Wno-unused-value -fmessage-length=0")
|
set(KYTY_CPP_FLAGS "${KYTY_CPP_FLAGS} -fno-exceptions -fdiagnostics-color=always -finput-charset=UTF-8 -fexec-charset=UTF-8 -static-libgcc -static-libstdc++ -g -fno-strict-aliasing -fno-omit-frame-pointer -Wall -Wno-unused-value -fmessage-length=0")
|
||||||
endif()
|
endif()
|
||||||
|
set(KYTY_CPP_FLAGS "${KYTY_CPP_FLAGS} -march=x86-64-v3 -ffp-contract=off")
|
||||||
|
|
||||||
if(KYTY_WARNINGS_ARE_ERRORS)
|
if(KYTY_WARNINGS_ARE_ERRORS)
|
||||||
#set(KYTY_CPP_FLAGS "${KYTY_CPP_FLAGS} -Werror")
|
#set(KYTY_CPP_FLAGS "${KYTY_CPP_FLAGS} -Werror")
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
#if !defined(__AVX2__) || !defined(__BMI2__) || !defined(__FMA__)
|
||||||
|
#error "x86-64 builds target x86-64-v3"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
// (1 + 2^-23)^2 = 1 + 2^-22 + 2^-46; only a fused multiply-add keeps the 2^-46.
|
||||||
|
volatile float a = 1.0f + 0x1p-23f;
|
||||||
|
const float result = a * a - (1.0f + 0x1p-22f);
|
||||||
|
if (result != 0.0f) {
|
||||||
|
std::fprintf(stderr, "BuildFlagsTests: failed: a * a - b was contracted (%a)\n", result);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
std::puts("BuildFlagsTests: all cases passed");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in new issue
Block a user