diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-10-26 15:59:44 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-10-26 15:59:44 +0200 |
commit | adcd16c71005af63b7b422808f2e7d4c7e39e260 (patch) | |
tree | bdb6f12da9029c96ebdd987ecbf81e05cb52766b /modules/gdscript/gdscript_vm.cpp | |
parent | 34b1c0e40ba3ec92cb8512dbf81f11a969ff2a83 (diff) | |
parent | 08e3f30299acfbfcbfb074a2fd762a63f7d0850b (diff) | |
download | redot-engine-adcd16c71005af63b7b422808f2e7d4c7e39e260.tar.gz |
Merge pull request #83569 from vnen/gdscript-no-opt-division-modulo
GDScript: Don't optimize division and modulo on debug
Diffstat (limited to 'modules/gdscript/gdscript_vm.cpp')
-rw-r--r-- | modules/gdscript/gdscript_vm.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/modules/gdscript/gdscript_vm.cpp b/modules/gdscript/gdscript_vm.cpp index b723ecc185..d31411b26b 100644 --- a/modules/gdscript/gdscript_vm.cpp +++ b/modules/gdscript/gdscript_vm.cpp @@ -662,6 +662,14 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a uint32_t op_signature = _code_ptr[ip + 5]; uint32_t actual_signature = (a->get_type() << 8) | (b->get_type()); +#ifdef DEBUG_ENABLED + if (op == Variant::OP_DIVIDE || op == Variant::OP_MODULE) { + // Don't optimize division and modulo since there's not check for division by zero with validated calls. + op_signature = 0xFFFF; + _code_ptr[ip + 5] = op_signature; + } +#endif + // Check if this is the first run. If so, store the current signature for the optimized path. if (unlikely(op_signature == 0)) { static Mutex initializer_mutex; |