Lars Knoll [Thu, 11 Oct 2012 14:39:17 +0000 (16:39 +0200)]
Introduce an integer type for Value
The type is not being used yet, but all runtime
methods should be updated and able to deal with
integer Values correctly.
In addition started to clean up the use of some of
__qmljs_* Value constructors.
Change-Id: I1cb2169a5731f6adcc990dcbc92bc96aa008079f
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Erik Verbruggen [Fri, 12 Oct 2012 06:58:29 +0000 (08:58 +0200)]
Fix: make it possible to change the used LLVM installation.
If either the LLVM_INSTALL_DIR environment variable or the qmake
variable are set, use that to find the llvm-config utility. Changing
those is easier than modifying your path. Can be used if you have more
than one LLVM installation installed.
Change-Id: I24265b397e21f468ece61392a112de9a50c67c5a
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 12 Oct 2012 06:25:02 +0000 (08:25 +0200)]
Fix stack corruption on ia32
On ia32 sizeof(void*) < sizeof(Value), so we need to subtract
sizeof(Value) instead of sizeof(void*) before reaching the first
temp.
Added comments to explain the offsets.
Change-Id: Iefbb1dc762fdf36d73002c52dc9c471ec15ff403
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 10 Oct 2012 20:40:16 +0000 (22:40 +0200)]
Initial build fixes for arm
Lars Knoll [Thu, 11 Oct 2012 07:14:14 +0000 (09:14 +0200)]
Fix a crash when generating optimised code
The base operation for OpInplaceAnd is OpBitAnd,
not OpAnd.
Simon Hausmann [Wed, 10 Oct 2012 19:48:27 +0000 (21:48 +0200)]
Implement copyValue using a single load/store pair in the common case of copying temps
Simon Hausmann [Wed, 10 Oct 2012 19:28:13 +0000 (21:28 +0200)]
Simplify boolean conditional jumps
* Expect the boolean value to be in Gpr0, which means after the __qmljs_to_boolean
call the move(ReturnValueRegister, Gpr0) becomes a noop
* Instead of loading the true/1 into a register, use it as immediate value in the cmp
Simon Hausmann [Wed, 10 Oct 2012 19:25:40 +0000 (21:25 +0200)]
Make conditional jumps more readable
Simon Hausmann [Wed, 10 Oct 2012 19:22:34 +0000 (21:22 +0200)]
Fix ia32 build: make loadArgument available on all archs for copyValue
Lars Knoll [Wed, 10 Oct 2012 19:15:43 +0000 (21:15 +0200)]
Fix stack corruption
The position of temporaries on the stack was
off by 1, leading to us overwriting other r14, that gets
pushed to the stack after we have allocated space for temps.
Lars Knoll [Wed, 10 Oct 2012 12:02:50 +0000 (14:02 +0200)]
Simplify function header and footer on x86-64
Generate a few instructions less per function call.
Lars Knoll [Wed, 10 Oct 2012 11:46:12 +0000 (13:46 +0200)]
Emit code for copying values
Remove __qmljs_copy in the process.
Simon Hausmann [Wed, 10 Oct 2012 11:22:47 +0000 (13:22 +0200)]
Work around gcc bug on amd64 with function pointer assignment
Simon Hausmann [Wed, 10 Oct 2012 11:19:32 +0000 (13:19 +0200)]
Ignore generated files
Simon Hausmann [Wed, 10 Oct 2012 11:19:17 +0000 (13:19 +0200)]
Remove old assembler
Lars Knoll [Wed, 10 Oct 2012 11:10:07 +0000 (13:10 +0200)]
Make it really work for 64 bit.
crypto.js passes now :)
Simon Hausmann [Wed, 10 Oct 2012 09:42:38 +0000 (11:42 +0200)]
More 64-bit fixes
Simon Hausmann [Wed, 10 Oct 2012 09:04:53 +0000 (11:04 +0200)]
Rudimentary amd64 port
Simon Hausmann [Wed, 10 Oct 2012 08:27:04 +0000 (10:27 +0200)]
Fix rethrow
Simon Hausmann [Tue, 9 Oct 2012 08:31:54 +0000 (10:31 +0200)]
Remove generated code
Simon Hausmann [Tue, 9 Oct 2012 08:28:59 +0000 (10:28 +0200)]
Fix compilation on amd64 (not working yet, just building)
Simon Hausmann [Tue, 9 Oct 2012 08:05:27 +0000 (10:05 +0200)]
Centralize value copying
Simon Hausmann [Tue, 9 Oct 2012 07:59:02 +0000 (09:59 +0200)]
Save and restore context register before calls
Simon Hausmann [Tue, 9 Oct 2012 07:06:12 +0000 (09:06 +0200)]
More debug info
Simon Hausmann [Tue, 9 Oct 2012 06:17:47 +0000 (08:17 +0200)]
First shot at more readable call instructions in output
Simon Hausmann [Tue, 9 Oct 2012 05:41:36 +0000 (07:41 +0200)]
Remember linked function names in prep for future debug help
Simon Hausmann [Mon, 8 Oct 2012 19:58:24 +0000 (21:58 +0200)]
Fix array subscript write: add missing context pointer argument to qmljs_set_element call
Simon Hausmann [Mon, 8 Oct 2012 18:22:31 +0000 (20:22 +0200)]
Use posix_memalign to ensure assert(!(code & 15))
Simon Hausmann [Mon, 8 Oct 2012 18:21:40 +0000 (20:21 +0200)]
Implement executalble memory using mmap
Simon Hausmann [Mon, 8 Oct 2012 08:25:21 +0000 (10:25 +0200)]
Fix non-release builds
Simon Hausmann [Sun, 7 Oct 2012 20:14:01 +0000 (22:14 +0200)]
Add missing return
Simon Hausmann [Sun, 7 Oct 2012 20:10:27 +0000 (22:10 +0200)]
Implement missing movs
Simon Hausmann [Sun, 7 Oct 2012 20:02:41 +0000 (22:02 +0200)]
implement visitExp
Simon Hausmann [Sun, 7 Oct 2012 20:02:06 +0000 (22:02 +0200)]
Implement construct property/value
Simon Hausmann [Sun, 7 Oct 2012 19:57:10 +0000 (21:57 +0200)]
Implement call value and property
Simon Hausmann [Sun, 7 Oct 2012 19:43:29 +0000 (21:43 +0200)]
Port remaining code to better function call mechanism
Simon Hausmann [Sun, 7 Oct 2012 17:45:40 +0000 (19:45 +0200)]
Fix closure init
Simon Hausmann [Fri, 5 Oct 2012 09:48:05 +0000 (11:48 +0200)]
Simplify more function calls
Simon Hausmann [Fri, 5 Oct 2012 09:35:46 +0000 (11:35 +0200)]
further call simplification
Simon Hausmann [Fri, 5 Oct 2012 09:13:54 +0000 (11:13 +0200)]
Simpler approach to function calls
Simon Hausmann [Fri, 5 Oct 2012 09:02:54 +0000 (11:02 +0200)]
Simplify passing temps as method arguments
Simon Hausmann [Fri, 5 Oct 2012 06:09:12 +0000 (08:09 +0200)]
A bit more inplace assignment implemented
Simon Hausmann [Fri, 5 Oct 2012 05:55:05 +0000 (07:55 +0200)]
Generate the code for copying the argments earlier, to avoid register clobbering between __qmljs_copy calls
Simon Hausmann [Thu, 4 Oct 2012 21:23:50 +0000 (23:23 +0200)]
Implement constructActivationProperty
Simon Hausmann [Thu, 4 Oct 2012 20:50:01 +0000 (22:50 +0200)]
Implement mov unop
Simon Hausmann [Thu, 4 Oct 2012 20:46:42 +0000 (22:46 +0200)]
Implement binop mov
Simon Hausmann [Thu, 4 Oct 2012 20:13:34 +0000 (22:13 +0200)]
Implement mov as string
Simon Hausmann [Thu, 4 Oct 2012 20:08:22 +0000 (22:08 +0200)]
Sprinkle a few more notImplemented()
Simon Hausmann [Thu, 4 Oct 2012 20:02:43 +0000 (22:02 +0200)]
Implement more of cjump
Simon Hausmann [Thu, 4 Oct 2012 19:48:38 +0000 (21:48 +0200)]
Add missing returns
Simon Hausmann [Thu, 4 Oct 2012 19:40:33 +0000 (21:40 +0200)]
Fix argument addressing to be in the right order
Simon Hausmann [Thu, 4 Oct 2012 19:40:17 +0000 (21:40 +0200)]
Fix move temp -> temp
Simon Hausmann [Thu, 4 Oct 2012 17:24:22 +0000 (19:24 +0200)]
Implemented part of visitCJump
Simon Hausmann [Tue, 2 Oct 2012 06:56:49 +0000 (08:56 +0200)]
Cleanup
Simon Hausmann [Tue, 2 Oct 2012 06:55:18 +0000 (08:55 +0200)]
Implement callActivationProperty, mov with target as name and closure init
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()