|
31 | 31 | #include <string>
|
32 | 32 | #include <sstream>
|
33 | 33 |
|
34 |
| -#include "Common/BitScan.h" |
35 |
| -#include "Core/MIPS/MIPSVFPUUtils.h" |
36 |
| - |
37 | 34 | #include "base/NativeApp.h"
|
38 | 35 | #include "base/logging.h"
|
39 | 36 | #include "input/input_state.h"
|
40 | 37 | #include "ext/disarm.h"
|
41 | 38 | #include "math/math_util.h"
|
42 | 39 | #include "util/text/parsers.h"
|
43 | 40 |
|
44 |
| -#include "Common/CPUDetect.h" |
45 | 41 | #include "Common/ArmEmitter.h"
|
| 42 | +#include "Common/BitScan.h" |
| 43 | +#include "Common/CPUDetect.h" |
46 | 44 | #include "Core/Config.h"
|
47 |
| -#include "Core/MIPS/MIPSVFPUUtils.h" |
48 | 45 | #include "Core/FileSystems/ISOFileSystem.h"
|
| 46 | +#include "Core/MemMap.h" |
| 47 | +#include "Core/MIPS/MIPSVFPUUtils.h" |
49 | 48 | #include "GPU/Common/TextureDecoder.h"
|
50 | 49 |
|
51 | 50 | #include "unittest/JitHarness.h"
|
@@ -485,6 +484,53 @@ bool TestCLZ() {
|
485 | 484 | return true;
|
486 | 485 | }
|
487 | 486 |
|
| 487 | +static bool TestMemMap() { |
| 488 | + Memory::g_MemorySize = Memory::RAM_DOUBLE_SIZE; |
| 489 | + |
| 490 | + enum class Flags { |
| 491 | + NO_KERNEL = 0, |
| 492 | + ALLOW_KERNEL = 1, |
| 493 | + }; |
| 494 | + struct Range { |
| 495 | + uint32_t base; |
| 496 | + uint32_t size; |
| 497 | + Flags flags; |
| 498 | + }; |
| 499 | + static const Range ranges[] = { |
| 500 | + { 0x08000000, Memory::RAM_DOUBLE_SIZE, Flags::ALLOW_KERNEL }, |
| 501 | + { 0x00010000, Memory::SCRATCHPAD_SIZE, Flags::NO_KERNEL }, |
| 502 | + { 0x04000000, 0x00800000, Flags::NO_KERNEL }, |
| 503 | + }; |
| 504 | + static const uint32_t extraBits[] = { |
| 505 | + 0x00000000, |
| 506 | + 0x40000000, |
| 507 | + 0x80000000, |
| 508 | + }; |
| 509 | + |
| 510 | + for (const auto &range : ranges) { |
| 511 | + size_t testBits = range.flags == Flags::ALLOW_KERNEL ? 3 : 2; |
| 512 | + for (size_t i = 0; i < testBits; ++i) { |
| 513 | + uint32_t base = range.base | extraBits[i]; |
| 514 | + |
| 515 | + EXPECT_TRUE(Memory::IsValidAddress(base)); |
| 516 | + EXPECT_TRUE(Memory::IsValidAddress(base + range.size - 1)); |
| 517 | + EXPECT_FALSE(Memory::IsValidAddress(base + range.size)); |
| 518 | + EXPECT_FALSE(Memory::IsValidAddress(base - 1)); |
| 519 | + |
| 520 | + EXPECT_EQ_HEX(Memory::ValidSize(base, range.size), range.size); |
| 521 | + EXPECT_EQ_HEX(Memory::ValidSize(base, range.size + 1), range.size); |
| 522 | + EXPECT_EQ_HEX(Memory::ValidSize(base, range.size - 1), range.size - 1); |
| 523 | + EXPECT_EQ_HEX(Memory::ValidSize(base, 0), 0); |
| 524 | + EXPECT_EQ_HEX(Memory::ValidSize(base, 0x80000001), range.size); |
| 525 | + EXPECT_EQ_HEX(Memory::ValidSize(base, 0x40000001), range.size); |
| 526 | + EXPECT_EQ_HEX(Memory::ValidSize(base, 0x20000001), range.size); |
| 527 | + EXPECT_EQ_HEX(Memory::ValidSize(base, 0x10000001), range.size); |
| 528 | + } |
| 529 | + } |
| 530 | + |
| 531 | + return true; |
| 532 | +} |
| 533 | + |
488 | 534 | typedef bool (*TestFunc)();
|
489 | 535 | struct TestItem {
|
490 | 536 | const char *name;
|
@@ -518,6 +564,7 @@ TestItem availableTests[] = {
|
518 | 564 | TEST_ITEM(ParseLBN),
|
519 | 565 | TEST_ITEM(QuickTexHash),
|
520 | 566 | TEST_ITEM(CLZ),
|
| 567 | + TEST_ITEM(MemMap), |
521 | 568 | };
|
522 | 569 |
|
523 | 570 | int main(int argc, const char *argv[]) {
|
|
0 commit comments