Christoph Oelckers
6727301330
- moved all code related to function calls into the helper class so that all future work on the calling convention is in one place only.
2019-04-15 15:52:12 +02:00
Christoph Oelckers
a900390683
- moved all handling for the simple calls into EmitterArray to have it in one place only.
...
The main case of FxVmFunctionCall is not done yet, though.
2019-04-15 15:52:11 +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
33bef2183e
- fix compile errors
2019-04-15 15:52:08 +02:00
Christoph Oelckers
ab689c0984
- fixed TArray's Append methods.
...
I mistakenly assumed that Grow would incease the array's reserved space.
2019-04-15 15:52:07 +02:00
Christoph Oelckers
e9a5f094c9
- changed OP_PARAM handling so that all registers remain allocated until the call instruction and reordered instruction emission so that the param instructions all directly precede the call instruction.
2019-04-15 15:48:37 +02:00
Christoph Oelckers
9380ccb922
- completed the Dehacked fix.
...
I missed some arguments that were specified but set to 'not given'.
2019-04-15 15:48:35 +02:00
Christoph Oelckers
45f83636e9
- restored the old A_Jump prototype because DECORATE needs this to parse the arguments.
2019-04-15 15:48:34 +02:00
Christoph Oelckers
f10c927850
- fixed: The Dehacked function wrappers now need full parameter lists.
2019-04-15 15:48:32 +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
Christoph Oelckers
9456c877d4
- deconstruct A_Jump with multiple labels into A_Jump(chance, RandomPick(label1, label2, label3,...)) to remove this ugly special case from the VM calling convention.
...
This also adds the number of available choices to OP_IJMP.
2019-04-15 15:48:27 +02:00
Magnus Norddahl
44b89bba96
- inline ReadBarrier, GetClass and GetClassMeta
2019-04-15 15:48:25 +02:00
Christoph Oelckers
05fd4d8b62
- fixed RNG setup in FxRandom.
2019-04-15 15:48:24 +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
Christoph Oelckers
6d8cf38cef
- fixed FxFRandom setup which used a path in FxRandom that is no longer supported.
2019-04-15 14:37:46 +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
Christoph Oelckers
7d2c4a05e2
- removed the unused 'no arguments' cases from the BuiltinRandom functions and split off BuiltinRandom2 into its own function.
...
This removes the last non-vararg cases where a native VM function checks 'numparam'. As of this commit all function calls will pass the complete list of arguments.
2019-04-15 14:37:40 +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
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