Erik Verbruggen [Thu, 18 Oct 2012 08:46:31 +0000 (10:46 +0200)]
Fix LLVM code generation to call the right methods.
Change-Id: Ia63342d2808ca2e3cdd5b19e94054786cc34c495
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Erik Verbruggen [Thu, 18 Oct 2012 08:44:09 +0000 (10:44 +0200)]
Fix insecure use of format string.
Change-Id: I6cd282d5780e418bea7a07d4639c035a98b3ed65
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Erik Verbruggen [Thu, 18 Oct 2012 08:43:49 +0000 (10:43 +0200)]
Fix unused parameter/variable warnings.
Change-Id: I1e1fad753b99a52a1e65dcf38f64c394fa506735
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Thu, 18 Oct 2012 07:52:38 +0000 (09:52 +0200)]
Clean up the relational operators
Change-Id: I83cf1dd9204b95b0238ed2476cf2a3800b25a017
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Thu, 18 Oct 2012 06:52:40 +0000 (08:52 +0200)]
Cleanup
Remove __qmljs_init_object and replace it with
Value::fromObject
Change-Id: Ibc8bd9e7ecd56c6713dc08add72e5cd35ffea78e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Thu, 18 Oct 2012 06:49:22 +0000 (08:49 +0200)]
Inline string creation in the generated JIT code
Change-Id: Ifaef87046c083b36222f6204291ee3a61ffcd20b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Erik Verbruggen [Wed, 17 Oct 2012 12:34:44 +0000 (14:34 +0200)]
Change usage of qIsNaN to std::isnan.
By using std::isnan the compiler/std-lib has a chance to optimize the
call away or maybe even generate an intrinsic. Furthermore, when the
runtime is compiled to bitcode for inclusion in generated code, we now
do not need to link against QtCore to get just one single function.
Change-Id: I79995afc1ba215f1ffd9a43df1808b833dfa8481
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Wed, 17 Oct 2012 21:07:41 +0000 (23:07 +0200)]
Fix the shift operators
The JS spec demands that the right hand argument is being
masked with 0x1f before applying the nit shift.
See e.g. http://bclary.com/2004/11/07/#a-11.7
Change-Id: I6a7dee4708b2fe93df984f13752f7f00b5f2f367
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Wed, 17 Oct 2012 21:03:04 +0000 (23:03 +0200)]
Compile fixes on amd64
Change-Id: I767d2d8b8e6dec738fe6ed63a1ced781629b81ce
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Wed, 17 Oct 2012 20:55:19 +0000 (22:55 +0200)]
Fix warning about unused opName parameter
Pass it up to generateFunctionCall :)
Change-Id: Ic05854e2a7b8bea09eb652e37df43587ffe62824
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 17 Oct 2012 20:43:07 +0000 (22:43 +0200)]
Port to ia32 (stack based value passing)
In the architecture section, introduce a VALUE_FITS_IN_REGISTER
macro as well as a RegisterSize constant.
When storing the return value into a IR::Temp, either copy straight
from the return value register if the architecture supports values
in registers, otherwise do a load/store copy.
Added push() overload that allows pushing constant values.
push() with an IR::Temp* now pushes the actual value onto the stack,
because our run-time functions expect values to be passed by... value :)
Extended the function call logic to reserve space on the stack for
the function return value if it doesn't fit into a register. In that
case at least the ia32 ABI specifies that there is a hidden first
argument which is the address of the space where the callee can place
the return value itself.
Change-Id: Ice9435dfc1482f4045a4ec4ad2c9ab58d4dfc7aa
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 17 Oct 2012 20:38:55 +0000 (22:38 +0200)]
Fix build on ia32
Use the "q" constraint with the argument to seto to ensure we get
a lower-8-bit register
Change-Id: I483a8b37df9b726d78c050db97b58c5b62fde8e4
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Wed, 17 Oct 2012 20:52:46 +0000 (22:52 +0200)]
Clean up toUInt16 and fix a small typo in toUInt32
Change-Id: I49e57cb8eed83237d8b2477297e429cd38d07c19
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Wed, 17 Oct 2012 20:40:49 +0000 (22:40 +0200)]
Clean up to(U)Int and toInteger conversions
Change-Id: Ifdd4f22bd50ba2a4c0dd710ba346a36c84b2c305
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Wed, 17 Oct 2012 20:40:28 +0000 (22:40 +0200)]
Add missing break statement
Change-Id: I9f5d4cb6a7db0cd63c419cdf41c1a7497453559e
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Wed, 17 Oct 2012 17:28:44 +0000 (19:28 +0200)]
Simplify function call generation (part 2)
Hide the mapping from function argument to register in a small
section of the architecture specific code at the top of the
instruction selector and use a generic ArgumentLoader helper class
to first try loading function parameters in registers and then fall
back to the stack.
This is only tested on amd64 right now where we don't end up using
the stack right now, so it will need testing/tweaking for ia32/arm.
Change-Id: If073cd92a674e90dc28f2c9bdf2841bb07c020f1
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 17 Oct 2012 16:28:45 +0000 (18:28 +0200)]
Simplify function call generate (part 1)
This gets rid of the ia32 and arm variants of generateFunctionCall
(they'll have to be re-done anyway) and replaces the duplicated
bodies of the generateFunctionCallImp overloads with calls to
one single instance that has the maximum number of supported arguments.
The recently introduce VoidType takes care of non-existant arguments.
Change-Id: I7c41f58a72840837709e65620d7f384e4b18f2a8
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Wed, 17 Oct 2012 15:31:53 +0000 (17:31 +0200)]
Simplify some builtin methods
Change-Id: I2c524b3634c65e7cc0ee72a21937048c4e3ae10a
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Wed, 17 Oct 2012 14:42:47 +0000 (16:42 +0200)]
No need to clear a register twice.
Change-Id: I51235825566c6e7781af4c168b4902a90350b5cc
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Wed, 17 Oct 2012 14:37:07 +0000 (16:37 +0200)]
Make some methods inline
Change-Id: Ic36761b9ee95c7b51b0eb2c23daa01084d316067
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Wed, 17 Oct 2012 13:02:54 +0000 (15:02 +0200)]
Rename generateFunctionCall2 and loadArgument1.
The old functions that implement the old calling convention are unused now.
Change-Id: I8a6ba76c0ba2442f48a0dc331196ef399a902da0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 17 Oct 2012 12:34:46 +0000 (14:34 +0200)]
Fix massive parallel builds
Some of the udis86 files depend on a generate .c file, which if qmake
knows about will be generated _before_ building the file that includes
it.
Change-Id: I8cf2b63d2c111fc5a64002f40f3e30210095cb29
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Wed, 17 Oct 2012 12:55:52 +0000 (14:55 +0200)]
Directly store constants as immediate Value's
This removes a link from the JIT code to the IR,
and should improve performance as we need slightly
less copies.
On 64 bit, Values are stores in 2 instructions instead
of 4 now.
Change-Id: I4a90165fcdfc2d77ac3f6e7e9accdef8600fadd6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Wed, 17 Oct 2012 12:19:05 +0000 (14:19 +0200)]
Implement some stubbed out methods
Change-Id: I7533c33850235fb914e35e4fbd92def654158db7
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Wed, 17 Oct 2012 11:43:33 +0000 (13:43 +0200)]
Pass Value, not 'const Value'
Passing const values doesn't make a whole lot of sense,
esp. when the passed object is POD.
Change-Id: I7372407862828cf7fa8461583069743ecf583170
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Wed, 17 Oct 2012 11:38:59 +0000 (13:38 +0200)]
Fixed more calling conventions
Implemented a few stubs for qmljs_inplace_op_member
Change-Id: I542a535862339285db7ec0b547754453545a3dc0
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Wed, 17 Oct 2012 11:38:56 +0000 (13:38 +0200)]
Fix order of arguments
Change-Id: I8ecf66667f1dfebc33715ba396cb4bf7d27535d0
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Wed, 17 Oct 2012 11:38:50 +0000 (13:38 +0200)]
More changes to the new calling convention
Change-Id: Icc22f2ed342ced9eac0d62307151acca8031d2c2
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Wed, 17 Oct 2012 11:43:58 +0000 (13:43 +0200)]
Update wtf and masm from upstream (svn.webkit.org/repository/webkit/trunk@131582)
This brings in the distinction between loadPtr and load64 in the assembler.
Change-Id: Ifd8a8fe727f4fdb56b1d1d8bdd7065604904c472
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Wed, 17 Oct 2012 11:34:27 +0000 (13:34 +0200)]
Prospective mac build fix
Don't try to link the generated header file
Change-Id: Iebe425ddd7cec5be731b3e8f4f5ca1a73990d0db
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Erik Verbruggen [Wed, 17 Oct 2012 11:24:46 +0000 (13:24 +0200)]
Change usages of math.h into cmath. Fixes MacOS build.
At least on MacOS, but possibly elsewhere too, including cmath before or
after math.h will undefine e.g. the isinf macro (and others). The math.h
include headers will make sure that math.h cannot get included twice,
so this will end with a situation where isinf is undefined, but
std::isinf is there.
Change-Id: Ie59aeadf2adde511ea8db5eb2fafd3272a7e9d51
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Wed, 17 Oct 2012 07:05:56 +0000 (09:05 +0200)]
Generate correct code when calling values
__qmljs_call_value was still using a pointer to a Value.
In addition, qcv4isel_masm.cpp was using a wrong order
of the arguments.
Change-Id: I0414aa732ae8074420e4f11525f5b04712cc1bab
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 22:20:00 +0000 (00:20 +0200)]
Store results as integers in a few more places
Speeds up crypto.js by another 20%.
Change-Id: Ic16c824bf337392d64dc0bb3275f8b6a6c27f792
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 22:10:09 +0000 (00:10 +0200)]
Fix typo
Change-Id: I0620cf0521a22cd8ea497eac31fe29896cd1cb98
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 20:26:52 +0000 (22:26 +0200)]
Store integer constants as integer Values
Generate integer Value's during instruction
selection. Value is already prepared for it,
so this simply speeds up integer heavy JS
execution.
Speeds up crypto.js by around 60%
Change-Id: I3781767fd5b5c799365f3c75245409a9760ae7fb
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 20:00:49 +0000 (22:00 +0200)]
Convert most operations to the new calling convention
Change-Id: I2dbf61b215a03a3c44c9c6bc431859bb9d067625
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 20:19:33 +0000 (22:19 +0200)]
Small cleanup
Change-Id: I81f9f49df0ecd94081d111e691494ec746ca58ee
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 19:08:52 +0000 (21:08 +0200)]
Convert some more methods to the new calling convention
Change-Id: Ieeeb86d94d1094213430a1b4afa0d3a91785ac45
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 18:43:43 +0000 (20:43 +0200)]
Introduce a Bool typedef for boolean return values
This helps in the interpretation of the type returned
by a method. It also makes it easier to later on change
the type back to a real bool if it makes sense. Bool
is currently typedef'ed to uint.
Change-Id: I905d828f4f7b0f7e778b7f197c4ed61117ce5d16
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 18:38:11 +0000 (20:38 +0200)]
Convert some more methods to the new calling convention
Change-Id: I73a0e0e12b75828c83c5422d1c04a4ade4718324
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 15:02:28 +0000 (17:02 +0200)]
Converting more runtime methods to the new calling convention
Change-Id: I331e7ebe6479bc5b6bac9cf4e3e6506a1cae1053
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 14:21:00 +0000 (16:21 +0200)]
Move conversions to new calling convention
Change-Id: Iec01835b4fd27d8b71b7e709b05bcc757d09e417
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 13:47:46 +0000 (15:47 +0200)]
More conversions to new calling convention
Change-Id: Iac67c9923bc3d7af76bb490cc8ca7cd3e922e192
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 13:37:31 +0000 (15:37 +0200)]
More conversions to new calling convention
Change-Id: I6002715cc3f5c22d90a9ade6ae2152c2c3c8ebb2
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 13:10:47 +0000 (15:10 +0200)]
Converting more methods to the new calling convention
Change-Id: I5199a9e5439644cc259f131c8b0ba6a941989615
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 12:17:36 +0000 (14:17 +0200)]
Converting more runtime methods.
Change-Id: I9e5d73004e377cff2819cb82240d50e73c8bda94
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 11:40:02 +0000 (13:40 +0200)]
Convert Value constructors to new calling convention
Change-Id: I433f72666499e660618b061cfcf3407f5f9bb166
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 11:13:44 +0000 (13:13 +0200)]
Convert string literals to new calling convention
Change-Id: I8dd6b1975351c36230ed512c55944c9b748ca38b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 10:56:50 +0000 (12:56 +0200)]
Further convert runtime methods to the new calling convention
Value bassed argument passing.
Change-Id: I95e49ae301221e36946c2ce4f25081461513a6bb
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Tue, 16 Oct 2012 10:27:14 +0000 (12:27 +0200)]
Start changing signatures of the runtime to being value based.
Value's should be passed by value and returned by value between JIT
and the JS runtime. This should give us better performance on
x86_64 and ARM.
Change-Id: I4fa286c6164f0143adb72d07c737fa273c8a5eb6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Tue, 16 Oct 2012 08:19:23 +0000 (10:19 +0200)]
Optimize boolean test
Use != 0 instead of == 1, as it allows for a more efficient encoding
on ia32/amd64 (using test eax, eax)
Change-Id: I7a29139d8e6e9b843bf8df6f20f5ef7cc9b2e8cc
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Tue, 16 Oct 2012 11:11:59 +0000 (13:11 +0200)]
Get rid of compiler warning.
Change-Id: I3b92819ac1bf8e4f98c266d4136ed05235e06faf
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Mon, 15 Oct 2012 20:32:06 +0000 (22:32 +0200)]
Do not return booleans from methods called by JIT generated code
For a boolean, only one byte of the the value returned in the
register is defined. But the compiled code afterwards does a
32 bit comparison with 0 or 1, leading to random failures
depending on compiler optimisation settings.
Instead we now consistently return uints, and all boolean
tests in the JIT generated code have to be done as
branch32((Not)Equal, register, TrustedImm32(0)). Never
compare against 1 to avoid potential problems.
Change-Id: I9d7545dd6705bca82dc49f1eedb329fffb86cdb7
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Mon, 15 Oct 2012 18:34:21 +0000 (20:34 +0200)]
Clean up callee save register push/pop code to have less #ifdefs
Change-Id: Id4286de7716d7093473ab9e5d2e5d95be8f69efe
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Mon, 15 Oct 2012 10:45:48 +0000 (12:45 +0200)]
Disable fastmalloc
Change-Id: I9b65c0b237463b81b04d8745476a5c002ea9af12
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Erik Verbruggen [Fri, 12 Oct 2012 12:56:21 +0000 (14:56 +0200)]
Fix: change struct JSGlobalData into a class and fix forward decls.
Change-Id: I3d414282cafd51e813dc9e53cc2f5b1d9163efb3
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Erik Verbruggen [Fri, 12 Oct 2012 12:31:50 +0000 (14:31 +0200)]
Fix for LLVM 3.2.
Change-Id: I79dfe5e41267fabbddea7a753685a864de5979cd
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Erik Verbruggen [Fri, 12 Oct 2012 12:31:29 +0000 (14:31 +0200)]
Fix darwin-ism to make it compile on Macs.
Change-Id: I7a018ad552764914085e3c89e9ea7e582ca230a7
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Sat, 13 Oct 2012 13:49:44 +0000 (15:49 +0200)]
[moth] Add missing IR::AluOp -> ALUFunction mappings
Change-Id: Icf5d15579ef05a6b6fb46fbcb40abd69fadb7898
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Sat, 13 Oct 2012 13:45:35 +0000 (15:45 +0200)]
Fix build on ia32
Use the q constraint instead of r to ensure we get a register valid
for seto. This should also work on amd64, but I haven't tested.
Change-Id: I6da5916db0f35a05a709a127c0dd5cb134284a79
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 12 Oct 2012 12:30:52 +0000 (14:30 +0200)]
Silence some compiler warnings
Tweaks taken from upstream :)
Change-Id: Iae73ec0aa35c2e2a0e78422e0636ac7d99c8303c
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Simon Hausmann [Fri, 12 Oct 2012 12:24:45 +0000 (14:24 +0200)]
Prospective Mac build fix
Define ahead of time which "feature" set we want, i.e. no LLINT/DFG/JIT
code but only ENABLE(ASSEMBLER). Otherwise Platform.h will make a choice
for us depending on the platform.
Change-Id: I372dc690ecbc624e9d589f6f10078a7647fcb570
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Erik Verbruggen [Fri, 12 Oct 2012 11:45:35 +0000 (13:45 +0200)]
Fix LLVM build
Change-Id: I7ae00a5e90087182d9f7d939db0a036c120e3b9b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Simon Hausmann [Fri, 12 Oct 2012 10:15:10 +0000 (12:15 +0200)]
Prospective Mac OS X build fix
open_memstream is not supported beyond Linux it seems, so do the
symbol replacing disassembly printing only on Linux.
Change-Id: I1eff6db9e10bd0ebbc06e967a61f998ee42438a8
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Simon Hausmann [Fri, 12 Oct 2012 08:12:24 +0000 (10:12 +0200)]
Add missing license headers
Change-Id: I59d602a0f2c1fefb03994ed32a3d697b176791ff
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Simon Hausmann [Fri, 12 Oct 2012 07:23:17 +0000 (09:23 +0200)]
Clean up arithmetic operation calls
Don't repeat calls to generateFunctionCall but use a helper macro to
get the name.
Change-Id: I394b1980cbd67f3ca94fc41402de2d5b99c45016
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Lars Knoll [Fri, 12 Oct 2012 06:52:51 +0000 (08:52 +0200)]
Store booleans as 32 bit integers
The old code was giving valgrind warnings, because
we loaded the boolean (1 byte) as a 32 bit integer.
Instead simply store all booleans as 32 bit ints
to avoid the warnings.
Change-Id: I46c7f9fc9d8dfe52afd9bab2dbab8923aaa630f8
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 12 Oct 2012 06:51:02 +0000 (08:51 +0200)]
Send all debug output to stderr
qDebug() was used for part of the logging, which
uses stderr. Send everything else there as well.
Change-Id: I363dff3d2e4dd6f95bf0347f1df589ae2528fd32
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Fri, 12 Oct 2012 06:48:33 +0000 (08:48 +0200)]
Handle Integer_Type in a switch statement
Change-Id: I8e00636f0896cec7d18d645dd70db8a100bf5560
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Thu, 11 Oct 2012 19:19:08 +0000 (21:19 +0200)]
Remove almost all uses of __qmljs_init_string
Change-Id: I88130ec39958c75b70d898a352423908ac2ef1d4
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Lars Knoll [Thu, 11 Oct 2012 14:50:37 +0000 (16:50 +0200)]
Remove __qmljs_init_(number|boolean)
Change-Id: Iae59dfea39e44931bb2f7a6436bd2f1491bbf843
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
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