Commit graph

958 commits

Author SHA1 Message Date
Magnus Norddahl
ea26bf6b2f - make functions using too many registers (more than 200) fall back to the VM 2018-11-17 00:04:15 +01:00
Christoph Oelckers
95ab1da6a0 - always pass complete argument lists in the VM. 2018-11-16 22:43:12 +01:00
Christoph Oelckers
97573a0452 - 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.
2018-11-16 19:18:33 +01:00
Christoph Oelckers
6d7710165c - fixed last commit. 2018-11-16 18:50:34 +01:00
Christoph Oelckers
c24da62cdd - 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. 2018-11-16 18:41:27 +01:00
Christoph Oelckers
acbdfddb26 Merge remote-tracking branch 'remotes/origin/master' into asmjit 2018-11-16 17:20:12 +01:00
Christoph Oelckers
8c57447108 - Restricted argument count check to the void return case.
There were some issues here:

* a check for mismatching count is too strict because it is legal to omit return values
* it failed to detect returning multiple values in a single expression.
2018-11-16 12:28:24 +01:00
Christoph Oelckers
358001c306 fixed right shift operator for unsigned values
This is version protected to avoid breaking old code.
2018-11-16 11:32:24 +01:00
Christoph Oelckers
7cd89fe07b - fixed: FxUnaryNotBitwise modified the source operand instead of allocating a new one. 2018-11-16 11:21:51 +01:00
Magnus Norddahl
ac28f0d34f - remove unused argument 2018-11-16 01:33:41 +01:00
Magnus Norddahl
34b037c9db - avoid calling VMFillParams for simple stack frames
- split Setup into more functions
2018-11-16 01:13:25 +01:00
Player701
c569029b1d - Readonly pointer casting now works in ZScript. 2018-11-15 23:28:37 +01:00
Magnus Norddahl
6c31d2e965 - add dword store to memset code 2018-11-15 23:04:11 +01:00
Magnus Norddahl
00d41432d8 - disable jit in 32-bit builds 2018-11-15 22:47:44 +01:00
Magnus Norddahl
5ef2175c38 - fix wrong offsets 2018-11-15 22:40:12 +01:00
Magnus Norddahl
0394dc56b7 - 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!)
2018-11-15 22:33:13 +01:00
Magnus Norddahl
f3e0db913c - fix operand size mismatch error 2018-11-15 22:07:27 +01:00
Magnus Norddahl
3b2faf5397 Merge remote-tracking branch 'origin/master' into asmjit 2018-11-15 22:02:11 +01:00
Cacodemon345
07838f4c2a BOUNCEONUNRIPPABLES flag; makes actors bounce on actors with DONTRIP flag 2018-11-15 12:47:57 +01:00
alexey.lysiuk
39a3527396 - fixed compilation of targets with optimization 2018-11-15 10:59:37 +02:00
Christoph Oelckers
aa4de71e6d Merge branch 'master' into asmjit 2018-11-15 09:25:27 +01:00
Chronos Ouroboros
96b8f12a30 Fix the code for MODF_RK in the JIT compiler. 2018-11-14 21:05:24 -02:00
Chronos Ouroboros
566eb58000 Fixed the Vector2/3 != operator. 2018-11-14 20:01:13 +01:00
Chronos Ouroboros
5375a99cf6 Added support for CMP_APPROX to EQV_R and moved the code to a template. 2018-11-14 10:29:48 -02:00
Magnus Norddahl
8429fc8124 - fix missing type check when using Push or Insert for typed arrays 2018-11-14 10:08:04 +01:00
Magnus Norddahl
99849bc0c5 Merge remote-tracking branch 'origin/master' into asmjit 2018-11-14 01:23:17 +01:00
Christoph Oelckers
33f2f9f34e - fixed: ZScript's finalization code used the last parsed lump for of one translation unit as reference, not the base lump.
This resulted in incorrect messages but also could produce some more subtle errors.
2018-11-12 00:22:50 +01:00
Magnus Norddahl
e6023c55a8 - modify exception checks to jump ahead if the exception is to be thrown as it limits static misprediction 2018-11-10 22:48:20 +01:00
Magnus Norddahl
a7ef178284 - fix a typo 2018-11-10 19:56:54 +01:00
Magnus Norddahl
173fe94736 - fix the throw messages 2018-11-10 19:52:41 +01:00
Christoph Oelckers
3c5609537a - fixed vector math instructions to use the same order of operations as the VM. 2018-11-09 22:36:08 +01:00
Magnus Norddahl
534606f4ce - add vm_jit cvar to control JIT compilation 2018-11-01 21:39:30 +01:00
Magnus Norddahl
369dcfd57f Merge remote-tracking branch 'origin/master' into asmjit 2018-11-01 21:23:26 +01:00
alexey.lysiuk
8597c9e326 - added warning for constant conditional expression
ZScript code like `if (x = 0) // ...` no longer causes assertion failure in Debug but produces a warning regadless of configuration

https://forum.zdoom.org/viewtopic.php?t=62422
2018-11-01 16:05:27 +02:00
Christoph Oelckers
b9f2cce8de - versioned the return mismatch check to demote it to a warning for older versions than 3.7. 2018-11-01 11:30:53 +01:00
alexey.lysiuk
d3461be40c - made 'return void' case a compilation error 2018-11-01 11:18:22 +01:00
Magnus Norddahl
295fc7d7f7 Revert "- the build tests are using some ancient dino 7.1 Windows SDK where UnwindInfoAddress isn't part of the struct yet."
This reverts commit 20516e1c0b.
2018-10-17 08:54:41 +02:00
Magnus Norddahl
20516e1c0b - the build tests are using some ancient dino 7.1 Windows SDK where UnwindInfoAddress isn't part of the struct yet. 2018-10-15 03:06:40 +02:00
Magnus Norddahl
1f0add9067 - update JIT PARAM handling to match the VM instruction change 2018-10-14 23:13:30 +02:00
Magnus Norddahl
70f18f87b9 Merge remote-tracking branch 'origin/master' into asmjit 2018-10-14 22:55:57 +02:00
Magnus Norddahl
1a2e5b12d0 - RUNTIME_FUNCTION only exists in 64-bit Windows 2018-10-14 22:54:30 +02:00
Christoph Oelckers
dd719f0f14 - extended the register limit for 'param'.
The instruction one free instruction byte so it's now using that to extend its argument's register range to 65535.
For param this is needed because it passes strings by reference and creating an implicit temporary copy for string constants does not work here.
2018-10-14 09:13:26 +02:00
Magnus Norddahl
cd211da2d8 - fix wrong shift direction 2018-10-14 08:53:18 +02:00
Magnus Norddahl
a3f6950a4f - build enough of the unwind opcodes for visual studio's debugger to produce the correct call stack 2018-10-14 08:27:27 +02:00
Magnus Norddahl
cf9bae67a8 - construct our own runtime as the one provided by asmjit is too primitive 2018-10-14 00:46:54 +02:00
Magnus Norddahl
300553a21f - add more names to asmjit objects 2018-10-12 08:02:35 +02:00
Magnus Norddahl
7ca598de2d - remove the frameX registers as they were just constant offsets to vmframe that could be merged into other constant offsets 2018-10-12 07:41:16 +02:00
Magnus Norddahl
b15ca09486 - give the remaining virtual registers names 2018-10-12 07:05:42 +02:00
Magnus Norddahl
c86e4480b6 - give temp registers names and reuse the FString object for formatting names 2018-10-12 06:59:03 +02:00
Magnus Norddahl
0bb4a159e5 - skip RESULT opcodes when outputting assembly 2018-10-12 06:25:51 +02:00
Magnus Norddahl
44294a051a - clean up assembly output slightly by only generating labels for the opcodes jumped to 2018-10-12 06:14:27 +02:00
Magnus Norddahl
ade6ae24e9 - fix CASTB opcode implementation 2018-10-11 04:32:49 +02:00
Magnus Norddahl
fc870fce87 - 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
2018-10-11 03:53:11 +02:00
Magnus Norddahl
aa6e09f7e8 - fix debug build compile error 2018-10-11 03:14:42 +02:00
Magnus Norddahl
0120ea190c - remove the need to do any VARF_Native runtime checks by making native functions use the same calling convention as the script version 2018-10-10 23:47:56 +02:00
Magnus Norddahl
b6bc06e568 - do script calls directly from asmjit without using a lambda wrapper
- do VARF_Native check at compile time when possible
2018-10-10 22:08:26 +02:00
Magnus Norddahl
01825231ec - add -dumpjit command line parameter that dumps the JIT log for all functions to dumpjit.txt 2018-10-10 06:17:35 +02:00
Magnus Norddahl
452c6fd158 - fix return warning 2018-10-10 04:57:35 +02:00
Magnus Norddahl
884e185db0 - switch to using setjmp/longjmp for exception handling 2018-10-09 16:30:55 +02:00
Magnus Norddahl
2b05e75656 Merge branch 'asmjit' of https://github.com/coelckers/gzdoom into asmjit 2018-10-09 14:46:40 +02:00
Magnus Norddahl
3f4638ca31 - add disabled code that attempts to load registers directly from function arguments 2018-10-09 14:46:27 +02:00
Magnus Norddahl
9c3b8507af - add missing include statement 2018-10-09 07:15:46 +02:00
Magnus Norddahl
f0d9b49099 - allocate VMFrame on the stack for simple functions with no strings 2018-10-09 05:19:29 +02:00
Magnus Norddahl
bee3a964ae - remove argument not used anymore 2018-10-09 05:18:44 +02:00
Magnus Norddahl
b7c0cd5d05 - move VM creation into the jitted function. this will allow the jit compiler to skip vm frame creation when possible 2018-10-09 03:37:11 +02:00
Magnus Norddahl
e930dfaae7 - create ScriptCall function pointer on VMScriptFunction 2018-10-09 02:52:07 +02:00
Magnus Norddahl
137ef034d1 - modify the VM calling convention so that the callee sets up its own VM frame 2018-10-09 02:08:15 +02:00
Magnus Norddahl
367b60d88c - fix wrong registers getting saved when passing parameters by reference 2018-10-08 23:44:54 +02:00
Magnus Norddahl
d643fbd077 - removed CanJit as all opcodes are now implemented
- fix some store bugs
2018-10-07 22:21:48 +02:00
Magnus Norddahl
47bcf318a5 - fix 32 bit compile errors 2018-10-07 20:55:06 +02:00
Magnus Norddahl
f321f64a05 - catch and rethrow c++ exceptions 2018-10-07 20:38:08 +02:00
Magnus Norddahl
47485194f4 - reuse temp virtual registers 2018-10-07 09:02:28 +02:00
Magnus Norddahl
c5a5265e40 Merge remote-tracking branch 'origin/master' into asmjit 2018-10-07 06:32:13 +02:00
Magnus Norddahl
d47988202a - workaround bug in asmjit's register allocator for calls where the return register is already allocated in a physical register needed by one of the call arguments 2018-10-07 06:29:54 +02:00
Magnus Norddahl
5bf76523d6 - switch ToMemAddress to imm_ptr where allowed 2018-09-18 18:13:53 +02:00
Magnus Norddahl
05ac219ba6 - switch from ASMJIT_ARCH_X64 to ASMJIT_ARCH_64BIT when checking if we need to use 64-bit pointers 2018-09-18 18:05:53 +02:00
Magnus Norddahl
ad260aa971 - create a very basic OP_IJMP implementation 2018-09-17 21:52:21 +02:00
Magnus Norddahl
61735ddd8b - create CreateCall helper to get rid of a lot of the cc.call boilerplate 2018-09-17 12:00:25 +02:00
Magnus Norddahl
f61df60240 - implement OP_TAIL and OP_TAIL_K 2018-09-17 09:02:23 +02:00
Magnus Norddahl
d032914c3d - use the ParamOpcodes array for finding the OP_PARAM's used by a call 2018-09-17 00:31:25 +02:00
Magnus Norddahl
da040e818c - implement string version of OP_CAST 2018-09-17 00:17:32 +02:00
Magnus Norddahl
102c00ce13 - implement string part of OP_CASTB 2018-09-16 22:39:48 +02:00
Magnus Norddahl
c8e4bf089c - implement OP_LFP 2018-09-16 03:39:54 +02:00
Magnus Norddahl
ba4606c1d5 - read the parameters and registers directly off the stack 2018-09-16 03:20:56 +02:00
Jonathan Russell
69bc39914b - changed a bunch of manual address additions in string opcodes to leas 2018-09-15 21:09:43 +01:00
Magnus Norddahl
3477b22714 - more load fixes 2018-09-15 18:08:01 +02:00
Magnus Norddahl
4364feea9a - fix truncated load addresses due to a bug in asmjit
- change ToMemAddress to use uint64_t
2018-09-15 15:38:16 +02:00
Magnus Norddahl
06b54d3aaa - avoid certain x86::ptr overloads as the last argument is not always an offset 2018-09-15 15:05:52 +02:00
alexey.lysiuk
7d1af25b46 Fixed code generation of infinite for loop
https://forum.zdoom.org/viewtopic.php?t=62023
2018-09-15 13:19:28 +02:00
Jonathan Russell
407418a92e - fixed typo in last commit 2018-09-15 00:26:14 +01:00
Jonathan Russell
b83f4f48d6 - implemented SS_R, LCS_R, and LKS_R 2018-09-15 00:25:13 +01:00
Magnus Norddahl
ce9925d257 - fix bug in LKF_R 2018-09-15 01:06:48 +02:00
Magnus Norddahl
7e7bce4965 - fixed OP_VTBL bug 2018-09-15 00:28:34 +02:00
Magnus Norddahl
266f838de7 - fix crash in OP_RET handling 2018-09-15 00:12:12 +02:00
Magnus Norddahl
663e61a4fb - simplify some code 2018-09-14 23:38:57 +02:00
Magnus Norddahl
90d8d4af24
Merge pull request #573 from Gutawer/asmjit
Added string PARAM and RET
2018-09-14 20:07:47 +02:00
Jonathan Russell
11fbd9a0a4 - added string PARAM and RET 2018-09-14 18:20:31 +01:00
Magnus Norddahl
4e85134d8e Merge remote-tracking branch 'gzdoom/master' into asmjit 2018-09-14 02:09:17 +02:00
Magnus Norddahl
d09a377f12 - fix clang errors and warnings 2018-09-14 01:07:05 +02:00
Jonathan Russell
0b6c514067 - added OP_MOVES, OP_CONCAT, OP_LENS, OP_CMPS 2018-09-13 20:31:06 +01:00