Christoph Oelckers
f2ac0f4c53
- removed the longjmp based exception catch/rethrow mechanism and instead force-terminate in case a user exception is thrown while the VM is executing JITed code on a non-Windows system
...
On Windows none of this is needed, because we can generate a proper unwind frame for the JITed functions, but even on Linux, it would require manual additions to each single piece of native code that ever gets called from inside a JIT compiled function.
This is an utterly prohibitive proposition because it makes direct native calls a virtual impossibility
So, in order to get the thrown error properly presented both I_Error and ThrowAbortException will now forward to I_FatalError if it is called from inside a JIT context.
# Conflicts:
# src/scripting/vm/vmframe.cpp
2019-04-16 17:32:32 +02:00
Christoph Oelckers
bd4e41d6cb
-add a dummy definition for vm_jit in 32 bit.
2019-04-16 17:28:36 +02:00
Magnus Norddahl
7c1730f221
- fix native call crash and assertion error
2019-04-16 17:14:31 +02:00
Magnus Norddahl
f65b7fb1be
- hook up unix unwind info (still not working)
2019-04-16 17:14:30 +02:00
Magnus Norddahl
d65298e929
- fix WriteSLEB128
2019-04-16 17:14:28 +02:00
Magnus Norddahl
fd0104bc71
- implemented unwind info for Linux and macOS - now to fix the bugs that cannot be fixed when the documentation is as useless as it is for those platforms..
2019-04-16 17:14:25 +02:00
Magnus Norddahl
e4ce93382b
- Emit DW_CFA_advance_loc and DW_CFA_def_cfa_offset codes
2019-04-16 15:12:43 +02:00
Magnus Norddahl
29e051a36a
- fix typo in macro
2019-04-16 15:12:34 +02:00
Magnus Norddahl
48d211c79b
- add .eh_frame generation code except for building the actual CIE and FDE instructions
2019-04-16 15:12:31 +02:00
Christoph Oelckers
d5f4f93dd2
- allocate storage for all of a function's return values
2019-04-16 14:58:41 +02:00
Magnus Norddahl
c8c671bbe0
- pass additional return values as the last args to a direct native call
2019-04-16 14:58:37 +02:00
Magnus Norddahl
0f27d0cd66
- use the OP_PARAM and OP_RESULT opcodes to build the function signature
2019-04-16 14:58:35 +02:00
Magnus Norddahl
4e5415d371
- fixed missing setRet call for REGT_POINTER return types
2019-04-16 14:58:34 +02:00
Magnus Norddahl
a557042bcc
- fix compile error
2019-04-16 14:58:32 +02:00
Magnus Norddahl
7c75776273
- annotate which function we are calling for better dumpjit info
2019-04-16 14:58:30 +02:00
Magnus Norddahl
ee7d6abdd3
- move the jit runtime to its own file
2019-04-16 14:58:27 +02:00
Christoph Oelckers
c0a26afab9
- free everything.
2019-04-16 14:58:24 +02:00
Christoph Oelckers
7c649a9f0c
- delete JIT data when shutting down.
2019-04-16 14:58:21 +02:00
Magnus Norddahl
8fc8dee090
- fix: float constants got their move instructions inserted after the call instruction
2019-04-16 14:58:19 +02:00
Magnus Norddahl
6289e0ad3d
- fix macro expansion error on gcc and clang
2019-04-16 12:41:21 +02:00
Christoph Oelckers
c01981d08a
- define the built-in functions defined in codegen.cpp through the regular interface instead uf just hacking them into the symbol table with incompletely set up data.
...
- added direct native variants to these builtins and fixed problems with builtin processing.
2019-04-15 22:30:01 +02:00
Christoph Oelckers
951ed466b3
- scriptified P_BobWeapon as a virtual function on PlayerPawn.
2019-04-15 22:29:19 +02:00
Christoph Oelckers
c1442fae0d
- scriptified P_BringUpWeapon because this was the only native function still referencing AWeapon::GetReadyState.
2019-04-15 21:58:41 +02:00
Christoph Oelckers
4c7096ffac
- started with a ScriptUtil class which will allow moving function implementations for ACS and FraggleScript to zscript.txt
...
So far 3 functions for testing implemented.
# Conflicts:
# src/p_acs.cpp
2019-04-15 21:58:26 +02:00
Christoph Oelckers
5f5410e35f
- fixed: Since out types cannot be marked as such in a function prototype (as it'd cause parameter mismatches in the resolving pass) it is necessary to check the argflags as well when determining the register type.
2019-04-15 21:56:26 +02:00
drfrag
60e667f732
- Fixed compilation.
2019-04-15 21:48:55 +02:00
Magnus Norddahl
5f7aeb3186
- fix missing include statement
2019-04-15 16:09:14 +02:00
Christoph Oelckers
1fd23f5228
- fixed initialization of default parameters in dynamically created function calls like in the MENUDEF parser
2019-04-15 16:09:13 +02:00
Magnus Norddahl
31f524fd6b
- inline VBTL opcode
...
- remove old META and CLSS implementations
2019-04-15 16:09:11 +02:00
Magnus Norddahl
d4e3bee7c6
- add return type to CreateFuncSignature
2019-04-15 16:09:10 +02:00
Magnus Norddahl
1aebbfb3b5
- fix typo
2019-04-15 16:09:08 +02:00
Magnus Norddahl
815b7d8b7e
- add support in the jit compiler to do direct native calls using the x64 calling convention
2019-04-15 16:09:07 +02:00
Christoph Oelckers
5e63252fdc
- moved the type infomation entirely out of VMValue.
...
For the varargs functions that used the Type field to validate their parameters, now a hidden additional argument is passed which contains a byte array with the type info for the current call's arguments. Since this is static per call location it can be better prepared once when the code is being compiled instead of being put in a runtime created array for each invocation. Everything else uses the per-function instance of the same data.
The only thing that still needed the type field with a VMValue is the defaults array, so this uses a different struct type now to store its data.
# Conflicts:
# src/v_draw.cpp
2019-04-15 16:02:17 +02:00
Christoph Oelckers
cb9c1f021c
- generate register type info for the parameter lists of all functions.
...
Currently used for loading parameters into registers.
For checking parameters of native functions some more work is needed to get the info to the function. Currently it doesn't receive the function descriptor.
2019-04-15 15:52:22 +02:00
Magnus Norddahl
a277137d85
- add missing CheckVMFrame call
2019-04-15 15:52:21 +02:00
Magnus Norddahl
0fe213765b
- only allocate stack space for vmframe and call returns when we need them
2019-04-15 15:52:20 +02:00
Magnus Norddahl
03258d1334
- improve dumpjit output slightly
2019-04-15 15:52:19 +02:00
Magnus Norddahl
ec3b491f19
- don't emit VMValue.Type information when we know the receiver isn't going to read it anyway
2019-04-15 15:52:18 +02:00
Magnus Norddahl
fe64de28d4
- delay emitting PARAM and VTBL instructions until CALL/CALL_K
2019-04-15 15:52:16 +02:00
alexey.lysiuk
5d0bf48e22
- use custom offsetof() macro
...
src/scripting/vm/jit_call.cpp:164:38: warning: offset of on non-standard-layout type 'VMScriptFunction' [-Winvalid-offsetof]
src/scripting/vm/jit_load.cpp:87:50: warning: offset of on non-standard-layout type 'DObject' [-Winvalid-offsetof]
src/scripting/vm/jit_load.cpp:96:50: warning: offset of on non-standard-layout type 'DObject' [-Winvalid-offsetof]
src/scripting/vm/jit_load.cpp:257:53: warning: offset of on non-standard-layout type 'DObject' [-Winvalid-offsetof]
2019-04-15 15:52:15 +02:00
Christoph Oelckers
054640ce41
- removed OP_TAIL.
...
The amount of support code for this minor optimization was quite large and this stood in the way of streamlining the VM's calling convention, so it was preferable to remove it before moving on.
2019-04-15 15:52:10 +02:00
Magnus Norddahl
783adc7be1
- disabled code that shows how a thunk function and native setup would look like
2019-04-15 15:48:31 +02:00
Christoph Oelckers
03001991f1
- fixed IJMP code generation for the JIT compiler.
...
With a proper count value available this can be done properly. The only relevant targets are the jumps immediately succeeding the IJMP instructions, nothing else.
2019-04-15 15:48:30 +02:00
Christoph Oelckers
f557c77602
- do not use instructions from too recent instruction set extensions.
...
andn is part of BMI1 which was introduced in 2012, which is far too recent to be used unchecked.
2019-04-15 15:48:29 +02:00
Magnus Norddahl
44b89bba96
- inline ReadBarrier, GetClass and GetClassMeta
2019-04-15 15:48:25 +02:00
Christoph Oelckers
9d126954d1
- removed the default parameter handling from all native script functions because it is no longer needed.
...
# Conflicts:
# src/p_actionfunctions.cpp
# Conflicts:
# src/hwrenderer/postprocessing/hw_postprocessshader.cpp
# src/v_2ddrawer.cpp
2019-04-15 14:59:00 +02:00
Magnus Norddahl
075a666c75
- stop using lambda functions for CreateCall because MSVC lambas use a different calling convention and "converts" them to the right one by generating a thunk function
2019-04-15 14:37:44 +02:00
Magnus Norddahl
51900d5d98
- removed the SetupSimpleFrameMissingArgs logic as the number of args are now guaranteed
2019-04-15 14:37:43 +02:00
Magnus Norddahl
66a970059b
- add warning text when falling back to the VM
2019-04-15 14:37:41 +02:00
Magnus Norddahl
ac01af3ef0
- make functions using too many registers (more than 200) fall back to the VM
2019-04-15 14:37:38 +02:00