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
Magnus Norddahl
c359601737
- fix opcodes not being listed in jit debug assembly
2018-09-13 19:03:30 +02:00
Magnus Norddahl
b92e5fbf2a
- move EmitRESULT to jit_call
2018-09-13 02:56:02 +02:00
Magnus Norddahl
fad8c9c7b4
- minor cleanups in header file
2018-09-13 02:38:51 +02:00
Magnus Norddahl
ef170883ef
- split JitCompiler into multiple files
2018-09-13 02:29:04 +02:00
Jonathan Russell
b8bdc3b4c8
- added strings and a few string opcodes
2018-09-12 23:56:04 +01:00
Magnus Norddahl
afc3c6b562
- fix CALL_K and disable CALL
2018-09-12 21:58:31 +02:00
Magnus Norddahl
ced793b791
- implement OP_CALL and OP_CALL_K
2018-09-12 01:37:30 +02:00
Magnus Norddahl
981950fef0
- fix misc integer opcodes and remove mov statements when they have no effect
2018-09-11 23:31:32 +02:00
Jonathan Russell
4d3c496121
- changed the way EmitComparisonOpcode works to get rid of the temporary register that was used previously
2018-09-11 21:48:02 +01:00
Magnus Norddahl
4d1cb258d6
- implement PARAM and PARAMI
2018-09-11 17:08:51 +02:00
Magnus Norddahl
6f55c76f05
- fix missing zero extend
2018-09-09 23:21:47 +02:00
Magnus Norddahl
4076ce791b
- fix that the code for META and CLSS was swapped
2018-09-09 22:42:59 +02:00
Magnus Norddahl
19442732d4
- some jump fixes
2018-09-09 22:03:57 +02:00
Magnus Norddahl
b40cbfb22e
- fix jump direction in EmitComparisonOpcode
2018-09-09 20:35:37 +02:00
Jonathan Russell
eeb4419bc4
- more spelling mistakes...
2018-09-02 23:47:22 +01:00
Jonathan Russell
fdf17a5d8e
- fix minor spelling error
2018-09-02 23:45:32 +01:00
Jonathan Russell
28f2311108
- add vector comparison opcodes
2018-09-02 23:44:25 +01:00
Christoph Oelckers
4571aa52f0
- fixed bad code for OP_SRL_KR.
2018-09-02 18:20:38 +02:00
Magnus Norddahl
168c274601
- remove some macros and add functions checking if a register needs to be copied
2018-09-02 15:36:39 +02:00
Magnus Norddahl
55955b9c22
Merge remote-tracking branch 'gzdoom/master' into asmjit
2018-09-02 03:46:06 +02:00
Magnus Norddahl
323d290c99
- implemented LBIT, SBIT, VTBL, SCOPE, NEW, NEW_K, THROW, EQA_R and EQA_K
2018-09-02 03:39:02 +02:00
Magnus Norddahl
ccd2f58fb4
- implement emitter functions for LKP_R, META, CLSS, LO, LO_R, LP, LP_R, SO, SO_R, SP, SP_R
...
- add emit code for throwing exceptions on null pointers
2018-08-31 06:57:30 +02:00
Magnus Norddahl
999b3833ff
- improve jit debug output slightly
2018-08-30 19:55:00 +02:00
Magnus Norddahl
bba422ffcc
- fix offsetting bug when loading address registers
2018-08-30 19:47:38 +02:00
Magnus Norddahl
c7e14e63bc
- fix swapped operands in EmitSUBF_KR
2018-08-30 18:47:25 +02:00
Magnus Norddahl
4b22fa7bc8
- implement MODF_RR, MODF_RK and MODF_KR
2018-08-29 01:27:37 +02:00
Magnus Norddahl
a5719e73eb
- fix mul using wrong instruction
2018-08-29 01:07:36 +02:00
Magnus Norddahl
25e7042bc5
- implement BOUND opcodes and add logging the resulting assembly code if asmjit throws an exception
2018-08-26 14:27:46 +02:00
Christoph Oelckers
d263f7bcc8
- removed most of the old LastIndexOf methods in FString, only leaving one for ZScript and clearly giving it a name that says it all. RIndexOf has been made the proper version of LastIndexOf internally now.
2018-08-25 20:54:16 +02:00
Christoph Oelckers
c04c48d157
- renamed RIndexOf to RightIndexOf
2018-08-25 20:39:58 +02:00
Kevin Caccamo
884de51b70
Add the "RIndexOf" method to FString, which works like String.lastIndexOf from JavaScript
...
RIndexOf returns the index where the substring starts, instead of the index where the substring ends - 1.
Deprecate the LastIndexOf method of StringStruct
2018-08-25 20:37:40 +02:00
Magnus Norddahl
7b886cc434
- implement a few more opcodes and fix some bugs
2018-08-25 13:38:45 +02:00
Magnus Norddahl
f84028eeae
- implemented pow, min, max
2018-08-24 23:17:35 +02:00
Magnus Norddahl
eb9d2b54f3
Merge remote-tracking branch 'gzdoom/master' into asmjit
2018-08-23 18:20:23 +02:00
Magnus Norddahl
17813e4b3e
- implement ATAN2 and FLOP
2018-08-20 01:40:37 +02:00
Magnus Norddahl
38fa25d0c5
- implement DYNCAST*, TEST, TESTN and JMP opcodes
2018-08-20 00:44:48 +02:00
Christoph Oelckers
fad406c4c9
- got rid of FNameNoInit and made the default constructor of FName non-initializing.
...
This setup has been a constant source of problems so now I reviewed all uses of FName to make sure that everything that needs to be initialized is done manually.
This also merges the player_t constructor into the class definition as default values.
2018-08-19 08:19:19 +02:00
Magnus Norddahl
302d753d17
- convert JitCompile's switch into a class to enable easier code reuse
2018-08-19 01:46:56 +02:00
Magnus Norddahl
c17be9eb21
- fix clang compile error
2018-08-18 22:46:18 +02:00
Magnus Norddahl
3453f05f06
- implement throwing by storing exception information in a struct, then return from the jitted function and throw from c++
2018-08-18 22:41:18 +02:00
Jonathan Russell
d983ae66c7
- removed the ability to use printf-like formatting in emitAbortExceptionCall, it barely worked
2018-08-18 20:37:55 +01:00
Jonathan Russell
6424190cbf
- add first draft of abort exceptions
2018-08-18 18:03:18 +01:00
Magnus Norddahl
c89d8bb9bb
- call play sqrt when calculating lengths
2018-08-18 18:41:35 +02:00
Magnus Norddahl
b159b5667a
- fix 8 and 16 bit store
2018-08-18 18:21:52 +02:00
Magnus Norddahl
e557e8fac0
- destroy the jit runtime when all script functions are destroyed
2018-08-18 17:50:47 +02:00
alexey.lysiuk
34f2d8f310
- fixed typo in error message
2018-08-18 17:45:26 +03:00
alexey.lysiuk
31bd7cfc04
- prohibit assignment of dynamic arrays
...
https://forum.zdoom.org/viewtopic.php?t=61682
2018-08-18 15:20:38 +03:00
Magnus Norddahl
9d68d43ce7
- disable all unimplemented opcodes in the switch to ensure 'Unknown VM opcode' fatal error is generated if CanJit has a bug
2018-08-18 13:18:52 +02:00
Magnus Norddahl
68b2cd58d8
Fix compile errors on macOS
2018-08-18 12:37:33 +02:00
alexey.lysiuk
d965c9aa76
- support static const arrays inside structs
...
https://forum.zdoom.org/viewtopic.php?t=61677
2018-08-18 13:00:33 +03:00
Jonathan Russell
6a40e092fe
- added remaining int arithmetic opcodes (and fixed float loading offset issue)
2018-08-17 22:06:12 +01:00
Jonathan Russell
758ee5cbfb
- forgot to turn off debug switch in last commit
2018-08-17 19:15:27 +01:00
Jonathan Russell
08c0ac541f
- made absMaskInt const
2018-08-17 19:14:31 +01:00
Jonathan Russell
d137b3c94e
- implemented CMP_APPROX for OP_EQF_*, making ~== work for doubles
2018-08-17 19:08:19 +01:00
Marisa Kirisame
155afebb65
Add HITOWNER flag, when set, allows a projectile to collide with its shooter.
2018-08-17 19:47:12 +02:00
Chronos Ouroboros
079391e5ac
Updated CanJit's supported opcodes list.
2018-08-16 21:45:04 +02:00
Chronos Ouroboros
a8ce626708
Pointer addition opcodes must leave NULL pointers as they are.
2018-08-16 21:45:04 +02:00
Chronos Ouroboros
591783087d
Changed binary int ops to use a temporary register, fixed some opcodes.
...
For some reason, binary ops might reuse one of the input registers as the output register.
This is a problem for very obvious reasons.
2018-08-14 20:08:04 -03:00
Jonathan Russell
dc03cb7a80
- made CMP_CHECK checking compile time
2018-08-14 20:50:32 +01:00
Jonathan Russell
740415246e
- added exact floating point comparison opcodes
2018-08-14 18:32:17 +01:00
Jonathan Russell
167693f102
- implemented all integer comparison operators
2018-08-14 15:07:09 +01:00
Jonathan Russell
b30df47499
- adds OP_EQ_R, the first instruction using jumps
2018-08-14 13:02:56 +01:00
Magnus Norddahl
0ced612d2c
- add misc float opcodes
2018-08-14 01:07:30 +02:00
Jonathan Russell
cdb5a9d91e
- added most vector maths opcodes
2018-08-13 21:36:55 +01:00
Chronos Ouroboros
cb28bbc72e
Fix floats and implement some more opcodes.
2018-08-13 13:07:36 -03:00
Magnus Norddahl
83d769f55c
- copy initial register values from the VM frame
2018-08-13 00:15:42 +02:00
Magnus Norddahl
7108fd6228
- implement most of the integer math opcodes
2018-08-12 04:34:57 +02:00
Magnus Norddahl
cbb945d8a7
- embed and use asmjit to JIT ZScript VM functions
2018-08-12 02:11:13 +02:00
Christoph Oelckers
6634416b89
- allow skipping optional arguments of the parent function in a virtual override definition.
...
This is mainly to allow retroactive addition to existing virtual functions without breaking existing content.
The MeansOfDeath fix for Actor.Die would not be possible without such handling.
2018-07-29 17:00:05 +02:00
alexey.lysiuk
e9041c0697
- fixed potential garbage collection of still referenced objects
...
Objects from dynamic array stored in items of array of structures were incorrectly treated as unreachable
https://forum.zdoom.org/viewtopic.php?t=61354
2018-07-28 19:34:20 +02:00
Christoph Oelckers
6d0b172762
- added MF8_DONTFACETALKER flag which prevents NPCs from facing the player in conversations.
2018-07-22 11:32:45 +02:00
Christoph Oelckers
2a0c3e63a3
- allow temporary strings to be used as self pointer for String's member functions.
...
Due to how function calls get resolved by the code generator there were some incorrect flags on the self pointer which triggered an assert and caused incorrect code generation.
Fortunately this was a mostly contained special case for which a workaround was possible.
2018-07-20 10:38:55 +02:00
alexey.lysiuk
b2697a99f8
- added missing null pointer checks to VM ops
2018-07-16 17:10:47 +03:00
alexey.lysiuk
5d27c16f30
- disabled default values for out parameters
...
https://forum.zdoom.org/viewtopic.php?t=61128
2018-06-30 11:44:22 +03:00
Christoph Oelckers
ae1fe041ee
- ZScript used the wrong variable for compatflags2.
...
ii_* is merely the storage for info from the compatibility.txt lump.
2018-06-09 17:59:21 +02:00
alexey.lysiuk
4a1f36623b
- fixed: flag CVars in ZScript referenced wrong addresses
2018-06-09 17:21:55 +03:00
Christoph Oelckers
1fdcacc337
- redirect script access to the compatflags CVARs to their internal shadow variables.
...
This is needed so that MAPINFO settings for these flags don't get ignored.
2018-06-08 22:55:44 +02:00
Marisa Kirisame
fae514f30d
BLOCKASPLAYER flag: treat non-player actors as blockable by "block players" lines
2018-06-04 22:18:51 +02:00
Christoph Oelckers
7d515e72c2
- fixed: FxFloatCast must transfer the outer expression's value type to the inner expression if it performs a float->float cast.
...
This violated an important rule that a cast may not alter the expression's type and led to failed asserts elsewhere.
2018-06-02 07:50:23 +02:00
alexey.lysiuk
ef536e7b00
- fixed crash in DECORATE parsing
...
The case with forward declared class used as a parent must be handled explicitly
actor MyWeapon : Weapon { Weapon.AmmoType "MyBaseAmmo" }
actor MyAmmo : MyBaseAmmo { }
actor MyBaseAmmo : Ammo { }
2018-05-10 11:47:16 +03:00
alexey.lysiuk
2ae8d39441
Removed all superfluous #include's
...
Automatically optimized by CLion IDE with manual corrections
2018-04-24 14:30:35 +03:00
Christoph Oelckers
cf8447d19c
-protected critical portal data from getting written to by user code.
...
This data is game critical and may only be altered by code that knows what is allowed and what not. It must never be altered by any user code ever.
However, since the SkyViewpoint actors need to set up some relations between themselves and the default sky portals the previously purely internal 'internal' flag has been exported as a new keyword.
2018-04-15 12:13:02 +02:00
alexey.lysiuk
7bd281ddc9
Added zero initialization of implicit dynamic array items
...
https://forum.zdoom.org/viewtopic.php?t=60111
2018-04-05 12:22:41 +03:00
alexey.lysiuk
ac7e5def32
Forbade dynamic array as the return type of a function
...
Compiler ignored this case silently but it crashed during code generation
2018-04-02 15:18:30 +03:00
alexey.lysiuk
ff96980dda
Fixed handling of default values in String.Mid()
...
https://forum.zdoom.org/viewtopic.php?t=60047
2018-03-31 21:45:20 +03:00
Christoph Oelckers
e89a598b31
- renamed FTexture's UseType flags and gave them a dedicated type.
...
This was done mainly to reduce the amount of occurences of the word FTexture but it immediately helped detect two small and mostly harmless bugs that were found due to the stricter type checks.
2018-03-25 20:26:16 +02:00
Jason Francis
bd7791ad9c
Allow setting string user variables in ACS
2018-03-24 10:20:39 +01:00
Jason Francis
4494b18e8a
Enable string & float user_ properties in UDMF things
2018-03-24 10:20:39 +01:00
Christoph Oelckers
f1bfc3514d
- fixed: For proper recognition of optional function arguments, the argflags must also be copied from the parent function to ensure they are itdentical on the override.
2018-03-14 19:52:30 +01:00
Christoph Oelckers
5d436cd3ed
- forward the error state of the translation parser to the calling code so that it can print a message pointing to the problem content.
2018-03-12 19:14:56 +01:00
Christoph Oelckers
13ef97c4ac
- removed debug message.
2018-03-12 18:47:49 +01:00
Major Cooke
4851c5bfde
Insert an extra line after printing the warnings.
2018-03-12 18:17:08 +01:00
Christoph Oelckers
def5e1d61b
Added proper handling for default parameter values of virtual overrides
...
Due to how the VM handles default parameters, these must always be identical to the parent to prevent undefined behavior.
So now, if such parameters are encountered, the compiler will either abort (for script version >= 3.3) or print a warning (for older versions.)
Any defaults being specified for older versions will be ignored, though, and the defaults of the parent function be copied to the override.
2018-03-12 10:19:16 +01:00
alexey.lysiuk
81bc05b7c5
Added support for default values of arguments with uint type
2018-03-07 15:58:06 +02:00
Christoph Oelckers
bcc8972356
- fixed: A preincrement of a local variable generated wrong code if passed as a function parameter.
...
Due to the special nature of this expression the code generator got stuck in 'address' mode and passed the address of the variable instead of its value.
2018-03-01 15:00:18 +01:00
Christoph Oelckers
425f1408f7
- fixed skip_super application fro ZScript.
...
The order of processing is different here so when the property gets parsed there are no states to delete.
To fix this the property just flags the class and lets the ZScript state compiler deal with this as needed.
2018-02-28 18:10:04 +01:00
Christoph Oelckers
af14609de7
- don't skip empty arrays which are themselves array elements in the ZScript serializer.
2018-02-27 15:42:22 +01:00
Christoph Oelckers
aaaf9aa108
Added 'TeleportSpecial' as an alias for 'Teleport' in ZScript to deconflict from the Actor.Teleport function.
2018-02-27 12:44:00 +01:00
alexey.lysiuk
74357ced0c
Fixed read of potentially junk values in ZScript parser
...
The following ill-formed ZScript code might crash targets with sizeof(int) != sizeof(void*) like 64-bit Intel
class test { void func() { if (true) ( return; ) } }
2018-02-21 16:26:04 +02:00
alexey.lysiuk
1e41c042d4
Fixed codegen crash with non-numeric random seed
...
The following code crashed ZScript code generator if my_seed is not convertible to numeric type
SetRandomSeed[my_random_id](my_seed);
2018-02-19 11:46:36 +02:00