retdec/deps/eigen/README.md

9 lines
517 B
Markdown
Raw Normal View History

Extension of bin2llvmir with optimization of X87 FPU stack. (#715) * capstone2llvmir/x86: Add support of x87 FISTPP instruction and unit tests of new supported instruction. * capstone2llvmir/x86: Add support of x87 FCMOVEcc instructions and unit test of new supported instructions. * capstone2llvmir/x86: Add support of x87 FPREM instructions and unit test of new supported instructions. * capstone2llvmir/x86: Add tests for x87 FPREM instructions. * capstone2llvmir/x86: Add support of x87 F2XM1, FYL2X, FYL2xP1 instructions and unit test of new supported instructions. * capstone2llvmir/x86: Add support of x87 FFREE instructions and unit test of new supported instructions. * capstone2llvmir/x86: Add support of x87 FNSTCW instructions and unit test of new supported instructions. * bin2llvmir/optimizations/x87_fpu: Add test for x87 fpu analysis and fix register indexing bug. * bin2llvmir/optimizations/x87_fpu: Fix test for x87 fpu analysis. * capstone2llvmir/x86.cpp: remove extra new lines * capstone2llvmir/x86_impl.h: remove extra newline & indent * capstone2llvmir/x86: Fix indention of new tests + comments. * bin2llvmir/optimizations/x87_fpu: Create tests for different calling conventions and different architectures of x86. Tests for architectures x86-16, x86-32, x86-64. Tests for calling conventions cdecl, pascal, fastcall, stdcall, thiscall. * capstone2llvmir/x86: Unit tests and translation of all FPU capstone instruction to llvmir. FBLD, FBSTP, FNCLEX, FLDCW, FLDENV, FRSTOR, FNSAVE, FNSTENV, FNSTCW, FXSAVE, FXSAVE64, FXRSTOR, FXRSTOR64, FPTAN, FPATAN, FSCALE, FXTRACT, FXAM. * capstone2llvmir/x86: Fix bug in FXRSTOR unit etst. * config: Include "watcom" calling convention. * bin2llvmir/optimizations/x87_fpu: Tests for x87 FPU analyze. Tests for calling conventions: - x86-16: cdecl, pascal, fastcall, watcom, unknown - x86-32: cdecl, stdcall, pascal, fastcall, thiscall, watcom, unknown - x86-64 * bin2llvmir/optimizations/x87_fpu: Analyze of FPU stack for functions with floating point return value (definitions and calls). Analyzed calling conventions: - x86-16: cdecl, pascal, fastcall, watcom, unknown - x86-32: cdecl, stdcall, pascal, fastcall, thiscall, watcom, unknown - x86-64 * bin2llvmir/optimizations/x87_fpu: Tests for FPU register stack usage with branches and loops. * bin2llvmir/optimizations/x87_fpu: Analyze of FPU stack for nested blocks (branches, loops). * bin2llvmir/optimizations/x87_fpu: Fix nested blocks analyze tests. * bin2llvmir/optimizations/x87_fpu: Implement linear equation solver of basic block TOP tracking. Include OpenCV lib. * bin2llvmir/optimizations/x87_fpu: FPU TOP optimization implemented for simple and nested BasicBlocks, floating-point return values of functions. TODO: Import OpenCV library to Cmake build. Implement special calling conventions for 32bit architecture. * capstone2llvmir/x86: Add support of x87 FPREM instructions and unit test of new supported instructions. * capstone2llvmir/x86: Add support of x87 FNSTCW instructions and unit test of new supported instructions. * capstone2llvmir/x86_impl.h: remove extra newline & indent * capstone2llvmir/x86: Fix bug in FXRSTOR unit etst. * deps/eigen: Include third party library Eigen to cmake of project. Library is used to math computation with matricies for X86 FPU analyze optimization. * bin2llvmir/optimization/x87_fpu: Rewrite optimization with new Eigen library. Use matrix implementation of SVD from eigen library. * tests/bin2llvmir: Refactor CMakeLists.txt * bin2llvmir/optimization/x87_fpu: Fix bux for X86-16bit calling convention. Optimization now validate value of FPU top at the end of every terminating block and detects unsupported states. * bin2llvmir/optimizations/x87_fpu: Fix and improve FPU stack optimization testss * bin2llvmir/optimizations/x87_fpu: Fix major bug of overdetermined linear equation solver and minor bugs of final llvm ir generating. * capstone2llvmir/x86: Add support of x87 FPREM instructions and unit test of new supported instructions. * capstone2llvmir/x86: Add support of x87 FNSTCW instructions and unit test of new supported instructions. * bin2llvmir/optimizations/x87_fpu: Add test for x87 fpu analysis and fix register indexing bug. * bin2llvmir/optimizations/x87_fpu: Fix test for x87 fpu analysis. * capstone2llvmir/x86_impl.h: remove extra newline & indent * bin2llvmir/optimizations/x87_fpu: Create tests for different calling conventions and different architectures of x86. Tests for architectures x86-16, x86-32, x86-64. Tests for calling conventions cdecl, pascal, fastcall, stdcall, thiscall. * capstone2llvmir/x86: Fix bug in FXRSTOR unit etst. * capstone2llvmir/x86: Add support of x87 FPREM instructions and unit test of new supported instructions. * capstone2llvmir/x86_impl.h: remove extra newline & indent * capstone2llvmir/x86: Fix bug in FXRSTOR unit etst. * bin2llvmir/optimizations/x87_fpu: Tests for x87 FPU analyze. Tests for calling conventions: - x86-16: cdecl, pascal, fastcall, watcom, unknown - x86-32: cdecl, stdcall, pascal, fastcall, thiscall, watcom, unknown - x86-64 * bin2llvmir/optimizations/x87_fpu: Analyze of FPU stack for functions with floating point return value (definitions and calls). Analyzed calling conventions: - x86-16: cdecl, pascal, fastcall, watcom, unknown - x86-32: cdecl, stdcall, pascal, fastcall, thiscall, watcom, unknown - x86-64 * bin2llvmir/optimizations/x87_fpu: Tests for FPU register stack usage with branches and loops. * bin2llvmir/optimizations/x87_fpu: Analyze of FPU stack for nested blocks (branches, loops). * bin2llvmir/optimizations/x87_fpu: Fix nested blocks analyze tests. * bin2llvmir/optimizations/x87_fpu: Implement linear equation solver of basic block TOP tracking. Include OpenCV lib. * bin2llvmir/optimizations/x87_fpu: FPU TOP optimization implemented for simple and nested BasicBlocks, floating-point return values of functions. TODO: Import OpenCV library to Cmake build. Implement special calling conventions for 32bit architecture. * deps/eigen: Include third party library Eigen to cmake of project. Library is used to math computation with matricies for X86 FPU analyze optimization. * bin2llvmir/optimization/x87_fpu: Rewrite optimization with new Eigen library. Use matrix implementation of SVD from eigen library. * tests/bin2llvmir: Refactor CMakeLists.txt * bin2llvmir/optimization/x87_fpu: Fix bux for X86-16bit calling convention. Optimization now validate value of FPU top at the end of every terminating block and detects unsupported states. * bin2llvmir/optimizations/x87_fpu: Fix and improve FPU stack optimization testss * bin2llvmir/optimizations/x87_fpu: Fix major bug of overdetermined linear equation solver and minor bugs of final llvm ir generating. * capstone2llvmir/x86: Add support of x87 FPREM instructions and unit test of new supported instructions. * capstone2llvmir/x86: Add support of x87 FNSTCW instructions and unit test of new supported instructions. * bin2llvmir/optimizations/x87_fpu: Add test for x87 fpu analysis and fix register indexing bug. * bin2llvmir/optimizations/x87_fpu: Fix test for x87 fpu analysis. * capstone2llvmir/x86_impl.h: remove extra newline & indent * bin2llvmir/optimizations/x87_fpu: Create tests for different calling conventions and different architectures of x86. Tests for architectures x86-16, x86-32, x86-64. Tests for calling conventions cdecl, pascal, fastcall, stdcall, thiscall. * capstone2llvmir/x86: Fix bug in FXRSTOR unit etst. * capstone2llvmir/x86: Add support of x87 FPREM instructions and unit test of new supported instructions. * bin2llvmir/optimizations/x87_fpu: Tests for x87 FPU analyze. Tests for calling conventions: - x86-16: cdecl, pascal, fastcall, watcom, unknown - x86-32: cdecl, stdcall, pascal, fastcall, thiscall, watcom, unknown - x86-64 * bin2llvmir/optimizations/x87_fpu: Analyze of FPU stack for functions with floating point return value (definitions and calls). Analyzed calling conventions: - x86-16: cdecl, pascal, fastcall, watcom, unknown - x86-32: cdecl, stdcall, pascal, fastcall, thiscall, watcom, unknown - x86-64 * bin2llvmir/optimizations/x87_fpu: Tests for FPU register stack usage with branches and loops. * bin2llvmir/optimizations/x87_fpu: Analyze of FPU stack for nested blocks (branches, loops). * bin2llvmir/optimizations/x87_fpu: Fix nested blocks analyze tests. * bin2llvmir/optimizations/x87_fpu: Implement linear equation solver of basic block TOP tracking. Include OpenCV lib. * bin2llvmir/optimizations/x87_fpu: FPU TOP optimization implemented for simple and nested BasicBlocks, floating-point return values of functions. TODO: Import OpenCV library to Cmake build. Implement special calling conventions for 32bit architecture. * capstone2llvmir/x86: Add support of x87 FPREM instructions and unit test of new supported instructions. * capstone2llvmir/x86_impl.h: remove extra newline & indent * capstone2llvmir/x86: Fix bug in FXRSTOR unit etst. * deps/eigen: Include third party library Eigen to cmake of project. Library is used to math computation with matricies for X86 FPU analyze optimization. * bin2llvmir/optimization/x87_fpu: Rewrite optimization with new Eigen library. Use matrix implementation of SVD from eigen library. * tests/bin2llvmir: Refactor CMakeLists.txt * bin2llvmir/optimization/x87_fpu: Fix bux for X86-16bit calling convention. Optimization now validate value of FPU top at the end of every terminating block and detects unsupported states. * bin2llvmir/optimizations/x87_fpu: Fix and improve FPU stack optimization testss * bin2llvmir/optimizations/x87_fpu: Fix major bug of overdetermined linear equation solver and minor bugs of final llvm ir generating. * capstone2llvmir/x86_impl.h: remove extra newline & indent * bin2llvmir/optimizations/x87_fpu: Create tests for different calling conventions and different architectures of x86. Tests for architectures x86-16, x86-32, x86-64. Tests for calling conventions cdecl, pascal, fastcall, stdcall, thiscall. * capstone2llvmir/x86: Add support of x87 FPREM instructions and unit test of new supported instructions. * capstone2llvmir/x86_impl.h: remove extra newline & indent * bin2llvmir/optimization/x87_fpu: Fix bux for X86-16bit calling convention. Optimization now validate value of FPU top at the end of every terminating block and detects unsupported states. * bin2llvmir/optimizations/x87_fpu: Fix and improve FPU stack optimization testss * src/capstone2llvmir/x86: Fix and remove duplicities caused by my incorrect merge commit * src/bin2llvmir/x87_fpu: Fix bug - remove forgotten declaration. * src/bin2llvmir/x87_fpu: Fix bug - make analyze more accurate: fix some bugs when TOP is changed but not stored etc. * tests/bin2llvmir/optimizations/x87_fpu: Rewrite actual and include new tests - fix bugs revealed by integration tests analyze. * src/bin2llvmir/optimizations/x87_fpu: Fix bugs revealed by integration testing and improve performance of this optimization. * src/capstoce2llvmir/x86: Fix merge conflict. * deps/eigen: Remove Eigen library from deps and moves it into external libs. * tests/bin2llvmir/optimizations/x87_fpu: Remove tests to 16bit architecture because this feature has depreaced due to unacceptable performance lack. * src/bin2llvmir/optimizations/x87_fpu: Improve and optimize performance of algorithm. Replace SVD decomposition for QR decomosition due to performance increase. Fix includes for eigen library that is now external project. Optimize matrix rank calculation. * bin2llvmir/optimization/x87_fpu: Set max performance ceil. * Add External Eigen to cmake/deps. * deps/eigen: Update CMake build. * deps/eigen: Update CMake build. * bin2llvmir/x87_fpu: Update analyze and tests -> remove FPU TAGS because RetDec do not use them anymore. * deps/eigen: Fix eigen INTERFACE_INCLUDE_DIRECTORIES which was prefixed in the build directory. Co-authored-by: Peter Matula <peter.matula@avast.com>
2020-05-28 12:31:04 +00:00
## Eigen
A clone of only the needed sources (headers) of [Eigen](http://eigen.tuxfamily.org/index.php?title=Main_Page).
Upstream commit: `6601abce868e3284b4829a4fbf91eefaa0d704af`
## License
Eigen is [Free Software](http://www.gnu.org/philosophy/free-sw.html). Starting from the 3.1.1 version, it is licensed under the [MPL2](http://www.mozilla.org/MPL/2.0), which is a simple weak copyleft license. Common questions about the MPL2 are answered in the official [MPL2 FAQ](http://www.mozilla.org/MPL/2.0/FAQ.html).