From e63bd7e38c6bc75b9a34ab820ee53422cdcf8e63 Mon Sep 17 00:00:00 2001
From: RSDuck <rsduck@users.noreply.github.com>
Date: Thu, 23 Jul 2020 17:43:25 +0200
Subject: for some reason tabs and spaces were mixed

---
 src/ARMJIT_Internal.h | 270 +++++++++++++++++++++++++-------------------------
 1 file changed, 135 insertions(+), 135 deletions(-)

(limited to 'src/ARMJIT_Internal.h')

diff --git a/src/ARMJIT_Internal.h b/src/ARMJIT_Internal.h
index c87e1b3..bb6621f 100644
--- a/src/ARMJIT_Internal.h
+++ b/src/ARMJIT_Internal.h
@@ -16,10 +16,10 @@ namespace ARMJIT
 
 enum
 {
-	branch_IdleBranch = 1 << 0,
-	branch_FollowCondTaken = 1 << 1,
-	branch_FollowCondNotTaken = 1 << 2,
-	branch_StaticTarget = 1 << 3,
+    branch_IdleBranch = 1 << 0,
+    branch_FollowCondTaken = 1 << 1,
+    branch_FollowCondNotTaken = 1 << 2,
+    branch_StaticTarget = 1 << 3,
 };
 
 struct FetchedInstr
@@ -39,155 +39,155 @@ struct FetchedInstr
         return Instr >> 28;
     }
 
-	u8 BranchFlags;
-	u8 SetFlags;
+    u8 BranchFlags;
+    u8 SetFlags;
     u32 Instr;
-	u32 Addr;
+    u32 Addr;
 
-	u8 DataCycles;
+    u8 DataCycles;
     u16 CodeCycles;
-	u32 DataRegion;
+    u32 DataRegion;
 
     ARMInstrInfo::Info Info;
 };
 
 /*
-	TinyVector
-		- because reinventing the wheel is the best!
-	
-	- meant to be used very often, with not so many elements
-	max 1 << 16 elements
-	- doesn't allocate while no elements are inserted
-	- not stl confirmant of course
-	- probably only works with POD types
-	- remove operations don't preserve order, but O(1)!
+    TinyVector
+        - because reinventing the wheel is the best!
+    
+    - meant to be used very often, with not so many elements
+    max 1 << 16 elements
+    - doesn't allocate while no elements are inserted
+    - not stl confirmant of course
+    - probably only works with POD types
+    - remove operations don't preserve order, but O(1)!
 */
 template <typename T>
 struct __attribute__((packed)) TinyVector
 {
-	T* Data = NULL;
-	u16 Capacity = 0;
-	u16 Length = 0;
-
-	~TinyVector()
-	{
-		delete[] Data;
-	}
-
-	void MakeCapacity(u32 capacity)
-	{
-		assert(capacity <= UINT16_MAX);
-		assert(capacity > Capacity);
-		T* newMem = new T[capacity];
-		if (Data != NULL)
-			memcpy(newMem, Data, sizeof(T) * Length);
-
-		T* oldData = Data;
-		Data = newMem;
-		if (oldData != NULL)
-			delete[] oldData;
-		
-		Capacity = capacity;
-	}
-
-	void SetLength(u16 length)
-	{
-		if (Capacity < length)
-			MakeCapacity(length);
-		
-		Length = length;
-	}
-
-	void Clear()
-	{
-		Length = 0;
-	}
-
-	void Add(T element)
-	{
-		assert(Length + 1 <= UINT16_MAX);
-		if (Length + 1 > Capacity)
-			MakeCapacity(((Capacity + 4) * 3) / 2);
-		
-		Data[Length++] = element;
-	}
-
-	void Remove(int index)
-	{
-		assert(index >= 0 && index < Length);
-
-		Length--;
-		Data[index] = Data[Length];
-		/*for (int i = index; i < Length; i++)
-			Data[i] = Data[i + 1];*/
-	}
-
-	int Find(T needle)
-	{
-		for (int i = 0; i < Length; i++)
-		{
-			if (Data[i] == needle)
-				return i;
-		}
-		return -1;
-	}
-
-	bool RemoveByValue(T needle)
-	{
-		for (int i = 0; i < Length; i++)
-		{
-			if (Data[i] == needle)
-			{
-				Remove(i);
-				return true;
-			}
-		}
-		return false;
-	}
-
-	T& operator[](int index)
-	{
-		assert(index >= 0 && index < Length);
-		return Data[index];
-	}
+    T* Data = NULL;
+    u16 Capacity = 0;
+    u16 Length = 0;
+
+    ~TinyVector()
+    {
+        delete[] Data;
+    }
+
+    void MakeCapacity(u32 capacity)
+    {
+        assert(capacity <= UINT16_MAX);
+        assert(capacity > Capacity);
+        T* newMem = new T[capacity];
+        if (Data != NULL)
+            memcpy(newMem, Data, sizeof(T) * Length);
+
+        T* oldData = Data;
+        Data = newMem;
+        if (oldData != NULL)
+            delete[] oldData;
+        
+        Capacity = capacity;
+    }
+
+    void SetLength(u16 length)
+    {
+        if (Capacity < length)
+            MakeCapacity(length);
+        
+        Length = length;
+    }
+
+    void Clear()
+    {
+        Length = 0;
+    }
+
+    void Add(T element)
+    {
+        assert(Length + 1 <= UINT16_MAX);
+        if (Length + 1 > Capacity)
+            MakeCapacity(((Capacity + 4) * 3) / 2);
+        
+        Data[Length++] = element;
+    }
+
+    void Remove(int index)
+    {
+        assert(index >= 0 && index < Length);
+
+        Length--;
+        Data[index] = Data[Length];
+        /*for (int i = index; i < Length; i++)
+            Data[i] = Data[i + 1];*/
+    }
+
+    int Find(T needle)
+    {
+        for (int i = 0; i < Length; i++)
+        {
+            if (Data[i] == needle)
+                return i;
+        }
+        return -1;
+    }
+
+    bool RemoveByValue(T needle)
+    {
+        for (int i = 0; i < Length; i++)
+        {
+            if (Data[i] == needle)
+            {
+                Remove(i);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    T& operator[](int index)
+    {
+        assert(index >= 0 && index < Length);
+        return Data[index];
+    }
 };
 
 class JitBlock
 {
 public:
-	JitBlock(u32 num, u32 literalHash, u32 numAddresses, u32 numLiterals)
-	{
-		Num = num;
-		NumAddresses = numAddresses;
-		NumLiterals = numLiterals;
-		Data.SetLength(numAddresses * 2 + numLiterals);
-	}
-
-	u32 StartAddr;
-	u32 StartAddrLocal;
-	u32 InstrHash, LiteralHash;
-	u8 Num;
-	u16 NumAddresses;
-	u16 NumLiterals;
-
-	JitBlockEntry EntryPoint;
-
-	u32* AddressRanges()
-	{ return &Data[0]; }
-	u32* AddressMasks()
-	{ return &Data[NumAddresses]; }
-	u32* Literals()
-	{ return &Data[NumAddresses * 2]; }
+    JitBlock(u32 num, u32 literalHash, u32 numAddresses, u32 numLiterals)
+    {
+        Num = num;
+        NumAddresses = numAddresses;
+        NumLiterals = numLiterals;
+        Data.SetLength(numAddresses * 2 + numLiterals);
+    }
+
+    u32 StartAddr;
+    u32 StartAddrLocal;
+    u32 InstrHash, LiteralHash;
+    u8 Num;
+    u16 NumAddresses;
+    u16 NumLiterals;
+
+    JitBlockEntry EntryPoint;
+
+    u32* AddressRanges()
+    { return &Data[0]; }
+    u32* AddressMasks()
+    { return &Data[NumAddresses]; }
+    u32* Literals()
+    { return &Data[NumAddresses * 2]; }
 
 private:
-	TinyVector<u32> Data;
+    TinyVector<u32> Data;
 };
 
 // size should be 16 bytes because I'm to lazy to use mul and whatnot
 struct __attribute__((packed)) AddressRange
 {
-	TinyVector<JitBlock*> Blocks;
-	u32 Code;
+    TinyVector<JitBlock*> Blocks;
+    u32 Code;
 };
 
 
@@ -201,12 +201,12 @@ extern AddressRange* const CodeMemRegions[ARMJIT_Memory::memregions_Count];
 
 inline bool PageContainsCode(AddressRange* range)
 {
-	for (int i = 0; i < 8; i++)
-	{
-		if (range[i].Blocks.Length > 0)
-			return true;
-	}
-	return false;
+    for (int i = 0; i < 8; i++)
+    {
+        if (range[i].Blocks.Length > 0)
+            return true;
+    }
+    return false;
 }
 
 u32 LocaliseCodeAddress(u32 num, u32 addr);
-- 
cgit v1.2.3


From 2a3147db461d8538334245cb1073e8b46ad2a99d Mon Sep 17 00:00:00 2001
From: RSDuck <rsduck@users.noreply.github.com>
Date: Fri, 31 Jul 2020 22:39:27 +0200
Subject: reset fastmem on DSi soft reset

---
 src/ARMJIT_Internal.h | 1 +
 src/ARMJIT_Memory.cpp | 2 +-
 src/DSi.cpp           | 8 +++++---
 3 files changed, 7 insertions(+), 4 deletions(-)

(limited to 'src/ARMJIT_Internal.h')

diff --git a/src/ARMJIT_Internal.h b/src/ARMJIT_Internal.h
index bb6621f..4244470 100644
--- a/src/ARMJIT_Internal.h
+++ b/src/ARMJIT_Internal.h
@@ -114,6 +114,7 @@ struct __attribute__((packed)) TinyVector
 
     void Remove(int index)
     {
+        assert(Length > 0);
         assert(index >= 0 && index < Length);
 
         Length--;
diff --git a/src/ARMJIT_Memory.cpp b/src/ARMJIT_Memory.cpp
index cc8ad67..35cfdf0 100644
--- a/src/ARMJIT_Memory.cpp
+++ b/src/ARMJIT_Memory.cpp
@@ -414,7 +414,7 @@ void RemapDTCM(u32 newBase, u32 newSize)
             u32 start = mapping.Addr;
             u32 end = mapping.Addr + mapping.Size;
 
-            printf("mapping %d %x %x %x %x\n", region, mapping.Addr, mapping.Size, mapping.Num, mapping.LocalOffset);
+            printf("unmapping %d %x %x %x %x\n", region, mapping.Addr, mapping.Size, mapping.Num, mapping.LocalOffset);
 
             bool oldOverlap = NDS::ARM9->DTCMSize > 0 && !(oldDTCMBase >= end || oldDTCBEnd <= start);
             bool newOverlap = newSize > 0 && !(newBase >= end || newEnd <= start);
diff --git a/src/DSi.cpp b/src/DSi.cpp
index 56f5356..42541fe 100644
--- a/src/DSi.cpp
+++ b/src/DSi.cpp
@@ -181,15 +181,17 @@ void SoftReset()
 
     // also, BPTWL[0x70] could be abused to quickly boot specific titles
 
+#ifdef JIT_ENABLED
+    ARMJIT_Memory::Reset();
+    ARMJIT::CheckAndInvalidateITCM();
+#endif
+
     NDS::ARM9->Reset();
     NDS::ARM7->Reset();
 
     NDS::ARM9->CP15Reset();
 
     memcpy(NDS::ARM9->ITCM, ITCMInit, 0x8000);
-#ifdef JIT_ENABLED
-    ARMJIT::CheckAndInvalidateITCM();
-#endif
 
     DSi_AES::Reset();
 
-- 
cgit v1.2.3