Skip to content

Commit 3c4af00

Browse files
committed
add dtoa_xjb
1 parent cd86390 commit 3c4af00

File tree

3 files changed

+2480
-7
lines changed

3 files changed

+2480
-7
lines changed

CMakeLists.txt

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,58 @@ if(MSVC)
2222
endif()
2323

2424

25+
26+
# ------------------------------------------------------------------------------
27+
# native arch
28+
option(ARCH_NATIVE "Enable native arch" OFF)
29+
if(ARCH_NATIVE AND CMAKE_C_COMPILER_ID MATCHES "GNU|Clang|Intel|MSVC")
30+
include(CheckCCompilerFlag)
31+
include(CheckCSourceRuns)
32+
33+
set(ISA_LIST
34+
"AVX512|/arch:AVX512|-mavx512f|#include <immintrin.h>\nint main(){__m512i a = _mm512_setzero_si512()\\\;return 0\\\;}"
35+
"AVX2|/arch:AVX2|-mavx2|#include <immintrin.h>\nint main(){__m256i a = _mm256_setzero_si256()\\\;return 0\\\;}"
36+
"SSE2|/arch:SSE2|-msse2|#include <immintrin.h>\nint main(){__m128i a = _mm_setzero_si128()\\\;return 0\\\;}"
37+
)
38+
39+
foreach(ISA_INFO IN LISTS ISA_LIST)
40+
string(REPLACE "|" ";" ISA_INFO "${ISA_INFO}")
41+
list(GET ISA_INFO 0 ISA_NAME)
42+
if(MSVC)
43+
list(GET ISA_INFO 1 ISA_FLAG)
44+
else()
45+
list(GET ISA_INFO 2 ISA_FLAG)
46+
endif()
47+
list(GET ISA_INFO 3 ISA_CHECK_CODE)
48+
49+
message(STATUS "Check ${ISA_NAME} support")
50+
file(WRITE "${CMAKE_BINARY_DIR}/${ISA_NAME}_check.c" "${ISA_CHECK_CODE}")
51+
try_run(RUN_RESULT COMPILE_RESULT
52+
"${CMAKE_BINARY_DIR}/${ISA_NAME}_check"
53+
"${CMAKE_BINARY_DIR}/${ISA_NAME}_check.c"
54+
COMPILE_DEFINITIONS "${ISA_FLAG}"
55+
COMPILE_OUTPUT_VARIABLE COMPILE_OUTPUT
56+
RUN_OUTPUT_VARIABLE RUN_OUTPUT
57+
)
58+
59+
if(COMPILE_RESULT AND RUN_RESULT EQUAL 0)
60+
if(NOT ISA_FLAG_NATIVE)
61+
set(ISA_FLAG_NATIVE ${ISA_FLAG})
62+
endif()
63+
add_definitions(-DHAVE_${ISA_NAME})
64+
message(STATUS "Define HAVE_${ISA_NAME}=1")
65+
endif()
66+
endforeach()
67+
68+
if(MSVC AND ISA_FLAG_NATIVE)
69+
add_compile_options(${ISA_FLAG_NATIVE})
70+
elseif(NOT MSVC)
71+
add_compile_options(-march=native)
72+
endif()
73+
endif()
74+
75+
76+
2577
# ------------------------------------------------------------------------------
2678
# vendor
2779
set(vendors "")
@@ -173,5 +225,3 @@ endif()
173225

174226
# copy test data
175227
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/data DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
176-
177-

src/dtoa/benchmark.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -576,18 +576,25 @@ static void dtoa_func_register_all(void) {
576576
dtoa_func_register(swift)
577577
dtoa_func_register(fmtlib)
578578
dtoa_func_register(fpconv)
579-
#ifndef _MSC_VER
580-
dtoa_func_register(milo)
581-
dtoa_func_register(emyg)
582-
dtoa_func_register(ryu)
583-
#endif
584579
dtoa_func_register(grisu3)
585580
dtoa_func_register(schubfach)
586581
dtoa_func_register(erthink)
587582
dtoa_func_register(grisu_exact)
588583
dtoa_func_register(dragonbox)
589584
dtoa_func_register(ryu_mod)
590585
dtoa_func_register(yy)
586+
#ifndef _MSC_VER
587+
dtoa_func_register(milo)
588+
dtoa_func_register(emyg)
589+
dtoa_func_register(ryu)
590+
#endif
591+
#ifdef HAVE_SSE2
592+
dtoa_func_register(xjb_sse)
593+
#endif
594+
#ifdef HAVE_AVX512
595+
dtoa_func_register(xjb_avx512)
596+
#endif
597+
591598
// dtoa_func_register(printf) // not shortest, too slow
592599
}
593600

0 commit comments

Comments
 (0)