- disabled VM JIT completely on unsuported platforms

This commit is contained in:
alexey.lysiuk 2019-02-04 11:14:52 +02:00
parent af9636b7c3
commit 2765159fc6
5 changed files with 60 additions and 35 deletions

View file

@ -163,9 +163,21 @@ option( NO_OPENAL "Disable OpenAL sound support" OFF )
find_package( BZip2 ) find_package( BZip2 )
find_package( JPEG ) find_package( JPEG )
find_package( ZLIB ) find_package( ZLIB )
# find_package( asmjit )
# no, we're not using external asmjit for now, we made too many modifications to our's. include( TargetArch )
# if the asmjit author uses our changes then we'll update this.
target_architecture(ZDOOM_TARGET_ARCH)
if( ${ZDOOM_TARGET_ARCH} MATCHES "x86_64" )
set( HAVE_VM_JIT ON )
endif()
# no, we're not using external asmjit for now, we made too many modifications to our's.
# if the asmjit author uses our changes then we'll update this.
#if( ${HAVE_VM_JIT} )
# find_package( asmjit )
#endif()
# GME # GME
#find_path( GME_INCLUDE_DIR gme/gme.h ) #find_path( GME_INCLUDE_DIR gme/gme.h )
@ -298,15 +310,17 @@ else()
set( ZLIB_LIBRARY z ) set( ZLIB_LIBRARY z )
endif() endif()
if( ASMJIT_FOUND AND NOT FORCE_INTERNAL_ASMJIT ) if( ${HAVE_VM_JIT} )
message( STATUS "Using system asmjit, includes found at ${ASMJIT_INCLUDE_DIR}" ) if( ASMJIT_FOUND AND NOT FORCE_INTERNAL_ASMJIT )
else() message( STATUS "Using system asmjit, includes found at ${ASMJIT_INCLUDE_DIR}" )
message( STATUS "Using internal asmjit" ) else()
set( SKIP_INSTALL_ALL TRUE ) # Avoid installing asmjit alongside zdoom message( STATUS "Using internal asmjit" )
add_subdirectory( asmjit ) set( SKIP_INSTALL_ALL TRUE ) # Avoid installing asmjit alongside zdoom
set( ASMJIT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/asmjit ) add_subdirectory( asmjit )
set( ASMJIT_LIBRARIES asmjit ) set( ASMJIT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/asmjit )
set( ASMJIT_LIBRARY asmjit ) set( ASMJIT_LIBRARIES asmjit )
set( ASMJIT_LIBRARY asmjit )
endif()
endif() endif()
if( JPEG_FOUND AND NOT FORCE_INTERNAL_JPEG ) if( JPEG_FOUND AND NOT FORCE_INTERNAL_JPEG )

View file

@ -13,7 +13,6 @@ include( CheckIncludeFile )
include( CheckIncludeFiles ) include( CheckIncludeFiles )
include( CheckLibraryExists ) include( CheckLibraryExists )
include( FindPkgConfig ) include( FindPkgConfig )
include( TargetArch )
if( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE ) if( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE )
option( NO_STRIP "Do not strip Release or MinSizeRel builds" ) option( NO_STRIP "Do not strip Release or MinSizeRel builds" )
@ -33,8 +32,6 @@ if( APPLE )
option( OSX_COCOA_BACKEND "Use native Cocoa backend instead of SDL" ON ) option( OSX_COCOA_BACKEND "Use native Cocoa backend instead of SDL" ON )
endif() endif()
target_architecture(ZDOOM_TARGET_ARCH)
if( ${ZDOOM_TARGET_ARCH} MATCHES "x86_64" ) if( ${ZDOOM_TARGET_ARCH} MATCHES "x86_64" )
set( X64 64 ) set( X64 64 )
endif() endif()
@ -460,8 +457,14 @@ add_custom_target( revision_check ALL
# Libraries ZDoom needs # Libraries ZDoom needs
message( STATUS "Fluid synth libs: ${FLUIDSYNTH_LIBRARIES}" ) message( STATUS "Fluid synth libs: ${FLUIDSYNTH_LIBRARIES}" )
set( ZDOOM_LIBS ${ZDOOM_LIBS} "${ZLIB_LIBRARIES}" "${JPEG_LIBRARIES}" "${BZIP2_LIBRARIES}" "${GME_LIBRARIES}" "${ASMJIT_LIBRARIES}" "${CMAKE_DL_LIBS}" ) set( ZDOOM_LIBS ${ZDOOM_LIBS} "${ZLIB_LIBRARIES}" "${JPEG_LIBRARIES}" "${BZIP2_LIBRARIES}" "${GME_LIBRARIES}" "${CMAKE_DL_LIBS}" )
include_directories( "${ZLIB_INCLUDE_DIR}" "${BZIP2_INCLUDE_DIR}" "${LZMA_INCLUDE_DIR}" "${JPEG_INCLUDE_DIR}" "${GME_INCLUDE_DIR}" "${ASMJIT_INCLUDE_DIR}" ) include_directories( "${ZLIB_INCLUDE_DIR}" "${BZIP2_INCLUDE_DIR}" "${LZMA_INCLUDE_DIR}" "${JPEG_INCLUDE_DIR}" "${GME_INCLUDE_DIR}" )
if( ${HAVE_VM_JIT} )
add_definitions( -DHAVE_VM_JIT )
include_directories( "${ASMJIT_INCLUDE_DIR}" )
set( ZDOOM_LIBS ${ZDOOM_LIBS} "${ASMJIT_LIBRARIES}")
endif()
if( SNDFILE_FOUND ) if( SNDFILE_FOUND )
set( ZDOOM_LIBS ${ZDOOM_LIBS} "${SNDFILE_LIBRARIES}" ) set( ZDOOM_LIBS ${ZDOOM_LIBS} "${SNDFILE_LIBRARIES}" )
@ -800,6 +803,17 @@ set( NOT_COMPILED_SOURCE_FILES
zcc-parse.h zcc-parse.h
) )
set( VM_JIT_SOURCES
scripting/vm/jit.cpp
scripting/vm/jit_runtime.cpp
scripting/vm/jit_call.cpp
scripting/vm/jit_flow.cpp
scripting/vm/jit_load.cpp
scripting/vm/jit_math.cpp
scripting/vm/jit_move.cpp
scripting/vm/jit_store.cpp
)
# This is disabled for now because I cannot find a way to give the .pch file a different name. # This is disabled for now because I cannot find a way to give the .pch file a different name.
# Visual C++ 2015 seems hell-bent on only allowing one .pch file with the same name as the executable. # Visual C++ 2015 seems hell-bent on only allowing one .pch file with the same name as the executable.
#enable_precompiled_headers( g_pch2.h FASTMATH_PCH_SOURCES ) #enable_precompiled_headers( g_pch2.h FASTMATH_PCH_SOURCES )
@ -1176,14 +1190,6 @@ set (PCH_SOURCES
scripting/decorate/thingdef_states.cpp scripting/decorate/thingdef_states.cpp
scripting/vm/vmexec.cpp scripting/vm/vmexec.cpp
scripting/vm/vmframe.cpp scripting/vm/vmframe.cpp
scripting/vm/jit.cpp
scripting/vm/jit_runtime.cpp
scripting/vm/jit_call.cpp
scripting/vm/jit_flow.cpp
scripting/vm/jit_load.cpp
scripting/vm/jit_math.cpp
scripting/vm/jit_move.cpp
scripting/vm/jit_store.cpp
scripting/zscript/ast.cpp scripting/zscript/ast.cpp
scripting/zscript/zcc_compile.cpp scripting/zscript/zcc_compile.cpp
scripting/zscript/zcc_parser.cpp scripting/zscript/zcc_parser.cpp
@ -1258,6 +1264,12 @@ set (PCH_SOURCES
events.cpp events.cpp
) )
if( ${HAVE_VM_JIT} )
set( PCH_SOURCES ${PCH_SOURCES} ${VM_JIT_SOURCES} )
else()
set( NOT_COMPILED_SOURCE_FILES ${NOT_COMPILED_SOURCE_FILES} ${VM_JIT_SOURCES} )
endif()
enable_precompiled_headers( g_pch.h PCH_SOURCES ) enable_precompiled_headers( g_pch.h PCH_SOURCES )
add_executable( zdoom WIN32 MACOSX_BUNDLE add_executable( zdoom WIN32 MACOSX_BUNDLE
@ -1265,7 +1277,6 @@ add_executable( zdoom WIN32 MACOSX_BUNDLE
${NOT_COMPILED_SOURCE_FILES} ${NOT_COMPILED_SOURCE_FILES}
__autostart.cpp __autostart.cpp
${SYSTEM_SOURCES} ${SYSTEM_SOURCES}
${X86_SOURCES}
${FASTMATH_SOURCES} ${FASTMATH_SOURCES}
${PCH_SOURCES} ${PCH_SOURCES}
x86.cpp x86.cpp

View file

@ -808,6 +808,7 @@ void SetDehParams(FState *state, int codepointer)
} }
fclose(dump); fclose(dump);
} }
#ifdef HAVE_VM_JIT
if (Args->CheckParm("-dumpjit")) if (Args->CheckParm("-dumpjit"))
{ {
FILE *dump = fopen("dumpjit.txt", "a"); FILE *dump = fopen("dumpjit.txt", "a");
@ -817,6 +818,7 @@ void SetDehParams(FState *state, int codepointer)
} }
fclose(dump); fclose(dump);
} }
#endif // HAVE_VM_JIT
} }
} }

View file

@ -922,6 +922,7 @@ void FFunctionBuildList::Build()
void FFunctionBuildList::DumpJit() void FFunctionBuildList::DumpJit()
{ {
#ifdef HAVE_VM_JIT
FILE *dump = fopen("dumpjit.txt", "w"); FILE *dump = fopen("dumpjit.txt", "w");
if (dump == nullptr) if (dump == nullptr)
return; return;
@ -932,6 +933,7 @@ void FFunctionBuildList::DumpJit()
} }
fclose(dump); fclose(dump);
#endif // HAVE_VM_JIT
} }

View file

@ -44,11 +44,7 @@
#include "c_cvars.h" #include "c_cvars.h"
#include "version.h" #include "version.h"
#if (defined(_M_X64 ) || defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(__amd64 ) || defined(__amd64__ )) #ifdef HAVE_VM_JIT
#define ARCH_X64
#endif
#ifdef ARCH_X64
CUSTOM_CVAR(Bool, vm_jit, true, CVAR_NOINITCALL) CUSTOM_CVAR(Bool, vm_jit, true, CVAR_NOINITCALL)
{ {
Printf("You must restart " GAMENAME " for this change to take effect.\n"); Printf("You must restart " GAMENAME " for this change to take effect.\n");
@ -56,6 +52,8 @@ CUSTOM_CVAR(Bool, vm_jit, true, CVAR_NOINITCALL)
} }
#else #else
CVAR(Bool, vm_jit, false, CVAR_NOINITCALL|CVAR_NOSET) CVAR(Bool, vm_jit, false, CVAR_NOINITCALL|CVAR_NOSET)
FString JitCaptureStackTrace(int framesToSkip, bool includeNativeFrames) { return FString(); }
void JitRelease() {}
#endif #endif
cycle_t VMCycles[10]; cycle_t VMCycles[10];
@ -282,7 +280,7 @@ static bool CanJit(VMScriptFunction *func)
int VMScriptFunction::FirstScriptCall(VMFunction *func, VMValue *params, int numparams, VMReturn *ret, int numret) int VMScriptFunction::FirstScriptCall(VMFunction *func, VMValue *params, int numparams, VMReturn *ret, int numret)
{ {
#ifdef ARCH_X64 #ifdef HAVE_VM_JIT
if (vm_jit && CanJit(static_cast<VMScriptFunction*>(func))) if (vm_jit && CanJit(static_cast<VMScriptFunction*>(func)))
{ {
func->ScriptCall = JitCompile(static_cast<VMScriptFunction*>(func)); func->ScriptCall = JitCompile(static_cast<VMScriptFunction*>(func));
@ -290,12 +288,10 @@ int VMScriptFunction::FirstScriptCall(VMFunction *func, VMValue *params, int num
func->ScriptCall = VMExec; func->ScriptCall = VMExec;
} }
else else
#endif // HAVE_VM_JIT
{ {
func->ScriptCall = VMExec; func->ScriptCall = VMExec;
} }
#else
func->ScriptCall = VMExec;
#endif
return func->ScriptCall(func, params, numparams, ret, numret); return func->ScriptCall(func, params, numparams, ret, numret);
} }