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