Cpu::Type is excented to 64-bit value
This commit is contained in:
parent
b7a684637d
commit
415ebd3c6b
4 changed files with 42 additions and 38 deletions
|
@ -277,7 +277,7 @@ The header files under xbyak/ are independent of cybozulib.
|
||||||
|
|
||||||
History
|
History
|
||||||
-------------
|
-------------
|
||||||
* 2015/Jar/28 ver 4.71 support adcx, adox, cmpxchg
|
* 2015/Jar/28 ver 4.71 support adcx, adox, cmpxchg, rdseed, stac
|
||||||
* 2014/Oct/14 ver 4.70 support MmapAllocator
|
* 2014/Oct/14 ver 4.70 support MmapAllocator
|
||||||
* 2014/Jun/13 ver 4.62 disable warning of VC2014
|
* 2014/Jun/13 ver 4.62 disable warning of VC2014
|
||||||
* 2014/May/30 ver 4.61 support bt, bts, btr, btc
|
* 2014/May/30 ver 4.61 support bt, bts, btr, btc
|
||||||
|
|
|
@ -296,7 +296,7 @@ cybozulibは単体テストでのみ利用されていて、xbyak/ディレク
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
◎履歴
|
◎履歴
|
||||||
|
|
||||||
2015/01/28 ver 4.71 adcx, adox, cmpxchgのサポート
|
2015/01/28 ver 4.71 adcx, adox, cmpxchg, rdseed, stacのサポート
|
||||||
2014/10/14 ver 4.70 MmapAllocatorのサポート
|
2014/10/14 ver 4.70 MmapAllocatorのサポート
|
||||||
2014/06/13 ver 4.62 VC2014で警告抑制
|
2014/06/13 ver 4.62 VC2014で警告抑制
|
||||||
2014/05/30 ver 4.61 bt, bts, btr, btcのサポート
|
2014/05/30 ver 4.61 bt, bts, btr, btcのサポート
|
||||||
|
|
|
@ -53,6 +53,7 @@ void putCPUinfo()
|
||||||
{ Cpu::tRDSEED, "rdseed" },
|
{ Cpu::tRDSEED, "rdseed" },
|
||||||
{ Cpu::tSMAP, "smap" },
|
{ Cpu::tSMAP, "smap" },
|
||||||
{ Cpu::tHLE, "hle" },
|
{ Cpu::tHLE, "hle" },
|
||||||
|
{ Cpu::tRTM, "rtm" },
|
||||||
};
|
};
|
||||||
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
||||||
if (cpu.has(tbl[i].type)) printf(" %s", tbl[i].str);
|
if (cpu.has(tbl[i].type)) printf(" %s", tbl[i].str);
|
||||||
|
|
|
@ -58,7 +58,7 @@ namespace Xbyak { namespace util {
|
||||||
CPU detection class
|
CPU detection class
|
||||||
*/
|
*/
|
||||||
class Cpu {
|
class Cpu {
|
||||||
unsigned int type_;
|
uint64 type_;
|
||||||
unsigned int get32bitAsBE(const char *x) const
|
unsigned int get32bitAsBE(const char *x) const
|
||||||
{
|
{
|
||||||
return x[0] | (x[1] << 8) | (x[2] << 16) | (x[3] << 24);
|
return x[0] | (x[1] << 8) | (x[2] << 16) | (x[3] << 24);
|
||||||
|
@ -124,43 +124,45 @@ public:
|
||||||
return ((uint64)edx << 32) | eax;
|
return ((uint64)edx << 32) | eax;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
enum Type {
|
typedef uint64 Type;
|
||||||
NONE = 0,
|
static const Type NONE = 0;
|
||||||
tMMX = 1 << 0,
|
static const Type tMMX = 1 << 0;
|
||||||
tMMX2 = 1 << 1,
|
static const Type tMMX2 = 1 << 1;
|
||||||
tCMOV = 1 << 2,
|
static const Type tCMOV = 1 << 2;
|
||||||
tSSE = 1 << 3,
|
static const Type tSSE = 1 << 3;
|
||||||
tSSE2 = 1 << 4,
|
static const Type tSSE2 = 1 << 4;
|
||||||
tSSE3 = 1 << 5,
|
static const Type tSSE3 = 1 << 5;
|
||||||
tSSSE3 = 1 << 6,
|
static const Type tSSSE3 = 1 << 6;
|
||||||
tSSE41 = 1 << 7,
|
static const Type tSSE41 = 1 << 7;
|
||||||
tSSE42 = 1 << 8,
|
static const Type tSSE42 = 1 << 8;
|
||||||
tPOPCNT = 1 << 9,
|
static const Type tPOPCNT = 1 << 9;
|
||||||
tAESNI = 1 << 10,
|
static const Type tAESNI = 1 << 10;
|
||||||
tSSE5 = 1 << 11,
|
static const Type tSSE5 = 1 << 11;
|
||||||
tOSXSAVE = 1 << 12,
|
static const Type tOSXSAVE = 1 << 12;
|
||||||
tPCLMULQDQ = 1 << 13,
|
static const Type tPCLMULQDQ = 1 << 13;
|
||||||
tAVX = 1 << 14,
|
static const Type tAVX = 1 << 14;
|
||||||
tFMA = 1 << 15,
|
static const Type tFMA = 1 << 15;
|
||||||
|
|
||||||
t3DN = 1 << 16,
|
static const Type t3DN = 1 << 16;
|
||||||
tE3DN = 1 << 17,
|
static const Type tE3DN = 1 << 17;
|
||||||
tSSE4a = 1 << 18,
|
static const Type tSSE4a = 1 << 18;
|
||||||
tRDTSCP = 1 << 19,
|
static const Type tRDTSCP = 1 << 19;
|
||||||
tAVX2 = 1 << 20,
|
static const Type tAVX2 = 1 << 20;
|
||||||
tBMI1 = 1 << 21, // andn, bextr, blsi, blsmsk, blsr, tzcnt
|
static const Type tBMI1 = 1 << 21; // andn, bextr, blsi, blsmsk, blsr, tzcnt
|
||||||
tBMI2 = 1 << 22, // bzhi, mulx, pdep, pext, rorx, sarx, shlx, shrx
|
static const Type tBMI2 = 1 << 22; // bzhi, mulx, pdep, pext, rorx, sarx, shlx, shrx
|
||||||
tLZCNT = 1 << 23,
|
static const Type tLZCNT = 1 << 23;
|
||||||
tENHANCED_REP = 1 << 26, // enhanced rep movsb/stosb
|
|
||||||
tRDRAND = 1 << 27,
|
static const Type tINTEL = 1 << 24;
|
||||||
tADX = 1 << 28, // adcx, adox
|
static const Type tAMD = 1 << 25;
|
||||||
tRDSEED = 1 << 29, // rdseed
|
|
||||||
tSMAP = 1 << 30, // stac
|
static const Type tENHANCED_REP = 1 << 26; // enhanced rep movsb/stosb
|
||||||
tHLE = 1 << 31, // xacquire, xrelease, xtest
|
static const Type tRDRAND = 1 << 27;
|
||||||
|
static const Type tADX = 1 << 28; // adcx, adox
|
||||||
|
static const Type tRDSEED = 1 << 29; // rdseed
|
||||||
|
static const Type tSMAP = 1 << 30; // stac
|
||||||
|
static const Type tHLE = uint64(1) << 31; // xacquire, xrelease, xtest
|
||||||
|
static const Type tRTM = uint64(1) << 32; // xbegin, xend, xabort
|
||||||
|
|
||||||
tINTEL = 1 << 24,
|
|
||||||
tAMD = 1 << 25
|
|
||||||
};
|
|
||||||
Cpu()
|
Cpu()
|
||||||
: type_(NONE)
|
: type_(NONE)
|
||||||
{
|
{
|
||||||
|
@ -218,6 +220,7 @@ public:
|
||||||
if (data[1] & (1U << 19)) type_ |= tADX;
|
if (data[1] & (1U << 19)) type_ |= tADX;
|
||||||
if (data[1] & (1U << 20)) type_ |= tSMAP;
|
if (data[1] & (1U << 20)) type_ |= tSMAP;
|
||||||
if (data[1] & (1U << 4)) type_ |= tHLE;
|
if (data[1] & (1U << 4)) type_ |= tHLE;
|
||||||
|
if (data[1] & (1U << 11)) type_ |= tRTM;
|
||||||
}
|
}
|
||||||
setFamily();
|
setFamily();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue