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
4343 set(DOC_PATH share/doc/tcc)
4444 endif()
4545
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+
4655 # Use two variables to keep CMake configuration variable names consistent
4756 set(TCC_BCHECK OFF CACHE BOOL "Enable bounds checking")
4857 set(CONFIG_TCC_BCHECK ${TCC_BCHECK})
@@ -64,6 +73,12 @@ set(TCC_BUILD_C67 OFF CACHE BOOL "Build C67 cross compiler") · 15 unmodified lines
6473 set(TCC_ARM_VERSION ${TCC_ARM_VERSION_DEFAULT} CACHE STRING "ARM target CPU version")
6574 set_property(CACHE TCC_ARM_VERSION PROPERTY STRINGS 4 5 6 7)
6675
76+if(WIN32)
77+ set(CONFIG_TCCDIR ${CMAKE_INSTALL_PREFIX})
78+else()
79+ set(CONFIG_TCCDIR ${CMAKE_INSTALL_PREFIX}/lib/tcc)
80+endif()
81+
6782 file(STRINGS "VERSION" TCC_VERSION)
6883 list(GET TCC_VERSION 0 TCC_VERSION)
6984 include_directories(${CMAKE_BINARY_DIR})
@@ -123,8 +138,16 @@ endmacro() · 53 unmodified lines
123138
124139 macro(make_tcc native_name cross_name cross_enabled definitions tcc_sources libtcc_ar libtcc_sources libtcc_includes)
125140 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+
126149 set(TCC_NATIVE_FLAGS)
127− foreach(make_tcc_def ${definitions})
150+ foreach(make_tcc_def ${TCC_NATIVE_DEFINITIONS})
128151 set(TCC_NATIVE_FLAGS ${TCC_NATIVE_FLAGS} -D${make_tcc_def})
129152 endforeach()
130153
@@ -144,16 +167,17 @@ macro(make_tcc native_name cross_name cross_enabled definitions tcc_sources libt · 13 unmodified lines
144167 set_target_properties(libtcc PROPERTIES OUTPUT_NAME tcc PREFIX lib LINK_FLAGS "-Wl,--output-def,libtcc.def")
145168 add_executable(tcc tcc.c)
146169 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}")
149175
150176 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}")
152178 endif()
153179 endif()
154− endif()
155−
156− if(${cross_enabled})
180+ elseif(${cross_enabled})
157181 add_executable(${cross_name}-tcc tcc.c)
158182 set_target_properties(${cross_name}-tcc PROPERTIES COMPILE_DEFINITIONS "ONE_SOURCE;${definitions}")
159183 install(TARGETS ${cross_name}-tcc RUNTIME DESTINATION ${EXE_PATH})
@@ -250,6 +274,7 @@ endif() · 90 unmodified lines
250274 if(WIN32)
251275 file(GLOB WIN32_DEFS win32/lib/*.def)
252276 install(FILES ${WIN32_DEFS} DESTINATION lib)
277+ install(FILES tcclib.h DESTINATION include)
253278 install(DIRECTORY include/ DESTINATION include)
254279 install(DIRECTORY win32/include/ DESTINATION include)
255280 install(DIRECTORY win32/examples/ DESTINATION examples)
@@ -258,7 +283,7 @@ if(WIN32) · 2 unmodified lines
258283 install(FILES ${CMAKE_BINARY_DIR}/libtcc.dll.a DESTINATION libtcc RENAME libtcc.a)
259284 install(FILES libtcc.h DESTINATION libtcc)
260285 else()
261− install(FILES libtcc.h DESTINATION include)
286+ install(FILES libtcc.h tcclib.h DESTINATION include)
262287 install(DIRECTORY include/ DESTINATION lib/tcc/include)
263288 install(DIRECTORY win32/include/ DESTINATION lib/tcc/win32/include)
264289 install(DIRECTORY include/ DESTINATION lib/tcc/win32/include)
Makefile+7−6
@@ -221,7 +221,7 @@ lib/%/libtcc1.a : FORCE $(PROGS_CROSS) · 220 unmodified lines
221221 FORCE:
222222
223223 # 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
225225 INSTALL=install
226226 ifdef STRIP_BINARIES
227227 INSTALLBIN=$(INSTALL) -s
@@ -246,7 +246,7 @@ endif · 18 unmodified lines
246246 ifneq ($(LIBTCC1),)
247247 $(INSTALL) -m644 $(LIBTCC1) "$(tccdir)"
248248 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"
250250 mkdir -p "$(libdir)"
251251 $(INSTALL) -m755 $(LIBTCC) "$(libdir)"
252252 ifdef DISABLE_STATIC
@@ -265,17 +265,18 @@ ifeq ($(ARCH),x86-64) · 12 unmodified lines
265265 $(INSTALL) -m644 lib/i386/libtcc1.a "$(tccdir)/i386"
266266 cp -r "$(tccdir)/include" "$(tccdir)/i386"
267267 endif
268− $(INSTALL) -m644 win32/lib/*.def "$(tccdir)/win32/lib"
268+ $(INSTALL) -m644 $(top_srcdir)/win32/lib/*.def "$(tccdir)/win32/lib"
269269 $(INSTALL) -m644 lib/i386-win32/libtcc1.a "$(tccdir)/win32/lib/32"
270270 $(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"
273273 endif
274274
275275 uninstall:
276276 rm -fv $(foreach P,$(PROGS),"$(bindir)/$P")
277277 rm -fv $(foreach P,$(LIBTCC1),"$(tccdir)/$P")
278278 rm -fv $(foreach P,$(TCC_INCLUDES),"$(tccdir)/include/$P")
279+ rm -fv "$(tccdir)/include/tcclib.h"
279280 rm -fv "$(docdir)/tcc-doc.html" "$(mandir)/man1/tcc.1" "$(infodir)/tcc-doc.info"
280281 rm -fv "$(libdir)/$(LIBTCC)" "$(includedir)/libtcc.h"
281282 rm -fv "$(libdir)/libtcc.so*"
@@ -297,7 +298,7 @@ install: $(PROGS) $(TCCLIBS) $(TCCDOCS) · 15 unmodified lines
297298 $(INSTALL) -m644 $(LIBTCC1) $(top_srcdir)/win32/lib/*.def "$(tccdir)/lib"
298299 cp -r $(top_srcdir)/win32/include/. "$(tccdir)/include"
299300 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"
301302 $(INSTALL) -m644 tcc-doc.html $(top_srcdir)/win32/tcc-win32.txt "$(tccdir)/doc"
302303 $(INSTALL) -m644 $(top_srcdir)/libtcc.h $(LIBTCC_EXTRA) "$(tccdir)/libtcc"
303304 $(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}"
22 #define TCC_VERSION "${TCC_VERSION}"
33
44 #cmakedefine CONFIG_WIN32
lib/libtcc1.c+7−0
@@ -607,9 +607,16 @@ unsigned long long __fixunsxfdi (long double a1) · 606 unmodified lines
607607
608608 #if defined(__x86_64__) && !defined(_WIN64)
609609
610+#ifndef __TINYC__
611+#include <stdlib.h>
612+#include <stdio.h>
613+#else
610614 /* Avoid including stdlib.h because it is not easily available when
611615 cross compiling */
612616 extern void *malloc(unsigned long long);
617+extern void free(void*);
618+extern void abort(void);
619+#endif
613620
614621 enum __va_arg_type {
615622 __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
10521052 dynarray_reset(&s1->priv_sections, &s1->nb_priv_sections);
10531053
10541054 /* free any loaded DLLs */
1055+#ifdef TCC_IS_NATIVE
10551056 for ( i = 0; i < s1->nb_loaded_dlls; i++) {
10561057 DLLReference *ref = s1->loaded_dlls[i];
10571058 if ( ref->handle )
10581059 dlclose(ref->handle);
10591060 }
1061+#endif
10601062
10611063 /* free loaded dlls array */
10621064 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 @@
1−include_directories(${CMAKE_SOURCE_DIR})
1+include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR})
22
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})
44 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)
69 endif()
710
811 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()
1015 add_test(NAME abitest-cc WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND abitest-cc lib_path=${CMAKE_BINARY_DIR} include=${CMAKE_SOURCE_DIR}/include)
1116
1217 set(ABITEST_TCC abitest-tcc${CMAKE_EXECUTABLE_SUFFIX})
1318 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)
1520 add_custom_target(abitest-tcc-exe ALL DEPENDS ${ABITEST_TCC})
1621
1722 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
1924 add_executable(tcctest-cc tcctest.c)
2025 target_link_libraries(tcctest-cc libtcc)
2126 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()
2527
2628 find_package(PythonInterp)
2729 if(PYTHONINTERP_FOUND)
@@ -29,14 +31,43 @@ if(PYTHONINTERP_FOUND) · 1 unmodified line
2931 if(WIN32)
3032 set(TCC_TEST_CFLAGS ${TCC_TEST_CFLAGS} -I${CMAKE_SOURCE_DIR}/win32/include/winapi)
3133 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)
3335 set(TCC_TEST_RUN ${TCC_TEST_CFLAGS} ${TCC_NATIVE_FLAGS} -DONE_SOURCE -run ${CMAKE_SOURCE_DIR}/tcc.c)
3436 get_property(TCC TARGET tcc PROPERTY LOCATION)
3537 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()
4071 endif()
4172
4273 set(MORETESTS
@@ -99,5 +130,5 @@ if(WIN32) · 56 unmodified lines
99130 endif()
100131 foreach(testfile ${MORETESTS})
101132 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)
103134 endforeach()
tests/Makefile+3−4
@@ -43,9 +43,9 @@ ifeq ($(TARGETOS),Darwin) · 42 unmodified lines
4343 endif
4444
4545 # 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
4747 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)
4949 endif
5050
5151 TCC = $(TOP)/tcc $(TCCFLAGS)
@@ -82,8 +82,7 @@ moretests: · 30 unmodified lines
8282 # test.ref - generate using gcc
8383 # copy only tcclib.h so GCC's stddef and stdarg will be used
8484 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)
8786 ./tcctest.gcc > $@
8887
8988 # auto test
tests/tests2/Makefile+1−1
@@ -2,7 +2,7 @@ TOP = ../.. · 1 unmodified line
22 include $(TOP)/Makefile
33 VPATH = $(top_srcdir)/tests/tests2
44
5−TCCFLAGS = -B$(TOP)
5+TCCFLAGS = -B$(TOP) -I$(top_srcdir)/include
66 ifdef CONFIG_WIN32
77 TCCFLAGS = -B$(top_srcdir)/win32 -I$(top_srcdir)/include -L$(TOP)
88 endif
x86_64-gen.c+11−4
@@ -23,7 +23,7 @@ · 22 unmodified lines
2323 #ifdef TARGET_DEFS_ONLY
2424
2525 /* number of available registers */
26−#define NB_REGS 22
26+#define NB_REGS 24
2727 #define NB_ASM_REGS 8
2828
2929 /* a register can belong to several classes. The classes must be
@@ -45,6 +45,8 @@ · 15 unmodified lines
4545 #define RC_XMM3 0x8000
4646 #define RC_XMM4 0x10000
4747 #define RC_XMM5 0x20000
48+#define RC_XMM6 0x40000
49+#define RC_XMM7 0x80000
4850 #define RC_IRET RC_RAX /* function return: integer register */
4951 #define RC_LRET RC_RDX /* function return: second integer register */
5052 #define RC_FRET RC_XMM0 /* function return: float register */
@@ -140,7 +142,12 @@ ST_DATA const int reg_classes[NB_REGS] = { · 89 unmodified lines
140142 /* xmm2 */ RC_FLOAT | RC_XMM2,
141143 /* xmm3 */ RC_FLOAT | RC_XMM3,
142144 /* 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
144151 };
145152
146153 static unsigned long func_sub_sp_offset;
@@ -499,7 +506,7 @@ void load(int r, SValue *sv) · 352 unmodified lines
499506 o(0xc0 + REG_VALUE(v) + REG_VALUE(r)*8);
500507 }
501508 } else if (r == TREG_ST0) {
502− assert((v == TREG_XMM0) || (v == TREG_XMM1));
509+ assert((v >= TREG_XMM0) || (v <= TREG_XMM7));
503510 /* gen_cvt_ftof(VT_LDOUBLE); */
504511 /* movsd %xmmN,-0x10(%rsp) */
505512 o(0x110ff2);
@@ -1173,7 +1180,7 @@ void gfunc_call(int nb_args) · 667 unmodified lines
11731180 --sse_reg;
11741181 r = gv(RC_FLOAT);
11751182 o(0x50); /* push $rax */
1176− /* movq %xmm0, (%rsp) */
1183+ /* movq %xmmN, (%rsp) */
11771184 o(0xd60f66);
11781185 o(0x04 + REG_VALUE(r)*8);
11791186 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