Tue Jun 18 10:21:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / jit / ChangeLog
1
2 Tue Jun 18 10:21:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
3
4         * invoke.c: marshal simple arrays correctly.
5
6 2002-06-17  Dietmar Maurer  <dietmar@ximian.com>
7
8         * x86.brg: added inlined versions of Math.Sin, Math.Cos, Math.Sqrt
9
10         * jit.c (mono_analyze_stack): impl. STARG
11         (mono_analyze_stack): impl. LDARGA
12
13         * exception.c (arch_handle_exception): correctly restore register
14         values when unwinding the stack (fixes bug 25698)
15
16 2002-06-09  Martin Baulig  <martin@gnome.org>
17
18         * debug.c (mono_debug_open_image): For MONO_DEBUG_FORMAT_DWARF2_PLUS,
19         the `%s-debug.s' file is in the same directory than its assembly.
20
21 Sat Jun 1 13:24:01 CEST 2002 Paolo Molaro <lupus@ximian.com>
22
23         * message.c, emit-x86.c: kill warnings.
24
25 2002-05-31  Dietmar Maurer  <dietmar@ximian.com>
26
27         * x86.brg: buf fix in REMOTE_STIND_OBJ
28         (mono_ldvirtftn): impl.
29         (mono_ldintftn): impl.
30         (mono_ldftn): impl.
31
32 Fri May 31 13:26:56 CEST 2002 Paolo Molaro <lupus@ximian.com>
33
34         * mono.c: added --config command line option.
35
36 Fri May 31 12:34:52 CEST 2002 Paolo Molaro <lupus@ximian.com>
37
38         * jit.c, jit.h: collect statistics about the number of basic blocks.
39
40 2002-05-31  Martin Baulig  <martin@gnome.org>
41
42         * debug.c (mono_debug_address_from_il_offset): New public function.
43         (mono_debug_add_method): Improved local variable info: correctly handle
44         variables in registers and their start/end scopes.
45
46 2002-05-30  Martin Baulig  <martin@gnome.org>
47
48         * debug-dwarf2.c (dwarf2_write_string): Use "0x%lx" as fprintf() format,
49         not "%p" which seems to be broken on Windows/mingw32.
50
51 2002-05-30  Dietmar Maurer  <dietmar@ximian.com>
52
53         * x86.brg (reg): bug fix in LOCALLOC
54
55         * mono.c (main): new switch --nointrinsic to disable memcpy opt.
56
57         * x86.brg: added block copy/init optimizations from 
58         Serge (serge@wildwestsoftware.com)
59  
60 Thu May 30 14:13:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
61
62         * invoke.cs: lookup P/Invoke method address only when needed.
63
64 2002-05-29  Dietmar Maurer  <dietmar@ximian.com>
65
66         * x86.brg: bug fix in REMOTE_STIND_OBJ
67
68         * invoke.c (arch_create_native_wrapper): handle pointers to value types
69
70         * helpers.h: use mono_ prefix for all functions
71
72         * jit.c (mono_analyze_stack): fixed SIZEOF
73
74         * x86.brg: impl. LOCALLOC, INITBLK
75
76 2002-05-28  Dietmar Maurer  <dietmar@ximian.com>
77
78         * x86.brg: impl. CKFINITE 
79
80         * jit.c (mono_analyze_stack): impl. CEE_CALLI
81
82         * x86.brg (JMP): impl. JMP opcode
83
84 2002-05-27  Dietmar Maurer  <dietmar@ximian.com>
85
86         * jit.c (mono_cfg_new): reserve additional space to store ESP when
87         calling finally handlers.
88
89         * exception.c (arch_get_call_finally): save ESP before calling
90         finally handler.
91
92         * helpers.c (map_arg_type): move some generic helper function into
93         this file.
94
95         * mono.c (usage): new option --breakonex 
96
97         * exception.c (arch_exc_is_caught): only return FALSE if really
98         unhandled.
99
100         * jit.c (mono_thread_abort): free jit_tls
101
102 2002-05-24  Dietmar Maurer  <dietmar@ximian.com>
103
104         * x86.brg (stmt): use memmove to cope with overlapping
105         blocks. This is not required by the specs, so we can remove it
106         later if it turns out to be too slow (and use memcpy).
107
108         * jit.c (mono_analyze_stack): moved const. folding from x86.brg
109
110         * x86.brg: CPBLK impl.
111
112         * emit-x86.c (tree_emit): modified to support 3 nonterminals per
113         rule (used for CPBLK).
114
115 Thu May 23 18:43:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
116
117         * mono.c: remove generated code from hash when benchmarking/testing
118         method compilation.
119         * invoke.cs: special case string ctors.
120
121 2002-05-23  Dietmar Maurer  <dietmar@ximian.com>
122
123         * *.c: code cleanups - tried to separate architecture dependent things. 
124
125 2002-05-23  Martin Baulig  <martin@gnome.org>
126
127         * debug.c (mono_debug_open): Don't call mono_debug_add_image().
128         (mono_debug_write_symbols): Only recreate the symbol file if
129         necessary.
130
131         * debug-private.h (MonoDebugHandle): Added `dirty' flag.
132
133         * mono.c (main): Call mono_debug_add_image() here.
134
135         * jit.c (mono_thread_abort): If we have debugging support, call
136         mono_debug_make_symbols() and G_BREAKPOINT().
137
138         * exception.c (arch_handle_exception): Don't G_BREAKPOINT() if we get
139         an unhandled exception.
140
141 2002-05-23  Dietmar Maurer  <dietmar@ximian.com>
142
143         * delegate.c: move the thread pool to metadata/threadpool.c, code
144         cleanup.
145
146 2002-05-22  Dietmar Maurer  <dietmar@ximian.com>
147
148         * exception.c (arch_exc_is_catched): impl. MS like exception
149         handling (added a check for unhandled exceptions)
150
151 2002-05-22  Martin Baulig  <martin@gnome.org>
152
153         * debug-dwarf2-plus.c (mono_debug_open_assembly_dwarf2_plus): Only run
154         the assembler if necessary, ie. the assembler file is newer than the
155         symbol file or the symbol file does not exist.
156
157         * debug.c: Added "update_on_exit" argument to recreate the symbol file
158         when the JIT exists.
159
160         * debug-dwarf2.c: Produce assembler code which is free of comments and
161         extra whitespaces so that it's suitable for `as -f'.
162
163 2002-05-22  Martin Baulig  <martin@gnome.org>
164
165         * debug-dwarf2.c (dwarf2_write_section_end): Removed.  This is not needed
166         and not supported by all assemblers.
167         (dwarf2_write_2byte): Use ".word" instead of ".2byte" since ".2byte" is a
168         GNU extension.
169
170         * mono.c (--debug): Small fix in the argument parsing.
171
172 2002-05-22  Martin Baulig  <martin@gnome.org>
173
174         * debug.c: Added "dont_assemble" and "dont_precompile" argument for dwarf-plus.
175
176         * mono.c: Applied patch from Miguel:
177         (--debug): This is now a `--debug=[FORMAT]' argument where FORMAT defaults
178         to dwarf-plus.
179
180 2002-05-21  Martin Baulig  <martin@gnome.org>
181
182         * debug.c (mono_debug_source_location_from_address): Added support for the
183         dwarf2-plus format.
184
185 2002-05-21  Martin Baulig  <martin@gnome.org>
186
187         * debug.c (mono_debug_source_location_from_address): New function.
188         (mono_debug_il_offset_from_address): New function.
189
190         * exception.c (arch_handle_exception): If we have debugging support, include
191         information about the source location and IL offset in the stack trace.
192
193 2002-05-21  Dietmar Maurer  <dietmar@ximian.com>
194
195         * jit.c (mono_analyze_stack): LDARG uses 16bit argument (fix bug
196         #25058)  
197
198         * x86.brg (stmt): removed unnecessary assertion
199
200         * jit.c (check_inlining):  we cant inline throw instructions
201         (because it breaks some basic block requirements)
202
203 2002-05-21  Martin Baulig  <martin@gnome.org>
204
205         * debug-private.h (MonoDebugFlags): New enum typedef.
206
207         * debug.c (mono_debug_open): Added a few useful arguments.  See the manpage
208         for details.
209
210 2002-05-21  Martin Baulig  <martin@gnome.org>
211
212         * debug.c (mono_debug_open_file): Renamed to mono_debug_open(), now takes
213         a `MonoAssembly *' argument instead of a `char *filename' one.  Also added
214         `const char **args' argument.
215
216         * mono.c (mono_jit_assembly): Renamed to mono_jit_compile_image(), added
217         `int verbose' argument and made it public.
218         (mono_jit_compile_class): New public function,  moved the code to compile
219         all methods in a class here from main().
220         (--compile): The argument can now also be an image (in `@imagename' format).
221         Updated documentation for this command line argument.
222         (--precompile): New command line argument to precompile an image/class/method
223         before executing the main app.  This argument can be given multiple times.
224         (--break): Renamed the "--debug" command line argument to "--break".
225         (--debug): New command line argument to specify the debugging format.
226         (--stabs, --dwarf, --dwarf-plus): Removed, obsoleted by "--debug".
227         (--debug-args): New command line argument.  This is a comma-separated list of
228         additional arguments for the symbol writer.
229         (usage): Beautified the help text a bit.
230
231         * debug-dwarf2-plus.c (mono_debug_open_assembly_dwarf2_plus): Use the new
232         public mono_jit_compile_image() function rather than duplication this
233         functionality here.
234
235 2002-05-21  Martin Baulig  <martin@gnome.org>
236
237         * debug-dwarf2-plus.c: This is now working again :-)
238
239         * debug.c (mono_debug_open_file): When using MONO_DEBUG_FORMAT_DWARF2_PLUS,
240         we create two MonoDebugHandles: one for MONO_DEBUG_FORMAT_DWARF2_PLUS and
241         one for the fallback MONO_DEBUG_FORMAT_DWARF2.
242
243 2002-05-21  Martin Baulig  <martin@gnome.org>
244
245         * jit.c (mono_debug_handle): Removed this global variable.
246
247         * debug.c (mono_debug_close): Removed.
248         (mono_debug_cleanup): New global function.
249         (mono_debug_add_image): New global function.
250         (mono_debug_handle_from_class): New global function.
251         (mono_debug_write_symbols): New global function.
252         (mono_debug_add_type): Removed `MonoDebugHandle *' argument.
253         (mono_debug_add_method): Likewise.
254
255 2002-05-21  Martin Baulig  <martin@gnome.org>
256
257         Work around a hard-to-fix bug in GDB and create a single dwarf/stabs
258         file for all assemblies.  Currently, the JIT doesn't put all methods
259         from a single assembly into a continuous region of memory.  We were
260         previously creating valid DWARF 2 files for this, but unfortunately
261         GDB's symbol tables get messed up when it reads more than one such file.
262
263         * debug-private.h (AssemblyDebugInfo): Moved `f', `producer_name',
264         `next_idx', `methods', `type_hash', `source_files' and `format'
265         into the MonoDebugHandle.
266
267         * debug.c (mono_debug_get_type): This now operates on the MonoDebugHandle,
268         not on the AssemblyDebugInfo.
269         (mono_debug_open_file): Moved some stuff here from mono_debug_open_assembly().
270
271         * debug-dwarf2.c (mono_debug_write_assembly_dwarf2): Renamed into
272         mono_debug_write_dwarf2().
273         (mono_debug_open_assembly_dwarf2): Removed.
274         (mono_debug_close_assembly_dwarf2): Removed.
275
276         * debug-stabs.c (mono_debug_write_assembly_stabs): Renamed into
277         mono_debug_write_stabs().
278         (mono_debug_open_assembly_stabs): Removed.
279         (mono_debug_close_assembly_stabs).
280
281         * debug-dwarf2-plus.c: This is currently broken. :-(
282
283 2002-05-20  Martin Baulig  <martin@gnome.org>
284
285         * debug.h (mono_debug_format): New global variable.
286         (MonoDebugFormat): Added MONO_DEBUG_FORMAT_NONE.
287
288         * debug-private.h (MonoDebugHandle): Added `objfiles' field which is
289         a whitespace separated list of symbol files.
290         (AssemblyDebugInfo): Added `objfile' filed which is the name of the
291         symbol file.
292
293         * mono.c (main): Pass the assembly file name to mono_debug_open_file().
294
295         * debug.c (mono_debug_make_symbols): Link all symbol files into a big
296         `<assemblyname>.o' symbol file.
297
298 2002-05-20  Martin Baulig  <martin@gnome.org>
299
300         * debug.c (debug_load_method_lines): Check whether the assembly file
301         is newer than the IL file and recreate the IL file if necessary.
302
303 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
304
305         * mono.c Updated copyright years. 
306
307 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
308
309         * mono.c (usage): Relayout command line options.
310
311 2002-05-17  Dietmar Maurer  <dietmar@ximian.com>
312
313         * x86.brg (reg): fixed array bound check
314
315         * emit-x86.c (enter_method): print method signature
316
317         * exception.c (arch_handle_exception): set trace info before we
318         call handlers.
319
320 2002-05-16  Dietmar Maurer  <dietmar@ximian.com>
321
322         * jit.c (mono_find_final_block): make it work with mcs
323
324         * x86.brg: buf fix. if exception variable is allocated to a register. 
325
326         * jit.c (mono_find_final_block): bug fix.
327
328 2002-05-15  Dietmar Maurer  <dietmar@ximian.com>
329
330         * delegate.c (arch_end_invoke): fix bug #24653, simplified the
331         code using new runtime_invoke feature.
332
333         * jit.c (mono_analyze_flow): try blocks are followed by handler
334         blocks, so we need to add all handler blocks as succesors.
335         (mono_thread_start_cb): set end_of_stack
336
337         * exception.c (arch_handle_exception): correctly save/restore caller
338         saved regs.
339
340         * emit-x86.c (arch_emit_prologue): correctly save/restore caller
341         saved regs.
342
343         * jit.c (mono_cfg_new): allocate space for caller saved registers.
344
345 2002-05-14  Dietmar Maurer  <dietmar@ximian.com>
346
347         * jit.c: only use one TLS slot to store jit data
348
349         * exception.c (arch_handle_exception): print function signature,
350         use thread relative end_of_stack
351
352 2002-05-13  Dietmar Maurer  <dietmar@ximian.com>
353
354         * jit.c (OPT_BOOL): new. opt. for boolean variables - we simply
355         store them as 32 bit integers.
356         (mono_analyze_stack): we need to generate a temporary var for
357         SHL/SHR because the tree allocator can fail otherwise 
358
359         * exception.c (arch_handle_exception): EIP now points to the call
360         instruction, not to the instruction after the call. This fixes the
361         bug reported by Linus Upson (tests/exception8.cs)
362
363 2002-05-11  Dietmar Maurer  <dietmar@ximian.com>
364
365         * jit.c (mono_analyze_flow): always allocate the forest array
366         (mono_stack_duplicate_used_var): impl.
367         (mono_copy_used_var): impl.
368
369         * x86.brg: bug fix in SHR/SHL
370
371         * emit-x86.c (arch_emit_prologue): check if live_in_set != NULL
372
373 2002-05-11  Sergey Chaban <serge@wildwestsoftware.com>
374
375         * mono.c: new --fast-iconv command line option
376         to enable fast FP-to-integer conversion code.
377         * jit.c, jit.h: added global variable to store state
378         for the above option. This optimization is disabled
379         by default.
380         * x86.brg: added code to emit fast FP-to-integer
381         conversion sequences.
382
383 2002-05-10  Dan Lewis  <dihlewis@yahoo.co.uk>
384
385         * emit-x86.c: simple definite assignment analysis optimization for
386         uninitialized locals.
387
388 Fri May 10 15:43:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
389
390         * x86.brg, emit-x86.c: patch the branch targets with x86_patch().
391
392 2002-05-10  Dietmar Maurer  <dietmar@ximian.com>
393
394         * linear-scan.c (mono_update_gen_set): improvement/bug fix
395
396         * x86.brg: added additional rules to handle global allocated registers
397
398         * mono.c (usage): the option is called --nols, and it dissables
399         linear scan.
400
401         * x86.brg: better LDIND_R4, LDIND_R8, STIND_R4, STIND_R8
402
403 2002-05-09  Dietmar Maurer  <dietmar@ximian.com>
404
405         * linear-scan.c: linear scan reg. allocation and data flow analysis
406         use Paolo's great bitset implementation.
407
408         * jit.c (arch_allocate_var): add live range info
409         (mono_cfg_add_successor): create list of successors for basic
410         blocks.
411
412         * mono.c (main): new option --ls to enable linear scan
413
414         * exception.c (arch_handle_exception): print instruction pointer
415         relative to method start address.
416
417         * jit.c (mono_print_ctree): print register number if locals are
418         allocate in registers.
419
420         * emit-x86.c (arch_emit_prologue): initialize reg. allocated locals
421         (arch_emit_epilogue): take care when restoring save registers,
422         because the stack pointer may has changed.
423
424         * x86.brg: s/VAROFFSET/VARINFO/
425         modified to support global register allocation
426
427 Mon May 6 15:38:15 CEST 2002 Paolo Molaro <lupus@ximian.com>
428
429         * jit.h, jit.c, emit-x86.c: x86 cpu detection code from Sergey.
430
431 2002-05-03  Sergey Chaban <serge@wildwestsoftware.com>
432
433         * x86.brg: more coni4 optimizations
434         MUL: generate optimized code for some consts other
435         than powers of 2 (hardcoded impl. for 3, 5, 10 etc.);
436         DIV_UN: multiply with reciprocal instead of dividing;
437
438 2002-05-03  Dietmar Maurer  <dietmar@ximian.com>
439
440         * x86.brg: use VAROFFSET macro
441
442         * emit-x86.c (tree_emit): allocate space for spilled regs in
443         activation frame instead of pushing them to the stack.
444
445         * x86.brg: replace BXX with CBRANCH/COMPARE
446         replaced CXX CSET/COMPARE
447
448         * emit-x86.c (arch_allocate_regs): improved register allocation
449
450 2002-05-02  Dietmar Maurer  <dietmar@ximian.com>
451
452         * delegate.c (mono_delegate_cleanup): signal semaphore in order to
453         exit threads.
454
455 2002-04-30  Dick Porter  <dick@ximian.com>
456
457         * mono.c (main): Tell glib to not abort when g_log() etc print
458         recursively
459
460 2002-04-30  Dietmar Maurer  <dietmar@ximian.com>
461
462         * x86.brg: opt. LDELEMA impl.
463         (MUL) use shift when possible.
464         (DIV) use shift when possible.
465         impl. various opt. with coni4
466
467         * exception.c (arch_handle_exception): use ctx->SC_EBP in
468         end_of_stack check as suggested by Linus Upson <linus@linus.com>
469
470 2002-04-29  Dietmar Maurer  <dietmar@ximian.com>
471
472         * x86.brg (LDLEN, UNBOX): removed unnecessary NULL check.  
473
474         * exception.c: included the Freebsd patch from Sandro Tolaini
475         <sandro@focuseek.com>
476
477 Mon Apr 29 15:18:00 CEST 2002 Paolo Molaro <lupus@ximian.com>
478
479         * mono.c, jit.c: use mono_runtime_run_main ().
480
481 2002-04-29  Dietmar Maurer  <dietmar@ximian.com>
482
483         * jit.c (mono_analyze_stack): dont call methods on Object with
484         METHOD_ATTRIBUTE_FINAL directly because it breaks remoting.
485
486         * x86.brg: added more CONV_U rules
487
488         * jit.c (mono_analyze_stack): avoid recursive call of virtual
489         methods: fixes Bug #23778 
490         (mono_analyze_stack): emit right CONV_UX opcodes: fixes bug 23547
491
492         * exception.c (arch_handle_exception): only g_assert(cleanup) if
493         we really need it.
494
495 2002-04-27      Patrik Torstensson <patrik.torstensson@intel.com>
496
497         * x86.brg: fixed bug in CONV_I8 (invalid stack correction)
498
499 2002-04-27  Martin Baulig  <martin@gnome.org>
500
501         * jit.h (MonoFlowGrap): Renamed `epilogue_begin' to `epilogue_end',
502         there's already `epilog' so we don't need `epilogue_begin'.
503
504         * debug.c (mono_debug_add_method): Use `cfg->epilogue_end' to get the
505         size of the method's code.
506
507 2002-04-25  Martin Baulig  <martin@gnome.org>
508
509         * debug-dwarf2.c (dwarf2_write_string_type): Reflect latest MonoString
510         changes.
511
512 2002-04-25  Dietmar Maurer  <dietmar@ximian.com>
513
514         * x86.brg: enable stmt: STIND_I4 (addr, coni4) again,
515         added CONV_OVF_I4 (fix bug #23808)
516
517 2002-04-23  Dietmar Maurer  <dietmar@ximian.com>
518
519         * x86.brg: code cleanup - use x86_patch ()
520
521         * jit.c (mono_analyze_stack): only use MB_TERM_CHECKTHIS when necessary
522         (mono_analyze_stack): don't store constants in temp. variables for CEE_DUP
523
524         * x86.brg (stmt): removed stmt: STIND_I4 (addr, coni4) rule
525         because it slows down performance.
526
527 2002-04-21  Dan Lewis  <dihlewis@yahoo.co.uk>
528
529         * emit-x86.c: enter_method handles 8-byte aligned parameters.
530
531 2002-04-20  Dan Lewis  <dihlewis@yahoo.co.uk>
532
533         * jit,h, jit.c, x86.brg: NEWOBJ_SPEC and NEWARR_SPEC terminals for
534         non-shared code.
535
536 2002-04-20  Dietmar Maurer  <dietmar@ximian.com>
537
538         * jit.c (check_inlining): added statistics about inlineing
539
540         * mono.c (usage): new switch --noinline to disable inlining
541
542         * jit.c (mono_analyze_stack): added a check for (this!=NULL) if we
543         inline methods (to keep semantics)
544
545         * x86.brg: added constant folding for inegers 
546
547         * emit-x86.c (tree_allocate_regs): handle the special case when
548         chain rules need a register.
549
550 2002-04-19  Dietmar Maurer  <dietmar@ximian.com>
551
552         * invoke.c (arch_create_native_wrapper): do not save LMF for Strings
553
554         * jit.c (check_inlining): better inlining support
555
556 2002-04-19  Dan Lewis  <dihlewis@yahoo.co.uk>
557         
558         * x86.brg: LDLEN uses max_length instead of bounds[0]
559         * jit.c: support for new szarray format
560
561 2002-04-18  Dietmar Maurer  <dietmar@ximian.com>
562
563         * jit.c (check_inlining): added inlining support
564
565 2002-04-17  Dietmar Maurer  <dietmar@ximian.com>
566
567         * x86.brg: optimized version of castclass and isinst
568
569 Wed Apr 17 12:34:56 CEST 2002 Paolo Molaro <lupus@ximian.com>
570
571         * emit-x86.c, invoke.c: track time spent compiling.
572
573 Wed Apr 17 10:58:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
574
575         * emit-x86.c, invoke.c: call profile callbacks if needed.
576         * jit.c, jit.h, mono.c: add --profile command line option.
577
578 2002-04-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
579
580         * jit.h: included mono/io-layer/io-layer.h to avoid breaking
581         compilation under windows when upgrading mingw and w32api to 
582         version 1.3 (thanks Dick!).
583
584 2002-04-15  Patrik Torstensson <patrik.torstensson@labs2.com>
585
586         * jit.c: changed the array icalls to use full names
587
588 2002-04-15  Dietmar Maurer  <dietmar@ximian.com>
589
590         * x86.brg: check the this pointer before calling
591         non-virtual functions
592
593         * emit-x86.c (arch_emit_prologue): initialize local vars.
594
595         * x86.brg: removed incredible clumsy code
596
597 2002-04-13  Martin Baulig  <martin@gnome.org>
598
599         * debug-dwarf2.c (dwarf2_write_variable_location): New static func to write
600         the location of a variable.
601         (dwarf2_write_variable, dwarf2_write_parameter): Take a MonoDebugVarInfo
602         instead of a stack offset and use dwarf2_write_variable_location() to write
603         the location.
604
605 2002-04-13  Martin Baulig  <martin@gnome.org>
606
607         * debug.c, debug-stabs.c, debug-dwarf2.c: Reflect latest debug-symfile.h
608         API changes.
609
610 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
611
612         * Makefile.am: use of the new '-s' option in monoburg.
613
614 2002-04-12  Martin Baulig  <martin@gnome.org>
615
616         * debug-dwarf2.c (dwarf2_write_variable): Emit info about the variable's
617         lifetime.
618
619 2002-04-10  Sergey Chaban <serge@wildwestsoftware.com>
620         * win32-exception: added Win32 SEH exception filter that translates
621         CONTEXT to sigcontext;
622
623         * jit.c: added Win32 SEH init/reset calls, compute sigcontext address
624         in a platfrom-dependent way;
625
626         * jit.h: use win32-exception instead of signal if PLATFORM_WIN32
627         and avoid io-layer includes;
628
629         * delegate.c: do not include io-layer stuff if PLATFORM_WIN32
630         is defined;
631
632 2002-04-09  Dietmar Maurer  <dietmar@ximian.com>
633
634         * delegate.c (arch_end_invoke): restore output arguments
635
636 Mon Apr 8 17:16:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
637
638         * jit.c: call mono_runtime_init ().
639
640 2002-04-08  Dietmar Maurer  <dietmar@ximian.com>
641
642         * jit.c (mono_jit_cleanup): added more statistics
643
644         * invoke.c (arch_create_native_wrapper): special case EndInvoke -
645         we need to pass the MonoMethod pointer as first argument.
646
647         * delegate.c (mono_async_invoke): notify all listeners, not only a
648         single one.
649         (arch_end_invoke): we now pass a MonoMethod as first parameter and
650         use arch_method_call_message_new() to access the stack.
651         (arch_end_invoke): wait until we really finished processing
652         (async_invoke_abort): notify all listeners, not only a
653         single one.
654
655 2002-04-06  Dietmar Maurer  <dietmar@ximian.com>
656
657         * message.c (arch_return_value): impl.
658         (arch_method_return_message_restore): consider delegate BeginInvoke
659
660         * jit.c: removed jit_exec_main()
661
662         * delegate.c (arch_begin_invoke): use the message builder to make
663         it architecture independent - still needs more cleanup.
664
665 2002-04-05  Dietmar Maurer  <dietmar@ximian.com>
666
667         * delegate.c (mono_delegate_ctor): support for transparent proxy
668
669         * x86.brg (freg): bug fix in CONV_R* opcodes
670
671 2002-04-04  Dietmar Maurer  <dietmar@ximian.com>
672
673         * message.c: added documentation
674
675 2002-04-03  Dietmar Maurer  <dietmar@ximian.com>
676
677         * mono.c (main): use --trace instead of --trace-calls
678
679         * x86.brg: impl. REMOTE_STIND_XX
680
681         * message.c (mono_store_remote_field): impl.
682
683 2002-03-30  Dietmar Maurer  <dietmar@ximian.com>
684
685         * x86.brg: impl. REMOTE_FIELD (load fields of remote objects)
686
687         * message.c (mono_load_remote_field): impl.
688
689         * jit.c (mono_analyze_stack): only call marshalbyref methods
690         through the vtable.
691         (mono_analyze_stack): consider marshalbyref objects in LDFLD
692
693 Fri Mar 29 16:00:27 CET 2002 Paolo Molaro <lupus@ximian.com>
694
695         * x86.brg: kill pointer arithmetric.
696
697 2002-03-28  Martin Baulig  <martin@gnome.org>
698
699         * jit.c (mono_debug_insert_breakpoint): New global variable.
700         (mono_debug_last_breakpoint_address): New global variable.
701
702         * emit-x86.c (arch_compile_method): If `mono_debug_insert_breakpoint' is
703         non-zero, insert a breakpoint; if it's positive, decrement it when done.
704         Set `mono_debug_last_breakpoint_address' to the address of the last inserted
705         breakpoint.
706
707         * debug.h: Provide external declaration of `mono_debug_insert_breakpoint' and
708         `mono_debug_last_breakpoint_address', also documented them here.
709
710 2002-03-28  Martin Baulig  <martin@gnome.org>
711
712         * debug-private.h (MonoDebugHandle): Renamed `format' to `default_format'.
713         (AssemblyDebugInfo): Added `format'.
714
715         * debug.c: Use the AssemblyDebugInfo's `format' field to determine the format,
716         this allows us choose the format on a per-assembly basis.
717         (mono_debug_open_assembly): When using MONO_DEBUG_FORMAT_DWARF2_PLUS, fall back
718         to MONO_DEBUG_FORMAT_DWARF2 if the symbol file does not exist, but the IL file
719         exists.
720         (debug_generate_method_lines): Generate correct IL offsets.
721
722 2002-03-28  Martin Baulig  <martin@gnome.org>
723
724         * jit.h (MonoFlowGraph): Added `prologue_end' and `epilogue_start' fields.
725
726         * emit-x86.c (arch_compile_method): Set prologue_end and epilogue_start.
727
728         * debug-private.h (DebugMethodInfo): Renamed `frame_start_offset' to
729         `prologue_end_offset', added `epilogue_begin_offset' and `last_line'.
730
731         * debug.c (debug_generate_method_lines): Don't return if we don't have line
732         numbers, we still need to generate the IL offsets here. Emit line numbers
733         for `prologue_end_offset' (the first line of actual code) and 
734         `epilogue_begin_offset' (the line of the method's closing brace).
735         Don't crash if cfg->bblocks [i].forest is NULL.
736         (mono_debug_add_method): Don't crash if we don't have line numbers.
737         Initialize the newly added fields.
738
739         * debug-stabs.c: Record first and last line, emit filename info at the
740         beginning of the stab file, gdb ignores the types otherwise.
741
742         * debug-dwarf2.c: Use the new prologue_end_offset instead of guessing it;
743         emit line number info for the first and last line.
744
745 2002-03-28  Dietmar Maurer  <dietmar@ximian.com>
746
747         * invoke.c (arch_create_delegate_trampoline): impl.
748
749 Thu Mar 28 11:58:53 CET 2002 Paolo Molaro <lupus@ximian.com>
750
751         * Makefile.am, mono.c, jit.h, jit.c: build the libmono library
752         with the jit runtime to easy embedding. main() is moved to mono.c, now.
753         * jit.c: use opcode names from libmetadata.
754         * debug.h, debug.c: constify char* argument.
755
756 2002-03-28  Dietmar Maurer  <dietmar@ximian.com>
757
758         * jit.c: catching SIGSEGV again, added proxy support
759
760 2002-03-21  Dietmar Maurer  <dietmar@ximian.com>
761
762         * delegate.c (mono_delegate_init): remove unused worker threads
763
764 2002-03-27  Mike Kestner <mkestner@speakeasy.net>
765
766         * delegate.c (arch_get_delegate_invoke): malloc a bigger area
767
768 Tue Mar 26 19:54:45 CET 2002 Paolo Molaro <lupus@ximian.com>
769
770         * jit.c: remove glib mem vtable code.
771
772 2002-03-26  Martin Baulig  <martin@gnome.org>
773
774         * debug-dwarf2.c (write_method_lines_dwarf2): Don't generate method
775         lines if we don't have line number information.
776         (write_method_dwarf2): Use `minfo->method_info.this_offset' instead
777         of hardcoding 8.
778
779         * debug-stabs.c (write_method_stabs): Don't generate method lines if
780         we don't have line number information. Use `minfo->method_info.this_offset'
781         instead of hardcoding 8.
782
783         * debug.c (debug_generate_method_lines): Don't crash if we don't have
784         line number information.
785         (mono_debug_open_assembly): Don't generate line numbers for
786         MONO_DEBUG_FORMAT_DWARF2_PLUS.
787         (mono_debug_add_method): Don't store the 'this' offset in `param_offsets',
788         but it in the new `this_offset' field.
789         
790 Mon Mar 25 13:03:35 CET 2002 Paolo Molaro <lupus@ximian.com>
791
792         * debug.c (debug_generate_method_lines): Use correct addresses for
793         record_il_offset().
794
795 Mon Mar 25 13:03:35 CET 2002 Paolo Molaro <lupus@ximian.com>
796
797         * jit.c: do not set the glib mem vtable anymore.
798         * Makefile.am: link to libmonoutils.
799
800 2002-03-25  Martin Baulig  <martin@gnome.org>
801
802         * debug.h (mono_debug_make_symbols): Documented this function.
803
804 2002-03-24  Martin Baulig  <martin@gnome.org>
805
806         * debug.c (mono_debug_add_method): Include the `this' offset in
807         the `minfo->method_info.param_offsets' array.
808
809 2002-03-23  Martin Baulig  <martin@gnome.org>
810
811         * x86.brg (lreg: CONV_I8 (reg)): X86_XOR modifies the flags, so we need
812         to do it before the X86_CMP.
813         (reg: CLT (lreg, lreg)): Use correct x86_branch8() targets.
814         (reg: CLT (lreg, lreg)): Likewise.
815         (reg: CLT_UN (lreg, lreg)): Likewise.
816         (reg: CLT_UN (lreg, lreg)): Likewise.
817         (reg: CGT (lreg, lreg)): Likewise.
818         (reg: CGT (lreg, lreg)): Likewise.
819         (reg: CGT_UN (lreg, lreg)): Likewise.
820         (reg: CGT_UN (lreg, lreg)): Likewise.
821
822 2002-03-23  Martin Baulig  <martin@gnome.org>
823
824         * debug-private.h (AssemblyDebugInfo): Added `_priv'.
825
826         * debug-dwarf2-plus.c
827         (mono_debug_open_assembly_dwarf2_plus): Open the symbol file here.
828         (mono_debug_close_assembly_dwarf2_plus): Close the symbol file here.
829         (mono_debug_write_assembly_dwarf2_plus): Only call
830         mono_debug_update_symbol_file() here.
831
832 Thu Mar 21 17:35:48 CET 2002 Paolo Molaro <lupus@ximian.com>
833
834         * jit.c: inter strings before executing a method.
835         Do not intern command line arguments anymore.
836
837 2002-03-21  Martin Baulig  <martin@gnome.org>
838
839         * debug.h (MonoDebugFormat): Added MONO_DEBUG_FORMAT_DWARF2_PLUS.
840
841         * debug-dwarf2-plus.c: This debugging format reads a symbol file which has
842         been created by MCS and fills in all machine dependent stuff.
843
844         * debug-private.h (DebugMethodInfo): Added `MonoDebugMethodInfo method_info',
845         removed everything which is already in MonoDebugMethodInfo.
846
847         * debug.c (debug_generate_method_lines): Generate the MonoILOffsetInfo array.
848         (mono_debug_make_symbols): Don't open the file or call as, this is done in the
849         backend code.
850
851         * jit.c (main): Added "--dwarf-plus" command line option to use the new
852         MONO_DEBUG_FORMAT_DWARF2_PLUS debugging format.
853
854 2002-03-21  Dietmar Maurer  <dietmar@ximian.com>
855
856         * jit.c (usage): new option to specify maximum number of worker threads
857         (mono_analyze_stack): avoid cyclic dependency in CEE_LDFTN
858
859         * delegate.c (async_invoke_abort): added support for asynchronous exceptions
860         (arch_get_async_invoke): notify listeners before we call the
861         asynchronous callback
862
863 2002-03-20  Dietmar Maurer  <dietmar@ximian.com>
864
865         * delegate.c (async_invoke_thread): support for domains
866         (async_invoke_thread): create workers only when needed
867
868 2002-03-19  Dietmar Maurer  <dietmar@ximian.com>
869
870         * delegate.c (async_invoke_thread): initial support for BeginInvoke/EndInvoke
871
872 2002-03-18  Dietmar Maurer  <dietmar@ximian.com>
873
874         * x86.brg: impl. lreg: XOR (lreg, lreg)
875         impl. REM (freg, freg)
876
877 2002-03-17  Martin Baulig  <martin@gnome.org>
878
879         * debug.c (mono_debug_open_assembly): Call mono_debug_get_type() on all
880         base types.
881
882         * debug-dwarf2.c: Added support for strings and arrays.
883
884 2002-03-17  Martin Baulig  <martin@gnome.org>
885
886         * debug.c (mono_debug_get_type): Recursively call this for all function members
887         of a class type.
888         (mono_debug_add_method): Don't mangle function names, this must be done by the
889         debugger backend if the debugging format needs mangled names.
890
891         * debug-dwarf2.c: Improved support for classes, added member functions.
892
893 2002-03-16  Martin Baulig  <martin@gnome.org>
894
895         * debug.c (mono_debug_get_type): Recursively call this for all members and
896         parent classes of a class type.
897
898         * debug-dwarf2.c: Added basic support for classes. Set source language to C++
899         since GDB doesn't like Java very much.
900
901 2002-03-16  Martin Baulig  <martin@gnome.org>
902
903         * debug-dwarf2.c: Added support for enums.
904
905 2002-03-15  Martin Baulig  <martin@gnome.org>
906
907         * debug.c (mono_debug_get_type): Recursively call this for all members
908         of a struct type.
909
910         * debug-dwarf2.c: Added support for structs.
911
912 2002-03-15  Dietmar Maurer  <dietmar@ximian.com>
913
914         * emit-x86.c (arch_create_jit_trampoline): adapt save/restore LMF
915         to new MonoLMF layout
916
917 2002-03-14  Dietmar Maurer  <dietmar@ximian.com>
918
919         * emit-x86.c (arch_create_native_wrapper): new code to generate
920         wrappers for calling native functions.
921         (arch_create_native_wrapper): free allocated strings
922         (arch_handle_exception): made mono_jit_info_table domain dependent
923
924 2002-03-14  Martin Baulig  <martin@gnome.org>
925
926         * debug.c (MonoDebugFormat): New public enums specifying which debugging
927         format to use.
928         (mono_debug_open_file): Added MonoDebugFormat argument.
929         (mono_debug_make_symbols): Don't take an argument to make it easier to call
930         this function from GDB. It's now safe to call this function multiple times;
931         it'll always write a complete debugging file.
932
933         * debug.c: Splitted this file into a general part which remains in this file
934         and the debugging format specific parts debug-stabs.c and debug-dwarf2.c.
935         All public functions now call a corresponding format specific function.
936
937         * debug.c: The following changes are private to debug.c:
938         (AssemblyDebugInfo, MonoDebugHandle): Moved declarations to debug-private.h.
939         (record_line_number, debug_generate_method_lines): New private functions.
940         (mono_debug_open_ass): Renamed to mono_debug_open_assembly; this function now
941         calls a debugging-format-specific function (mono_debug_open_assembly_stabs or
942         mono_debug_open_assembly_dwarf2).
943         (mono_debug_make_symbols): Calls mono_debug_write_assembly_stabs/dwarf2(). It's
944         now safe to call this function multiple times.
945         (mono_debug_get_type): New public function. This takes a `MonoClass *' and
946         returns an unique index for this type. It's used to ensure that we only write
947         each class once to the debugging file.
948         (mono_debug_add_method, mono_debug_add_type): Store all the data in an internal
949         data structure, but don't directly write to the debugging file. This is done
950         later from mono_debug_write_assembly().
951
952         * jit.c (main): Added "--dwarf" command line argument to generate DWARF 2
953         debugging output. Call mono_debug_close() on cleanup if necessary.
954
955 2002-03-14  Martin Baulig  <martin@gnome.org>
956
957         * debug-private.h: New private header file.
958
959         * debug-stabs.c: Added the stabs type generation stuff which was
960         previously in debug.c.
961
962         * debug-dwarf.c: Started to implement type support. We're currently
963         only writing this most basic types to the dwarf file, but this will
964         change soon.
965
966 2002-03-13  Martin Baulig  <martin@gnome.org>
967
968         * debug-stabs.c, debug-dwarf2.c: New files containing my new
969         debugging code. They're now in CVS, but not yet used anywhere.
970
971 2002-03-11  Dietmar Maurer  <dietmar@ximian.com>
972
973         * emit-x86.c (mono_delegate_ctor): use C impl. instead of x86_*
974         macros, included new delegate code from Daniel Stodden. 
975         
976         
977 Mon Mar 11 14:47:21 CET 2002 Paolo Molaro <lupus@ximian.com>
978
979         * jit.c: verify that corlib and runtime are in sync.
980
981 Mon Mar 11 11:30:56 CET 2002 Paolo Molaro <lupus@ximian.com>
982
983         * emit-x86.c, jit.c: use the debug-helpers facilities to
984         describe and match a method when debugging.
985
986 2002-03-10  Martin Baulig  <martin@gnome.org>
987
988         * emit-x86.c (arch_compile_method): When emitting stabs debugging
989         output, put a nop instruction at the start of all functions so that
990         the adresses won't change when using --debug.
991
992         * debug.c (mono_debug_add_method): `tree->cli_addr' is an offset into
993         the bytecode area, stabs needs a line number in the .il file. Use the
994         new info->moffsets to get the line number.
995         (AssemblyDebugInfo): Added `total_lines' and `moffsets' fields.
996         `moffsets' is an array of `total_lines' fields (total number of lines
997         in the .il file); for each line in the .il field, this array contains
998         the bytecode offset if it's an "IL_xxxx" line, -1 if it's the last line
999         of a method and 0 otherwise.
1000         (debug_load_method_lines): Read the whole .il file and initialize the
1001         info->moffsets field.
1002
1003 2002-03-09  Martin Baulig  <martin@gnome.org>
1004
1005         * x86.brg (DIV_UN): Clear EDX before performing the division and remove
1006         the unnecessary CDQ instruction.
1007
1008 2002-03-07  Dietmar Maurer  <dietmar@ximian.com>
1009
1010         * jit.c (mono_analyze_stack): only load addresses of value types
1011         on the runtime stack.
1012
1013 2002-03-07  Duncan Mak  <duncan@ximian.com>
1014
1015         * Makefile.am: A small patch fixing errors in vpath-based builds
1016         (make clean failing to rerun monoburg due to BUILT_SOURCES usage),
1017         committed for Daniel Stodden <stodden@in.tum.de>. 
1018
1019 Thu Mar 7 17:22:52 CET 2002 Paolo Molaro <lupus@ximian.com>
1020
1021         * jit.c: Boehm-GC enable.
1022
1023 2002-03-07  Dietmar Maurer  <dietmar@ximian.com>
1024
1025         * x86.brg (SAVE_LFM): bug fix: patch the saved IP because we
1026         realloc that code sometimes!
1027
1028         * emit-x86.c (mono_compute_branches): support several types of
1029         jump infos
1030
1031 2002-03-06  Dietmar Maurer  <dietmar@ximian.com>
1032
1033         * x86.brg: impl. MUL_OVF_UN (reg, reg)
1034
1035         * jit.c (mono_find_final_block): find correct finally handler.
1036
1037         * emit-x86.c (arch_create_jit_trampoline): bug fix: preserve
1038         caller saved registers.  
1039
1040 2002-03-05  Dietmar Maurer  <dietmar@ximian.com>
1041
1042         * x86.brg: use x86_widen_reg for CONV opcodes
1043
1044 2002-03-01  Dietmar Maurer  <dietmar@ximian.com>
1045
1046         * jit.c (MAKE_SPILLED_BI_ALU): remove unnecessary assertions
1047
1048         * emit-x86.c (arch_handle_exception): big fix - dont use
1049         uninitialized next_bp
1050         (arch_compile_method): make the jit thread save
1051         (x86_magic_trampoline): moved lock/unlock to x86_magic_trampoline
1052         to avoid need of recursive mutexes
1053
1054         * x86.brg: use new mono_assert macros
1055
1056 2002-02-28  Dietmar Maurer  <dietmar@ximian.com>
1057
1058         * emit-x86.c (arch_create_jit_trampoline): save/restore LMF before
1059         calling into unmanaged code (arch_compile_method).
1060
1061         * x86.brg: impl. CONV_I4 (freg) with correct rounding
1062         (lreg): impl CALL_I8(INTF_ADDR)
1063         impl. CONV_R_UN (reg)
1064         bug fix im REM_UN
1065
1066 2002-02-27  Dietmar Maurer  <dietmar@ximian.com>
1067
1068         * emit-x86.c (arch_runtime_invoke): impl. runtime invoke for the jit.
1069
1070 2002-02-26  Dietmar Maurer  <dietmar@ximian.com>
1071
1072         * x86.brg: bug fix in CLT(lreg,lreg)
1073         (reg): bug fix in CONV_OVF_I4(lreg)
1074         (lreg): replaced x86_call_reg with x86_call_code
1075
1076         * emit-x86.c (mono_add_jump_info): impl.
1077         (mono_compute_branches): patch real jump address (instead of
1078         emitting code twice)
1079
1080 Tue Feb 26 11:56:03 CET 2002 Paolo Molaro <lupus@ximian.com>
1081
1082         * x86.brg: optimize cmp reg,0 -> test reg.
1083
1084 Sun Feb 24 13:58:34 CET 2002 Paolo Molaro <lupus@ximian.com>
1085
1086         * jit.h, jit.c, emit-x86.c: Added a few statistics counters
1087         and the --stats command line option to print them.
1088         Fixed memory leak in arch_compile_method () when a method's code is
1089         found in the cache. Fix magic trampoline to deal with static calls.
1090
1091 2002-02-21  Dietmar Maurer  <dietmar@ximian.com>
1092
1093         * x86.brg: impl. SHR_UN for lreg, added new test, bug fix for BNE_UN 
1094
1095 2002-02-19  Dietmar Maurer  <dietmar@ximian.com>
1096
1097         * emit-x86.c (arch_compile_method): add shared code to mono_root_domain
1098         (arch_create_jit_trampoline): cache trampoline code
1099
1100 2002-02-18  Dietmar Maurer  <dietmar@ximian.com>
1101
1102         * jit.c (mono_analyze_stack): optimize LDSFLD/STSFLD for domain
1103         specific code.
1104         (mono_analyze_stack): use MB_TERM_LDELEMA to perform bound check
1105
1106         * x86.brg: do not encode exception objects into the instruction
1107         stream, because they are domain dependend. Use
1108         arch_get_throw_exception_by_name() instead;
1109
1110 Mon Feb 18 15:51:40 CET 2002 Paolo Molaro <lupus@ximian.com>
1111
1112         * jit.c: intern command line arguments.
1113
1114 2002-02-18  Dietmar Maurer  <dietmar@ximian.com>
1115
1116         * jit.c (mono_analyze_stack): use the magic trampoline for all
1117         calls (since we cant store the address of compiled code in
1118         method->addr).
1119         (mono_analyze_stack): imp. LDSTR for shared code
1120
1121         * emit-x86.c (x86_magic_trampoline): handle x86_call_code().
1122         (arch_compile_method): add a cache for compiled methods to avoid
1123         recompilation. dont use method->addr to store domain dependent
1124         code address.
1125
1126 2002-02-15  Dietmar Maurer  <dietmar@ximian.com>
1127
1128         * x86.brg: impl. BLE,BGT for freg
1129
1130 Sat Feb 16 16:27:42 CET 2002 Paolo Molaro <lupus@ximian.com>
1131
1132         * emit-x86.c: handle unreachable code. Eliminate some unneeded
1133         malloc() calls.
1134         * jit.c: handle unreachable code. Move setting of mono_end_of_stack to
1135         main(). Add --compile classname and --ncompile num command line
1136         options to do performance evaluation of the jitter (and help
1137         debugging).
1138
1139 2002-02-15  Dietmar Maurer  <dietmar@ximian.com>
1140
1141         * emit-x86.c (arch_compile_method): bug fix in static delegate
1142         Invoke code.
1143
1144 2002-02-14  Dietmar Maurer  <dietmar@ximian.com>
1145
1146         * jit.c (mono_analyze_stack): do a LDIND after NEWOBJ for value types.
1147
1148 2002-02-13  Dietmar Maurer  <dietmar@ximian.com>
1149
1150         * jit.c (mono_analyze_stack): impl. CEE_SIZEOF
1151
1152 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
1153
1154         * jit.c (arch_allocate_var): Only assert that the alignment is
1155         at least 32-bits aligned, not always 32-bits aligned (for I8 for example).
1156
1157 Mon Feb 11 11:20:57 CET 2002 Paolo Molaro <lupus@ximian.com>
1158
1159         * x86.brg: fix invalid cast check in unbox. Pack MBTree structure.
1160
1161 Sun Feb 10 12:54:05 CET 2002 Paolo Molaro <lupus@ximian.com>
1162
1163         * emit-x86.c: make x86_magic_trampoline() handle call instructions
1164         with an imm8 displacement. x86.brg not yet changed to take advantage
1165         of it.
1166
1167 Sun Feb 10 11:47:30 CET 2002 Paolo Molaro <lupus@ximian.com>
1168
1169         * jit.c: use opcode info from libmetadata to do flow analysis
1170         and simplify code.
1171
1172 2002-02-06  Dietmar Maurer  <dietmar@ximian.com>
1173
1174         * jit.c (MAKE_LDELEM, MAKE_STELEM): added bound checking 
1175
1176 2002-02-05  Dietmar Maurer  <dietmar@ximian.com>
1177
1178         * x86.brg: use element_class for type check
1179
1180 2002-02-04  Dietmar Maurer  <dietmar@ximian.com>
1181
1182         * jit.c (main): impl. __array_Address icall
1183
1184         * mempool.c (mono_mempool_alloc): handle large block allocation
1185
1186 2002-02-01  Dietmar Maurer  <dietmar@ximian.com>
1187
1188         * x86.brg: impl. SHL/SHR/CLT for 64 bit values
1189
1190 2002-01-31  Dietmar Maurer  <dietmar@ximian.com>
1191
1192         * x86.brg: impl. CEQ(lreg,lreg)
1193
1194         * jit.c (mono_analyze_stack): impl. LDVIRTFTN
1195         (mono_analyze_stack): handle MONO_TABLE_MEMBERREF in LDSFLD/STSFLD
1196
1197         * x86.brg: removed some dead code.
1198
1199 2002-01-18  Dietmar Maurer  <dietmar@ximian.com>
1200
1201         * jit.c (arch_allocate_var): fixed alignment bugs
1202
1203 2002-01-17  Dietmar Maurer  <dietmar@ximian.com>
1204
1205         * jit.c (mono_analyze_stack): use LDIND_REF/STIND_REF
1206
1207 2002-01-16  Dietmar Maurer  <dietmar@ximian.com>
1208
1209         * jit.c (main): install the trampoline before we start to create
1210         objects.
1211
1212         * x86.brg: impl. CLT_UN, CGT_UN
1213
1214         * emit-x86.c (leave_method): added check for null object
1215         (enter_method): consider byref arguments
1216
1217 2002-01-14  Dietmar Maurer  <dietmar@ximian.com>
1218
1219         * x86.brg: bug fix in CONV_OVF_I1_UN
1220         impl. ADD_OVF, MUL_OVF
1221         impl. ADD_OVF_UN, SUB_OVF, SUB_OVF_UN
1222         (SUB (lreg, lreg)): bug fix - use SBB instead of SUB
1223         (EMIT_COND_EXCEPTION): added signed flag
1224
1225 Fri Jan 11 20:06:22 CET 2002 Paolo Molaro <lupus@ximian.com>
1226
1227         * jit.c: implement stloc, ldloc, ldloca.
1228
1229 2002-01-11  Dietmar Maurer  <dietmar@ximian.com>
1230
1231         * jit.c (mono_analyze_stack): fixed calculation of last_instr
1232
1233         * x86.brg (LDLEN): emit null_reference exception
1234         (BLE_UN): bug fix. 
1235         (RET, RET_VOID, RET_OBJ, ...) fixed jump to epilog
1236
1237 2002-01-04  Dietmar Maurer  <dietmar@ximian.com>
1238
1239         * x86.brg: bug fix in CASTCLASS
1240
1241 2001-12-21  Dietmar Maurer  <dietmar@ximian.com>
1242
1243         * jit.c (mono_analyze_stack): spill MUL to avoid problem with
1244         register allocation.
1245
1246         * emit-x86.c (arch_compile_method): fixed static delegate bug
1247
1248 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
1249
1250         * x86.brg, jit.c: Split up the nodes that we used to share on
1251         CONV_OVF.  They were sharing the nodes because they are the same
1252         on 32-bit machines, but on 64-bit machines you need different
1253         code for them.
1254
1255 2001-12-17  Dietmar Maurer  <dietmar@ximian.com>
1256
1257         * x86.brg: removed prerequisite that (tree->left->reg1 <
1258         tree->right->reg1) to make register allocation easier.
1259
1260 2001-12-16  Dietmar Maurer  <dietmar@ximian.com>
1261
1262         * emit-x86.c (arch_handle_exception): new code to handle
1263         exceptions inside unmanaged code.
1264
1265         * x86.brg: impl. SAVE_LMF, RESTORE_LMF, pass implizit valuetype
1266         address as first argument.
1267
1268 2001-12-15  Dietmar Maurer  <dietmar@ximian.com>
1269
1270         * x86.brg: pass exceptions on the stack
1271
1272         * jit.h (ISSTRUCT): new macro to check for real value types
1273         (return false for enum types). 
1274
1275 2001-12-11  Dietmar Maurer  <dietmar@ximian.com>
1276
1277         * x86.brg: use position indepentent code if possible. 
1278
1279         * x86.brg (EMIT_COND_EXCEPTION): new macro.
1280
1281         * emit-x86.c (mono_emit_cfg): impl. variable code buffer size
1282
1283 2001-12-10  Dietmar Maurer  <dietmar@ximian.com>
1284
1285         * jit.c (mono_analyze_flow): use g_malloc0 o allocate large bcinfo
1286         blocks.
1287         (mono_analyze_flow): use g_malloc0 o allocate large bblocks array.
1288
1289         * x86.brg (stmt): added opt. for STIND_R4/STIND_R8
1290
1291 2001-12-07  Dietmar Maurer  <dietmar@ximian.com>
1292
1293         * jit.c (mono_allocate_intvar): bug fix.
1294
1295         * emit-x86.c (get_unbox_trampoline): impl.
1296
1297         * jit.c (mono_analyze_stack): impl STOBJ, LEAVE
1298
1299 2001-12-06  Dietmar Maurer  <dietmar@ximian.com>
1300
1301         * x86.brg: raise exceptions.
1302
1303 2001-12-05  Dietmar Maurer  <dietmar@ximian.com>
1304
1305         * x86.brg: impl. CEQ for freg, NEWSTRUCT now allocates valuetypes on
1306         the stack. 
1307
1308 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
1309
1310         * jit.c (mono_analyze_stack), x86.brg: Implement CONV.OVF.I1,
1311         CONV.OVF.I4, CONV.OVF.I1.UN, CONV.OVF.U1, CONV.OVF.U1.UN,
1312         CONV.OVF.I2.UN, CONV.OVF.I8.UN
1313
1314 2001-12-04  Dietmar Maurer  <dietmar@ximian.com>
1315
1316         * x86.brg: impl. UNBOX, NEWSTRUCT, removed VTYPE, bug fixes,
1317         removed the locaddr nonterminal, reimplemented value types
1318         
1319         * jit.c: reimplemented value type support, better support for
1320         enumeration types. 
1321
1322 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
1323
1324         * x86.brg, jit.c: Implement conv.ovf.u4, conv.ovf.u2, conv.ovf.i2,
1325         conv.ovf.u8 
1326
1327 Mon Dec 3 17:16:36 CET 2001 Paolo Molaro <lupus@ximian.com>
1328
1329         * jit.c: call mono_init() after registering internal calls.
1330
1331 2001-11-30  Dietmar Maurer  <dietmar@ximian.com>
1332
1333         * emit-x86.c (tree_preallocate_regs): improved register allocation
1334
1335         * x86.brg: impl. ISINST, CASTCLASS
1336
1337 Fri Nov 30 12:02:24 CET 2001 Paolo Molaro <lupus@ximian.com>
1338
1339         * x86.brg: rearrange fields to reduce struct size.
1340         * jit.c: use signature->param_count, not signature->params_size.
1341         * debug.c: off-by-one error fix.
1342
1343 2001-11-29  Radek Doulik  <rodo@ximian.com>
1344
1345         * Makefile.am: build mono only for X86 architecture, compilation
1346         fails for ppc now because of accessing registers in sigcontext
1347         structure
1348
1349 2001-11-29  Dietmar Maurer  <dietmar@ximian.com>
1350
1351         * jit.c (mono_analyze_stack): bug fix in DUP
1352
1353 Thu Nov 29 12:32:01 CET 2001 Paolo Molaro <lupus@ximian.com>
1354
1355         * debug.c: fix type handling. Position function position at start of
1356         IL code. Output more fine-grained stepping information.
1357
1358 2001-11-28  Dietmar Maurer  <dietmar@ximian.com>
1359
1360         * x86.brg (LDIND_I1, LDIND_I2): use x86_widen_ instead of x86_mov_
1361
1362         * jit.c (mono_analyze_stack): record the cli_address for later use
1363         with gdb.
1364         (sigsegv_signal_handler): translate sigsegv into "Internal error"
1365         exception.
1366
1367 Tue Nov 27 16:32:41 CET 2001 Paolo Molaro <lupus@ximian.com>
1368
1369         * debug.c, debug.h: added support for generating stabs.
1370         Stabs can be compiled with as and the resulting object file can be
1371         loaded in a gdb session with add-symbol-file object.o.
1372         * jit.c, jit.h: add --stabs and --debug command line arguments. Keep track
1373         where locals and arguments are stored in the stack. Add support for
1374         passing command line arguments to CLR programs.
1375         * emit-x86.c: insert a breakpoint at method invocation if needed.
1376
1377 2001-11-27  Dietmar Maurer  <dietmar@ximian.com>
1378
1379         * jit.c: exception support
1380
1381         * emit-x86.c (arch_emit_epilogue): bug fix: restore the regs in
1382         the right order.
1383
1384 2001-11-26  Dick Porter  <dick@ximian.com>
1385
1386         * Makefile.am (mono_LDADD): Add io-layer library
1387
1388 2001-11-19  Dietmar Maurer  <dietmar@ximian.com>
1389
1390         * jit.c (mono_analyze_stack): impl. LDFTN
1391         (MAKE_SPILLED_BI_ALU): always spill DIV/REM results to memory to
1392         make register allocation easier on x86
1393
1394         * emit-x86.c (enter_method): more debugging output for Strings
1395         (arch_compile_method): added delegate support
1396         (arch_compile_method): align EBP to 8 byte boundary
1397
1398 Mon Nov 19 11:36:22 CET 2001 Paolo Molaro <lupus@ximian.com>
1399
1400         * jit.c: use mono_install_trampoline (), instead of exporting
1401         a function to a lower-level library.
1402
1403 2001-11-16  Dietmar Maurer  <dietmar@ximian.com>
1404
1405         * x86.brg (STRING_ARG): impl. a way to marshal strings. This
1406         will be extensible to handle all possible kinds of marshalling
1407         requirements. 
1408
1409         * jit.c (map_call_type): added MB_TERM_CALL_VOID
1410         (mono_analyze_stack): impl. LDELEMA, reimplemented CALL
1411         instructions to handle this arguments more effectively.
1412
1413 2001-11-15  Dietmar Maurer  <dietmar@ximian.com>
1414
1415         * Makefile.am (mono_SOURCES): renamed testjit to mono
1416
1417         * x86.brg: added debugging support 
1418
1419         * testjit.c: added support for value types, CFG improvements
1420
1421         * emit-x86.c (enter_method): handle value types
1422         (tree_allocate_regs): impl. a better way to handle chain rules
1423
1424 2001-11-10  Dietmar Maurer  <dietmar@ximian.com>
1425
1426         * x86.brg (INITOBJ): bug fix: initialize data before use,
1427         simplified the code.
1428
1429 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
1430
1431         * testjit.c (mono_analyze_stack): Remove compiler warning by
1432         testing against NULL.
1433
1434 2001-11-09  Dick Porter  <dick@ximian.com>
1435
1436         * Makefile.am (testjit_LDADD): Don't need THREAD_LIBS any more
1437
1438 2001-11-09  Dietmar Maurer  <dietmar@ximian.com>
1439
1440         * testjit.c (mono_analyze_stack): new BOX impl.
1441
1442         * x86.brg: implemented INITOBJ
1443
1444         * testjit.c (mono_analyze_stack): finished array support
1445         (mono_analyze_stack): reimplemented DUP instruction
1446
1447 2001-11-08  Dietmar Maurer  <dietmar@ximian.com>
1448
1449         * testjit.c (MAKE_STELEM, MAKE_LDELEM): we build a tree which
1450         represents the address of the element. This way we can emit highly
1451         optimized x86 instructions to access elements (using base+index+offset
1452         adressing mode)
1453
1454 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
1455
1456         * mempool.c: Include string.h to kill warning.
1457
1458         * testjit.c: Add typecast to kill warning.
1459
1460         * x86.brg: Include string.h to eliminate warning.
1461
1462         * emit-x86.c (tree_allocate_regs): Fix arguments to g_warning to
1463         kill warning.
1464
1465 2001-11-07  Dietmar Maurer  <dietmar@ximian.com>
1466
1467         * emit-x86.c (enter_method): print out all method arguments
1468         (x86_magic_trampoline): impl.
1469         (arch_create_simple_jit_trampoline): we use different trampolines
1470         for static methods (no need to write the address back into to
1471         vtable).
1472
1473 2001-11-06  Dietmar Maurer  <dietmar@ximian.com>
1474
1475         * emit-x86.c (arch_create_jit_trampoline): optimised trampoline to
1476         use less the 16 bytes.
1477
1478         * x86.brg: code cleanup
1479
1480 2001-11-05  Dietmar Maurer  <dietmar@ximian.com>
1481
1482         * testjit.c: bug fixes.
1483
1484         * emit-x86.c (leave_method): print result values
1485
1486 2001-11-03  Dietmar Maurer  <dietmar@ximian.com>
1487
1488         * emit-x86.c (enter_method): new debugging code
1489         (leave_method): new debbuging code, this functions are called
1490         when you use the new option --trace-calls
1491
1492 2001-11-02  Dietmar Maurer  <dietmar@ximian.com>
1493
1494         * testjit.c: impl. STELEM_XX, STELEM_XX
1495
1496         * x86.brg: impl. LDLEN, LDELEMA
1497         
1498
1499 2001-10-15  Dietmar Maurer  <dietmar@ximian.com>
1500
1501         * x86.brg: added some experimental code for CALL
1502         instructions - still not found the optimal way to do it.
1503
1504         * testjit.c (map_stind_type): add support for value types with
1505         a size of 1, 2 or 4 bytes, implemented CEE_UNBOX, CEE_LDOBJ,
1506         CEE_LDSTR, CEE_LDFLD, CEE_LDFLDA, CEE_STFLD, CEE_NEWOBJ, CEE_CEQ
1507         (ctree_create_newobj): impl.
1508         
1509
1510         * emit-x86.c (tree_allocate_regs): removed allocation code for
1511         addr nonterminal.
1512         (get_address): use a simple, but bug free search instead of the
1513         buggy binary search.
1514
1515 2001-10-12  Dietmar Maurer  <dietmar@ximian.com>
1516
1517         * testjit.c: support virtual functions
1518
1519         * x86.brg: support different addressing modes for calls
1520
1521 2001-10-11  Dietmar Maurer  <dietmar@ximian.com>
1522
1523         * testjit.c: impl. STFLD
1524
1525 2001-10-10  Dietmar Maurer  <dietmar@ximian.com>
1526
1527         * x86.brg: impl. CEQ
1528
1529 2001-10-04  Dick Porter  <dick@ximian.com>
1530
1531         * testjit.c:
1532         * emit-x86.c: include mono-endian.h not endian.h
1533
1534 2001-10-02  Dietmar Maurer  <dietmar@ximian.com>
1535
1536         * testjit.c (ctree_create_dup): really duplicate the tree.
1537         attach the arguments to the CALL node. Added a new macro to
1538         make argument order configurable (ARCH_ARGS_RIGHT_TO_LEFT).
1539
1540 2001-10-01  Dietmar Maurer  <dietmar@ximian.com>
1541
1542         * interp.brg: the burm based interpreter: added the file as example.
1543
1544 2001-09-27  Dietmar Maurer  <dietmar@ximian.com>
1545
1546         * x86.brg: cleanup
1547
1548         * testjit.c: impl. LDIND/STIND/LDLOCA, use g_malloc to alloc static
1549         data.
1550         (map_stind_type): support enum types
1551         (map_ldind_type): support enum types
1552
1553         * emit-x86.c (tree_allocate_regs): added code to support
1554         register allocation for addressing modes trees.
1555         (tree_emit): bug fix: we have to emit all mono_burg_functins. The
1556         previous impl. did not work for chain rules.
1557         (compute_branches): support for SWITCH statements
1558
1559         * x86.brg: added rules to model x86 addressing modes
1560
1561 2001-09-26  Dietmar Maurer  <dietmar@ximian.com>
1562
1563         * emit-x86.c (compute_branches): implemented SWITCH
1564
1565         * testjit.c (mono_create_forest): implemented LDIND/STIND opcodes
1566         (map_ldind_type): add enumeration types.
1567         (map_stind_type): add enumeration types.
1568
1569         * emit-x86.c (arch_compile_method): more documentation.
1570
1571         * testjit.c: moved the architecture specific things to emit-x86.c
1572         and x86.brg. Added more documentation. code cleanup.
1573
1574 2001-09-25  Dietmar Maurer  <dietmar@ximian.com>
1575
1576         * x86.brg: we now have different types of addresses: ADDR_L for local
1577         values, ADDR_A for arguments and ADDR_G for global addresses. We
1578         also use LDIND_XX token to load values from a specific address
1579         instead of LDLOC/STLOC. 
1580
1581         * testjit.c: use the new adressing scheme everywhere:
1582         LDIND _XX (ADDR_X), and STIND_XX (ADDR_X, tree)  
1583
1584 2001-09-24  Dietmar Maurer  <dietmar@ximian.com>
1585
1586         * testjit.c (main): fix bug in parameter parsing
1587
1588         * x86.brg: impl. more opcodes
1589
1590 2001-09-23  Dick Porter  <dick@ximian.com>
1591
1592         * Makefile.am (testjit_LDADD): rename PTHREAD_LIBS to THREAD_LIBS
1593
1594 2001-09-23  Dietmar Maurer  <dietmar@ximian.com>
1595
1596         * testjit.c: use the memory pool to avoid memory leaks
1597
1598 2001-09-22  Dietmar Maurer  <dietmar@ximian.com>
1599
1600         * x86.brg: increment the stack pointer after function calls
1601
1602 2001-09-21  Dick Porter  <dick@ximian.com>
1603
1604         * Makefile.am (testjit_LDADD): Added PTHREAD_LIBS to the link line
1605
1606 2001-09-21  Dietmar Maurer  <dietmar@ximian.com>
1607
1608         * x86.brg: implemented long MUL/DIV
1609         (MB_OPT_LEVEL): define optimisation level macro
1610
1611         * testjit.c (tree_allocate_regs): added a way to prevent EDX usage
1612         for operations like idiv. it is also possible to assign specific registers.
1613
1614 2001-09-20  Dietmar Maurer  <dietmar@ximian.com>
1615
1616         * x86.brg: added basic support for long
1617
1618         * testjit.c (mono_compile_method): implemented POP
1619
1620 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
1621
1622         * testjit.c (usage): Added a couple of more usage options.
1623
1624 2001-09-19  Dietmar Maurer  <dietmar@ximian.com>
1625
1626         * x86.brg: added more floating point grammar 
1627
1628         * testjit.c (mono_compile_method): make local offsets negative
1629
1630         * x86.brg: added some floating point trees
1631
1632         * testjit.c (mono_compile_method): arguments on the runtime 
1633         stack are at least 4 bytes
1634
1635         * x86.brg: partly implemented 8,16 bit integers
1636
1637         * testjit.c (get_address): mark basic blocks
1638
1639 2001-09-18  Dietmar Maurer  <dietmar@ximian.com>
1640
1641         * x86.brg: added some rules to optimize code
1642
1643         * testjit.c (get_address): use a binary search to get the address
1644         (main): added an option to debug the jit (-d)
1645
1646 Tue Sep 18 13:19:16 CEST 2001 Paolo Molaro <lupus@ximian.com>
1647
1648         * testjit.c: better/faster align code. Handle ldloc.s and stloc.s.
1649
1650 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
1651
1652         * testjit.c (mono_compile_method): Provide better error reporting.
1653
1654 2001-09-17  Dietmar Maurer  <dietmar@ximian.com>
1655
1656         * testjit.c (tree_get_address): impl. to fix address bug
1657         (tree_get_address): make sure that we can only jump to the first
1658         instruction of a tree.
1659
1660         * x86.brg: emit real code for calls
1661
1662         * testjit.c (create_jit_trampoline): creates a function to trigger jit
1663         compilation.
1664         (mono_compile_method): reversed argument order
1665
1666 2001-09-15  Dietmar Maurer  <dietmar@ximian.com>
1667
1668         * x86.brg (stmt): don't emit unnecessary register moves
1669
1670         * testjit.c (tree_allocate_regs): free registers earlier
1671
1672 2001-09-14  Dietmar Maurer  <dietmar@ximian.com>
1673
1674         * x86.brg: branch addresses are now resolved
1675
1676         * testjit.c (compute_branches): compute address of branches
1677
1678         * x86.brg: emit real x86 instructions
1679
1680         * testjit.c: call objdump to disassemble the output
1681
1682 2001-09-13  Dietmar Maurer  <dietmar@ximian.com>
1683
1684         * x86.brg: use the right offsets to access local variables
1685         and arguments.
1686
1687         * emit-x86.c: only save/restore callee saved registers if they are
1688         really modified.
1689
1690         * testjit.c (tree_allocate_regs): use the new MonoRegSet to
1691         allocate registers.
1692         (mono_compile_method): changed the tree for mothod calls
1693
1694         * regset.h: impl.
1695         
1696         * regset.c: impl.
1697         
1698
1699 2001-09-10  Miguel de Icaza  <miguel@ximian.com>
1700
1701         * x86.brg: Use Unix assembly syntax.
1702
1703         * emit-x86.c: support code, should be moved
1704
1705         * testjit.c: Use GPtrArrays instead of GLists, as those are very
1706         inefficient at appends.
1707
1708         * Renamed `create_new_leave' to `create_new_leaf'
1709
1710         
1711