mirror of
https://github.com/mirror/tinycc.git
synced 2024-12-28 04:00:06 +08:00
update
This commit is contained in:
parent
3748975feb
commit
10f5d44f43
2
Makefile
2
Makefile
@ -12,7 +12,7 @@ CFLAGS+=-m386 -malign-functions=0
|
||||
CFLAGS+=-DCONFIG_TCC_PREFIX=\"$(prefix)\"
|
||||
DISAS=objdump -d
|
||||
INSTALL=install
|
||||
VERSION=0.9.11
|
||||
VERSION=0.9.12
|
||||
|
||||
# run local version of tcc with local libraries and includes
|
||||
TCC=./tcc -B. -I.
|
||||
|
8
TODO
8
TODO
@ -1,11 +1,12 @@
|
||||
TODO list:
|
||||
|
||||
- To fix: 'sizeof' generates code if too complex expression is given.
|
||||
- add gcc extension typeof()
|
||||
- add gcc extension __alignof__()
|
||||
- fix constant error msg
|
||||
- add alloca()
|
||||
- add typeof()
|
||||
- add checks for multiple including of same file (= compile even faster)
|
||||
- add 'CType' structure to optimize type handling (= compile even faster)
|
||||
- suppress unneeded hash table for Symbols (= compile even faster)
|
||||
- add alloca()
|
||||
- ignore at least asm extension
|
||||
- setjmp is not supported properly in bound checking.
|
||||
- better local variables handling (needed for other targets)
|
||||
@ -13,7 +14,6 @@ TODO list:
|
||||
only for local arrays).
|
||||
- To check: bound checking and float/long long/struct copy code. bound
|
||||
checking and symbol + offset optimization
|
||||
- To fix: 'sizeof' generate code if too complex expression is given.
|
||||
- free all allocated data and use longjmp for errors (useful for libtcc use)
|
||||
|
||||
Not critical:
|
||||
|
43
tcc-doc.texi
43
tcc-doc.texi
@ -658,24 +658,20 @@ index (@code{REG_xxx} constants), but additionnal values and flags are
|
||||
defined:
|
||||
|
||||
@example
|
||||
#define VT_CONST 0x00f0 /* constant in vc
|
||||
(must be first non register value) */
|
||||
#define VT_LLOCAL 0x00f1 /* lvalue, offset on stack */
|
||||
#define VT_LOCAL 0x00f2 /* offset on stack */
|
||||
#define VT_CMP 0x00f3 /* the value is stored in processor flags (in vc) */
|
||||
#define VT_JMP 0x00f4 /* value is the consequence of jmp true (even) */
|
||||
#define VT_JMPI 0x00f5 /* value is the consequence of jmp false (odd) */
|
||||
#define VT_LVAL 0x0100 /* var is an lvalue */
|
||||
#define VT_FORWARD 0x0200 /* value is forward reference */
|
||||
#define VT_MUSTCAST 0x0400 /* value must be casted to be correct (used for
|
||||
char/short stored in integer registers) */
|
||||
#define VT_MUSTBOUND 0x0800 /* bound checking must be done before
|
||||
dereferencing value */
|
||||
#define VT_BOUNDED 0x8000 /* value is bounded. The address of the
|
||||
bounding function call point is in vc */
|
||||
#define VT_LVAL_BYTE 0x1000 /* lvalue is a byte */
|
||||
#define VT_LVAL_SHORT 0x2000 /* lvalue is a short */
|
||||
#define VT_LVAL_UNSIGNED 0x4000 /* lvalue is unsigned */
|
||||
#define VT_CONST 0x00f0
|
||||
#define VT_LLOCAL 0x00f1
|
||||
#define VT_LOCAL 0x00f2
|
||||
#define VT_CMP 0x00f3
|
||||
#define VT_JMP 0x00f4
|
||||
#define VT_JMPI 0x00f5
|
||||
#define VT_LVAL 0x0100
|
||||
#define VT_SYM 0x0200
|
||||
#define VT_MUSTCAST 0x0400
|
||||
#define VT_MUSTBOUND 0x0800
|
||||
#define VT_BOUNDED 0x8000
|
||||
#define VT_LVAL_BYTE 0x1000
|
||||
#define VT_LVAL_SHORT 0x2000
|
||||
#define VT_LVAL_UNSIGNED 0x4000
|
||||
#define VT_LVAL_TYPE (VT_LVAL_BYTE | VT_LVAL_SHORT | VT_LVAL_UNSIGNED)
|
||||
@end example
|
||||
|
||||
@ -694,6 +690,9 @@ indicates that the value is actually stored in the CPU flags (i.e. the
|
||||
value is the consequence of a test). The value is either 0 or 1. The
|
||||
actual CPU flags used is indicated in @code{SValue.c.i}.
|
||||
|
||||
If any code is generated which destroys the CPU flags, this value MUST be
|
||||
put in a normal register.
|
||||
|
||||
@item VT_JMP
|
||||
@itemx VT_JMPI
|
||||
indicates that the value is the consequence of a jmp. For VT_JMP, it is
|
||||
@ -702,6 +701,10 @@ indicates that the value is the consequence of a jmp. For VT_JMP, it is
|
||||
These values are used to compile the @code{||} and @code{&&} logical
|
||||
operators.
|
||||
|
||||
If any code is generated, this value MUST be put in a normal
|
||||
register. Otherwise, the generated code won't be executed if the jump is
|
||||
taken.
|
||||
|
||||
@item VT_LVAL
|
||||
is a flag indicating that the value is actually an lvalue (left value of
|
||||
an assignment). It means that the value stored is actually a pointer to
|
||||
@ -724,8 +727,8 @@ ASAP because its semantics are rather complicated.
|
||||
indicates that a cast to the value type must be performed if the value
|
||||
is used (lazy casting).
|
||||
|
||||
@item VT_FORWARD
|
||||
indicates that the value is a forward reference to a variable or a function.
|
||||
@item VT_SYM
|
||||
indicates that the symbol @code{SValue.sym} must be added to the constant.
|
||||
|
||||
@item VT_MUSTBOUND
|
||||
@itemx VT_BOUNDED
|
||||
|
Loading…
Reference in New Issue
Block a user