From 63427abbf65d58ee4f2f9af7395bf16ff1f7d8c1 Mon Sep 17 00:00:00 2001 From: pineappleEA Date: Wed, 22 Jun 2022 03:30:11 +0200 Subject: [PATCH] early-access version 2796 --- CMakeModules/MinGWClangCross.cmake | 55 + README.md | 2 +- externals/dynarmic/externals/CMakeLists.txt | 5 +- .../dynarmic/externals/mcl/CMakeLists.txt | 2 +- .../mcl/include/mcl/bit/bit_field.hpp | 16 +- .../dynarmic/externals/mcl/src/CMakeLists.txt | 1 + .../dynarmic/externals/mcl/src/assert.cpp | 1 + .../externals/xbyak/.github/FUNDING.yml | 1 + .../xbyak/.github/workflows/main.yml | 2 + .../dynarmic/externals/xbyak/CMakeLists.txt | 21 +- externals/dynarmic/externals/xbyak/COPYRIGHT | 20 - .../externals/xbyak/cmake/config.cmake.in | 2 + .../xbyak/cmake/meson-config.cmake.in | 8 + .../dynarmic/externals/xbyak/doc/changelog.md | 182 +++ .../dynarmic/externals/xbyak/doc/install.md | 14 + .../dynarmic/externals/xbyak/doc/usage.md | 409 ++++++ .../dynarmic/externals/xbyak/gen/Makefile | 17 +- .../dynarmic/externals/xbyak/gen/avx_type.hpp | 54 +- .../externals/xbyak/gen/gen_avx512.cpp | 275 +++- .../dynarmic/externals/xbyak/gen/gen_code.cpp | 27 +- .../dynarmic/externals/xbyak/meson.build | 45 + externals/dynarmic/externals/xbyak/readme.md | 619 +-------- externals/dynarmic/externals/xbyak/readme.txt | 37 +- .../dynarmic/externals/xbyak/sample/Makefile | 6 +- .../dynarmic/externals/xbyak/sample/memfd.cpp | 39 + .../externals/xbyak/sample/test_util.cpp | 24 +- .../dynarmic/externals/xbyak/test/Makefile | 9 +- .../dynarmic/externals/xbyak/test/address.cpp | 6 +- .../dynarmic/externals/xbyak/test/jmp.cpp | 15 + .../externals/xbyak/test/make_512.cpp | 8 +- .../dynarmic/externals/xbyak/test/make_nm.cpp | 50 +- .../dynarmic/externals/xbyak/test/misc.cpp | 1133 ++++++++++++++++- .../dynarmic/externals/xbyak/test/sf_test.cpp | 4 +- .../dynarmic/externals/xbyak/xbyak/xbyak.h | 163 ++- .../externals/xbyak/xbyak/xbyak_mnemonic.h | 307 ++++- .../externals/xbyak/xbyak/xbyak_util.h | 314 +++-- .../dynarmic/src/dynarmic/CMakeLists.txt | 12 +- .../dynarmic/backend/x64/a32_interface.cpp | 3 +- .../dynarmic/backend/x64/a64_interface.cpp | 2 +- .../backend/x64/emit_x64_floating_point.cpp | 21 +- .../dynarmic/backend/x64/emit_x64_packed.cpp | 48 +- .../x64/emit_x64_vector_floating_point.cpp | 40 +- .../backend/x64/exception_handler_macos.cpp | 4 +- .../frontend/A32/translate/a32_translate.h | 6 + .../A32/translate/impl/a32_translate_impl.cpp | 9 + .../A32/translate/impl/a32_translate_impl.h | 1 + .../impl/asimd_load_store_structures.cpp | 10 +- .../impl/asimd_one_reg_modified_immediate.cpp | 5 +- .../A32/translate/impl/load_store.cpp | 100 +- .../A32/translate/impl/synchronization.cpp | 48 +- .../frontend/A32/translate/impl/thumb16.cpp | 46 +- .../A32/translate/impl/thumb32_load_byte.cpp | 6 +- .../translate/impl/thumb32_load_halfword.cpp | 6 +- .../impl/thumb32_load_store_dual.cpp | 30 +- .../impl/thumb32_load_store_multiple.cpp | 40 +- .../A32/translate/impl/thumb32_load_word.cpp | 30 +- .../frontend/A32/translate/impl/vfp.cpp | 16 +- .../frontend/A64/translate/a64_translate.h | 6 + .../frontend/A64/translate/impl/impl.cpp | 9 + .../frontend/A64/translate/impl/impl.h | 1 + .../translate/impl/load_store_exclusive.cpp | 4 +- .../impl/load_store_load_literal.cpp | 6 +- .../impl/load_store_multiple_structures.cpp | 2 +- .../impl/load_store_register_immediate.cpp | 4 +- .../impl/load_store_register_pair.cpp | 4 +- .../load_store_register_register_offset.cpp | 4 +- .../impl/load_store_register_unprivileged.cpp | 8 +- .../impl/load_store_single_structure.cpp | 2 +- .../src/dynarmic/interface/A32/config.h | 4 + .../src/dynarmic/interface/A64/config.h | 4 + externals/dynarmic/tests/CMakeLists.txt | 100 +- externals/dynarmic/tests/x64_cpu_info.cpp | 115 ++ src/common/page_table.h | 3 + src/core/arm/arm_interface.cpp | 41 +- src/core/arm/arm_interface.h | 13 +- src/core/arm/dynarmic/arm_dynarmic_32.cpp | 69 +- src/core/arm/dynarmic/arm_dynarmic_32.h | 6 + src/core/arm/dynarmic/arm_dynarmic_64.cpp | 79 +- src/core/arm/dynarmic/arm_dynarmic_64.h | 6 + src/core/debugger/debugger.cpp | 19 +- src/core/debugger/debugger.h | 8 +- src/core/debugger/debugger_interface.h | 8 +- src/core/debugger/gdbstub.cpp | 157 ++- src/core/debugger/gdbstub.h | 3 + src/core/hardware_properties.h | 3 + src/core/hle/kernel/k_process.cpp | 46 + src/core/hle/kernel/k_process.h | 30 + src/core/hle/kernel/k_scheduler.cpp | 1 + src/core/memory.cpp | 79 +- src/core/memory.h | 11 + 90 files changed, 4016 insertions(+), 1215 deletions(-) create mode 100755 CMakeModules/MinGWClangCross.cmake create mode 100755 externals/dynarmic/externals/xbyak/.github/FUNDING.yml create mode 100755 externals/dynarmic/externals/xbyak/cmake/meson-config.cmake.in create mode 100755 externals/dynarmic/externals/xbyak/doc/changelog.md create mode 100755 externals/dynarmic/externals/xbyak/doc/install.md create mode 100755 externals/dynarmic/externals/xbyak/doc/usage.md create mode 100755 externals/dynarmic/externals/xbyak/meson.build create mode 100755 externals/dynarmic/externals/xbyak/sample/memfd.cpp create mode 100755 externals/dynarmic/tests/x64_cpu_info.cpp diff --git a/CMakeModules/MinGWClangCross.cmake b/CMakeModules/MinGWClangCross.cmake new file mode 100755 index 000000000..ccf4dbf40 --- /dev/null +++ b/CMakeModules/MinGWClangCross.cmake @@ -0,0 +1,55 @@ +set(MINGW_PREFIX /usr/x86_64-w64-mingw32/) +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_PROCESSOR x86_64) + +set(CMAKE_FIND_ROOT_PATH ${MINGW_PREFIX}) +set(SDL2_PATH ${MINGW_PREFIX}) +set(MINGW_TOOL_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32-) + +# Specify the cross compiler +set(CMAKE_C_COMPILER ${MINGW_TOOL_PREFIX}clang) +set(CMAKE_CXX_COMPILER ${MINGW_TOOL_PREFIX}clang++) +set(CMAKE_RC_COMPILER ${MINGW_TOOL_PREFIX}windres) +set(CMAKE_C_COMPILER_AR ${MINGW_TOOL_PREFIX}ar) +set(CMAKE_CXX_COMPILER_AR ${MINGW_TOOL_PREFIX}ar) +set(CMAKE_C_COMPILER_RANLIB ${MINGW_TOOL_PREFIX}ranlib) +set(CMAKE_CXX_COMPILER_RANLIB ${MINGW_TOOL_PREFIX}ranlib) + +# Mingw tools +set(STRIP ${MINGW_TOOL_PREFIX}strip) +set(WINDRES ${MINGW_TOOL_PREFIX}windres) +set(ENV{PKG_CONFIG} ${MINGW_TOOL_PREFIX}pkg-config) + +# ccache wrapper +option(USE_CCACHE "Use ccache for compilation" OFF) +if(USE_CCACHE) + find_program(CCACHE ccache) + if(CCACHE) + message(STATUS "Using ccache found in PATH") + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE}) + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE}) + else(CCACHE) + message(WARNING "USE_CCACHE enabled, but no ccache found") + endif(CCACHE) +endif(USE_CCACHE) + +# Search for programs in the build host directories +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + + +# Echo modified cmake vars to screen for debugging purposes +if(NOT DEFINED ENV{MINGW_DEBUG_INFO}) + message("") + message("Custom cmake vars: (blank = system default)") + message("-----------------------------------------") + message("* CMAKE_C_COMPILER : ${CMAKE_C_COMPILER}") + message("* CMAKE_CXX_COMPILER : ${CMAKE_CXX_COMPILER}") + message("* CMAKE_RC_COMPILER : ${CMAKE_RC_COMPILER}") + message("* WINDRES : ${WINDRES}") + message("* ENV{PKG_CONFIG} : $ENV{PKG_CONFIG}") + message("* STRIP : ${STRIP}") + message("* USE_CCACHE : ${USE_CCACHE}") + message("") + # So that the debug info only appears once + set(ENV{MINGW_DEBUG_INFO} SHOWN) +endif() diff --git a/README.md b/README.md index 63af8727a..3ad097ece 100755 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ yuzu emulator early access ============= -This is the source code for early-access 2795. +This is the source code for early-access 2796. ## Legal Notice diff --git a/externals/dynarmic/externals/CMakeLists.txt b/externals/dynarmic/externals/CMakeLists.txt index 7adf018fa..57237ecb2 100755 --- a/externals/dynarmic/externals/CMakeLists.txt +++ b/externals/dynarmic/externals/CMakeLists.txt @@ -1,5 +1,8 @@ # Always build externals as static libraries, even when dynarmic is built as shared -set(BUILD_SHARED_LIBS OFF) +if (BUILD_SHARED_LIBS) + set(BUILD_SHARED_LIBS OFF) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) +endif() # For libraries that already come with a CMakeLists file, # simply add the directory to that file as a subdirectory diff --git a/externals/dynarmic/externals/mcl/CMakeLists.txt b/externals/dynarmic/externals/mcl/CMakeLists.txt index 5b0cfa296..876edbbba 100755 --- a/externals/dynarmic/externals/mcl/CMakeLists.txt +++ b/externals/dynarmic/externals/mcl/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.12 FATAL_ERROR) include(GNUInstallDirs) -project(mcl LANGUAGES CXX VERSION 0.1.5) +project(mcl LANGUAGES CXX VERSION 0.1.8) # Project options option(MCL_WARNINGS_AS_ERRORS "Warnings as errors" ON) diff --git a/externals/dynarmic/externals/mcl/include/mcl/bit/bit_field.hpp b/externals/dynarmic/externals/mcl/include/mcl/bit/bit_field.hpp index c09eda0a3..b967ed4b6 100755 --- a/externals/dynarmic/externals/mcl/include/mcl/bit/bit_field.hpp +++ b/externals/dynarmic/externals/mcl/include/mcl/bit/bit_field.hpp @@ -143,11 +143,9 @@ template constexpr T sign_extend(T value) { static_assert(bit_count != 0, "cannot sign-extend zero-sized value"); - constexpr T m = ones(); - if (get_bit(value)) { - return value | ~m; - } - return value; + using S = std::make_signed_t; + constexpr size_t shift_amount = bitsizeof - bit_count; + return static_cast(static_cast(value << shift_amount) >> shift_amount); } /// Sign-extends a value that has bit_count bits to the full bitwidth of type T. @@ -155,11 +153,9 @@ template constexpr T sign_extend(size_t bit_count, T value) { ASSERT_MSG(bit_count != 0, "cannot sign-extend zero-sized value"); - const T m = ones(bit_count); - if (get_bit(bit_count - 1, value)) { - return value | ~m; - } - return value; + using S = std::make_signed_t; + const size_t shift_amount = bitsizeof - bit_count; + return static_cast(static_cast(value << shift_amount) >> shift_amount); } /// Replicate an element across a value of type T. diff --git a/externals/dynarmic/externals/mcl/src/CMakeLists.txt b/externals/dynarmic/externals/mcl/src/CMakeLists.txt index a25392b34..92d2d8e00 100755 --- a/externals/dynarmic/externals/mcl/src/CMakeLists.txt +++ b/externals/dynarmic/externals/mcl/src/CMakeLists.txt @@ -63,6 +63,7 @@ target_include_directories(mcl ) target_compile_options(mcl PRIVATE ${MCL_CXX_FLAGS}) target_link_libraries(mcl PUBLIC $) +set_property(TARGET mcl PROPERTY POSITION_INDEPENDENT_CODE ON) add_library(merry::mcl ALIAS mcl) include(CreateTargetDirectoryGroups) diff --git a/externals/dynarmic/externals/mcl/src/assert.cpp b/externals/dynarmic/externals/mcl/src/assert.cpp index e30697e24..9c42260c8 100755 --- a/externals/dynarmic/externals/mcl/src/assert.cpp +++ b/externals/dynarmic/externals/mcl/src/assert.cpp @@ -14,6 +14,7 @@ namespace mcl::detail { [[noreturn]] void assert_terminate_impl(fmt::string_view msg, fmt::format_args args) { fmt::print(stderr, "assertion failed: "); fmt::vprint(stderr, msg, args); + std::fflush(stderr); std::terminate(); } diff --git a/externals/dynarmic/externals/xbyak/.github/FUNDING.yml b/externals/dynarmic/externals/xbyak/.github/FUNDING.yml new file mode 100755 index 000000000..f6612cfeb --- /dev/null +++ b/externals/dynarmic/externals/xbyak/.github/FUNDING.yml @@ -0,0 +1 @@ +github: herumi \ No newline at end of file diff --git a/externals/dynarmic/externals/xbyak/.github/workflows/main.yml b/externals/dynarmic/externals/xbyak/.github/workflows/main.yml index 3fad14220..a2a8c7f96 100755 --- a/externals/dynarmic/externals/xbyak/.github/workflows/main.yml +++ b/externals/dynarmic/externals/xbyak/.github/workflows/main.yml @@ -7,5 +7,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - run: sudo apt update - run: sudo apt install nasm yasm g++-multilib tcsh - run: make test + - run: make -C sample CXXFLAGS="-DXBYAK_NO_EXCEPTION" diff --git a/externals/dynarmic/externals/xbyak/CMakeLists.txt b/externals/dynarmic/externals/xbyak/CMakeLists.txt index f2c54f141..f3f67b4fd 100755 --- a/externals/dynarmic/externals/xbyak/CMakeLists.txt +++ b/externals/dynarmic/externals/xbyak/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.6...3.0.2) -project(xbyak CXX) +project(xbyak LANGUAGES CXX VERSION 6.60.1) file(GLOB headers xbyak/*.h) @@ -18,17 +18,26 @@ if (DEFINED CMAKE_VERSION AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.0.2) install( TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}-targets + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} ) - configure_file( + include(CMakePackageConfigHelpers) + configure_package_config_file( cmake/config.cmake.in - ${PROJECT_NAME}Config.cmake - @ONLY + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} + ) + write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" + COMPATIBILITY SameMajorVersion ) install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} + FILES + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" + DESTINATION + ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} ) install( diff --git a/externals/dynarmic/externals/xbyak/COPYRIGHT b/externals/dynarmic/externals/xbyak/COPYRIGHT index 66b6ea55d..9c0acf844 100755 --- a/externals/dynarmic/externals/xbyak/COPYRIGHT +++ b/externals/dynarmic/externals/xbyak/COPYRIGHT @@ -25,23 +25,3 @@ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ -ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満た -す場合に限り、再頒布および使用が許可されます。 - -ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項 -を含めること。 -バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作 -権表示、本条件一覧、および下記免責条項を含めること。 -書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進 -に、著作権者の名前またはコントリビューターの名前を使用してはならない。 -本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供さ -れており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性 -に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。 -著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを -問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為で -あるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、 -本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、使用の -喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)直接 -損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、 -一切責任を負わないものとします。 diff --git a/externals/dynarmic/externals/xbyak/cmake/config.cmake.in b/externals/dynarmic/externals/xbyak/cmake/config.cmake.in index f40ebfa88..6bd50042e 100755 --- a/externals/dynarmic/externals/xbyak/cmake/config.cmake.in +++ b/externals/dynarmic/externals/xbyak/cmake/config.cmake.in @@ -1 +1,3 @@ +@PACKAGE_INIT@ + include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake") diff --git a/externals/dynarmic/externals/xbyak/cmake/meson-config.cmake.in b/externals/dynarmic/externals/xbyak/cmake/meson-config.cmake.in new file mode 100755 index 000000000..3fdb3e7de --- /dev/null +++ b/externals/dynarmic/externals/xbyak/cmake/meson-config.cmake.in @@ -0,0 +1,8 @@ +@PACKAGE_INIT@ + +if(NOT TARGET @TARGET_NAME@) + add_library(@TARGET_NAME@ INTERFACE IMPORTED) + set_target_properties(@TARGET_NAME@ PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "@ABSOLUTE_INCLUDE_DIR@" + ) +endif() diff --git a/externals/dynarmic/externals/xbyak/doc/changelog.md b/externals/dynarmic/externals/xbyak/doc/changelog.md new file mode 100755 index 000000000..f4456f9f9 --- /dev/null +++ b/externals/dynarmic/externals/xbyak/doc/changelog.md @@ -0,0 +1,182 @@ +# History + +* 2022/Jun/15 ver 6.60.1 fix link error of Xbyak::util::Cpu on Visual Studio with /O0 option +* 2022/Jun/06 ver 6.60 change the version format to avoid it going backward +* 2022/Jun/01 ver 6.06 refactor Cpu::Type class and improve MmapAllocator when XBYAK_USE_MEMFD is defined. +* 2022/Mar/20 ver 6.052 add Cpu::operator==() +* 2022/Mar/13 ver 6.051 fix compile error when XBYAK_NO_EXCEPTION is defined +* 2022/Mar/12 ver 6.05 add movdiri, movdir64b, clwb, cldemote +* 2022/Apr/22 ver 6.041 consider Android and mingw +* 2022/Apr/05 ver 6.04 add tpause, umonitor, umwait +* 2022/Mar/08 ver 6.03 MmapAllocator supports memfd with user-defined strings. +* 2022/Jan/28 ver 6.02 strict check the range of 32-bit dispacement +* 2021/Dec/14 ver 6.01 support T_FAR jump/call and retf +* 2021/Sep/14 ver 6.00 fully support AVX512-FP16 +* 2021/Sep/09 ver 5.997 fix vrndscale* to support {sae} +* 2021/Sep/03 ver 5.996 fix v{add,sub,mul,div,max,min}{sd,ss} to support T_rd_sae. +* 2021/Aug/15 ver 5.995 add a label to /proc/self/maps if XBYAK_USE_MEMFD is defined on Linux +* 2021/Jun/17 ver 5.994 add alias of vcmpXX{ps,pd,ss,sd} with mask register +* 2021/Jun/06 ver 5.993 strict check of gather/scatter register combination +* 2021/May/09 ver 5.992 support endbr32 and endbr64 +* 2020/Nov/16 ver 5.991 disable constexpr for gcc-5 with -std=c++-14 +* 2020/Oct/19 ver 5.99 support VNNI instructions(Thanks to akharito) +* 2020/Oct/17 ver 5.98 support the form of [scale * reg] +* 2020/Sep/08 ver 5.97 replace uint32 with uint32_t etc. +* 2020/Aug/28 ver 5.95 some constructors of register classes support constexpr if C++14 or later +* 2020/Aug/04 ver 5.941 `CodeGenerator::reset()` calls `ClearError()`. +* 2020/Jul/28 ver 5.94 remove #include (only windows) +* 2020/Jul/21 ver 5.93 support exception-less mode +* 2020/Jun/30 ver 5.92 support Intel AMX instruction set (Thanks to nshustrov) +* 2020/Jun/22 ver 5.913 fix mov(r64, imm64) on 32-bit env with XBYAK64 +* 2020/Jun/19 ver 5.912 define MAP_JIT on macOS regardless of Xcode version (Thanks to rsdubtso) +* 2020/May/10 ver 5.911 XBYAK_USE_MMAP_ALLOCATOR is defined unless XBYAK_DONT_USE_MMAP_ALLOCATOR is defined. +* 2020/Apr/20 ver 5.91 accept mask register k0 (it means no mask) +* 2020/Apr/09 ver 5.90 kmov{b,d,w,q} throws exception for an unsupported register +* 2020/Feb/26 ver 5.891 fix typo of type +* 2020/Jan/03 ver 5.89 fix error of vfpclasspd +* 2019/Dec/20 ver 5.88 fix compile error on Windows +* 2019/Dec/19 ver 5.87 add setDefaultJmpNEAR(), which deals with `jmp` of an undefined label as T_NEAR if no type is specified. +* 2019/Dec/13 ver 5.86 [changed] revert to the behavior before v5.84 if -fno-operator-names is defined (and() is available) +* 2019/Dec/07 ver 5.85 append MAP_JIT flag to mmap for macOS mojave or later +* 2019/Nov/29 ver 5.84 [changed] XBYAK_NO_OP_NAMES is defined unless XBYAK_USE_OP_NAMES is defined +* 2019/Oct/12 ver 5.83 exit(1) was removed +* 2019/Sep/23 ver 5.82 support monitorx, mwaitx, clzero (thanks to @MagurosanTeam) +* 2019/Sep/14 ver 5.81 support some generic mnemonics. +* 2019/Aug/01 ver 5.802 fix detection of AVX512_BF16 (thanks to vpirogov) +* 2019/May/27 support vp2intersectd, vp2intersectq (not tested) +* 2019/May/26 ver 5.80 support vcvtne2ps2bf16, vcvtneps2bf16, vdpbf16ps +* 2019/Apr/27 ver 5.79 vcmppd/vcmpps supports ptr_b(thanks to jkopinsky) +* 2019/Apr/15 ver 5.78 rewrite Reg::changeBit() (thanks to MerryMage) +* 2019/Mar/06 ver 5.77 fix number of cores that share LLC cache by densamoilov +* 2019/Jan/17 ver 5.76 add Cpu::getNumCores() by shelleygoel +* 2018/Oct/31 ver 5.751 recover Xbyak::CastTo for compatibility +* 2018/Oct/29 ver 5.75 unlink LabelManager from Label when msg is destroyed +* 2018/Oct/21 ver 5.74 support RegRip +/- int. Xbyak::CastTo is removed +* 2018/Oct/15 util::AddressFrame uses push/pop instead of mov +* 2018/Sep/19 ver 5.73 fix evex encoding of vpslld, vpslldq, vpsllw, etc for (reg, mem, imm8) +* 2018/Sep/19 ver 5.72 fix the encoding of vinsertps for disp8N(Thanks to petercaday) +* 2018/Sep/04 ver 5.71 L() returns a new label instance +* 2018/Aug/27 ver 5.70 support setProtectMode() and DontUseProtect for read/exec setting +* 2018/Aug/24 ver 5.68 fix wrong VSIB encoding with vector index >= 16(thanks to petercaday) +* 2018/Aug/14 ver 5.67 remove mutable in Address ; fix setCacheHierarchy for cloud vm +* 2018/Jul/26 ver 5.661 support mingw64 +* 2018/Jul/24 ver 5.66 add CodeArray::PROTECT_RE to mode of protect() +* 2018/Jun/26 ver 5.65 fix push(qword [mem]) +* 2018/Mar/07 ver 5.64 fix zero division in Cpu() on some cpu +* 2018/Feb/14 ver 5.63 fix Cpu::setCacheHierarchy() and fix EvexModifierZero for clang<3.9(thanks to mgouicem) +* 2018/Feb/13 ver 5.62 Cpu::setCacheHierarchy() by mgouicem and rsdubtso +* 2018/Feb/07 ver 5.61 vmov* supports mem{k}{z}(I forgot it) +* 2018/Jan/24 ver 5.601 add xword, yword, etc. into Xbyak::util namespace +* 2018/Jan/05 ver 5.60 support AVX-512 for Ice lake(319433-030.pdf) +* 2017/Aug/22 ver 5.53 fix mpx encoding, add bnd() prefix +* 2017/Aug/18 ver 5.52 fix align (thanks to MerryMage) +* 2017/Aug/17 ver 5.51 add multi-byte nop and align() uses it(thanks to inolen) +* 2017/Aug/08 ver 5.50 add mpx(thanks to magurosan) +* 2017/Aug/08 ver 5.45 add sha(thanks to magurosan) +* 2017/Aug/08 ver 5.44 add prefetchw(thanks to rsdubtso) +* 2017/Jul/12 ver 5.432 reduce warnings of PVS studio +* 2017/Jul/09 ver 5.431 fix hasRex() (no affect) (thanks to drillsar) +* 2017/May/14 ver 5.43 fix CodeGenerator::resetSize() (thanks to gibbed) +* 2017/May/13 ver 5.42 add movs{b,w,d,q} +* 2017/Jan/26 ver 5.41 add prefetchwt1 and support for scale == 0(thanks to rsdubtso) +* 2016/Dec/14 ver 5.40 add Label::getAddress() method to get the pointer specified by the label +* 2016/Dec/09 ver 5.34 fix handling of negative offsets when encoding disp8N(thanks to rsdubtso) +* 2016/Dec/08 ver 5.33 fix encoding of vpbroadcast{b,w,d,q}, vpinsr{b,w}, vpextr{b,w} for disp8N +* 2016/Dec/01 ver 5.32 rename __xgetbv() to _xgetbv() to support clang for Visual Studio(thanks to freiro) +* 2016/Nov/27 ver 5.31 rename AVX512_4VNNI to AVX512_4VNNIW +* 2016/Nov/27 ver 5.30 add AVX512_4VNNI, AVX512_4FMAPS instructions(thanks to rsdubtso) +* 2016/Nov/26 ver 5.20 add detection of AVX512_4VNNI and AVX512_4FMAPS(thanks to rsdubtso) +* 2016/Nov/20 ver 5.11 lost vptest for ymm(thanks to gregory38) +* 2016/Nov/20 ver 5.10 add addressing [rip+&var] +* 2016/Sep/29 ver 5.03 fix detection ERR_INVALID_OPMASK_WITH_MEMORY(thanks to PVS-Studio) +* 2016/Aug/15 ver 5.02 xbyak does not include xbyak_bin2hex.h +* 2016/Aug/15 ver 5.011 fix detection of version of gcc 5.4 +* 2016/Aug/03 ver 5.01 disable omitted operand +* 2016/Jun/24 ver 5.00 support avx-512 instruction set +* 2016/Jun/13 avx-512 add mask instructions +* 2016/May/05 ver 4.91 add detection of AVX-512 to Xbyak::util::Cpu +* 2016/Mar/14 ver 4.901 comment to ready() function(thanks to skmp) +* 2016/Feb/04 ver 4.90 add jcc(const void *addr); +* 2016/Jan/30 ver 4.89 vpblendvb supports ymm reg(thanks to John Funnell) +* 2016/Jan/24 ver 4.88 lea, cmov supports 16-bit register(thanks to whyisthisfieldhere) +* 2015/Oct/05 ver 4.87 support segment selectors +* 2015/Aug/18 ver 4.86 fix [rip + label] addressing with immediate value(thanks to whyisthisfieldhere) +* 2015/Aug/10 ver 4.85 Address::operator==() is not correct(thanks to inolen) +* 2015/Jun/22 ver 4.84 call() support variadic template if available(thanks to randomstuff) +* 2015/Jun/16 ver 4.83 support movbe(thanks to benvanik) +* 2015/May/24 ver 4.82 support detection of F16C +* 2015/Apr/25 ver 4.81 fix the condition to throw exception for setSize(thanks to whyisthisfieldhere) +* 2015/Apr/22 ver 4.80 rip supports label(thanks to whyisthisfieldhere) +* 2015/Jar/28 ver 4.71 support adcx, adox, cmpxchg, rdseed, stac +* 2014/Oct/14 ver 4.70 support MmapAllocator +* 2014/Jun/13 ver 4.62 disable warning of VC2014 +* 2014/May/30 ver 4.61 support bt, bts, btr, btc +* 2014/May/28 ver 4.60 support vcvtph2ps, vcvtps2ph +* 2014/Apr/11 ver 4.52 add detection of rdrand +* 2014/Mar/25 ver 4.51 remove state information of unreferenced labels +* 2014/Mar/16 ver 4.50 support new Label +* 2014/Mar/05 ver 4.40 fix wrong detection of BMI/enhanced rep on VirtualBox +* 2013/Dec/03 ver 4.30 support Reg::cvt8(), cvt16(), cvt32(), cvt64() +* 2013/Oct/16 ver 4.21 label support std::string +* 2013/Jul/30 ver 4.20 [break backward compatibility] split Reg32e class into RegExp(base+index*scale+disp) and Reg32e(means Reg32 or Reg64) +* 2013/Jul/04 ver 4.10 [break backward compatibility] change the type of Xbyak::Error from enum to a class +* 2013/Jun/21 ver 4.02 add putL(LABEL) function to put the address of the label +* 2013/Jun/21 ver 4.01 vpsllw, vpslld, vpsllq, vpsraw, vpsrad, vpsrlw, vpsrld, vpsrlq support (ymm, ymm, xmm). support vpbroadcastb, vpbroadcastw, vpbroadcastd, vpbroadcastq(thanks to Gabest). +* 2013/May/30 ver 4.00 support AVX2, VEX-encoded GPR-instructions +* 2013/Mar/27 ver 3.80 support mov(reg, "label"); +* 2013/Mar/13 ver 3.76 add cqo(), jcxz(), jecxz(), jrcxz() +* 2013/Jan/15 ver 3.75 add setSize() to modify generated code +* 2013/Jan/12 ver 3.74 add CodeGenerator::reset() ; add Allocator::useProtect() +* 2013/Jan/06 ver 3.73 use unordered_map if possible +* 2012/Dec/04 ver 3.72 eax, ebx, ... are member variables of CodeGenerator(revert), Xbyak::util::eax, ... are static const. +* 2012/Nov/17 ver 3.71 and_(), or_(), xor_(), not_() are available if XBYAK_NO_OP_NAMES is not defined. +* 2012/Nov/17 change eax, ebx, ptr and so on in CodeGenerator as static member and alias of them are defined in Xbyak::util. +* 2012/Nov/09 ver 3.70 XBYAK_NO_OP_NAMES macro is added to use and_() instead of and() (thanks to Mattias) +* 2012/Nov/01 ver 3.62 add fwait/fnwait/finit/fninit +* 2012/Nov/01 ver 3.61 add fldcw/fstcw +* 2012/May/03 ver 3.60 change interface of Allocator +* 2012/Mar/23 ver 3.51 fix userPtr mode +* 2012/Mar/19 ver 3.50 support AutoGrow mode +* 2011/Nov/09 ver 3.05 fix bit property of rip addresing / support movsxd +* 2011/Aug/15 ver 3.04 fix dealing with imm8 such as add(dword [ebp-8], 0xda); (thanks to lolcat) +* 2011/Jun/16 ver 3.03 fix __GNUC_PREREQ macro for Mac gcc(thanks to t_teruya) +* 2011/Apr/28 ver 3.02 do not use xgetbv on Mac gcc +* 2011/May/24 ver 3.01 fix typo of OSXSAVE +* 2011/May/23 ver 3.00 add vcmpeqps and so on +* 2011/Feb/16 ver 2.994 beta add vmovq for 32-bit mode(I forgot it) +* 2011/Feb/16 ver 2.993 beta remove cvtReg to avoid thread unsafe +* 2011/Feb/10 ver 2.992 beta support one argument syntax for fadd like nasm +* 2011/Feb/07 ver 2.991 beta fix pextrw reg, xmm, imm(Thanks to Gabest) +* 2011/Feb/04 ver 2.99 beta support AVX +* 2010/Dec/08 ver 2.31 fix ptr [rip + 32bit offset], support rdtscp +* 2010/Oct/19 ver 2.30 support pclmulqdq, aesdec, aesdeclast, aesenc, aesenclast, aesimc, aeskeygenassist +* 2010/Jun/07 ver 2.29 fix call(