|
@@ -54,9 +54,15 @@ Type
|
|
|
cpu_Pentium4,
|
|
|
cpu_PentiumM,
|
|
|
cpu_core_i,
|
|
|
+ cpu_bobcat,
|
|
|
cpu_core_avx,
|
|
|
+ cpu_jaguar,
|
|
|
+ cpu_piledriver,
|
|
|
+ cpu_excavator,
|
|
|
cpu_core_avx2,
|
|
|
- cpu_zen
|
|
|
+ cpu_zen,
|
|
|
+ cpu_zen2,
|
|
|
+ cpu_zen3
|
|
|
);
|
|
|
|
|
|
tfputype =
|
|
@@ -122,9 +128,15 @@ Const
|
|
|
'PENTIUM4',
|
|
|
'PENTIUMM',
|
|
|
'COREI',
|
|
|
+ 'BOBCAT',
|
|
|
'COREAVX',
|
|
|
+ 'JAGUAR',
|
|
|
+ 'PILEDRIVER',
|
|
|
+ 'EXCAVATOR',
|
|
|
'COREAVX2',
|
|
|
- 'ZEN'
|
|
|
+ 'ZEN',
|
|
|
+ 'ZEN2',
|
|
|
+ 'ZEN3'
|
|
|
);
|
|
|
|
|
|
fputypestr : array[tfputype] of string[7] = (
|
|
@@ -196,7 +208,8 @@ type
|
|
|
CPUX86_HINT_FAST_BT_MEM_REG, { BT instructions with memory sources and register indices and a register index are at least as fast as equivalent logical instructions }
|
|
|
CPUX86_HINT_FAST_BTX_MEM_IMM, { BTC/R/S instructions with memory sources and immediate indices are at least as fast as logical instructions }
|
|
|
CPUX86_HINT_FAST_BTX_MEM_REG, { BTC/R/S instructions with memory sources and register indices are at least as fast as equivalent logical instructions }
|
|
|
- CPUX86_HINT_FAST_XCHG { XCHG %reg,%reg executes in 2 cycles or less }
|
|
|
+ CPUX86_HINT_FAST_XCHG, { XCHG %reg,%reg executes in 2 cycles or fewer }
|
|
|
+ CPUX86_HINT_FAST_PDEP_PEXT { The BMI2 instructions PDEP and PEXT execute in a single cycle }
|
|
|
);
|
|
|
|
|
|
const
|
|
@@ -210,23 +223,29 @@ type
|
|
|
{ cpu_Pentium4 } [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2],
|
|
|
{ cpu_PentiumM } [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2],
|
|
|
{ cpu_core_i } [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2,CPUX86_HAS_POPCNT],
|
|
|
+ { cpu_bobcat } [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2,CPUX86_HAS_POPCNT,CPUX86_HAS_LZCNT],
|
|
|
{ cpu_core_avx } [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2,CPUX86_HAS_POPCNT],
|
|
|
+ { cpu_jaguar } [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2,CPUX86_HAS_POPCNT,CPUX86_HAS_BMI1,CPUX86_HAS_LZCNT,CPUX86_HAS_MOVBE],
|
|
|
+ { cpu_piledriver} [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2,CPUX86_HAS_POPCNT,CPUX86_HAS_BMI1,CPUX86_HAS_LZCNT,CPUX86_HAS_MOVBE],
|
|
|
+ { cpu_excavator } [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2,CPUX86_HAS_POPCNT,CPUX86_HAS_BMI1,CPUX86_HAS_BMI2,CPUX86_HAS_LZCNT,CPUX86_HAS_MOVBE],
|
|
|
{ cpu_core_avx2 } [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2,CPUX86_HAS_POPCNT,CPUX86_HAS_BMI1,CPUX86_HAS_BMI2,CPUX86_HAS_LZCNT,CPUX86_HAS_MOVBE],
|
|
|
- { cpu_zen } [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2,CPUX86_HAS_POPCNT,CPUX86_HAS_BMI1,CPUX86_HAS_BMI2,CPUX86_HAS_LZCNT,CPUX86_HAS_MOVBE]
|
|
|
+ { cpu_zen } [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2,CPUX86_HAS_POPCNT,CPUX86_HAS_BMI1,CPUX86_HAS_BMI2,CPUX86_HAS_LZCNT,CPUX86_HAS_MOVBE],
|
|
|
+ { cpu_zen2 } [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2,CPUX86_HAS_POPCNT,CPUX86_HAS_BMI1,CPUX86_HAS_BMI2,CPUX86_HAS_LZCNT,CPUX86_HAS_MOVBE],
|
|
|
+ { cpu_zen3 } [CPUX86_HAS_BTX,CPUX86_HAS_CMOV,CPUX86_HAS_SSEUNIT,CPUX86_HAS_SSE2,CPUX86_HAS_POPCNT,CPUX86_HAS_BMI1,CPUX86_HAS_BMI2,CPUX86_HAS_LZCNT,CPUX86_HAS_MOVBE]
|
|
|
);
|
|
|
|
|
|
fpu_capabilities : array[tfputype] of set of tfpuflags = (
|
|
|
- { fpu_none } [],
|
|
|
- { fpu_x87 } [],
|
|
|
- { fpu_sse } [],
|
|
|
- { fpu_sse2 } [],
|
|
|
- { fpu_sse3 } [],
|
|
|
- { fpu_ssse3 } [],
|
|
|
- { fpu_sse41 } [],
|
|
|
- { fpu_sse42 } [],
|
|
|
- { fpu_avx } [FPUX86_HAS_AVXUNIT],
|
|
|
- { fpu_avx2 } [FPUX86_HAS_AVXUNIT,FPUX86_HAS_FMA],
|
|
|
- { fpu_avx512 } [FPUX86_HAS_AVXUNIT,FPUX86_HAS_FMA,FPUX86_HAS_AVX512F,FPUX86_HAS_AVX512VL,FPUX86_HAS_AVX512DQ]
|
|
|
+ { fpu_none } [],
|
|
|
+ { fpu_x87 } [],
|
|
|
+ { fpu_sse } [],
|
|
|
+ { fpu_sse2 } [],
|
|
|
+ { fpu_sse3 } [],
|
|
|
+ { fpu_ssse3 } [],
|
|
|
+ { fpu_sse41 } [],
|
|
|
+ { fpu_sse42 } [],
|
|
|
+ { fpu_avx } [FPUX86_HAS_AVXUNIT],
|
|
|
+ { fpu_avx2 } [FPUX86_HAS_AVXUNIT,FPUX86_HAS_FMA],
|
|
|
+ { fpu_avx512 } [FPUX86_HAS_AVXUNIT,FPUX86_HAS_FMA,FPUX86_HAS_AVX512F,FPUX86_HAS_AVX512VL,FPUX86_HAS_AVX512DQ]
|
|
|
);
|
|
|
|
|
|
cpu_optimization_hints : array[TCPUType] of set of TCPUOptimizeFlags = (
|
|
@@ -239,9 +258,15 @@ type
|
|
|
{ cpu_Pentium4 } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM],
|
|
|
{ cpu_PentiumM } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_XCHG],
|
|
|
{ cpu_core_i } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_XCHG],
|
|
|
+ { cpu_bobcat } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_XCHG],
|
|
|
{ cpu_core_avx } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_XCHG],
|
|
|
- { cpu_core_avx2 } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_XCHG],
|
|
|
- { cpu_zen } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_BT_MEM_IMM,CPUX86_HINT_FAST_XCHG]
|
|
|
+ { cpu_jaguar } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_XCHG],
|
|
|
+ { cpu_piledriver} [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_XCHG],
|
|
|
+ { cpu_excavator } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_XCHG],
|
|
|
+ { cpu_core_avx2 } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_XCHG,CPUX86_HINT_FAST_PDEP_PEXT],
|
|
|
+ { cpu_zen } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_BT_MEM_IMM,CPUX86_HINT_FAST_XCHG],
|
|
|
+ { cpu_zen2 } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_BT_MEM_IMM,CPUX86_HINT_FAST_XCHG],
|
|
|
+ { cpu_zen3 } [CPUX86_HINT_FAST_BT_REG_IMM,CPUX86_HINT_FAST_BTX_REG_IMM,CPUX86_HINT_FAST_BT_MEM_IMM,CPUX86_HINT_FAST_XCHG,CPUX86_HINT_FAST_PDEP_PEXT]
|
|
|
);
|
|
|
|
|
|
Implementation
|