Skip to content

Latest commit

 

History

History
62 lines (45 loc) · 2.11 KB

README.md

File metadata and controls

62 lines (45 loc) · 2.11 KB

OPEMU for Linux for my local experiments

Before use read this

Use original repo, this repo just for my experiments, or take code from this repo and add it in main repo if you need it :)

Notice

- [warning this is experimentall fork, can be broken]
  • TODO
    • understend how all works :D
    • refractoring
    • more sepatare code
    • fix compiler warnings
    • add tests for all instructions
      • maybe use single test by instructtions on assembler
      • maybe use test code contains all test instructions (some other project contains hard SIMD optimisations)

Build

make

Load

sudo dmesg -w # open in another terminal window/tab for see logs if need
make load

In demesg see output OPEMU: module loaded == all okey

Run some SSE3/SSE4+ application and:

  • if application working op_emu success emulate instructions
  • if you see for example OPEMU: pminud xmm0, xmm1 and trap invalid opcode some instruction need implement in op_emu
  • if you see only trap invalid opcode some instruction unknown for op_emu

Unload

make unload

mirh previos readme text from original

  • This is an adaptation of the original Opcode Emulator from xnu-amd's repo for Linux.

  • For the kernel module, and a few other things (fpins, SSE4.1...), I took some code from Meowthra's AVX+ OPEMU, which looks pretty good, but does not fit my needs (SSSE3, SSE4.1, & SSE4.2).

  • POPCNT and CRC32 are all merit of Andy Vandijck instead.

What's working

  • SSE3, SSSE3, SSE4.2 (mostly). CRC32 doesn't pass tests though.
  • most SSE4.1 instructions are missing, I tried to add a few but it's not working well yet.