Cpu::Type is excented to 64-bit value

This commit is contained in:
MITSUNARI Shigeo 2015-01-28 13:16:44 +09:00
parent b7a684637d
commit 415ebd3c6b
4 changed files with 42 additions and 38 deletions

View file

@ -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

View file

@ -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のサポート

View file

@ -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);

View file

@ -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();
} }