History

Sorted out CMake on x86-64 and fixed silly XMM# bug introduced when working on Win64 stdargs.

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.

James Lyon committed 13 years ago

Commit 1caee8a1 parent e7a7efe10 files · +110 −38Browse files

Unified · Split

10 files
  1. CMakeLists.txt +33 −8
  2. Makefile +7 −6
  3. config.h.in +1 −1
  4. lib/libtcc1.c +7 −0
  5. libtcc.c +2 −0
  6. tcclib.h +0 −0
  7. tests/CMakeLists.txt +45 −14
  8. tests/Makefile +3 −4
  9. tests/tests2/Makefile +1 −1
  10. x86_64-gen.c +11 −4
CMakeLists.txt+33−8
@@ -43,6 +43,15 @@ else() · 42 unmodified lines
43 set(DOC_PATH share/doc/tcc)43 set(DOC_PATH share/doc/tcc)
44endif()44endif()
45 45
46if(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()
53endif()
54
46# Use two variables to keep CMake configuration variable names consistent55# Use two variables to keep CMake configuration variable names consistent
47set(TCC_BCHECK OFF CACHE BOOL "Enable bounds checking")56set(TCC_BCHECK OFF CACHE BOOL "Enable bounds checking")
48set(CONFIG_TCC_BCHECK ${TCC_BCHECK})57set(CONFIG_TCC_BCHECK ${TCC_BCHECK})
@@ -64,6 +73,12 @@ set(TCC_BUILD_C67 OFF CACHE BOOL "Build C67 cross compiler") · 15 unmodified lines
64set(TCC_ARM_VERSION ${TCC_ARM_VERSION_DEFAULT} CACHE STRING "ARM target CPU version")73set(TCC_ARM_VERSION ${TCC_ARM_VERSION_DEFAULT} CACHE STRING "ARM target CPU version")
65set_property(CACHE TCC_ARM_VERSION PROPERTY STRINGS 4 5 6 7)74set_property(CACHE TCC_ARM_VERSION PROPERTY STRINGS 4 5 6 7)
66 75
76if(WIN32)
77 set(CONFIG_TCCDIR ${CMAKE_INSTALL_PREFIX})
78else()
79 set(CONFIG_TCCDIR ${CMAKE_INSTALL_PREFIX}/lib/tcc)
80endif()
81
67file(STRINGS "VERSION" TCC_VERSION)82file(STRINGS "VERSION" TCC_VERSION)
68list(GET TCC_VERSION 0 TCC_VERSION)83list(GET TCC_VERSION 0 TCC_VERSION)
69include_directories(${CMAKE_BINARY_DIR})84include_directories(${CMAKE_BINARY_DIR})
@@ -123,8 +138,16 @@ endmacro() · 53 unmodified lines
123 138
124macro(make_tcc native_name cross_name cross_enabled definitions tcc_sources libtcc_ar libtcc_sources libtcc_includes)139macro(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
250if(WIN32)274if(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)
260else()285else()
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)
Makefile+7−6
@@ -221,7 +221,7 @@ lib/%/libtcc1.a : FORCE $(PROGS_CROSS) · 220 unmodified lines
221FORCE:221FORCE:
222 222
223# install223# install
224TCC_INCLUDES = stdarg.h stddef.h stdbool.h float.h varargs.h tcclib.h224TCC_INCLUDES = stdarg.h stddef.h stdbool.h float.h varargs.h
225INSTALL=install225INSTALL=install
226ifdef STRIP_BINARIES226ifdef STRIP_BINARIES
227INSTALLBIN=$(INSTALL) -s227INSTALLBIN=$(INSTALL) -s
@@ -246,7 +246,7 @@ endif · 18 unmodified lines
246ifneq ($(LIBTCC1),)246ifneq ($(LIBTCC1),)
247 $(INSTALL) -m644 $(LIBTCC1) "$(tccdir)"247 $(INSTALL) -m644 $(LIBTCC1) "$(tccdir)"
248endif248endif
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)"
252ifdef DISABLE_STATIC252ifdef 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"
267endif267endif
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"
273endif273endif
274 274
275uninstall:275uninstall:
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)
config.h.in+1−1
@@ -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_WIN324#cmakedefine CONFIG_WIN32
lib/libtcc1.c+7−0
@@ -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 when614/* Avoid including stdlib.h because it is not easily available when
611 cross compiling */615 cross compiling */
612extern void *malloc(unsigned long long);616extern void *malloc(unsigned long long);
617extern void free(void*);
618extern void abort(void);
619#endif
613 620
614enum __va_arg_type {621enum __va_arg_type {
615 __va_gen_reg, __va_float_reg, __va_stack622 __va_gen_reg, __va_float_reg, __va_stack
libtcc.c+2−0
@@ -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);
tcclib.hrenamed from include/tcclib.h+0−0

File renamed without changes.

tests/CMakeLists.txt+45−14
@@ -1,17 +1,22 @@
1include_directories(${CMAKE_SOURCE_DIR})1include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR})
2 2
3set(TCC_CFLAGS -I${CMAKE_SOURCE_DIR})3set(TCC_CFLAGS -I${CMAKE_SOURCE_DIR} -I${CMAKE_SOURCE_DIR}/include -B${CMAKE_BINARY_DIR})
4if(WIN32)4if(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)
6else()
7 set(TCC_MATH_LDFLAGS -lm)
8 set(LIBTCC_LDFLAGS -ldl -lm)
6endif()9endif()
7 10
8add_executable(abitest-cc abitest.c)11add_executable(abitest-cc abitest.c)
9target_link_libraries(abitest-cc libtcc)12if(NOT WIN32)
13 target_link_libraries(abitest-cc libtcc dl)
14endif()
10add_test(NAME abitest-cc WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND abitest-cc lib_path=${CMAKE_BINARY_DIR} include=${CMAKE_SOURCE_DIR}/include)15add_test(NAME abitest-cc WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND abitest-cc lib_path=${CMAKE_BINARY_DIR} include=${CMAKE_SOURCE_DIR}/include)
11 16
12set(ABITEST_TCC abitest-tcc${CMAKE_EXECUTABLE_SUFFIX})17set(ABITEST_TCC abitest-tcc${CMAKE_EXECUTABLE_SUFFIX})
13get_property(LIBTCC_LIB TARGET libtcc PROPERTY LOCATION)18get_property(LIBTCC_LIB TARGET libtcc PROPERTY LOCATION)
14add_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)19add_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)
15add_custom_target(abitest-tcc-exe ALL DEPENDS ${ABITEST_TCC})20add_custom_target(abitest-tcc-exe ALL DEPENDS ${ABITEST_TCC})
16 21
17add_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)22add_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
19add_executable(tcctest-cc tcctest.c)24add_executable(tcctest-cc tcctest.c)
20target_link_libraries(tcctest-cc libtcc)25target_link_libraries(tcctest-cc libtcc)
21set_target_properties(tcctest-cc PROPERTIES COMPILE_FLAGS -std=gnu99)26set_target_properties(tcctest-cc PROPERTIES COMPILE_FLAGS -std=gnu99)
22if(WIN32)
23 set_target_properties(tcctest-cc PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR};${CMAKE_SOURCE_DIR}/include")
24endif()
25 27
26find_package(PythonInterp)28find_package(PythonInterp)
27if(PYTHONINTERP_FOUND)29if(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()
40endif()71endif()
41 72
42set(MORETESTS73set(MORETESTS
@@ -99,5 +130,5 @@ if(WIN32) · 56 unmodified lines
99endif()130endif()
100foreach(testfile ${MORETESTS})131foreach(testfile ${MORETESTS})
101 add_test(NAME ${testfile} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests2132 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)
103endforeach()134endforeach()
tests/Makefile+3−4
@@ -43,9 +43,9 @@ ifeq ($(TARGETOS),Darwin) · 42 unmodified lines
43endif43endif
44 44
45# run local version of tcc with local libraries and includes45# run local version of tcc with local libraries and includes
46TCCFLAGS = -B$(TOP) -I$(TOP)46TCCFLAGS = -B$(TOP) -I$(TOP) -I$(top_srcdir) -I$(top_srcdir)/include
47ifdef CONFIG_WIN3247ifdef 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)
49endif49endif
50 50
51TCC = $(TOP)/tcc $(TCCFLAGS)51TCC = $(TOP)/tcc $(TCCFLAGS)
@@ -82,8 +82,7 @@ moretests: · 30 unmodified lines
82# test.ref - generate using gcc82# test.ref - generate using gcc
83# copy only tcclib.h so GCC's stddef and stdarg will be used83# copy only tcclib.h so GCC's stddef and stdarg will be used
84test.ref: tcctest.c84test.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 test88# auto test
tests/tests2/Makefile+1−1
@@ -2,7 +2,7 @@ TOP = ../.. · 1 unmodified line
2include $(TOP)/Makefile2include $(TOP)/Makefile
3VPATH = $(top_srcdir)/tests/tests23VPATH = $(top_srcdir)/tests/tests2
4 4
5TCCFLAGS = -B$(TOP)5TCCFLAGS = -B$(TOP) -I$(top_srcdir)/include
6ifdef CONFIG_WIN326ifdef 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)
8endif8endif
x86_64-gen.c+11−4
@@ -23,7 +23,7 @@ · 22 unmodified lines
23#ifdef TARGET_DEFS_ONLY23#ifdef TARGET_DEFS_ONLY
24 24
25/* number of available registers */25/* number of available registers */
26#define NB_REGS 2226#define NB_REGS 24
27#define NB_ASM_REGS 827#define NB_ASM_REGS 8
28 28
29/* a register can belong to several classes. The classes must be29/* a register can belong to several classes. The classes must be
@@ -45,6 +45,8 @@ · 15 unmodified lines
45#define RC_XMM3 0x800045#define RC_XMM3 0x8000
46#define RC_XMM4 0x1000046#define RC_XMM4 0x10000
47#define RC_XMM5 0x2000047#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
146static unsigned long func_sub_sp_offset;153static 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);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t