From ccdd340c9ab95c704cdd81d599457bdb220bde2f Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 10 Mar 2024 22:34:56 -0400 Subject: [PATCH] Reads also may or may not be aligned. *sigh* --- OSBindings/Mac/Clock SignalTests/ARMDecoderTests.mm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/ARMDecoderTests.mm b/OSBindings/Mac/Clock SignalTests/ARMDecoderTests.mm index 0503b437c..6b1d3193a 100644 --- a/OSBindings/Mac/Clock SignalTests/ARMDecoderTests.mm +++ b/OSBindings/Mac/Clock SignalTests/ARMDecoderTests.mm @@ -83,11 +83,15 @@ struct MemoryLedger { template bool read(uint32_t address, IntT &source, Mode, bool) { - if constexpr (std::is_same_v) { - address &= static_cast(~3); - } + const auto is_faulty = [&](uint32_t address) -> bool { + return + read_pointer == reads.size() || + reads[read_pointer].size != sizeof(IntT) || + reads[read_pointer].address != address; + }; - if(read_pointer == reads.size() || reads[read_pointer].size != sizeof(IntT) || reads[read_pointer].address != address) { + // As per writes; the test set sometimes forces alignment on the record, sometimes not... + if(is_faulty(address) && is_faulty(address & static_cast(~3))) { return false; } source = reads[read_pointer].value;