| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
This adds the zero/sign-extending opcodes with 64bit destinations.
|
| |
|
|
|
|
|
|
|
| |
Fix it to actually be able to parse 64bit immediates (enlarge
operand value type). Then, generally there's no need for accepting
IM64 anywhere, except in the 0xba+r mov opcodes, so OP_IM is
unnecessary, as is OPT_IMNO64. Improve the generated code a bit
by preferring the 0xc7 opcode for im32->reg64, instead of the
im64->reg64 form (which we therefore hardcode).
|
| |
|
|
| |
Can be implemented differently.
|
| |
|
|
|
|
| |
This code was inactive since a long time (and was deactivated because
it was wrong to start with) and just clutters the sources. Remove
it.
|
| |
|
|
|
| |
This fixes and activates the asm test that's part of tcctest.c
also on x86-64, requiring a small fix for the 'm' constraint.
|
| |
|
|
|
| |
Don't hardcode that option, if you want it do make CC="gcc -m32".
The test assembles with -m64 as well now.
|
| |
|
|
|
| |
Also remove the hacky mod/rm byte emission during
disp/imm writing.
|
| |
|
|
|
| |
cmov can accept multi sizes, but is also a OPC_TEST opcode,
deal with this.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Traditional behaviour on x86-64 is to encode the relocation
addend in r_addend, not in the relocated field (after all,
that's the reason to use RELA relocs to begin with). Our
linker can deal with both, other linkers as well. But using
e.g. the GNU assembler one can detect differences (equivalent
code in the end, but still a difference).
Now there's only a trivial difference in tests/asmtest.S
(having to do with ordering of prefixes).
|
| |
|
|
|
|
|
|
|
|
|
| |
A bag of assembler fixes, to be either compatible with GAS
(e.g. order of 'test' operands), accept more instructions,
count correct foo{bwlq} variants on x86_64, fix modrm/sib bytes
on x86_64 to not use %rip relative addressing mode, to not use
invalid insns in tests/asmtest.S for x86_64.
Result is that now output of GAS and of tcc on tests/asmtest.S
is mostly the same.
|
| |
|
|
|
|
| |
Insert a space when it is required to prevent mistokenisation of
the output, and also in a few cases where it is not strictly
required, imitating GCC's behaviour.
|
| | |
|
| |
|
|
|
|
|
| |
allow
typedef int xxx;
typedef int xxx;
in the same scope as long as it is the same type
|
| |
|
|
|
|
|
| |
Catch top level redeclarations too.
Also fix mistakes in tcctest.c and the tcc sources (win32)
showing up now.
|
| |
|
|
|
|
|
| |
The lexer is for reading files, not for writing.
Also :
- macro_is_equal(): avoid crash if redefining __FILE__
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
... for fast redeclaration checks
Also, check function parameters too:
void foo(int a) { int a; ... }
Also, try to fix struct/union/enum's on different scopes:
{ struct xxx { int x; };
{ struct xxx { int y; }; ... }}
and some (probably not all) combination with incomplete
declarations "struct xxx;"
Replaces 2bfedb18675228c3837c23fa523231f55e102c12
and 07d896c8e5d1b46bf4aebd403c78e5f7ffebe02a
Fixes cf95ac399cbce1ea8a519f91dd36a5cfd4ea7943
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A constant expression removed from the loop.
If subroutine have 50000+ local variables, then currently
compilation of such code takes obly 15 sec. Was 2 min.
gcc-4.1.2 compiles such code in 7 sec. pcc -- 3.44 min.
A test generator:
#include <stdio.h>
int main() {
puts("#include <stdio.h>"); puts("int main()"); puts("{");
for (int i = 0; i < 50000; ++i) printf("int X%d = 1;\n", i);
for (int i = 0; i < 50000; ++i) puts("scanf(\"%d\", &X0);");
puts("}");
return 0;
}
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
don't catch redefinition for local vars. With this option on
tcc accepts the following code:
int main()
{
int a = 0;
long a = 0;
}
But if you shure there is no problem with your local variables,
then a compilation speed can be improved if you have a lots of
the local variables (50000+)
|
| |
|
|
|
|
| |
oxe+1 is parsed as 0xe +1 if (parse_flags & PARSE_FLAG_ASM_FILE)
Helps to compile a code:
__asm__("mov $0xe" "+1", "%eax\n")
|
| |
|
|
|
|
|
| |
Various x86 asm fixes: 64bit lcall/ljmp like 32bit a commit before,
xchgw accepted wrong operands on 32 and 64bit, and 64bit used
0x40/0x48+reg for incw/decw, but those are REX prefixes, not
instructions.
|
| |
|
|
| |
The 0xff/3 form of lcall needs a mod/rm byte, so reflect this.
|
| |
|
|
|
|
|
|
| |
gcc/pcc allow __asm__() outside a function body:
extern void vide(void);
__asm__("vide: ret");
There is many such code in the Linux kernels.
|
| | |
|
| | |
|
| |
|
|
|
|
| |
* correct -E output for the case ++ + ++ concatenation
do this only for expanded from macro string
and only when tcc_state->output_type == TCC_OUTPUT_PREPROCESS
|
| |
|
|
|
|
|
|
|
| |
#define Y(x) Z(x)
#define X Y
return X(X(1));
was : return Z(Y(1));
now : return Z(Z(1));
|
| | |
|
| |
|
|
| |
Now no trap when compiling tccboot
|
| |
|
|
|
| |
and '.' alone is a token now in *.S (not an identifier)
representing a current position in the code (PC).
|
| |
|
|
|
|
| |
Alignment of unknown sections changed from 32 to PTR_SIZE
This is gcc/pcc default value. This helps to use
tcc as linux kernel compiler.
|
| |
|
|
| |
This code is from "Improve hash performance"
|
| |
|
|
|
| |
Without sorting they run in whatever order readdir returns,
I like it better when the order is reliable (and alphanumeric).
|
| |
|
|
|
|
|
|
|
| |
- uses new `TinyAlloc`-ators for small `TokenSym`, `CString` and
`TokenString` instances
- conditional `TAL_DEBUG` for mem leaks and double frees detection
- on `TAL_DEBUG` collects allocation origin (file + line)
- conditional `TAL_INFO` for allocators stats (in release mode too)
- chain a new allocator twice current capacity on buffer exhaustion
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- better `TOK_HASH_FUNC`
- increases `hash_ident` initial size to 16k (from 8k)
- `cstr_cat` uses single `realloc` + `memcpy`
- `cstr_cat` can append terminating zero
- `tok_str_realloc` initial size to 16 (from 8)
- `parse_define` uses static `tokstr_buf`
- `next` uses static `tokstr_buf`
- fixes two latent bugs (wrong deallocations in libtcc.c:482 and
tccpp.c:2987)
|
| |
|
|
| |
This reverts commit fa2472c17246206ce6947475782de17245eceeea.
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
parse_print_line_comment() and parse_print_comment() are
combined and made more simply:
* don't worry about speed with -E option
* don't handle straya in comments
Do we need to handle strays in regular
parse_line_comment() and
parse_comment() ?
|
| |
|
|
|
| |
Taken from David Mertens tcc branch on github
https://github.com/run4flat/tinycc.git
|
| |
|
|
|
| |
* pcc have only __linux__ macro (and no __linux)
* pcc don't have __clear_cache proc
|
| |
|
|
|
| |
This is done by impression of the pcc -C option.
Usual execution path and speed are not changed.
|
| |
|
|
|
| |
with a test program. Problem detected when trying to
compile linux-2.4.37.9 with tcc.
|
| |
|
|
|
| |
gcc 3.4.6 don't understand "#if PATHCMP==stricmp"
where "#define PATHCMP stricmp"
|
| |
|
|
| |
These are used in `libtcc.c` now and cannot remain in `tccpe.c`
|
| |
|
|
| |
This moves listfiles parsing inline in `tcc_parse_args1`
|
| |
|
|
| |
This takes care of case-insensitive filenames (like on win32)
|
| |
|
|
| |
These include all header and source files from source directory
|
| |
|
|
| |
Missed these in e946eb2a4109e0de5f8514457f851897a4824c3e
|