Commit graph

15309 commits

Author SHA1 Message Date
Christoph Oelckers
a0b4f5ad68 - always pass complete argument lists in the VM. 2019-04-15 14:37:37 +02:00
Christoph Oelckers
44eee13aa7 - build full argument lists for action function calls.
This uses one static global array to avoid frequent reallocations.
2019-04-15 14:37:35 +02:00
Christoph Oelckers
a371a8456a - implemented VMCallWithDefaults and used it for all calls with variable arguments.
This isn't used for the 3 action function calls because it requires an array allocation which would be a bit too costly for something as frequently called as action functions.
They will need a different approach.
2019-04-15 14:37:34 +02:00
Christoph Oelckers
29d7e11937 - fixed last commit. 2019-04-15 14:37:31 +02:00
Christoph Oelckers
28461de6ec - marked all places where an incomplete parameter list may be passed to the VM by a native call by redirecting VMCall to an intermediate VMCallWithDefaults. This function must later fill in the missing arguments from the default. 2019-04-15 14:37:30 +02:00
Christoph Oelckers
7fe33d336c Avoid using argument count for any kind of decision making in native VM functions.
This allows retaining the functionality, even if for the JIT compiler's benefit all default arguments are pushed onto the stack instead of reading them from the defaults array.

# Conflicts:
#	src/r_data/r_sections.h
2019-04-15 14:37:28 +02:00
Magnus Norddahl
2dd03270b2 - remove unused argument 2019-04-15 14:37:26 +02:00
Magnus Norddahl
fd955249fd - avoid calling VMFillParams for simple stack frames
- split Setup into more functions
2019-04-15 14:37:24 +02:00
Magnus Norddahl
5181106264 - add dword store to memset code 2019-04-15 14:37:23 +02:00
Magnus Norddahl
43cfedbd23 - disable jit in 32-bit builds 2019-04-15 14:37:21 +02:00
Magnus Norddahl
18258c6cd5 - fix wrong offsets 2019-04-15 14:37:20 +02:00
Magnus Norddahl
c9a20d56d1 - generate a memset for the allocated stack memory because that's what the VM does
(this really shouldn't be done by the VM either - the compiler backend should clear its registers if it wants them to be zero!)
2019-04-15 14:37:19 +02:00
Magnus Norddahl
8fd2bd1d51 - fix operand size mismatch error 2019-04-15 14:37:17 +02:00
Chronos Ouroboros
104f49e589 Fix the code for MODF_RK in the JIT compiler. 2019-04-15 14:37:16 +02:00
Chronos Ouroboros
c8e56f4dda Fixed the Vector2/3 != operator. 2019-04-15 14:37:14 +02:00
Chronos Ouroboros
c3c100bf9f Added support for CMP_APPROX to EQV_R and moved the code to a template. 2019-04-15 14:37:13 +02:00
Magnus Norddahl
b4db05a7ff - modify exception checks to jump ahead if the exception is to be thrown as it limits static misprediction 2019-04-15 14:37:11 +02:00
Magnus Norddahl
3504f48bfa - fix a typo 2019-04-15 14:37:10 +02:00
Magnus Norddahl
3f952e94cd - fix the throw messages 2019-04-15 14:37:09 +02:00
Christoph Oelckers
74d02811c7 - fixed vector math instructions to use the same order of operations as the VM. 2019-04-15 14:37:07 +02:00
Magnus Norddahl
64387abcce - add vm_jit cvar to control JIT compilation 2019-04-15 14:37:05 +02:00
Magnus Norddahl
87744b22ab - update JIT PARAM handling to match the VM instruction change 2019-04-15 14:37:04 +02:00
Magnus Norddahl
43a6fc7227 - RUNTIME_FUNCTION only exists in 64-bit Windows 2019-04-15 14:37:02 +02:00
Magnus Norddahl
a54dbec73a - fix wrong shift direction 2019-04-15 14:37:01 +02:00
Magnus Norddahl
bd1f529574 - build enough of the unwind opcodes for visual studio's debugger to produce the correct call stack 2019-04-15 14:36:59 +02:00
Magnus Norddahl
ea8725f03b - construct our own runtime as the one provided by asmjit is too primitive 2019-04-15 14:36:58 +02:00
Magnus Norddahl
89bf3f0455 - add more names to asmjit objects 2019-04-15 14:36:56 +02:00
Magnus Norddahl
7e9e823674 - remove the frameX registers as they were just constant offsets to vmframe that could be merged into other constant offsets 2019-04-15 14:36:55 +02:00
Magnus Norddahl
475510c8ea - give the remaining virtual registers names 2019-04-15 14:36:53 +02:00
Magnus Norddahl
68c05a424b - give temp registers names and reuse the FString object for formatting names 2019-04-15 14:36:52 +02:00
Magnus Norddahl
d48738437b - skip RESULT opcodes when outputting assembly 2019-04-15 14:36:51 +02:00
Magnus Norddahl
77850c1ec5 - clean up assembly output slightly by only generating labels for the opcodes jumped to 2019-04-15 14:36:49 +02:00
Magnus Norddahl
316010378d - fix CASTB opcode implementation 2019-04-15 14:36:48 +02:00
Magnus Norddahl
2c89d1e694 - fix missing convert from float to double in LSP and LSP_R opcodes
- fix missing convert from double to float in SSP and SSP_R opcodes
2019-04-15 14:36:46 +02:00
Magnus Norddahl
9b9113d0c4 - fix debug build compile error 2019-04-15 14:36:44 +02:00
Magnus Norddahl
7230974c1e - remove the need to do any VARF_Native runtime checks by making native functions use the same calling convention as the script version 2019-04-15 14:36:43 +02:00
Magnus Norddahl
ae6c7e541c - do script calls directly from asmjit without using a lambda wrapper
- do VARF_Native check at compile time when possible
2019-04-15 14:36:41 +02:00
Magnus Norddahl
37dfbba232 - add -dumpjit command line parameter that dumps the JIT log for all functions to dumpjit.txt
# Conflicts:
#	src/scripting/backend/vmbuilder.cpp
2019-04-15 14:36:39 +02:00
Magnus Norddahl
a60ac7b47d - fix return warning 2019-04-15 14:33:49 +02:00
Magnus Norddahl
e7f0b7a0bd - switch to using setjmp/longjmp for exception handling 2019-04-15 14:33:47 +02:00
Magnus Norddahl
b24ec1f9cc - add disabled code that attempts to load registers directly from function arguments 2019-04-15 14:33:46 +02:00
Magnus Norddahl
04ba3ede16 - add missing include statement 2019-04-15 14:33:44 +02:00
Magnus Norddahl
6db9b1394c - allocate VMFrame on the stack for simple functions with no strings 2019-04-15 14:33:43 +02:00
Magnus Norddahl
84d2de34f0 - remove argument not used anymore 2019-04-15 14:33:41 +02:00
Magnus Norddahl
636a9b9322 - apply asmjit register allocator bugfix
- enable debug builds of asmjit
2019-04-15 14:33:40 +02:00
Magnus Norddahl
f0c059678b - move VM creation into the jitted function. this will allow the jit compiler to skip vm frame creation when possible 2019-04-15 14:33:39 +02:00
Magnus Norddahl
baaed0920a - create ScriptCall function pointer on VMScriptFunction 2019-04-15 14:33:37 +02:00
Magnus Norddahl
03689cf004 - modify the VM calling convention so that the callee sets up its own VM frame 2019-04-15 14:33:35 +02:00
Magnus Norddahl
992c097ad1 - fix wrong registers getting saved when passing parameters by reference 2019-04-15 14:33:34 +02:00
Magnus Norddahl
19ae43be17 - removed CanJit as all opcodes are now implemented
- fix some store bugs
2019-04-15 14:33:32 +02:00