Simon Hausmann [Tue, 2 Oct 2012 06:53:47 +0000 (08:53 +0200)]
Fix generation of multiple functions
Sine we can't reset the MacroAssembler properly right now, reconstruct
the isel for every function.
Simon Hausmann [Tue, 2 Oct 2012 06:52:38 +0000 (08:52 +0200)]
Fix stupid off-by-one in address calculation of temporaries on the stack
Simon Hausmann [Tue, 2 Oct 2012 05:21:38 +0000 (07:21 +0200)]
Simplified function call helpers
Simon Hausmann [Tue, 2 Oct 2012 04:49:49 +0000 (06:49 +0200)]
Prospective jump support
Simon Hausmann [Mon, 1 Oct 2012 20:52:05 +0000 (22:52 +0200)]
Implement basic name lookup
Simon Hausmann [Mon, 1 Oct 2012 20:35:53 +0000 (22:35 +0200)]
Implement simple value storage
Simon Hausmann [Mon, 1 Oct 2012 20:03:59 +0000 (22:03 +0200)]
Fix ret argumet passing
Simon Hausmann [Mon, 1 Oct 2012 20:02:20 +0000 (22:02 +0200)]
cleanup, squash
Simon Hausmann [Mon, 1 Oct 2012 19:59:09 +0000 (21:59 +0200)]
Call helper
Simon Hausmann [Mon, 1 Oct 2012 19:39:25 +0000 (21:39 +0200)]
correct temp handling
Simon Hausmann [Mon, 1 Oct 2012 07:29:20 +0000 (09:29 +0200)]
Cleanups, some rudimentary stubs so that "return 42" can be compiled :)
Simon Hausmann [Wed, 26 Sep 2012 19:46:30 +0000 (21:46 +0200)]
Fix code ownership
Simon Hausmann [Sun, 23 Sep 2012 08:44:12 +0000 (10:44 +0200)]
Add udis86 support
Simon Hausmann [Sun, 23 Sep 2012 08:28:13 +0000 (10:28 +0200)]
Initial import of MASM
laknoll [Thu, 20 Sep 2012 08:28:43 +0000 (10:28 +0200)]
Fix division operation
laknoll [Wed, 19 Sep 2012 19:08:47 +0000 (21:08 +0200)]
Proper NaN boxing for Value
All JS types are now encoded in a 8 byte data
structure. We use the 52 bits that are unused
when a double is a NaN to encode all other types
that can be stored inside a double.
This is being done by using a few bits to determine
the type, and up to 48 bits for data. This works
even on x64, as addresses (ie. pointers) are limited
to 48 bits on these platforms.
For most other types (except doubles), we store the
data in the lower 32 bits of the double.
Roberto Raggi [Tue, 26 Jun 2012 13:36:03 +0000 (15:36 +0200)]
Initial work on `eval'.
Roberto Raggi [Tue, 26 Jun 2012 13:17:31 +0000 (15:17 +0200)]
Do not try to optimize the `global object'.
This should simplify the implementation of `eval' and `with'.
Roberto Raggi [Tue, 26 Jun 2012 11:43:00 +0000 (13:43 +0200)]
Remove dead code.
Roberto Raggi [Tue, 26 Jun 2012 11:36:37 +0000 (13:36 +0200)]
Reduce the number of register-to-register copies.
Roberto Raggi [Wed, 13 Jun 2012 09:19:15 +0000 (11:19 +0200)]
Remember the value of the last executed expression only in EvalMode
Roberto Raggi [Wed, 13 Jun 2012 09:02:23 +0000 (11:02 +0200)]
Add support for global, eval and function code.
Roberto Raggi [Wed, 13 Jun 2012 08:45:12 +0000 (10:45 +0200)]
Remove specialized version of __qmljs_set
Roberto Raggi [Wed, 13 Jun 2012 08:26:10 +0000 (10:26 +0200)]
Remove dead code
Aaron Kennedy [Tue, 12 Jun 2012 17:26:29 +0000 (18:26 +0100)]
Fix bug in jump logic
Make the jump relative to the offset value in the instruction stream.
Aaron Kennedy [Tue, 12 Jun 2012 17:13:55 +0000 (18:13 +0100)]
Begin to implement moth vm
Roberto Raggi [Tue, 12 Jun 2012 10:35:36 +0000 (12:35 +0200)]
Implemented Function.prototype.apply
Roberto Raggi [Tue, 12 Jun 2012 10:10:33 +0000 (12:10 +0200)]
Fix possible crash when executing invalid code.
Aaron Kennedy [Mon, 11 Jun 2012 16:58:52 +0000 (17:58 +0100)]
Add skeleton moth vme
Roberto Raggi [Mon, 11 Jun 2012 12:38:56 +0000 (14:38 +0200)]
Keep alive the exception handler block.
Roberto Raggi [Mon, 11 Jun 2012 12:21:02 +0000 (14:21 +0200)]
Remove dead code.
Roberto Raggi [Mon, 11 Jun 2012 11:59:42 +0000 (13:59 +0200)]
Fix make llvm_runtime
Aaron Kennedy [Fri, 8 Jun 2012 19:09:13 +0000 (20:09 +0100)]
Add moth skeleton
Aaron Kennedy [Fri, 8 Jun 2012 19:09:13 +0000 (20:09 +0100)]
Make IR types stricter
We can always loosen these again if we need to.
Roberto Raggi [Mon, 11 Jun 2012 09:51:14 +0000 (11:51 +0200)]
Import crypto.js from the V8 benchmark tests
Roberto Raggi [Mon, 11 Jun 2012 09:50:10 +0000 (11:50 +0200)]
Check addresses associated with basic blocks
Roberto Raggi [Mon, 11 Jun 2012 07:38:52 +0000 (09:38 +0200)]
Improve support for the assignment operators.
Also, use indirect calls in the amd64 code generator.
Roberto Raggi [Mon, 11 Jun 2012 07:34:56 +0000 (09:34 +0200)]
Fix the code generator
This change fixes a few typos in the code generator (e.g. usages of
_loop instead of loop), also it ensures that all function
declarations are processed before the statements.
Roberto Raggi [Mon, 11 Jun 2012 07:32:00 +0000 (09:32 +0200)]
Increase the size of the code cache.
This is just a temporary hack, we can't continue to use
a contiguous region of memory to store the code.
Aaron Kennedy [Fri, 8 Jun 2012 16:09:44 +0000 (17:09 +0100)]
Shortcut more constant conditionals
Aaron Kennedy [Fri, 8 Jun 2012 16:09:27 +0000 (17:09 +0100)]
Trim unreachable blocks
Aaron Kennedy [Fri, 8 Jun 2012 15:22:02 +0000 (16:22 +0100)]
Fast track true and false conditionals.
Roberto Raggi [Fri, 8 Jun 2012 14:59:58 +0000 (16:59 +0200)]
Improve ex to nx conversion.
Only IR::Call has an nx conversion.
Roberto Raggi [Fri, 8 Jun 2012 14:56:14 +0000 (16:56 +0200)]
Incrementally update the control flow graph.
Roberto Raggi [Fri, 8 Jun 2012 14:35:30 +0000 (16:35 +0200)]
Remove useless calls to BasicBlock::isTerminated()
Roberto Raggi [Fri, 8 Jun 2012 14:33:24 +0000 (16:33 +0200)]
Ensure the block created by the labelled statement is terminated
Roberto Raggi [Fri, 8 Jun 2012 14:26:08 +0000 (16:26 +0200)]
Add support for labelled statements.
Roberto Raggi [Fri, 8 Jun 2012 13:44:43 +0000 (15:44 +0200)]
Remove dead code
Roberto Raggi [Fri, 8 Jun 2012 11:29:21 +0000 (13:29 +0200)]
Ensure that basic blocks are terminated.
Also make sure that the special BasicBlock `exitBlock' is always
the last block of the function.
Aaron Kennedy [Fri, 8 Jun 2012 10:35:16 +0000 (11:35 +0100)]
Remove dead code
Roberto Raggi [Thu, 7 Jun 2012 14:21:21 +0000 (16:21 +0200)]
Add dummy functions for the assignment operators.
Roberto Raggi [Thu, 7 Jun 2012 14:06:12 +0000 (16:06 +0200)]
Import the ARM macro assembler from the mono project.
Roberto Raggi [Thu, 7 Jun 2012 13:49:50 +0000 (15:49 +0200)]
Fix LLVM code generation for unary expressions
Roberto Raggi [Thu, 7 Jun 2012 13:28:45 +0000 (15:28 +0200)]
Generate LLVM code for constructor calls
Roberto Raggi [Thu, 7 Jun 2012 12:28:42 +0000 (14:28 +0200)]
Delete properties
Roberto Raggi [Wed, 6 Jun 2012 16:02:34 +0000 (18:02 +0200)]
Resolve the library name
Roberto Raggi [Wed, 6 Jun 2012 13:58:21 +0000 (15:58 +0200)]
Generate LLVM code for the `this-expression'.
Roberto Raggi [Wed, 6 Jun 2012 13:47:42 +0000 (15:47 +0200)]
Don't use increments for now.
Roberto Raggi [Wed, 6 Jun 2012 13:30:50 +0000 (15:30 +0200)]
Initial work on exceptions for the AOT compiler.
Roberto Raggi [Wed, 6 Jun 2012 12:59:42 +0000 (14:59 +0200)]
Generate code for closures.
Roberto Raggi [Wed, 6 Jun 2012 12:16:11 +0000 (14:16 +0200)]
Warn about unimplement assignments.
Roberto Raggi [Wed, 6 Jun 2012 12:11:28 +0000 (14:11 +0200)]
Lower IR::Name nodes.
Roberto Raggi [Wed, 6 Jun 2012 11:43:50 +0000 (13:43 +0200)]
Generate LLVM code for MoveMember
Roberto Raggi [Wed, 6 Jun 2012 11:30:03 +0000 (13:30 +0200)]
Lower subscripts
Roberto Raggi [Wed, 6 Jun 2012 09:50:13 +0000 (11:50 +0200)]
Lower IR::Call and IR::New
Roberto Raggi [Wed, 6 Jun 2012 09:30:56 +0000 (11:30 +0200)]
Generate LLVM code for member expressions
Roberto Raggi [Wed, 6 Jun 2012 09:06:00 +0000 (11:06 +0200)]
Use O2-level inlining
Roberto Raggi [Wed, 6 Jun 2012 08:58:49 +0000 (10:58 +0200)]
Split __qmljs_add
Roberto Raggi [Wed, 6 Jun 2012 08:36:59 +0000 (10:36 +0200)]
Fix the targets
Roberto Raggi [Wed, 6 Jun 2012 08:08:06 +0000 (10:08 +0200)]
Compile simple IR::New nodes
Roberto Raggi [Wed, 6 Jun 2012 08:00:28 +0000 (10:00 +0200)]
Move the Alloca instructions at the beginning of the function.
Roberto Raggi [Wed, 6 Jun 2012 07:37:41 +0000 (09:37 +0200)]
Fix the return value of calls.
Roberto Raggi [Tue, 5 Jun 2012 16:32:52 +0000 (18:32 +0200)]
More work on the AOT.
Roberto Raggi [Tue, 5 Jun 2012 13:54:37 +0000 (15:54 +0200)]
Fix code generation for IR::Call nodes.
Roberto Raggi [Tue, 5 Jun 2012 13:26:21 +0000 (15:26 +0200)]
Start generating LLVM code for IR::Call nodes.
Roberto Raggi [Tue, 5 Jun 2012 13:03:49 +0000 (15:03 +0200)]
LLVM code for unary expressions
Roberto Raggi [Tue, 5 Jun 2012 12:30:04 +0000 (14:30 +0200)]
Generate LLVM code for the binary expressions
Roberto Raggi [Tue, 5 Jun 2012 11:15:03 +0000 (13:15 +0200)]
Generate LLVM code for the conditional jumps.
Roberto Raggi [Tue, 5 Jun 2012 10:15:41 +0000 (12:15 +0200)]
Some more work on the LLVM-based AOT compiler.
Roberto Raggi [Tue, 5 Jun 2012 08:47:04 +0000 (10:47 +0200)]
Move the defnition of the QML/JS Context to qmljs_runtime.h
Roberto Raggi [Mon, 4 Jun 2012 14:57:08 +0000 (16:57 +0200)]
Initial work on Object.prototype.getOwnPropertyNames.
At the moment getOwnPropertyNames is not compliant, e.g.
we need to add support for property accessors.
Roberto Raggi [Mon, 4 Jun 2012 14:45:34 +0000 (16:45 +0200)]
Implemented Object.prototype.isPrototypeOf
Roberto Raggi [Mon, 4 Jun 2012 14:36:00 +0000 (16:36 +0200)]
Naive implementation of the Arguments object.
Roberto Raggi [Mon, 4 Jun 2012 14:04:46 +0000 (16:04 +0200)]
Implemented Object.prototype.hasOwnProperty.
Note that the current implementation of Object::hasOwnProperty()
in the object model is not ECMA compliant (yet).
Roberto Raggi [Mon, 4 Jun 2012 13:57:39 +0000 (15:57 +0200)]
Implemented Object.getPrototypeOf and Object.prototype.valueOf
Roberto Raggi [Mon, 4 Jun 2012 13:40:35 +0000 (15:40 +0200)]
Add special property length of the Object constructor.
Roberto Raggi [Mon, 4 Jun 2012 13:34:50 +0000 (15:34 +0200)]
Initial work on the RegExp object
Roberto Raggi [Mon, 4 Jun 2012 12:02:40 +0000 (14:02 +0200)]
Initial work on the Object prototype
Roberto Raggi [Mon, 4 Jun 2012 11:44:37 +0000 (13:44 +0200)]
Initial work on [[HasProperty]]
Roberto Raggi [Mon, 4 Jun 2012 10:54:24 +0000 (12:54 +0200)]
Reimplemented Array using std::deque as container.
Roberto Raggi [Mon, 4 Jun 2012 06:32:06 +0000 (08:32 +0200)]
Fix default size for the bucket tables
Roberto Raggi [Sun, 3 Jun 2012 15:11:04 +0000 (17:11 +0200)]
Inline comparisons
Roberto Raggi [Fri, 1 Jun 2012 12:18:24 +0000 (14:18 +0200)]
Fix the pro file
Roberto Raggi [Thu, 31 May 2012 17:02:05 +0000 (19:02 +0200)]
Initial work on the LLVM-based AOT compiler.
Roberto Raggi [Thu, 31 May 2012 15:32:49 +0000 (17:32 +0200)]
Generalized instruction selection.
This will simplify the instruction selection pass for
different architectures.
Roberto Raggi [Wed, 30 May 2012 10:52:58 +0000 (12:52 +0200)]
Use `assert' instead of Q_ASSERT.
Roberto Raggi [Wed, 30 May 2012 10:42:27 +0000 (12:42 +0200)]
Generate cx-instructions for releational expressionsa.
Roberto Raggi [Tue, 29 May 2012 08:20:28 +0000 (10:20 +0200)]
Tests
Roberto Raggi [Mon, 28 May 2012 20:37:29 +0000 (22:37 +0200)]
Fix Array.prototype.concat
Roberto Raggi [Mon, 28 May 2012 19:49:20 +0000 (21:49 +0200)]
Fix [[construct] and Object.prototype.toString