externals: Update oaknut to 2.0.0

Merge commit '99c0a73f91e7a5e66db686f29e158e99193a043d' into dev/dual_code_block
This commit is contained in:
Merry
2024-01-28 14:56:59 +00:00
37 changed files with 2481 additions and 221 deletions

View File

@@ -45,7 +45,7 @@ struct AddrOffset {
: m_payload(&label)
{}
AddrOffset(void* ptr)
AddrOffset(const void* ptr)
: m_payload(ptr)
{}
@@ -63,7 +63,7 @@ struct AddrOffset {
private:
template<typename Policy>
friend class BasicCodeGenerator;
std::variant<std::uint32_t, Label*, void*> m_payload;
std::variant<std::uint32_t, Label*, const void*> m_payload;
};
template<std::size_t bitsize, std::size_t shift_amount>
@@ -78,13 +78,19 @@ struct PageOffset {
static std::uint32_t encode(std::uintptr_t current_addr, std::uintptr_t target)
{
std::uint64_t diff = (static_cast<std::uint64_t>(target) >> shift_amount) - (static_cast<std::uint64_t>(current_addr) >> shift_amount);
std::uint64_t diff = static_cast<std::uint64_t>((static_cast<std::int64_t>(target) >> shift_amount) - (static_cast<std::int64_t>(current_addr) >> shift_amount));
if (detail::sign_extend<bitsize>(diff) != diff)
throw OaknutException{ExceptionType::OffsetOutOfRange};
diff &= detail::mask_from_size(bitsize);
return static_cast<std::uint32_t>(((diff & 3) << (bitsize - 2)) | (diff >> 2));
}
static bool valid(std::uintptr_t current_addr, std::uintptr_t target)
{
std::uint64_t diff = static_cast<std::uint64_t>((static_cast<std::int64_t>(target) >> shift_amount) - (static_cast<std::int64_t>(current_addr) >> shift_amount));
return detail::sign_extend<bitsize>(diff) == diff;
}
private:
template<typename Policy>
friend class BasicCodeGenerator;