I removed the XMM6/7 registers from the register list because they are not used on Win64 however they are necessary for parameter passing on x86-64. I have now restored them but not marked them with RC_FLOAT so they will not be used except for parameter passing.
Unified · Split
| @@ -43,6 +43,15 @@ else() · 42 unmodified lines | ||
| 43 | 43 | set(DOC_PATH share/doc/tcc) |
| 44 | 44 | endif() |
| 45 | 45 | |
| 46 | +if(NOT WIN32) | |
| 47 | + if(EXISTS /usr/lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu/crti.o) | |
| 48 | + set(CONFIG_LDDIR lib/${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) | |
| 49 | + set(CONFIG_MULTIARCHDIR ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) | |
| 50 | + elseif(EXISTS /usr/lib64/crti.o) | |
| 51 | + set(CONFIG_LDDIR lib64) | |
| 52 | + endif() | |
| 53 | +endif() | |
| 54 | + | |
| 46 | 55 | # Use two variables to keep CMake configuration variable names consistent |
| 47 | 56 | set(TCC_BCHECK OFF CACHE BOOL "Enable bounds checking") |
| 48 | 57 | set(CONFIG_TCC_BCHECK ${TCC_BCHECK}) |
| @@ -64,6 +73,12 @@ set(TCC_BUILD_C67 OFF CACHE BOOL "Build C67 cross compiler") · 15 unmodified lines | ||
| 64 | 73 | set(TCC_ARM_VERSION ${TCC_ARM_VERSION_DEFAULT} CACHE STRING "ARM target CPU version") |
| 65 | 74 | set_property(CACHE TCC_ARM_VERSION PROPERTY STRINGS 4 5 6 7) |
| 66 | 75 | |
| 76 | +if(WIN32) | |
| 77 | + set(CONFIG_TCCDIR ${CMAKE_INSTALL_PREFIX}) | |
| 78 | +else() | |
| 79 | + set(CONFIG_TCCDIR ${CMAKE_INSTALL_PREFIX}/lib/tcc) | |
| 80 | +endif() | |
| 81 | + | |
| 67 | 82 | file(STRINGS "VERSION" TCC_VERSION) |
| 68 | 83 | list(GET TCC_VERSION 0 TCC_VERSION) |
| 69 | 84 | include_directories(${CMAKE_BINARY_DIR}) |
| @@ -123,8 +138,16 @@ endmacro() · 53 unmodified lines | ||
| 123 | 138 | |
| 124 | 139 | macro(make_tcc native_name cross_name cross_enabled definitions tcc_sources libtcc_ar libtcc_sources libtcc_includes) |
| 125 | 140 | if (xx${native_name} STREQUAL xx${TCC_NATIVE_TARGET}) |
| 141 | + set(TCC_NATIVE_DEFINITIONS ${definitions}) | |
| 142 | + if("${CONFIG_MULTIARCHDIR}" STRGREATER "") | |
| 143 | + set(TCC_NATIVE_DEFINITIONS ${TCC_NATIVE_DEFINITIONS} CONFIG_MULTIARCHDIR="${CONFIG_MULTIARCHDIR}") | |
| 144 | + endif() | |
| 145 | + if("${CONFIG_LDDIR}" STRGREATER "") | |
| 146 | + set(TCC_NATIVE_DEFINITIONS ${TCC_NATIVE_DEFINITIONS} CONFIG_LDDIR="${CONFIG_LDDIR}") | |
| 147 | + endif() | |
| 148 | + | |
| 126 | 149 | set(TCC_NATIVE_FLAGS) |
| 127 | − foreach(make_tcc_def ${definitions}) | |
| 150 | + foreach(make_tcc_def ${TCC_NATIVE_DEFINITIONS}) | |
| 128 | 151 | set(TCC_NATIVE_FLAGS ${TCC_NATIVE_FLAGS} -D${make_tcc_def}) |
| 129 | 152 | endforeach() |
| 130 | 153 | |
| @@ -144,16 +167,17 @@ macro(make_tcc native_name cross_name cross_enabled definitions tcc_sources libt · 13 unmodified lines | ||
| 144 | 167 | set_target_properties(libtcc PROPERTIES OUTPUT_NAME tcc PREFIX lib LINK_FLAGS "-Wl,--output-def,libtcc.def") |
| 145 | 168 | add_executable(tcc tcc.c) |
| 146 | 169 | target_link_libraries(tcc libtcc) |
| 147 | − install(TARGETS tcc libtcc RUNTIME DESTINATION ${EXE_PATH} LIBRARY DESTINATION ${NATIVE_LIB_PATH}) | |
| 148 | − set_target_properties(tcc libtcc PROPERTIES COMPILE_DEFINITIONS "${definitions}") | |
| 170 | + if(NOT WIN32) | |
| 171 | + target_link_libraries(tcc dl) | |
| 172 | + endif() | |
| 173 | + install(TARGETS tcc libtcc RUNTIME DESTINATION ${EXE_PATH} LIBRARY DESTINATION ${NATIVE_LIB_PATH} ARCHIVE DESTINATION ${NATIVE_LIB_PATH}) | |
| 174 | + set_target_properties(tcc libtcc PROPERTIES COMPILE_DEFINITIONS "${TCC_NATIVE_DEFINITIONS}") | |
| 149 | 175 | |
| 150 | 176 | if("${libtcc_sources}" STRGREATER "") |
| 151 | − make_libtcc1("" tcc "${libtcc_ar}" "${definitions}" "${libtcc_includes}" "${libtcc_sources}") | |
| 177 | + make_libtcc1("" tcc "${libtcc_ar}" "${TCC_NATIVE_DEFINITIONS}" "${libtcc_includes}" "${libtcc_sources}") | |
| 152 | 178 | endif() |
| 153 | 179 | endif() |
| 154 | − endif() | |
| 155 | − | |
| 156 | − if(${cross_enabled}) | |
| 180 | + elseif(${cross_enabled}) | |
| 157 | 181 | add_executable(${cross_name}-tcc tcc.c) |
| 158 | 182 | set_target_properties(${cross_name}-tcc PROPERTIES COMPILE_DEFINITIONS "ONE_SOURCE;${definitions}") |
| 159 | 183 | install(TARGETS ${cross_name}-tcc RUNTIME DESTINATION ${EXE_PATH}) |
| @@ -250,6 +274,7 @@ endif() · 90 unmodified lines | ||
| 250 | 274 | if(WIN32) |
| 251 | 275 | file(GLOB WIN32_DEFS win32/lib/*.def) |
| 252 | 276 | install(FILES ${WIN32_DEFS} DESTINATION lib) |
| 277 | + install(FILES tcclib.h DESTINATION include) | |
| 253 | 278 | install(DIRECTORY include/ DESTINATION include) |
| 254 | 279 | install(DIRECTORY win32/include/ DESTINATION include) |
| 255 | 280 | install(DIRECTORY win32/examples/ DESTINATION examples) |
| @@ -258,7 +283,7 @@ if(WIN32) · 2 unmodified lines | ||
| 258 | 283 | install(FILES ${CMAKE_BINARY_DIR}/libtcc.dll.a DESTINATION libtcc RENAME libtcc.a) |
| 259 | 284 | install(FILES libtcc.h DESTINATION libtcc) |
| 260 | 285 | else() |
| 261 | − install(FILES libtcc.h DESTINATION include) | |
| 286 | + install(FILES libtcc.h tcclib.h DESTINATION include) | |
| 262 | 287 | install(DIRECTORY include/ DESTINATION lib/tcc/include) |
| 263 | 288 | install(DIRECTORY win32/include/ DESTINATION lib/tcc/win32/include) |
| 264 | 289 | install(DIRECTORY include/ DESTINATION lib/tcc/win32/include) |
| @@ -221,7 +221,7 @@ lib/%/libtcc1.a : FORCE $(PROGS_CROSS) · 220 unmodified lines | ||
| 221 | 221 | FORCE: |
| 222 | 222 | |
| 223 | 223 | # install |
| 224 | −TCC_INCLUDES = stdarg.h stddef.h stdbool.h float.h varargs.h tcclib.h | |
| 224 | +TCC_INCLUDES = stdarg.h stddef.h stdbool.h float.h varargs.h | |
| 225 | 225 | INSTALL=install |
| 226 | 226 | ifdef STRIP_BINARIES |
| 227 | 227 | INSTALLBIN=$(INSTALL) -s |
| @@ -246,7 +246,7 @@ endif · 18 unmodified lines | ||
| 246 | 246 | ifneq ($(LIBTCC1),) |
| 247 | 247 | $(INSTALL) -m644 $(LIBTCC1) "$(tccdir)" |
| 248 | 248 | endif |
| 249 | − $(INSTALL) -m644 $(addprefix $(top_srcdir)/include/,$(TCC_INCLUDES)) "$(tccdir)/include" | |
| 249 | + $(INSTALL) -m644 $(addprefix $(top_srcdir)/include/,$(TCC_INCLUDES)) $(top_srcdir)/tcclib.h "$(tccdir)/include" | |
| 250 | 250 | mkdir -p "$(libdir)" |
| 251 | 251 | $(INSTALL) -m755 $(LIBTCC) "$(libdir)" |
| 252 | 252 | ifdef DISABLE_STATIC |
| @@ -265,17 +265,18 @@ ifeq ($(ARCH),x86-64) · 12 unmodified lines | ||
| 265 | 265 | $(INSTALL) -m644 lib/i386/libtcc1.a "$(tccdir)/i386" |
| 266 | 266 | cp -r "$(tccdir)/include" "$(tccdir)/i386" |
| 267 | 267 | endif |
| 268 | − $(INSTALL) -m644 win32/lib/*.def "$(tccdir)/win32/lib" | |
| 268 | + $(INSTALL) -m644 $(top_srcdir)/win32/lib/*.def "$(tccdir)/win32/lib" | |
| 269 | 269 | $(INSTALL) -m644 lib/i386-win32/libtcc1.a "$(tccdir)/win32/lib/32" |
| 270 | 270 | $(INSTALL) -m644 lib/x86_64-win32/libtcc1.a "$(tccdir)/win32/lib/64" |
| 271 | − cp -r win32/include/. "$(tccdir)/win32/include" | |
| 272 | − cp -r include/. "$(tccdir)/win32/include" | |
| 271 | + cp -r $(top_srcdir)/win32/include/. "$(tccdir)/win32/include" | |
| 272 | + cp -r $(top_srcdir)/include/. "$(tccdir)/win32/include" | |
| 273 | 273 | endif |
| 274 | 274 | |
| 275 | 275 | uninstall: |
| 276 | 276 | rm -fv $(foreach P,$(PROGS),"$(bindir)/$P") |
| 277 | 277 | rm -fv $(foreach P,$(LIBTCC1),"$(tccdir)/$P") |
| 278 | 278 | rm -fv $(foreach P,$(TCC_INCLUDES),"$(tccdir)/include/$P") |
| 279 | + rm -fv "$(tccdir)/include/tcclib.h" | |
| 279 | 280 | rm -fv "$(docdir)/tcc-doc.html" "$(mandir)/man1/tcc.1" "$(infodir)/tcc-doc.info" |
| 280 | 281 | rm -fv "$(libdir)/$(LIBTCC)" "$(includedir)/libtcc.h" |
| 281 | 282 | rm -fv "$(libdir)/libtcc.so*" |
| @@ -297,7 +298,7 @@ install: $(PROGS) $(TCCLIBS) $(TCCDOCS) · 15 unmodified lines | ||
| 297 | 298 | $(INSTALL) -m644 $(LIBTCC1) $(top_srcdir)/win32/lib/*.def "$(tccdir)/lib" |
| 298 | 299 | cp -r $(top_srcdir)/win32/include/. "$(tccdir)/include" |
| 299 | 300 | cp -r $(top_srcdir)/win32/examples/. "$(tccdir)/examples" |
| 300 | − $(INSTALL) -m644 $(addprefix $(top_srcdir)/include/,$(TCC_INCLUDES)) "$(tccdir)/include" | |
| 301 | + $(INSTALL) -m644 $(addprefix $(top_srcdir)/include/,$(TCC_INCLUDES)) $(top_srcdir)/tcclib.h "$(tccdir)/include" | |
| 301 | 302 | $(INSTALL) -m644 tcc-doc.html $(top_srcdir)/win32/tcc-win32.txt "$(tccdir)/doc" |
| 302 | 303 | $(INSTALL) -m644 $(top_srcdir)/libtcc.h $(LIBTCC_EXTRA) "$(tccdir)/libtcc" |
| 303 | 304 | $(INSTALL) -m644 $(LIBTCC) $(tccdir) |
| @@ -1,4 +1,4 @@ | ||
| 1 | −#define CONFIG_TCCDIR "${CMAKE_INSTALL_PREFIX}" | |
| 1 | +#define CONFIG_TCCDIR "${CONFIG_TCCDIR}" | |
| 2 | 2 | #define TCC_VERSION "${TCC_VERSION}" |
| 3 | 3 | |
| 4 | 4 | #cmakedefine CONFIG_WIN32 |
| @@ -607,9 +607,16 @@ unsigned long long __fixunsxfdi (long double a1) · 606 unmodified lines | ||
| 607 | 607 | |
| 608 | 608 | #if defined(__x86_64__) && !defined(_WIN64) |
| 609 | 609 | |
| 610 | +#ifndef __TINYC__ | |
| 611 | +#include <stdlib.h> | |
| 612 | +#include <stdio.h> | |
| 613 | +#else | |
| 610 | 614 | /* Avoid including stdlib.h because it is not easily available when |
| 611 | 615 | cross compiling */ |
| 612 | 616 | extern void *malloc(unsigned long long); |
| 617 | +extern void free(void*); | |
| 618 | +extern void abort(void); | |
| 619 | +#endif | |
| 613 | 620 | |
| 614 | 621 | enum __va_arg_type { |
| 615 | 622 | __va_gen_reg, __va_float_reg, __va_stack |
| @@ -1052,11 +1052,13 @@ LIBTCCAPI void tcc_delete(TCCState *s1) · 1051 unmodified lines | ||
| 1052 | 1052 | dynarray_reset(&s1->priv_sections, &s1->nb_priv_sections); |
| 1053 | 1053 | |
| 1054 | 1054 | /* free any loaded DLLs */ |
| 1055 | +#ifdef TCC_IS_NATIVE | |
| 1055 | 1056 | for ( i = 0; i < s1->nb_loaded_dlls; i++) { |
| 1056 | 1057 | DLLReference *ref = s1->loaded_dlls[i]; |
| 1057 | 1058 | if ( ref->handle ) |
| 1058 | 1059 | dlclose(ref->handle); |
| 1059 | 1060 | } |
| 1061 | +#endif | |
| 1060 | 1062 | |
| 1061 | 1063 | /* free loaded dlls array */ |
| 1062 | 1064 | dynarray_reset(&s1->loaded_dlls, &s1->nb_loaded_dlls); |
File renamed without changes.
| @@ -1,17 +1,22 @@ | ||
| 1 | −include_directories(${CMAKE_SOURCE_DIR}) | |
| 1 | +include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR}) | |
| 2 | 2 | |
| 3 | −set(TCC_CFLAGS -I${CMAKE_SOURCE_DIR}) | |
| 3 | +set(TCC_CFLAGS -I${CMAKE_SOURCE_DIR} -I${CMAKE_SOURCE_DIR}/include -B${CMAKE_BINARY_DIR}) | |
| 4 | 4 | if(WIN32) |
| 5 | − set(TCC_CFLAGS ${TCC_CFLAGS} -I${CMAKE_SOURCE_DIR}/include -I${CMAKE_SOURCE_DIR}/win32/include) | |
| 5 | + set(TCC_CFLAGS ${TCC_CFLAGS} -I${CMAKE_SOURCE_DIR}/win32/include) | |
| 6 | +else() | |
| 7 | + set(TCC_MATH_LDFLAGS -lm) | |
| 8 | + set(LIBTCC_LDFLAGS -ldl -lm) | |
| 6 | 9 | endif() |
| 7 | 10 | |
| 8 | 11 | add_executable(abitest-cc abitest.c) |
| 9 | −target_link_libraries(abitest-cc libtcc) | |
| 12 | +if(NOT WIN32) | |
| 13 | + target_link_libraries(abitest-cc libtcc dl) | |
| 14 | +endif() | |
| 10 | 15 | add_test(NAME abitest-cc WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND abitest-cc lib_path=${CMAKE_BINARY_DIR} include=${CMAKE_SOURCE_DIR}/include) |
| 11 | 16 | |
| 12 | 17 | set(ABITEST_TCC abitest-tcc${CMAKE_EXECUTABLE_SUFFIX}) |
| 13 | 18 | get_property(LIBTCC_LIB TARGET libtcc PROPERTY LOCATION) |
| 14 | −add_custom_command(OUTPUT ${ABITEST_TCC} COMMAND tcc ${TCC_CFLAGS} -g -I${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/abitest.c ${LIBTCC_LIB} -o ${ABITEST_TCC} DEPENDS abitest.c) | |
| 19 | +add_custom_command(OUTPUT ${ABITEST_TCC} COMMAND tcc ${TCC_CFLAGS} -g ${CMAKE_CURRENT_SOURCE_DIR}/abitest.c ${LIBTCC_LDFLAGS} ${LIBTCC_LIB} -o ${ABITEST_TCC} DEPENDS tcc abitest.c) | |
| 15 | 20 | add_custom_target(abitest-tcc-exe ALL DEPENDS ${ABITEST_TCC}) |
| 16 | 21 | |
| 17 | 22 | add_test(NAME abitest-tcc WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${ABITEST_TCC} lib_path=${CMAKE_BINARY_DIR} include=${CMAKE_SOURCE_DIR}/include) |
| @@ -19,9 +24,6 @@ add_test(NAME abitest-tcc WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_ · 1 unmodified line | ||
| 19 | 24 | add_executable(tcctest-cc tcctest.c) |
| 20 | 25 | target_link_libraries(tcctest-cc libtcc) |
| 21 | 26 | set_target_properties(tcctest-cc PROPERTIES COMPILE_FLAGS -std=gnu99) |
| 22 | −if(WIN32) | |
| 23 | − set_target_properties(tcctest-cc PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR};${CMAKE_SOURCE_DIR}/include") | |
| 24 | −endif() | |
| 25 | 27 | |
| 26 | 28 | find_package(PythonInterp) |
| 27 | 29 | if(PYTHONINTERP_FOUND) |
| @@ -29,14 +31,43 @@ if(PYTHONINTERP_FOUND) · 1 unmodified line | ||
| 29 | 31 | if(WIN32) |
| 30 | 32 | set(TCC_TEST_CFLAGS ${TCC_TEST_CFLAGS} -I${CMAKE_SOURCE_DIR}/win32/include/winapi) |
| 31 | 33 | endif() |
| 32 | − set(TCC_TEST_SOURCE ${TCC_TEST_CFLAGS} -run ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c) | |
| 34 | + set(TCC_TEST_SOURCE ${TCC_TEST_CFLAGS} ${TCC_MATH_LDFLAGS} -run ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c) | |
| 33 | 35 | set(TCC_TEST_RUN ${TCC_TEST_CFLAGS} ${TCC_NATIVE_FLAGS} -DONE_SOURCE -run ${CMAKE_SOURCE_DIR}/tcc.c) |
| 34 | 36 | get_property(TCC TARGET tcc PROPERTY LOCATION) |
| 35 | 37 | get_property(TCCTESTCC TARGET tcctest-cc PROPERTY LOCATION) |
| 36 | − set(TCCTEST_PY ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.py ${TCCTESTCC} ${TCC}) | |
| 37 | − add_test(test1 ${TCCTEST_PY} ${TCC_TEST_SOURCE}) | |
| 38 | − add_test(test2 ${TCCTEST_PY} ${TCC_TEST_RUN} ${TCC_TEST_SOURCE}) | |
| 39 | − add_test(test3 ${TCCTEST_PY} ${TCC_TEST_RUN} ${TCC_TEST_RUN} ${TCC_TEST_SOURCE}) | |
| 38 | + set(TCCTEST_PY ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.py ${TCCTESTCC}) | |
| 39 | + add_test(test1 ${TCCTEST_PY} ${TCC} ${TCC_TEST_SOURCE}) | |
| 40 | + add_test(test2 ${TCCTEST_PY} ${TCC} ${TCC_TEST_RUN} ${TCC_TEST_SOURCE}) | |
| 41 | + add_test(test3 ${TCCTEST_PY} ${TCC} ${TCC_TEST_RUN} ${TCC_TEST_RUN} ${TCC_TEST_SOURCE}) | |
| 42 | + | |
| 43 | + # Object + link output | |
| 44 | + set(TEST4 test4${CMAKE_EXECUTABLE_SUFFIX}) | |
| 45 | + add_custom_command(OUTPUT test4.o COMMAND tcc ${TCC_TEST_CFLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c -c -o test4.o DEPENDS tcc tcctest.c) | |
| 46 | + add_custom_command(OUTPUT ${TEST4} COMMAND tcc ${TCC_TEST_CFLAGS} test4.o -o ${TEST4} DEPENDS tcc test4.o) | |
| 47 | + add_custom_target(test4-exe ALL DEPENDS ${TEST4}) | |
| 48 | + add_test(test4 ${TCCTEST_PY} ${CMAKE_CURRENT_BINARY_DIR}/${TEST4}) | |
| 49 | + | |
| 50 | + # Dynamic output | |
| 51 | + set(TEST5 test5${CMAKE_EXECUTABLE_SUFFIX}) | |
| 52 | + add_custom_command(OUTPUT ${TEST5} COMMAND tcc ${TCC_TEST_CFLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c -o ${TEST5} DEPENDS tcc tcctest.c) | |
| 53 | + add_custom_target(test5-exe ALL DEPENDS ${TEST5}) | |
| 54 | + add_test(test5 ${TCCTEST_PY} ${CMAKE_CURRENT_BINARY_DIR}/${TEST5}) | |
| 55 | + | |
| 56 | + if(TCC_BCHECK) | |
| 57 | + # Dynamic output + bound check | |
| 58 | + set(TEST6 test6${CMAKE_EXECUTABLE_SUFFIX}) | |
| 59 | + add_custom_command(OUTPUT ${TEST5} COMMAND tcc ${TCC_TEST_CFLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c -b -o ${TEST6} DEPENDS tcc tcctest.c) | |
| 60 | + add_custom_target(test6-exe ALL DEPENDS ${TEST6}) | |
| 61 | + add_test(test6 ${TCCTEST_PY} ${CMAKE_CURRENT_BINARY_DIR}/${TEST6}) | |
| 62 | + endif() | |
| 63 | + | |
| 64 | + if(NOT WIN32 AND NOT TCC_NATIVE_TARGET STREQUAL "x86_64") | |
| 65 | + # Static output | |
| 66 | + set(TEST7 test7${CMAKE_EXECUTABLE_SUFFIX}) | |
| 67 | + add_custom_command(OUTPUT ${TEST7} COMMAND tcc ${TCC_TEST_CFLAGS} ${CMAKE_CURRENT_SOURCE_DIR}/tcctest.c -static -o ${TEST7} DEPENDS tcc tcctest.c) | |
| 68 | + add_custom_target(test7-exe ALL DEPENDS ${TEST7}) | |
| 69 | + add_test(test7 ${TCCTEST_PY} ${CMAKE_CURRENT_BINARY_DIR}/${TEST7}) | |
| 70 | + endif() | |
| 40 | 71 | endif() |
| 41 | 72 | |
| 42 | 73 | set(MORETESTS |
| @@ -99,5 +130,5 @@ if(WIN32) · 56 unmodified lines | ||
| 99 | 130 | endif() |
| 100 | 131 | foreach(testfile ${MORETESTS}) |
| 101 | 132 | add_test(NAME ${testfile} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests2 |
| 102 | − COMMAND tcc ${TCC_CFLAGS} -run ${testfile}.c - arg1 arg2 arg3 arg4 | ${DIFF} - ${testfile}.expect) | |
| 133 | + COMMAND tcc ${TCC_CFLAGS} ${TCC_MATH_LDFLAGS} -run ${testfile}.c - arg1 arg2 arg3 arg4 | ${DIFF} - ${testfile}.expect) | |
| 103 | 134 | endforeach() |
| @@ -43,9 +43,9 @@ ifeq ($(TARGETOS),Darwin) · 42 unmodified lines | ||
| 43 | 43 | endif |
| 44 | 44 | |
| 45 | 45 | # run local version of tcc with local libraries and includes |
| 46 | −TCCFLAGS = -B$(TOP) -I$(TOP) | |
| 46 | +TCCFLAGS = -B$(TOP) -I$(TOP) -I$(top_srcdir) -I$(top_srcdir)/include | |
| 47 | 47 | ifdef CONFIG_WIN32 |
| 48 | − TCCFLAGS = -B$(top_srcdir)/win32 -I$(top_srcdir)/include -I$(TOP) -L$(TOP) | |
| 48 | + TCCFLAGS = -B$(top_srcdir)/win32 -I$(top_srcdir) -I$(top_srcdir)/include -I$(TOP) -L$(TOP) | |
| 49 | 49 | endif |
| 50 | 50 | |
| 51 | 51 | TCC = $(TOP)/tcc $(TCCFLAGS) |
| @@ -82,8 +82,7 @@ moretests: · 30 unmodified lines | ||
| 82 | 82 | # test.ref - generate using gcc |
| 83 | 83 | # copy only tcclib.h so GCC's stddef and stdarg will be used |
| 84 | 84 | test.ref: tcctest.c |
| 85 | − cp $(top_srcdir)/include/tcclib.h . | |
| 86 | − gcc -o tcctest.gcc $< -I. $(CPPFLAGS) -w $(CFLAGS) $(NATIVE_DEFINES) -std=gnu99 -O0 -fno-omit-frame-pointer $(LDFLAGS) | |
| 85 | + gcc -o tcctest.gcc $< -I$(top_srcdir) $(CPPFLAGS) -w $(CFLAGS) $(NATIVE_DEFINES) -std=gnu99 -O0 -fno-omit-frame-pointer $(LDFLAGS) | |
| 87 | 86 | ./tcctest.gcc > $@ |
| 88 | 87 | |
| 89 | 88 | # auto test |
| @@ -2,7 +2,7 @@ TOP = ../.. · 1 unmodified line | ||
| 2 | 2 | include $(TOP)/Makefile |
| 3 | 3 | VPATH = $(top_srcdir)/tests/tests2 |
| 4 | 4 | |
| 5 | −TCCFLAGS = -B$(TOP) | |
| 5 | +TCCFLAGS = -B$(TOP) -I$(top_srcdir)/include | |
| 6 | 6 | ifdef CONFIG_WIN32 |
| 7 | 7 | TCCFLAGS = -B$(top_srcdir)/win32 -I$(top_srcdir)/include -L$(TOP) |
| 8 | 8 | endif |
| @@ -23,7 +23,7 @@ · 22 unmodified lines | ||
| 23 | 23 | #ifdef TARGET_DEFS_ONLY |
| 24 | 24 | |
| 25 | 25 | /* number of available registers */ |
| 26 | −#define NB_REGS 22 | |
| 26 | +#define NB_REGS 24 | |
| 27 | 27 | #define NB_ASM_REGS 8 |
| 28 | 28 | |
| 29 | 29 | /* a register can belong to several classes. The classes must be |
| @@ -45,6 +45,8 @@ · 15 unmodified lines | ||
| 45 | 45 | #define RC_XMM3 0x8000 |
| 46 | 46 | #define RC_XMM4 0x10000 |
| 47 | 47 | #define RC_XMM5 0x20000 |
| 48 | +#define RC_XMM6 0x40000 | |
| 49 | +#define RC_XMM7 0x80000 | |
| 48 | 50 | #define RC_IRET RC_RAX /* function return: integer register */ |
| 49 | 51 | #define RC_LRET RC_RDX /* function return: second integer register */ |
| 50 | 52 | #define RC_FRET RC_XMM0 /* function return: float register */ |
| @@ -140,7 +142,12 @@ ST_DATA const int reg_classes[NB_REGS] = { · 89 unmodified lines | ||
| 140 | 142 | /* xmm2 */ RC_FLOAT | RC_XMM2, |
| 141 | 143 | /* xmm3 */ RC_FLOAT | RC_XMM3, |
| 142 | 144 | /* xmm4 */ RC_FLOAT | RC_XMM4, |
| 143 | − /* xmm5 */ RC_FLOAT | RC_XMM5 /* only up to xmm5: xmm6-15 must be callee saved on Win64 */ | |
| 145 | + /* xmm5 */ RC_FLOAT | RC_XMM5, | |
| 146 | + /* xmm6 an xmm7 are included so gv() can be used on them, | |
| 147 | + but they are not tagged with RC_FLOAT because they are | |
| 148 | + callee saved on Windows */ | |
| 149 | + RC_XMM6, | |
| 150 | + RC_XMM7 | |
| 144 | 151 | }; |
| 145 | 152 | |
| 146 | 153 | static unsigned long func_sub_sp_offset; |
| @@ -499,7 +506,7 @@ void load(int r, SValue *sv) · 352 unmodified lines | ||
| 499 | 506 | o(0xc0 + REG_VALUE(v) + REG_VALUE(r)*8); |
| 500 | 507 | } |
| 501 | 508 | } else if (r == TREG_ST0) { |
| 502 | − assert((v == TREG_XMM0) || (v == TREG_XMM1)); | |
| 509 | + assert((v >= TREG_XMM0) || (v <= TREG_XMM7)); | |
| 503 | 510 | /* gen_cvt_ftof(VT_LDOUBLE); */ |
| 504 | 511 | /* movsd %xmmN,-0x10(%rsp) */ |
| 505 | 512 | o(0x110ff2); |
| @@ -1173,7 +1180,7 @@ void gfunc_call(int nb_args) · 667 unmodified lines | ||
| 1173 | 1180 | --sse_reg; |
| 1174 | 1181 | r = gv(RC_FLOAT); |
| 1175 | 1182 | o(0x50); /* push $rax */ |
| 1176 | − /* movq %xmm0, (%rsp) */ | |
| 1183 | + /* movq %xmmN, (%rsp) */ | |
| 1177 | 1184 | o(0xd60f66); |
| 1178 | 1185 | o(0x04 + REG_VALUE(r)*8); |
| 1179 | 1186 | o(0x24); |