1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 05:37:35 +00:00

UserspaceEmulator: Raise an error on FPU stack underflow

Accessing an unset part of the FPU stack should not be a simple warning,
but should trigger the FPU exception mechanism.
This commit is contained in:
Hendiadyoin1 2021-07-23 14:22:19 +02:00 committed by Linus Groh
parent 0d6d780183
commit 83f50a1507
3 changed files with 6 additions and 15 deletions

View file

@ -38,15 +38,6 @@ ALWAYS_INLINE void warn_if_uninitialized(T value_with_shadow, const char* messag
namespace UserspaceEmulator {
ALWAYS_INLINE void SoftFPU::warn_if_fpu_not_set_absolute(u8 index) const
{
if (!fpu_is_set(index)) [[unlikely]] {
// FIXME: Are we supposed to set a flag here?
// We might need to raise a stack underflow here
reportln("\033[31;1mWarning! Read of uninitialized value on the FPU Stack ({} abs)\033[0m\n", index);
m_emulator.dump_backtrace();
}
}
ALWAYS_INLINE void SoftFPU::warn_if_mmx_absolute(u8 index) const
{
if (m_reg_is_mmx[index]) [[unlikely]] {
@ -62,10 +53,11 @@ ALWAYS_INLINE void SoftFPU::warn_if_fpu_absolute(u8 index) const
}
}
ALWAYS_INLINE long double SoftFPU::fpu_get(u8 index) const
ALWAYS_INLINE long double SoftFPU::fpu_get(u8 index)
{
VERIFY(index < 8);
warn_if_fpu_not_set_absolute(index);
if (!fpu_is_set(index))
fpu_set_stack_underflow();
warn_if_mmx_absolute(index);
u8 effective_index = (m_fpu_stack_top + index) % 8;