Files
FEX-Emu--FEX/FEXCore
Ryan Houdek b5e696b3cb CPUID: Implement support for XCR0 when AVX is enabled
This enables AVX, AVX2, FMA3 for the entire CPUID!

```bash
$ FEX_HOSTFEATURES=enableavx,enableavx2 ./Bin/FEXInterpreter /usr/bin/cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 23
model name      : Cortex-A78AE
stepping        : 0
microcode       : 0x0
cpu MHz         : 3000
cache size      : 512 KB
physical id     : 0
siblings        : 12
core id         : 0
cpu cores       : 12
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht tm syscall nx mmxext fxsr_opt rdtscp lm 3dnow 3dnowext constant_tsc art rep_good nopl xtoplogy nonstop_tsc cpuid tsc_known_freq pni pclmulqdq dtes64 monitor tm2 ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx hypervisor lahf_lm cmp_legacy extapic abm 3dnowprefetc
h tce fsgsbase bmi1 avx2 smep bmi2 erms invpcid adx clflushopt clwb sha_ni clzero arat vpclmulqdq rdpid fsrm
bugs            :
bogomips        : 8000.0
TLB size        : 2560 4K pages
clflush size    : 64
cache_alignment  : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:
```

Notice avx, avx2, and fma
2024-06-26 14:56:01 -07:00
..
2023-08-17 16:32:16 -04:00
2023-08-17 16:32:16 -04:00

FEXCore - Fast x86 Core emulation library

This is the core emulation library that is used for the FEX emulator project. This project aims to provide a fast and functional x86-64 emulation library that can meet and surpass other x86-64 emulation libraries.

Goals

  • Be as fast as possible, beating and exceeding current options for x86-64 emulation
    • 25% - 50% lower performance than native code would be desired target
    • Use an IR to efficiently translate x86-64 to our host architecture
    • Support a tiered recompiler to allow for fast runtime performance
    • Support offline compilation and offline tooling for inspection and performance analysis
    • Support threaded emulation. Including emulating x86-64's strong memory model on weak memory model architectures
  • Support a significant portion of the x86-64 instruction space.
    • Including MMX, SSE, SSE2, SSE3, SSSE3, and SSE4*
  • Support fallback routines for uncommonly used x86-64 instructions
    • Including x87 and 3DNow!
  • Only support userspace emulation.
    • All x86-64 instructions run as if they are under CPL-3(userland) security layer
  • Minimal Linux Syscall emulation for testing purposes
  • Portable library implementation in order to support easy integration in to applications

Target Host Architecture

The target host architecture for this library is AArch64. Specifically the ARMv8.1 version or newer. The CPU IR is designed with AArch64 in mind but should allow for other architectures as well. x86-64 host support is available for ease of development, but is not a priority.

Not desired

  • Kernel space emulation
  • CPL0-2 emulation
  • Real Mode, Protected Mode, Virtual-8086 Mode, System Management Mode
  • IRQs
  • SVM
  • "Cycle Accurate" emulation