Selection of libraries designed to be used with Emu projects. This was originally a Math library only, but has since been changed to hold all Emu libraries to enable consistency in changes to dependencies (such as EmuCore modifications).
Includes a plethora of additional changes due to some internal changes for work targets, namely:
New EmuCore guarantees to provide information about compiler/architecture target
Want to expand on this further in the future, especially with EmuSIMD to allow very generic code for SIMD regardless of architecture and available features
Portions of EmuSIMD reworked for better compatibility
Makes some use of the aforementioned EmuCore information
Lots of little bits, but mainly includes:
New handwritten integral multiplication/division/mod emulation when not available otherwise
New handwritten trigonometric functions - in the same way as proposed changes to scalar versions - used when considered either more performant or necessary due to an existing implementation not being available
This is also written in a way to be generic across architectures, using EmuSIMD::Funcs namespace instead of the intrinsics directly
Shuffles are more consistent and implemented in a way to consistently make use of compile-time flags, although still in reverse order to normal (e.g. shuffle<0, 1, 2, 3> uses flag _MM_SHUFFLE(3, 2, 1, 0))
New items such as blend and blendv are now consistently available
Lots of general areas have been rewritten for compatibility with g++ on a Linux platform
Part of this repo's goal is to be generic across platforms instead of relying on potentially different things per platform (e.g. EmuMath is a generic alternative to DirectXMath for personal projects), so these changes are necessary
A key component of this is removing MSVC-compatible code which is not compatible with g++, such as explicit specialisations outside of namespace scope (as we had a few helper classes inside TMP classes which made use of explicit specialisations to determine results for their parent class)
We now have a basic makefile for building via g++.
There are still some issues, such as some warnings silenced in g++ via some pragmas in main.cpp, but these will be looked at further when it is easier to dedicate some focus to them
Adds
FastQuaternion
s ready forFastMatrix
.Includes a plethora of additional changes due to some internal changes for work targets, namely:
EmuCore
guarantees to provide information about compiler/architecture targetEmuSIMD
to allow very generic code for SIMD regardless of architecture and available featuresEmuSIMD
reworked for better compatibilityEmuCore
informationEmuSIMD::Funcs
namespace instead of the intrinsics directlyshuffle<0, 1, 2, 3>
uses flag_MM_SHUFFLE(3, 2, 1, 0)
)blend
andblendv
are now consistently availableg++
on a Linux platformEmuMath
is a generic alternative toDirectXMath
for personal projects), so these changes are necessaryMSVC
-compatible code which is not compatible withg++
, such as explicit specialisations outside of namespace scope (as we had a few helper classes inside TMP classes which made use of explicit specialisations to determine results for their parent class)g++
.g++
via some pragmas inmain.cpp
, but these will be looked at further when it is easier to dedicate some focus to them