-
Notifications
You must be signed in to change notification settings - Fork 0
/
NEWS
173 lines (144 loc) · 7.7 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
0.1.2 (10 Decemeber 2008)
* Switch from GPL to LGPL 2.1 license.
* Implement x86-64 backend (Klaus Treichel).
* Fix interpreter backend (Klaus Treichel, Aleksey Demakov).
* Introduce jit-unwind interface (Aleksey Demakov, Klaus Treichel).
* Code cache pages can now grow if needed (Aleksey Demakov).
* Various fixes (Klaus Treichel, Aleksey Demakov, Juan Jesus Garcia
de Soria, Dalibor Topic, Arto Bendiken)
0.1.0 (3 March 2007)
General improvements:
* Add on-demand compilation driver (Aleksey Demakov, Klaus Treichel).
* Add jit_function_from_vtable_pointer function (Klaus Treichel).
* Add jit_insn_mark_breakpoint_variable function (Radek Polak).
* Add signal handlers (Kirill Kononenko).
* Add JIT_OPTION_POSITION_INDEPENDENT context option (not supported
by the backends yet) (Aleksey Demakov).
* Add function indirectors (Klaus Treichel).
* Allocate function redirectors and indirectors in the code cache
(Aleksey Demakov).
* Use mmap to allocate executable memory where available
(Klaus Treichel).
* Now can dump to any stream not just stdout and stderr (Radek Polak).
* Use a global lock during context initialization (Aleksey Demakov).
* Fix problems that take place after compilation is restarted on cache
page overflow (Aleksey Demakov).
Register allocation/instruction selection improvements (Aleksey Demakov):
* Completely rewrite register allocator. The new allocator works with
three-value intermediate instructions rather than with individual
values. This allows to fully analyze the effect of the instruction
and makes it possible to optimize commutative instructions and
eliminate in some cases redundant register spills and loads.
* Support three-address architectures.
* Add register classes.
* The allocator may now allocate scratch registers for instructions.
* The allocator now automatically handles cases when a global register
is clobbered by the instruction (which may happen on the register
constrained x86 architecture).
* Implement value coalescing for copy instructions.
* Provide for efficient handling of x87 floating point stack.
* Add gen-rules program that supersedes gen-sel. It generates code for
new register allocator and extends the syntax of instruction selection
rules to make use of new features such as register classes, scratch
registers, etc.
Alpha:
* Add Alpha backend (not yet fully functional) (Thomas Cort).
x86:
* Update x86 instruction selector for new register allocator and rules
syntax. Take advantage of their new features to generate better code
and/or simplify rules (Aleksey Demakov).
* optimize code generated by throw_builtin, JIT_OP_THROW, JIT_OP_LOAD_PC
if the position-independent option is not set (Kirill Kononenko).
* Implement JIT_OP_IMIN_UN, JIT_OP_ISIGN, JIT_OP_LSIGN, JIT_OP_IABS,
JIT_OP_LABS, JIT_OP_LOW_WORD, JIT_OP_EXPAND_INT, JIT_OP_EXPAND_UINT,
JIT_OP_INT_TO_NFLOAT, JIT_OP_UINT_TO_NFLOAT, JIT_OP_LONG_TO_NFLOAT,
JIT_OP_ULONG_TO_NFLOAT rules (Aleksey Demakov, Kirill Kononenko).
* optimize loading of zero constants. (Aleksey Demakov).
Interpreter:
* The interpreter backend does not use register stack and register
allocator anymore (Aleksey Demakov).
0.0.6 (15 January 2006)
x86:
* Be careful when using EBX in cpuid instructions so as not to confuse
gcc in PIC mode (Rhys W).
* Fixes to floating point instruction selection (Rhys Weatherley).
* Some support for structure copying (Rhys Weatherley).
* Pointer-relative loads and stores (Rhys Weatherley).
* Correct the offset for long-form backwards branches (Evin Robertson).
* Constant pointers in relative offset operations (Rhys Weatherley).
* Merge in Mono's changes to jit-gen-x86.h (Aleksey Demakov).
* Array loads and stores for floating point values (Aleksey Demakov).
* Memcpy, memset, and memmove operations (Aleksey Demakov).
* Return buffer problems in apply function with gcc 4.0.2 (Aleksey Demakov).
x86-64:
* Use the correct library entry point when calling jit_memcpy from
compiled code (Klaus Treichel).
Interpreter:
* Return area pointers (Rhys Weatherley).
* Prevent double push of indirect function pointers (Rhys Weatherley).
Function/instruction core:
* Clear block addresses and fixup lists if a function restart is needed
(Evin Robertson).
* Use destination type for store type, not source type (Evin Robertson).
* Tail call implementation (Rhys Weatherley).
* Address of constants (Avinash Atreya, Aleksey Demakov).
* Functions for locating the proper start of a function in the cache
(Aleksey Demakov).
* New exception type for array out of bounds (Aleksey Demakov).
* Jump tables (Aleksey Demakov).
* Intrinsics that return exception codes should be labeled "int" (Aleksy D).
* Spill both parts of a register pair properly (Aleksey Demakov).
* Fixes to freeing of register pairs (Aleksey Demakov).
Dpas:
* Throw builtin exceptions (Aleksey Demakov).
* Implement array expressions (Avinash Atreya).
Other:
* Sample VM for demonstrating libjit (Norbert Bellow).
* Debug interface for line numbers and breakpoints (Rhys Weatherley).
* Man page formatting issues (Peter Lund).
* Wrong return value in jit_function_apply_vararg (Evin Robertson).
* Make debug dumping work with cygwin (Aleksey Demakov).
* Option to force use on long double on Win32 (Aleksey Demakov).
0.0.4 (8 August 2004)
* Pluggable object models.
* Problems with "gen-apply" on Win32 systems.
* Optimize "if true goto" into "goto".
* Peephole optimization on branches.
* Adjust ARM codegen macros to support branch elimination instructions.
* Redesign exception handling to use "setjmp" everywhere.
* Remove C++ code from "libjit.so" so that it is a pure C library.
* Use computed goto's in the interpreter if the compiler supports them.
* Don't allow conditional branches to jump out of exception contexts.
* Block movement to allow initialization code to be moved to the start
of a function, or loop condition code to be moved to the end.
* Rewrite the exception region routines to make them easier to use.
* Add the "gen-sel" program, for creating instruction selectors.
* Write instruction selectors for x86 and ARM (only x86 is enabled).
* Portability fixes for ARM, PPC, Alpha, IA64, and amd64.
* Clarify the description of LLVM, at the request of LLVM's author.
* Deferred argument popping after function calls.
* Add "--enable-interpreter" to force the interpreter to be used.
* Implement a simple global register allocator based on usage counts.
* Recognise increment and decrement idioms.
* Align cache flushes properly (Miroslaw Dobrzanski-Neumann).
* Querying of x86 cpuid where necessary.
* Add a constant pool for ARM, to make constant loads more efficient.
* Handle register pairs for 64-bit values properly.
* Support for parameter areas on the stack, to reduce push/pop overhead.
* Avoid unnecessary register spills if a value won't be used again.
* Implement tail calls from a function to itself.
* Optimize x86 prologs and epilogs to avoid doing unnecessry work.
* Centralise the code that handles parameter passing.
* Support for parallel builds.
0.0.2 (13 May 2004)
* Function and instruction building API basics in place, in C and C++.
* Operations include arithmetic, overflow checking, conversion,
mathematical (sin, sqrt, etc), branching, exception handling,
function calls, structure types, and arrays.
* Up-front or on-demand compilation and re-compilation.
* Interpreter at par with instruction building requirements.
* x86 and ARM in early stages (not enabled yet).
* Register allocation for register-based and stack-based architectures.
* Nested functions.
* Dynamic Pascal language is usable, suitable for writing test cases.
* Beginnings of ELF support for eventual ahead-of-time compilation.