| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
The signed flag was not encoded in the instruction.
|
| |
|
|
| |
The source register was not encoded in the instruction.
|
| |
|
|
| |
This reverts commit 93785149ed61b7165510ff30149f297cf0821c88.
|
| |
|
|
| |
This reverts commit 505329b5b3ee4cb47d0a3590ccd62a65dbf83fc9.
|
| | |
|
| |
|
|
| |
This reverts commit 981eb84d8ab91aafe73d5eeb218ffe31d28b1014.
|
| | |
|
| |
|
|
|
|
| |
Make sur elf_hash is never invoked with a NULL value.
Signed-off-by: Thomas Preud'homme <robotux@celest.fr>
|
| |
|
|
|
|
| |
Initialize the ref field to 0 when manipulating a CType.
Signed-off-by: Thomas Preud'homme <robotux@celest.fr>
|
| |
|
|
|
|
| |
Add tcc.c as a prerequesite of the %-tcc$(EXESUF) target and compile $<
instead of tcc.c to make sure tcc.c is search in directories specified
by VPATH.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
| |
Also
- move CPPFLAGS to Makefile
- Use top_srcdir in lib/Makefile
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
Favor ARM hardfloat over ARM softfloat calling convention. In
particular, this solve the problem of the raspbian distribution where
the softfloat ld.so pathname (lib/ld-linux.so.3) is actually a symlink
to the hardfloat ld.so pathname (/lib/arm-linux-gnueabihf/ld-2.13.so).
|
| |
|
|
|
|
| |
Fix overflow detection for R_ARM_CALL, R_ARM_PC24, R_ARM_JUMP24 and
R_ARM_PLT32 relocations on ARM. 26 bits means 25 bits for positive and
negative offsets !
|
| |
|
|
|
| |
Ensure stack pointer is correctly adjusted in prolog to be aligned on 8
bytes after the change of frame linking.
|
| |
|
|
|
|
|
|
| |
gcc fails the builtin_frame_address test on ARM so we disable it. As a
consequence, the diff between gcc and tcc's output is unecessarily
bigger. Given the big size of the diff currently, this doesn't make a
big difference but may allow to detect a regression in tcc's
implementation of builtin_frame_address.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Change the linking of the frames on ARM. Instead of having fp points 12
bytes above where the old fp is stored, let fp points where the old fp
is stored. That is, we switch from:
| . |
| . |
| . |
| |
| params | <-- fp
--------
| oldlr |
--------
| oldip |
--------
| oldfp |
--------
to:
| . |
| . |
| . |
| |
| params |
--------
| oldlr |
--------
| oldip |
--------
| oldfp | <-- fp
--------
|
| | |
|
| |
|
|
|
|
|
|
| |
Indirect functions shall have STT_FUNC type in executable dynsym
section. Indeed, a dlsym call following a lazy resolution would pick the
symbol value from the executable dynsym entry. This would contain the
address of the function wanted by the caller of dlsym instead of the
address of the function that would return that address.
|
| |
|
|
|
|
|
|
|
| |
Not wise if stddef.h was already included. This is related to commit
3aa26a794e24a298493a2bc9d70fbd9aebf6437a
Instead hack stddef.h to have identical definition and thus
avoid the issue mentionned there.
|
| |
|
|
|
|
| |
Store [f]getc return value into an int instead of char, as per
prototype. This fix an issue when char is unsigned (as is on arm for
both tcc and gcc).
|
| |
|
|
|
|
|
|
|
|
| |
This reverts commit 63193d1794b037eb4f3b6551596fa8a6d423e0c3.
Had some problems (_STATIC_ASSERT) and was too ugly anyway.
For retry, I'd suggest to implement a general function
static inline void memswap (void *p1, void* p2, size_t n);
and then use that. If you do so, please keep the original code
as comment.
|
| |
|
|
|
|
|
| |
from commit fc574f14984d11f1ead50560d1bdc5ae0eaf6d8d.
The files from include are copied to win32/include with make
install or build-tcc.bat.
|
| |
|
|
|
| |
Fix path of Makefile symlinks in a out-of-tree build where the root
directory of the source is given as a relative path.
|
| |
|
|
| |
This fix commit e79281f58ec302e8cc9dfc7d00e06f426fcd2acd
|
| |
|
|
|
|
|
|
| |
monolitic executable or library that contains all needed to compile programs, truly tinycc portable."
This reverts commit 59e18aee0e509a3ca75dbe6f909e18c1d17893d1.
tcc is being stabilized now in order to do a new release soon.
Therefore, such a change is not appropriate now.
|
| |
|
|
|
|
| |
This reverts commit 943574aba54713ca4a17fe33aadde5abee233b53.
The empty string in "libs" was intended behavior, as can be seen from
the "if (0 == *p)" below.
|
| |
|
|
|
|
|
|
|
|
| |
This commit revert commit 061b5799cc1feb15014da589ea98057deda14a23 and
subsequent commits to detect whether -Wno-unused-result is supported or
not by the compiler used to compile tcc. No warning about unused results
is issued in a normal build and thus this switch is only needed if
calling make with extra switches in CFLAGS or CPPFLAGS. It should thus
be added with the extra switches when calling make and not in the
Makefile.
|
| |
|
|
|
| |
Declare vtopl in vswap at the beginning of the function before any
assignments. Doing otherwise means C99 is assumed when compiling.
|
| |
|
|
|
|
| |
executable or library that contains all needed to compile programs, truly tinycc portable.
Tested under linux exec the "mk-it" shell script and you'll end up with a portable tinycc executable that doesn't depend on anything else.
|
| |
|
|
|
|
| |
This fixes commit 8eb92e605200b1fe8d570ad309e28245c3f1af0a
Remove memory leak.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This replaces commit 3d409b08893873b917ccb8c34398bc41a4e84d7c
- revert old fix in libtcc.c
- #include_next: look up the file in the include stack to see
if it is already included.
Also:
- streamline include code
- remove 'type' from struct CachedInclude (obsolete because we check
full filename anyway)
- remove inc_type & inc_filename from struct Bufferedfile (obsolete)
- fix bug with TOK_FLAG_ENDIF not being reset
- unrelated: get rid of an 'variable potentially uninitialized' warning
|
| |
|
|
| |
cmp_comparison_test has no return value and should thus not return 0.
|
| |
|
|
|
|
| |
The compiler used for compiling tcc is the one referenced in the
CC variable. As such, the check for -Wno-unused-result presence should
be done on CC.
|
| |
|
|
|
|
| |
_STATIC_ASSERT, ideas from mingw-w64 changeset 4293
stdarg.h, stddef.h: _mingw.h needs them
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
vswap() is called often enough and shows in profile and it was easy to
hand optimize swapping vtop[-1] and vtop[0] - instead of large (28 bytes
on i386) tmp variable and two memory to memory copies, let's swap areas
by longs through registers with streamlined assembly.
For
$ ./tcc -B. -bench -DONE_SOURCE -DCONFIG_MULTIARCHDIR=\"i386-linux-gnu\" -c tcc.c
before:
# Overhead Command Shared Object Symbol
# ........ ........... ................... ..............................................
#
15.19% tcc tcc [.] next_nomacro1
5.19% tcc libc-2.13.so [.] _int_malloc
4.57% tcc tcc [.] next
3.36% tcc tcc [.] tok_str_add2
3.03% tcc tcc [.] macro_subst_tok
2.93% tcc tcc [.] macro_subst
2.53% tcc tcc [.] next_nomacro_spc
2.49% tcc tcc [.] vswap
2.36% tcc libc-2.13.so [.] _int_free
│ ST_FUNC void vswap(void)
│ {
1,96 │ push %edi
2,65 │ push %esi
1,08 │ sub $0x20,%esp
│ SValue tmp;
│
│ /* cannot let cpu flags if other instruction are generated. Also
│ avoid leaving VT_JMP anywhere except on the top of the stack
│ because it would complicate the code generator. */
│ if (vtop >= vstack) {
0,98 │ mov 0x8078cac,%eax
│ cmp $0x8078d3c,%eax
1,18 │ ┌──jb 24
│ │ int v = vtop->r & VT_VALMASK;
1,08 │ │ mov 0x8(%eax),%edx
0,78 │ │ and $0x3f,%edx
│ │ if (v == VT_CMP || (v & ~1) == VT_JMP)
0,78 │ │ cmp $0x33,%edx
0,69 │ │↓ je 54
0,59 │ │ and $0xfffffffe,%edx
0,49 │ │ cmp $0x34,%edx
0,29 │ │↓ je 54
│ │ gv(RC_INT);
│ │ }
│ │ tmp = vtop[0];
1,08 │24:└─→lea 0x4(%esp),%edi
0,39 │ mov $0x7,%ecx
│ mov %eax,%esi
14,41 │ rep movsl %ds:(%esi),%es:(%edi)
│ vtop[0] = vtop[-1];
9,51 │ lea -0x1c(%eax),%esi
1,96 │ mov $0x7,%cl
│ mov %eax,%edi
17,06 │ rep movsl %ds:(%esi),%es:(%edi)
│ vtop[-1] = tmp;
10,20 │ mov 0x8078cac,%edi
2,35 │ sub $0x1c,%edi
0,78 │ lea 0x4(%esp),%esi
│ mov $0x7,%cl
15,20 │ rep movsl %ds:(%esi),%es:(%edi)
│ }
9,90 │ add $0x20,%esp
2,25 │ pop %esi
1,67 │ pop %edi
0,69 │ ret
after:
# Overhead Command Shared Object Symbol
# ........ ........... ................... ..............................................
#
15.27% tcc tcc [.] next_nomacro1
5.08% tcc libc-2.13.so [.] _int_malloc
4.57% tcc tcc [.] next
3.17% tcc tcc [.] tok_str_add2
3.12% tcc tcc [.] macro_subst
2.99% tcc tcc [.] macro_subst_tok
2.43% tcc tcc [.] next_nomacro_spc
2.32% tcc libc-2.13.so [.] _int_free
. . .
0.71% tcc tcc [.] vswap
│ ST_FUNC void vswap(void)
│ {
7,22 │ push %eax
│ /* cannot let cpu flags if other instruction are generated. Also
│ avoid leaving VT_JMP anywhere except on the top of the stack
│ because it would complicate the code generator. */
│ if (vtop >= vstack) {
11,34 │ mov 0x8078cac,%eax
2,75 │ cmp $0x8078d3c,%eax
0,34 │ ┌──jb 20
│ │ int v = vtop->r & VT_VALMASK;
0,34 │ │ mov 0x8(%eax),%edx
8,93 │ │ and $0x3f,%edx
│ │ if (v == VT_CMP || (v & ~1) == VT_JMP)
2,06 │ │ cmp $0x33,%edx
2,41 │ │↓ je 74
2,41 │ │ and $0xfffffffe,%edx
0,34 │ │ cmp $0x34,%edx
2,41 │ │↓ je 74
│ │ vtopl[-1*VSIZEL + i] = tmpl; \
│ │ } do {} while (0)
│ │
│ │ VSWAPL(15); VSWAPL(14); VSWAPL(13); VSWAPL(12);
│ │ VSWAPL(11); VSWAPL(10); VSWAPL( 9); VSWAPL( 8);
│ │ VSWAPL( 7); VSWAPL( 6); VSWAPL( 5); VSWAPL( 4);
2,06 │20:└─→mov 0x18(%eax),%edx
1,37 │ mov -0x4(%eax),%ecx
2,06 │ mov %ecx,0x18(%eax)
1,37 │ mov %edx,-0x4(%eax)
2,06 │ mov 0x14(%eax),%edx
2,06 │ mov -0x8(%eax),%ecx
2,41 │ mov %ecx,0x14(%eax)
3,09 │ mov %edx,-0x8(%eax)
3,09 │ mov 0x10(%eax),%edx
1,72 │ mov -0xc(%eax),%ecx
2,75 │ mov %ecx,0x10(%eax)
1,72 │ mov %edx,-0xc(%eax)
│ VSWAPL( 3); VSWAPL( 2); VSWAPL( 1); VSWAPL( 0);
2,41 │ mov 0xc(%eax),%edx
2,41 │ mov -0x10(%eax),%ecx
2,41 │ mov %ecx,0xc(%eax)
0,69 │ mov %edx,-0x10(%eax)
1,72 │ mov 0x8(%eax),%edx
0,69 │ mov -0x14(%eax),%ecx
1,03 │ mov %ecx,0x8(%eax)
1,37 │ mov %edx,-0x14(%eax)
1,37 │ mov 0x4(%eax),%edx
0,69 │ mov -0x18(%eax),%ecx
3,09 │ mov %ecx,0x4(%eax)
2,06 │ mov %edx,-0x18(%eax)
1,37 │ mov (%eax),%edx
2,41 │ mov -0x1c(%eax),%ecx
1,37 │ mov %ecx,(%eax)
4,12 │ mov %edx,-0x1c(%eax)
│ }
│
│ # undef VSWAPL
│ # undef VSIZEL
│ }
1,03 │ pop %eax
3,44 │ ret
Overal speedup:
# best of 5 runs
before: 8268 idents, 47203 lines, 1526763 bytes, 0.148 s, 319217 lines/s, 10.3 MB/s
after: 8273 idents, 47231 lines, 1527685 bytes, 0.146 s, 324092 lines/s, 10.5 MB/s
Static ASSERT macro taken from CCAN's[1] build_assert[2] which is in
public domain.
[1] http://ccodearchive.net/
[2] http://git.ozlabs.org/?p=ccan;a=blob;f=ccan/build_assert/build_assert.h;h=24e59c44cd930173178ac9b6e101b0af64a879e9;hb=HEAD
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
later malloc()
A CString could be reset to empty just setting its .size to 0.
If memory was already allocated, that would be remembered in
.data_allocated and .size_allocated and on consequent string
manipulations that memory will be used without immediate need to call
malloc().
For
$ ./tcc -B. -bench -DONE_SOURCE -DCONFIG_MULTIARCHDIR=\"i386-linux-gnu\" -c tcc.c
after the patch malloc/free are called less often:
(tcc is run in loop; perf record -a sleep 10 && perf report)
before:
# Overhead Command Shared Object Symbol
# ........ ........... .................. ..........................................
#
13.89% tcc tcc [.] next_nomacro1
4.73% tcc libc-2.13.so [.] _int_malloc
4.39% tcc tcc [.] next
2.94% tcc tcc [.] tok_str_add2
2.78% tcc tcc [.] macro_subst_tok
2.75% tcc libc-2.13.so [.] free
2.74% tcc tcc [.] macro_subst
2.63% tcc libc-2.13.so [.] _int_free
2.28% tcc tcc [.] vswap
2.24% tcc tcc [.] next_nomacro_spc
2.06% tcc libc-2.13.so [.] realloc
2.00% tcc libc-2.13.so [.] malloc
1.99% tcc tcc [.] unary
1.85% tcc libc-2.13.so [.] __i686.get_pc_thunk.bx
1.76% kworker/0:1 [kernel.kallsyms] [k] delay_tsc
1.70% tcc tcc [.] next_nomacro
1.62% tcc tcc [.] preprocess
1.41% tcc libc-2.13.so [.] __memcmp_ssse3
1.38% tcc [kernel.kallsyms] [k] memset
1.10% tcc tcc [.] g
1.06% tcc tcc [.] parse_btype
1.05% tcc tcc [.] sym_push2
1.04% tcc libc-2.13.so [.] _int_realloc
1.00% tcc libc-2.13.so [.] malloc_consolidate
after:
# Overhead Command Shared Object Symbol
# ........ ........... .................. ..............................................
#
15.26% tcc tcc [.] next_nomacro1
5.07% tcc libc-2.13.so [.] _int_malloc
4.62% tcc tcc [.] next
3.22% tcc tcc [.] tok_str_add2
3.03% tcc tcc [.] macro_subst_tok
3.02% tcc tcc [.] macro_subst
2.59% tcc tcc [.] next_nomacro_spc
2.44% tcc tcc [.] vswap
2.39% tcc libc-2.13.so [.] _int_free
2.28% tcc libc-2.13.so [.] free
2.22% tcc tcc [.] unary
2.07% tcc libc-2.13.so [.] realloc
1.97% tcc libc-2.13.so [.] malloc
1.70% tcc tcc [.] preprocess
1.69% tcc libc-2.13.so [.] __i686.get_pc_thunk.bx
1.68% tcc tcc [.] next_nomacro
1.59% tcc [kernel.kallsyms] [k] memset
1.55% tcc libc-2.13.so [.] __memcmp_ssse3
1.22% tcc tcc [.] parse_comment
1.11% tcc tcc [.] g
1.11% tcc tcc [.] sym_push2
1.10% tcc tcc [.] parse_btype
1.10% tcc libc-2.13.so [.] _int_realloc
1.06% tcc tcc [.] vsetc
0.98% tcc libc-2.13.so [.] malloc_consolidate
and this gains small speedup for tcc:
# best of 5 runs
before: 8268 idents, 47191 lines, 1526670 bytes, 0.153 s, 307997 lines/s, 10.0 MB/s
after: 8268 idents, 47203 lines, 1526763 bytes, 0.148 s, 319217 lines/s, 10.3 MB/s
|
| |
|
|
|
| |
Makefile (install): Fix installation of headers.
Do not try to install twice libtcc.h, once should be enough.
|
| |
|
|
| |
* Makefile (TCC-VERSION): Use top_srcdir.
|
| |
|
|
| |
* Makefile: use "else if" to improve readability.
|
| |
|
|
|
| |
configure: handle the case of absolute paths.
Reported by grishka.
|
| |
|
|
| |
* configure: use more here-documents.
|
| |
|
|
|
| |
* configure: use here-documents to improve readability and
reduce the clutter.
|
| |
|
|
|
| |
* configure (case $targetos): Improve readibility.
(case $cpu): New, to improve readability compare to if + test.
|
| |
|
|
|
|
|
|
| |
- Creates release tarball from *current* git branch
- Includes tcc-doc.html
- converts important windows files files to CRLF
(requirement for the cmd.exe batch processor, convenience for
reading the txt in notepad)
|