334567d33b
The current BitField implementation requires the use of the union, which makes it both non-constexpr (due to accessing inactive union members), and prevents the usage of smaller types and enums, reducing its flexibility. Furthermore, BitField is not trivially copyable (and by extension, not trivial). Moreover, it is not well documented that BitField performs automatic sign extension on signed integers, as a recent PR made an assumption that these signed integers were zero extended. These considerations resulted in this new BitField implementation, which uses macros to generate functions for accessing / setting bitfield values. 2 macros are provided: `YUZU_RO_BITFIELD` for read-only BitFields, which generates a member function that directly returns the specified type. `YUZU_BITFIELD`, which generates a member function that returns a `BitFieldHelper` class which allows setting the value using `operator=` or `Set()`, and performs implicit conversion to the specified type. Types: The following type tags are added: Automatic type deduction: AutoUInt, AutoSignExtSInt, AutoZeroExtSInt, AutoFloat Automatic type deduction selects the smallest type that contains at least the specified NumBits bits. However, in testing, MSVC is pretty bad at optimizing smaller-than-32-bit accesses, so it may be advisable to specify 32 bit types in performance sensitive code. Signed Integers: SignExtSInt<>, ZeroExtSInt<> The new SignExtSInt and ZeroExtSInt are mandatory type tags for signed integers to explicitly specify whether to sign extend (preserving the sign and value) or zero extend the bitfield value. These changes have sacrificed compatibility with `_be` types. This is a worthwhile sacrifice as we do not have usages of these types in BitField. Example usage: ```cpp struct MyTestStruct { u32 raw; YUZU_RO_BITFIELD(0, 3, AutoUInt, field0); YUZU_BITFIELD(3, 4, AutoSignExtSInt, field1); YUZU_BITFIELD(7, 5, ZeroExtSInt<s16>, field2); YUZU_RO_BITFIELD(12, 1, bool, flag0); }; MyTestStruct s{0x1234567}; s.field1() = -1; s.field2() = -2; fmt::print("field0={}, field1={}, field2={}, flag0={}", s.field0(), s.field1(), s.field2(), s.flag0()); ``` |
||
---|---|---|
.ci | ||
.github | ||
.reuse | ||
CMakeModules | ||
dist | ||
externals | ||
hooks | ||
LICENSES | ||
src | ||
.codespellrc | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
CMakeLists.txt | ||
CONTRIBUTING.md | ||
Doxyfile | ||
LICENSE.txt | ||
README.md | ||
vcpkg.json |
yuzu
yuzu is the world's most popular, open-source, Nintendo Switch emulator — started by the creators of Citra.
It is written in C++ with portability in mind, and we actively maintain builds for Windows, Linux and Android.
Compatibility | Development | Building | Download | Support | License
Compatibility
The emulator is capable of running most commercial games at full speed, provided you meet the necessary hardware requirements.
For a full list of games yuzu support, please visit our Compatibility page
Check out our website for the latest news on exciting features, monthly progress reports, and more!
Development
Most of the development happens on GitHub. It's also where our central repository is hosted. For development discussion, please join us on Discord.
If you want to contribute, please take a look at the Contributor's Guide and Developer Information. You can also contact any of the developers on Discord in order to know about the current state of the emulator.
If you want to contribute to the user interface translation project, please check out the yuzu project on transifex. We centralize translation work there, and periodically upstream translations.
Building
- Windows: Windows Build
- Linux: Linux Build
Download
You can download the latest releases automatically via the installer on our downloads page.
Support
If you enjoy the project and want to support us financially, check out our Patreon!
Any donations received will go towards things like:
- Switch consoles to explore and reverse-engineer the hardware
- Switch games for testing, reverse-engineering, and implementing new features
- Web hosting and infrastructure setup
- Software licenses (e.g. Visual Studio, IDA Pro, etc.)
- Additional hardware (e.g. GPUs as-needed to improve rendering support, other peripherals to add support for, etc.)
If you wish to support us a different way, please join our Discord and talk to bunnei. You may also contact: donations@yuzu-emu.org.
License
yuzu is licensed under the GPLv3 (or any later version). Refer to the LICENSE.txt file.