From 9af5f5908cee0e3d502a79cba26b4cf817d4ad3f Mon Sep 17 00:00:00 2001 From: Merry Date: Thu, 16 Jun 2022 06:53:34 +0100 Subject: [PATCH] Squashed 'externals/xbyak/' changes from 9357732aa..913099fc8 913099fc8 v6.60.1 d3910abbe update doc 7ac6b37fd Merge branch 'dev' 72c4b8ad5 refactoring e649372b6 modify definition of Type for Visual Studio with /O0 e9cec7582 Merge branch 'dev' 153b40ed1 update changelog f0c522af8 v6.60 553246c16 the version format has changed from A.BC(D) to A.BC(.D) git-subtree-dir: externals/xbyak git-subtree-split: 913099fc80e80f01fc0877c6016b9dd8cf1f0322 --- CMakeLists.txt | 2 +- doc/changelog.md | 2 + gen/gen_code.cpp | 2 +- meson.build | 2 +- readme.md | 2 +- readme.txt | 4 +- xbyak/xbyak.h | 2 +- xbyak/xbyak_mnemonic.h | 2 +- xbyak/xbyak_util.h | 152 ++++++++++++++++++++++------------------- 9 files changed, 91 insertions(+), 79 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b4f27e3..f3f67b4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 2.6...3.0.2) -project(xbyak LANGUAGES CXX VERSION 6.06) +project(xbyak LANGUAGES CXX VERSION 6.60.1) file(GLOB headers xbyak/*.h) diff --git a/doc/changelog.md b/doc/changelog.md index 3a921e9d..f4456f9f 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -1,5 +1,7 @@ # 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 diff --git a/gen/gen_code.cpp b/gen/gen_code.cpp index 4cfcc1ee..a8b169e5 100644 --- a/gen/gen_code.cpp +++ b/gen/gen_code.cpp @@ -252,7 +252,7 @@ void put() char buf[16]; unsigned int v = VERSION; if (v & 0xF) { - snprintf(buf, sizeof(buf), "%d.%02X%x", v >> 12, (v >> 4) & 0xFF, v & 0xF); + snprintf(buf, sizeof(buf), "%d.%02X.%x", v >> 12, (v >> 4) & 0xFF, v & 0xF); } else { snprintf(buf, sizeof(buf), "%d.%02X", v >> 12, (v >> 4) & 0xFF); } diff --git a/meson.build b/meson.build index 38d24306..7572e8d0 100644 --- a/meson.build +++ b/meson.build @@ -5,7 +5,7 @@ project( 'xbyak', 'cpp', - version: '6.06', + version: '6.60.1', license: 'BSD-3-Clause', default_options: 'b_ndebug=if-release' ) diff --git a/readme.md b/readme.md index 68bd8907..91e18bd4 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,5 @@ -# Xbyak 6.06 [![Badge Build]][Build Status] +# Xbyak 6.60.1 [![Badge Build]][Build Status] *A C++ JIT assembler for x86 (IA32), x64 (AMD64, x86-64)* diff --git a/readme.txt b/readme.txt index 27f4483a..6381ef10 100644 --- a/readme.txt +++ b/readme.txt @@ -1,5 +1,5 @@ - C++用x86(IA-32), x64(AMD64, x86-64) JITアセンブラ Xbyak 6.06 + C++用x86(IA-32), x64(AMD64, x86-64) JITアセンブラ Xbyak 6.60.1 ----------------------------------------------------------------------------- ◎概要 @@ -400,6 +400,8 @@ sample/{echo,hello}.bfは http://www.kmonos.net/alang/etc/brainfuck.php から ----------------------------------------------------------------------------- ◎履歴 +2022/06/15 ver 6.60.1 Visual Studio /O0でXbyak::util::Cpuがリンクエラーになるのに対応 +2022/06/06 ver 6.60 バージョンのつけ方を数値が戻らないように変更 2022/06/01 ver 6.06 Cpu::TypeクラスのリファクタリングとXBYAK_USE_MEMFDが定義されたときのMmapAllocatorの改善 2022/05/20 ver 6.052 Cpu::operator==()を正しく定義 2022/05/13 ver 6.051 XYBAK_NO_EXCEPTIONを定義したときのCpuクラスのコンパイルエラー修正 diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h index f744f291..8fa37c05 100644 --- a/xbyak/xbyak.h +++ b/xbyak/xbyak.h @@ -144,7 +144,7 @@ namespace Xbyak { enum { DEFAULT_MAX_CODE_SIZE = 4096, - VERSION = 0x6060 /* 0xABCD = A.BC(D) */ + VERSION = 0x6601 /* 0xABCD = A.BC(.D) */ }; #ifndef MIE_INTEGER_TYPE_DEFINED diff --git a/xbyak/xbyak_mnemonic.h b/xbyak/xbyak_mnemonic.h index 57bc44cd..8fa6f626 100644 --- a/xbyak/xbyak_mnemonic.h +++ b/xbyak/xbyak_mnemonic.h @@ -1,4 +1,4 @@ -const char *getVersionString() const { return "6.06"; } +const char *getVersionString() const { return "6.60.1"; } void adc(const Operand& op, uint32_t imm) { opRM_I(op, imm, 0x10, 2); } void adc(const Operand& op1, const Operand& op2) { opRM_RM(op1, op2, 0x10); } void adcx(const Reg32e& reg, const Operand& op) { opGen(reg, op, 0xF6, 0x66, isREG32_REG32orMEM, NONE, 0x38); } diff --git a/xbyak/xbyak_util.h b/xbyak/xbyak_util.h index 2ee79adf..4b94d376 100644 --- a/xbyak/xbyak_util.h +++ b/xbyak/xbyak_util.h @@ -330,80 +330,88 @@ public: #endif } - static const local::TypeT<0> NONE; - static const local::TypeT<1 << 0> tMMX; - static const local::TypeT<1 << 1> tMMX2; - static const local::TypeT<1 << 2> tCMOV; - static const local::TypeT<1 << 3> tSSE; - static const local::TypeT<1 << 4> tSSE2; - static const local::TypeT<1 << 5> tSSE3; - static const local::TypeT<1 << 6> tSSSE3; - static const local::TypeT<1 << 7> tSSE41; - static const local::TypeT<1 << 8> tSSE42; - static const local::TypeT<1 << 9> tPOPCNT; - static const local::TypeT<1 << 10> tAESNI; - static const local::TypeT<1 << 11> tAVX512_FP16; - static const local::TypeT<1 << 12> tOSXSAVE; - static const local::TypeT<1 << 13> tPCLMULQDQ; - static const local::TypeT<1 << 14> tAVX; - static const local::TypeT<1 << 15> tFMA; - static const local::TypeT<1 << 16> t3DN; - static const local::TypeT<1 << 17> tE3DN; - static const local::TypeT<1 << 18> tWAITPKG; - static const local::TypeT<1 << 19> tRDTSCP; - static const local::TypeT<1 << 20> tAVX2; - static const local::TypeT<1 << 21> tBMI1; // andn, bextr, blsi, blsmsk, blsr, tzcnt - static const local::TypeT<1 << 22> tBMI2; // bzhi, mulx, pdep, pext, rorx, sarx, shlx, shrx - static const local::TypeT<1 << 23> tLZCNT; - static const local::TypeT<1 << 24> tINTEL; - static const local::TypeT<1 << 25> tAMD; - static const local::TypeT<1 << 26> tENHANCED_REP; // enhanced rep movsb/stosb - static const local::TypeT<1 << 27> tRDRAND; - static const local::TypeT<1 << 28> tADX; // adcx, adox - static const local::TypeT<1 << 29> tRDSEED; // rdseed - static const local::TypeT<1 << 30> tSMAP; // stac - static const local::TypeT tHLE; // xacquire, xrelease, xtest - static const local::TypeT tRTM; // xbegin, xend, xabort - static const local::TypeT tF16C; // vcvtph2ps, vcvtps2ph - static const local::TypeT tMOVBE; // mobve - static const local::TypeT tAVX512F; - static const local::TypeT tAVX512DQ; - static const local::TypeT tAVX512_IFMA; - static const local::TypeT tAVX512IFMA;// = tAVX512_IFMA; - static const local::TypeT tAVX512PF; - static const local::TypeT tAVX512ER; - static const local::TypeT tAVX512CD; - static const local::TypeT tAVX512BW; - static const local::TypeT tAVX512VL; - static const local::TypeT tAVX512_VBMI; - static const local::TypeT tAVX512VBMI; // = tAVX512_VBMI; // changed by Intel's manual - static const local::TypeT tAVX512_4VNNIW; - static const local::TypeT tAVX512_4FMAPS; - static const local::TypeT tPREFETCHWT1; - static const local::TypeT tPREFETCHW; - static const local::TypeT tSHA; - static const local::TypeT tMPX; - static const local::TypeT tAVX512_VBMI2; - static const local::TypeT tGFNI; - static const local::TypeT tVAES; - static const local::TypeT tVPCLMULQDQ; - static const local::TypeT tAVX512_VNNI; - static const local::TypeT tAVX512_BITALG; - static const local::TypeT tAVX512_VPOPCNTDQ; - static const local::TypeT tAVX512_BF16; - static const local::TypeT tAVX512_VP2INTERSECT; - static const local::TypeT tAMX_TILE; - static const local::TypeT tAMX_INT8; - static const local::TypeT tAMX_BF16; - static const local::TypeT tAVX_VNNI; - static const local::TypeT tCLFLUSHOPT; - static const local::TypeT<0, 1 << 0> tCLDEMOTE; - static const local::TypeT<0, 1 << 1> tMOVDIRI; - static const local::TypeT<0, 1 << 2> tMOVDIR64B; - static const local::TypeT<0, 1 << 3> tCLZERO; // AMD Zen +#define XBYAK_SPLIT_ID(id) ((0 <= id && id < 64) ? (1ull << (id % 64)) : 0), (id >= 64 ? (1ull << (id % 64)) : 0) +#if (__cplusplus >= 201103) || (defined(_MSC_VER) && (_MSC_VER >= 1700)) /* VS2012 */ + #define XBYAK_DEFINE_TYPE(id, NAME) static const constexpr local::TypeT NAME{} +#else + #define XBYAK_DEFINE_TYPE(id, NAME) static const local::TypeT NAME +#endif + XBYAK_DEFINE_TYPE(0, tMMX); + XBYAK_DEFINE_TYPE(1, tMMX2); + XBYAK_DEFINE_TYPE(2, tCMOV); + XBYAK_DEFINE_TYPE(3, tSSE); + XBYAK_DEFINE_TYPE(4, tSSE2); + XBYAK_DEFINE_TYPE(5, tSSE3); + XBYAK_DEFINE_TYPE(6, tSSSE3); + XBYAK_DEFINE_TYPE(7, tSSE41); + XBYAK_DEFINE_TYPE(8, tSSE42); + XBYAK_DEFINE_TYPE(9, tPOPCNT); + XBYAK_DEFINE_TYPE(10, tAESNI); + XBYAK_DEFINE_TYPE(11, tAVX512_FP16); + XBYAK_DEFINE_TYPE(12, tOSXSAVE); + XBYAK_DEFINE_TYPE(13, tPCLMULQDQ); + XBYAK_DEFINE_TYPE(14, tAVX); + XBYAK_DEFINE_TYPE(15, tFMA); + XBYAK_DEFINE_TYPE(16, t3DN); + XBYAK_DEFINE_TYPE(17, tE3DN); + XBYAK_DEFINE_TYPE(18, tWAITPKG); + XBYAK_DEFINE_TYPE(19, tRDTSCP); + XBYAK_DEFINE_TYPE(20, tAVX2); + XBYAK_DEFINE_TYPE(21, tBMI1); // andn, bextr, blsi, blsmsk, blsr, tzcnt + XBYAK_DEFINE_TYPE(22, tBMI2); // bzhi, mulx, pdep, pext, rorx, sarx, shlx, shrx + XBYAK_DEFINE_TYPE(23, tLZCNT); + XBYAK_DEFINE_TYPE(24, tINTEL); + XBYAK_DEFINE_TYPE(25, tAMD); + XBYAK_DEFINE_TYPE(26, tENHANCED_REP); // enhanced rep movsb/stosb + XBYAK_DEFINE_TYPE(27, tRDRAND); + XBYAK_DEFINE_TYPE(28, tADX); // adcx, adox + XBYAK_DEFINE_TYPE(29, tRDSEED); // rdseed + XBYAK_DEFINE_TYPE(30, tSMAP); // stac + XBYAK_DEFINE_TYPE(31, tHLE); // xacquire, xrelease, xtest + XBYAK_DEFINE_TYPE(32, tRTM); // xbegin, xend, xabort + XBYAK_DEFINE_TYPE(33, tF16C); // vcvtph2ps, vcvtps2ph + XBYAK_DEFINE_TYPE(34, tMOVBE); // mobve + XBYAK_DEFINE_TYPE(35, tAVX512F); + XBYAK_DEFINE_TYPE(36, tAVX512DQ); + XBYAK_DEFINE_TYPE(37, tAVX512_IFMA); + XBYAK_DEFINE_TYPE(37, tAVX512IFMA);// = tAVX512_IFMA; + XBYAK_DEFINE_TYPE(38, tAVX512PF); + XBYAK_DEFINE_TYPE(39, tAVX512ER); + XBYAK_DEFINE_TYPE(40, tAVX512CD); + XBYAK_DEFINE_TYPE(41, tAVX512BW); + XBYAK_DEFINE_TYPE(42, tAVX512VL); + XBYAK_DEFINE_TYPE(43, tAVX512_VBMI); + XBYAK_DEFINE_TYPE(43, tAVX512VBMI); // = tAVX512_VBMI; // changed by Intel's manual + XBYAK_DEFINE_TYPE(44, tAVX512_4VNNIW); + XBYAK_DEFINE_TYPE(45, tAVX512_4FMAPS); + XBYAK_DEFINE_TYPE(46, tPREFETCHWT1); + XBYAK_DEFINE_TYPE(47, tPREFETCHW); + XBYAK_DEFINE_TYPE(48, tSHA); + XBYAK_DEFINE_TYPE(49, tMPX); + XBYAK_DEFINE_TYPE(50, tAVX512_VBMI2); + XBYAK_DEFINE_TYPE(51, tGFNI); + XBYAK_DEFINE_TYPE(52, tVAES); + XBYAK_DEFINE_TYPE(53, tVPCLMULQDQ); + XBYAK_DEFINE_TYPE(54, tAVX512_VNNI); + XBYAK_DEFINE_TYPE(55, tAVX512_BITALG); + XBYAK_DEFINE_TYPE(56, tAVX512_VPOPCNTDQ); + XBYAK_DEFINE_TYPE(57, tAVX512_BF16); + XBYAK_DEFINE_TYPE(58, tAVX512_VP2INTERSECT); + XBYAK_DEFINE_TYPE(59, tAMX_TILE); + XBYAK_DEFINE_TYPE(60, tAMX_INT8); + XBYAK_DEFINE_TYPE(61, tAMX_BF16); + XBYAK_DEFINE_TYPE(62, tAVX_VNNI); + XBYAK_DEFINE_TYPE(63, tCLFLUSHOPT); + XBYAK_DEFINE_TYPE(64, tCLDEMOTE); + XBYAK_DEFINE_TYPE(65, tMOVDIRI); + XBYAK_DEFINE_TYPE(66, tMOVDIR64B); + XBYAK_DEFINE_TYPE(67, tCLZERO); // AMD Zen + +#undef XBYAK_SPLIT_ID +#undef XBYAK_DEFINE_TYPE Cpu() - : type_(NONE) + : type_() , x2APIC_supported_(false) , numCores_() , dataCacheSize_()