mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 13:57:57 -07:00
72c96c20d3
If the inputs are both float singles, and the top half is known to be identical to the bottom half, we can use packed arithmetic instead of scalar to skip the movddup. This is slower on a few rather old CPUs, plus the Atom+Silvermont, so detect Atom and disable it in that case. Also avoid PPC_FP on stores if we know that the output came from a float op.
90 lines
1.4 KiB
C++
90 lines
1.4 KiB
C++
// Copyright 2013 Dolphin Emulator Project
|
|
// Licensed under GPLv2
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
// Detect the CPU, so we'll know which optimizations to use
|
|
#pragma once
|
|
|
|
#include <string>
|
|
|
|
enum CPUVendor
|
|
{
|
|
VENDOR_INTEL = 0,
|
|
VENDOR_AMD = 1,
|
|
VENDOR_ARM = 2,
|
|
VENDOR_OTHER = 3,
|
|
};
|
|
|
|
struct CPUInfo
|
|
{
|
|
CPUVendor vendor;
|
|
|
|
char cpu_string[0x41];
|
|
char brand_string[0x21];
|
|
bool OS64bit;
|
|
bool CPU64bit;
|
|
bool Mode64bit;
|
|
|
|
bool HTT;
|
|
int num_cores;
|
|
int logical_cpu_count;
|
|
|
|
bool bSSE;
|
|
bool bSSE2;
|
|
bool bSSE3;
|
|
bool bSSSE3;
|
|
bool bPOPCNT;
|
|
bool bSSE4_1;
|
|
bool bSSE4_2;
|
|
bool bLZCNT;
|
|
bool bSSE4A;
|
|
bool bAVX;
|
|
bool bAVX2;
|
|
bool bBMI1;
|
|
bool bBMI2;
|
|
bool bFMA;
|
|
bool bAES;
|
|
// FXSAVE/FXRSTOR
|
|
bool bFXSR;
|
|
bool bMOVBE;
|
|
// This flag indicates that the hardware supports some mode
|
|
// in which denormal inputs _and_ outputs are automatically set to (signed) zero.
|
|
bool bFlushToZero;
|
|
bool bLAHFSAHF64;
|
|
bool bLongMode;
|
|
bool bAtom;
|
|
|
|
// ARM specific CPUInfo
|
|
bool bSwp;
|
|
bool bHalf;
|
|
bool bThumb;
|
|
bool bFastMult;
|
|
bool bVFP;
|
|
bool bEDSP;
|
|
bool bThumbEE;
|
|
bool bNEON;
|
|
bool bVFPv3;
|
|
bool bTLS;
|
|
bool bVFPv4;
|
|
bool bIDIVa;
|
|
bool bIDIVt;
|
|
bool bArmV7; // enable MOVT, MOVW etc
|
|
|
|
// ARMv8 specific
|
|
bool bFP;
|
|
bool bASIMD;
|
|
|
|
// Call Detect()
|
|
explicit CPUInfo();
|
|
|
|
// Turn the CPU info into a string we can show
|
|
std::string Summarize();
|
|
|
|
private:
|
|
// Detects the various CPU features
|
|
void Detect();
|
|
};
|
|
|
|
extern CPUInfo cpu_info;
|