externals: Update xbyak to 6.60.1

Merge commit '9af5f5908cee0e3d502a79cba26b4cf817d4ad3f'
This commit is contained in:
Merry 2022-06-16 06:53:34 +01:00
commit e99ba06cf3
9 changed files with 91 additions and 79 deletions

View file

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 2.6...3.0.2) 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) file(GLOB headers xbyak/*.h)

View file

@ -1,5 +1,7 @@
# History # 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/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/20 ver 6.052 add Cpu::operator==()
* 2022/Mar/13 ver 6.051 fix compile error when XBYAK_NO_EXCEPTION is defined * 2022/Mar/13 ver 6.051 fix compile error when XBYAK_NO_EXCEPTION is defined

View file

@ -252,7 +252,7 @@ void put()
char buf[16]; char buf[16];
unsigned int v = VERSION; unsigned int v = VERSION;
if (v & 0xF) { 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 { } else {
snprintf(buf, sizeof(buf), "%d.%02X", v >> 12, (v >> 4) & 0xFF); snprintf(buf, sizeof(buf), "%d.%02X", v >> 12, (v >> 4) & 0xFF);
} }

View file

@ -5,7 +5,7 @@
project( project(
'xbyak', 'xbyak',
'cpp', 'cpp',
version: '6.06', version: '6.60.1',
license: 'BSD-3-Clause', license: 'BSD-3-Clause',
default_options: 'b_ndebug=if-release' default_options: 'b_ndebug=if-release'
) )

View file

@ -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)* *A C++ JIT assembler for x86 (IA32), x64 (AMD64, x86-64)*

View file

@ -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/06/01 ver 6.06 Cpu::TypeクラスのリファクタリングとXBYAK_USE_MEMFDが定義されたときのMmapAllocatorの改善
2022/05/20 ver 6.052 Cpu::operator==()を正しく定義 2022/05/20 ver 6.052 Cpu::operator==()を正しく定義
2022/05/13 ver 6.051 XYBAK_NO_EXCEPTIONを定義したときのCpuクラスのコンパイルエラー修正 2022/05/13 ver 6.051 XYBAK_NO_EXCEPTIONを定義したときのCpuクラスのコンパイルエラー修正

View file

@ -144,7 +144,7 @@ namespace Xbyak {
enum { enum {
DEFAULT_MAX_CODE_SIZE = 4096, DEFAULT_MAX_CODE_SIZE = 4096,
VERSION = 0x6060 /* 0xABCD = A.BC(D) */ VERSION = 0x6601 /* 0xABCD = A.BC(.D) */
}; };
#ifndef MIE_INTEGER_TYPE_DEFINED #ifndef MIE_INTEGER_TYPE_DEFINED

View file

@ -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& op, uint32_t imm) { opRM_I(op, imm, 0x10, 2); }
void adc(const Operand& op1, const Operand& op2) { opRM_RM(op1, op2, 0x10); } 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); } void adcx(const Reg32e& reg, const Operand& op) { opGen(reg, op, 0xF6, 0x66, isREG32_REG32orMEM, NONE, 0x38); }

View file

@ -330,80 +330,88 @@ public:
#endif #endif
} }
static const local::TypeT<0> NONE; #define XBYAK_SPLIT_ID(id) ((0 <= id && id < 64) ? (1ull << (id % 64)) : 0), (id >= 64 ? (1ull << (id % 64)) : 0)
static const local::TypeT<1 << 0> tMMX; #if (__cplusplus >= 201103) || (defined(_MSC_VER) && (_MSC_VER >= 1700)) /* VS2012 */
static const local::TypeT<1 << 1> tMMX2; #define XBYAK_DEFINE_TYPE(id, NAME) static const constexpr local::TypeT<XBYAK_SPLIT_ID(id)> NAME{}
static const local::TypeT<1 << 2> tCMOV; #else
static const local::TypeT<1 << 3> tSSE; #define XBYAK_DEFINE_TYPE(id, NAME) static const local::TypeT<XBYAK_SPLIT_ID(id)> NAME
static const local::TypeT<1 << 4> tSSE2; #endif
static const local::TypeT<1 << 5> tSSE3; XBYAK_DEFINE_TYPE(0, tMMX);
static const local::TypeT<1 << 6> tSSSE3; XBYAK_DEFINE_TYPE(1, tMMX2);
static const local::TypeT<1 << 7> tSSE41; XBYAK_DEFINE_TYPE(2, tCMOV);
static const local::TypeT<1 << 8> tSSE42; XBYAK_DEFINE_TYPE(3, tSSE);
static const local::TypeT<1 << 9> tPOPCNT; XBYAK_DEFINE_TYPE(4, tSSE2);
static const local::TypeT<1 << 10> tAESNI; XBYAK_DEFINE_TYPE(5, tSSE3);
static const local::TypeT<1 << 11> tAVX512_FP16; XBYAK_DEFINE_TYPE(6, tSSSE3);
static const local::TypeT<1 << 12> tOSXSAVE; XBYAK_DEFINE_TYPE(7, tSSE41);
static const local::TypeT<1 << 13> tPCLMULQDQ; XBYAK_DEFINE_TYPE(8, tSSE42);
static const local::TypeT<1 << 14> tAVX; XBYAK_DEFINE_TYPE(9, tPOPCNT);
static const local::TypeT<1 << 15> tFMA; XBYAK_DEFINE_TYPE(10, tAESNI);
static const local::TypeT<1 << 16> t3DN; XBYAK_DEFINE_TYPE(11, tAVX512_FP16);
static const local::TypeT<1 << 17> tE3DN; XBYAK_DEFINE_TYPE(12, tOSXSAVE);
static const local::TypeT<1 << 18> tWAITPKG; XBYAK_DEFINE_TYPE(13, tPCLMULQDQ);
static const local::TypeT<1 << 19> tRDTSCP; XBYAK_DEFINE_TYPE(14, tAVX);
static const local::TypeT<1 << 20> tAVX2; XBYAK_DEFINE_TYPE(15, tFMA);
static const local::TypeT<1 << 21> tBMI1; // andn, bextr, blsi, blsmsk, blsr, tzcnt XBYAK_DEFINE_TYPE(16, t3DN);
static const local::TypeT<1 << 22> tBMI2; // bzhi, mulx, pdep, pext, rorx, sarx, shlx, shrx XBYAK_DEFINE_TYPE(17, tE3DN);
static const local::TypeT<1 << 23> tLZCNT; XBYAK_DEFINE_TYPE(18, tWAITPKG);
static const local::TypeT<1 << 24> tINTEL; XBYAK_DEFINE_TYPE(19, tRDTSCP);
static const local::TypeT<1 << 25> tAMD; XBYAK_DEFINE_TYPE(20, tAVX2);
static const local::TypeT<1 << 26> tENHANCED_REP; // enhanced rep movsb/stosb XBYAK_DEFINE_TYPE(21, tBMI1); // andn, bextr, blsi, blsmsk, blsr, tzcnt
static const local::TypeT<1 << 27> tRDRAND; XBYAK_DEFINE_TYPE(22, tBMI2); // bzhi, mulx, pdep, pext, rorx, sarx, shlx, shrx
static const local::TypeT<1 << 28> tADX; // adcx, adox XBYAK_DEFINE_TYPE(23, tLZCNT);
static const local::TypeT<1 << 29> tRDSEED; // rdseed XBYAK_DEFINE_TYPE(24, tINTEL);
static const local::TypeT<1 << 30> tSMAP; // stac XBYAK_DEFINE_TYPE(25, tAMD);
static const local::TypeT<uint64_t(1) << 31> tHLE; // xacquire, xrelease, xtest XBYAK_DEFINE_TYPE(26, tENHANCED_REP); // enhanced rep movsb/stosb
static const local::TypeT<uint64_t(1) << 32> tRTM; // xbegin, xend, xabort XBYAK_DEFINE_TYPE(27, tRDRAND);
static const local::TypeT<uint64_t(1) << 33> tF16C; // vcvtph2ps, vcvtps2ph XBYAK_DEFINE_TYPE(28, tADX); // adcx, adox
static const local::TypeT<uint64_t(1) << 34> tMOVBE; // mobve XBYAK_DEFINE_TYPE(29, tRDSEED); // rdseed
static const local::TypeT<uint64_t(1) << 35> tAVX512F; XBYAK_DEFINE_TYPE(30, tSMAP); // stac
static const local::TypeT<uint64_t(1) << 36> tAVX512DQ; XBYAK_DEFINE_TYPE(31, tHLE); // xacquire, xrelease, xtest
static const local::TypeT<uint64_t(1) << 37> tAVX512_IFMA; XBYAK_DEFINE_TYPE(32, tRTM); // xbegin, xend, xabort
static const local::TypeT<uint64_t(1) << 37> tAVX512IFMA;// = tAVX512_IFMA; XBYAK_DEFINE_TYPE(33, tF16C); // vcvtph2ps, vcvtps2ph
static const local::TypeT<uint64_t(1) << 38> tAVX512PF; XBYAK_DEFINE_TYPE(34, tMOVBE); // mobve
static const local::TypeT<uint64_t(1) << 39> tAVX512ER; XBYAK_DEFINE_TYPE(35, tAVX512F);
static const local::TypeT<uint64_t(1) << 40> tAVX512CD; XBYAK_DEFINE_TYPE(36, tAVX512DQ);
static const local::TypeT<uint64_t(1) << 41> tAVX512BW; XBYAK_DEFINE_TYPE(37, tAVX512_IFMA);
static const local::TypeT<uint64_t(1) << 42> tAVX512VL; XBYAK_DEFINE_TYPE(37, tAVX512IFMA);// = tAVX512_IFMA;
static const local::TypeT<uint64_t(1) << 43> tAVX512_VBMI; XBYAK_DEFINE_TYPE(38, tAVX512PF);
static const local::TypeT<uint64_t(1) << 43> tAVX512VBMI; // = tAVX512_VBMI; // changed by Intel's manual XBYAK_DEFINE_TYPE(39, tAVX512ER);
static const local::TypeT<uint64_t(1) << 44> tAVX512_4VNNIW; XBYAK_DEFINE_TYPE(40, tAVX512CD);
static const local::TypeT<uint64_t(1) << 45> tAVX512_4FMAPS; XBYAK_DEFINE_TYPE(41, tAVX512BW);
static const local::TypeT<uint64_t(1) << 46> tPREFETCHWT1; XBYAK_DEFINE_TYPE(42, tAVX512VL);
static const local::TypeT<uint64_t(1) << 47> tPREFETCHW; XBYAK_DEFINE_TYPE(43, tAVX512_VBMI);
static const local::TypeT<uint64_t(1) << 48> tSHA; XBYAK_DEFINE_TYPE(43, tAVX512VBMI); // = tAVX512_VBMI; // changed by Intel's manual
static const local::TypeT<uint64_t(1) << 49> tMPX; XBYAK_DEFINE_TYPE(44, tAVX512_4VNNIW);
static const local::TypeT<uint64_t(1) << 50> tAVX512_VBMI2; XBYAK_DEFINE_TYPE(45, tAVX512_4FMAPS);
static const local::TypeT<uint64_t(1) << 51> tGFNI; XBYAK_DEFINE_TYPE(46, tPREFETCHWT1);
static const local::TypeT<uint64_t(1) << 52> tVAES; XBYAK_DEFINE_TYPE(47, tPREFETCHW);
static const local::TypeT<uint64_t(1) << 53> tVPCLMULQDQ; XBYAK_DEFINE_TYPE(48, tSHA);
static const local::TypeT<uint64_t(1) << 54> tAVX512_VNNI; XBYAK_DEFINE_TYPE(49, tMPX);
static const local::TypeT<uint64_t(1) << 55> tAVX512_BITALG; XBYAK_DEFINE_TYPE(50, tAVX512_VBMI2);
static const local::TypeT<uint64_t(1) << 56> tAVX512_VPOPCNTDQ; XBYAK_DEFINE_TYPE(51, tGFNI);
static const local::TypeT<uint64_t(1) << 57> tAVX512_BF16; XBYAK_DEFINE_TYPE(52, tVAES);
static const local::TypeT<uint64_t(1) << 58> tAVX512_VP2INTERSECT; XBYAK_DEFINE_TYPE(53, tVPCLMULQDQ);
static const local::TypeT<uint64_t(1) << 59> tAMX_TILE; XBYAK_DEFINE_TYPE(54, tAVX512_VNNI);
static const local::TypeT<uint64_t(1) << 60> tAMX_INT8; XBYAK_DEFINE_TYPE(55, tAVX512_BITALG);
static const local::TypeT<uint64_t(1) << 61> tAMX_BF16; XBYAK_DEFINE_TYPE(56, tAVX512_VPOPCNTDQ);
static const local::TypeT<uint64_t(1) << 62> tAVX_VNNI; XBYAK_DEFINE_TYPE(57, tAVX512_BF16);
static const local::TypeT<uint64_t(1) << 63> tCLFLUSHOPT; XBYAK_DEFINE_TYPE(58, tAVX512_VP2INTERSECT);
static const local::TypeT<0, 1 << 0> tCLDEMOTE; XBYAK_DEFINE_TYPE(59, tAMX_TILE);
static const local::TypeT<0, 1 << 1> tMOVDIRI; XBYAK_DEFINE_TYPE(60, tAMX_INT8);
static const local::TypeT<0, 1 << 2> tMOVDIR64B; XBYAK_DEFINE_TYPE(61, tAMX_BF16);
static const local::TypeT<0, 1 << 3> tCLZERO; // AMD Zen 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() Cpu()
: type_(NONE) : type_()
, x2APIC_supported_(false) , x2APIC_supported_(false)
, numCores_() , numCores_()
, dataCacheSize_() , dataCacheSize_()