From dd62f125c359b37d71be6ccf873177c1a108d015 Mon Sep 17 00:00:00 2001
From: River City Ransomware <richyateswebdesign@gmail.com>
Date: Fri, 19 Jan 2018 18:01:41 -0500
Subject: [PATCH] Fixes some cast warnings, partial port of citra #3064 (#106)

* Fixes some cast warnings, partially fixes citra #3064

* Converted casts to uint32_t to u32

* Ran clang-format
---
 src/core/arm/dynarmic/arm_dynarmic.cpp     |  6 ++---
 src/core/core_timing.cpp                   |  4 ++--
 src/core/gdbstub/gdbstub.cpp               | 27 +++++++++++-----------
 src/core/hle/kernel/condition_variable.cpp |  2 +-
 src/core/hle/kernel/hle_ipc.cpp            |  2 +-
 src/core/hle/service/vi/vi.cpp             |  2 +-
 6 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp
index 2ad48dcc7..72c54f984 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic.cpp
@@ -46,7 +46,7 @@ public:
         ARM_Interface::ThreadContext ctx;
         parent.SaveContext(ctx);
         parent.inner_unicorn.LoadContext(ctx);
-        parent.inner_unicorn.ExecuteInstructions(num_instructions);
+        parent.inner_unicorn.ExecuteInstructions(static_cast<int>(num_instructions));
         parent.inner_unicorn.SaveContext(ctx);
         parent.LoadContext(ctx);
         num_interpreted_instructions += num_instructions;
@@ -163,9 +163,9 @@ void ARM_Dynarmic::LoadContext(const ARM_Interface::ThreadContext& ctx) {
     jit.SetRegisters(ctx.cpu_registers);
     jit.SetSP(ctx.sp);
     jit.SetPC(ctx.pc);
-    jit.SetPstate(ctx.cpsr);
+    jit.SetPstate(static_cast<u32>(ctx.cpsr));
     jit.SetVectors(ctx.fpu_registers);
-    jit.SetFpcr(ctx.fpscr);
+    jit.SetFpcr(static_cast<u32>(ctx.fpscr));
     cb->tpidrr0_el0 = ctx.tls_address;
 }
 
diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp
index a0656f0a8..9e1bf2d0e 100644
--- a/src/core/core_timing.cpp
+++ b/src/core/core_timing.cpp
@@ -122,7 +122,7 @@ u64 GetTicks() {
 }
 
 void AddTicks(u64 ticks) {
-    downcount -= ticks;
+    downcount -= static_cast<int>(ticks);
 }
 
 u64 GetIdleTicks() {
@@ -208,7 +208,7 @@ void Advance() {
         Event evt = std::move(event_queue.front());
         std::pop_heap(event_queue.begin(), event_queue.end(), std::greater<Event>());
         event_queue.pop_back();
-        evt.type->callback(evt.userdata, global_timer - evt.time);
+        evt.type->callback(evt.userdata, static_cast<int>(global_timer - evt.time));
     }
 
     is_global_timer_sane = false;
diff --git a/src/core/gdbstub/gdbstub.cpp b/src/core/gdbstub/gdbstub.cpp
index 05c872d89..2f3ccb689 100644
--- a/src/core/gdbstub/gdbstub.cpp
+++ b/src/core/gdbstub/gdbstub.cpp
@@ -183,11 +183,11 @@ static u8 NibbleToHex(u8 n) {
 }
 
 /**
-* Converts input hex string characters into an array of equivalent of u8 bytes.
-*
-* @param src Pointer to array of output hex string characters.
-* @param len Length of src array.
-*/
+ * Converts input hex string characters into an array of equivalent of u8 bytes.
+ *
+ * @param src Pointer to array of output hex string characters.
+ * @param len Length of src array.
+ */
 static u32 HexToInt(const u8* src, size_t len) {
     u32 output = 0;
     while (len-- > 0) {
@@ -299,17 +299,17 @@ static std::map<u32, Breakpoint>& GetBreakpointList(BreakpointType type) {
 static void RemoveBreakpoint(BreakpointType type, PAddr addr) {
     std::map<u32, Breakpoint>& p = GetBreakpointList(type);
 
-    auto bp = p.find(addr);
+    auto bp = p.find(static_cast<u32>(addr));
     if (bp != p.end()) {
         LOG_DEBUG(Debug_GDBStub, "gdb: removed a breakpoint: %08x bytes at %08x of type %d\n",
                   bp->second.len, bp->second.addr, type);
-        p.erase(addr);
+        p.erase(static_cast<u32>(addr));
     }
 }
 
 BreakpointAddress GetNextBreakpointFromAddress(PAddr addr, BreakpointType type) {
     std::map<u32, Breakpoint>& p = GetBreakpointList(type);
-    auto next_breakpoint = p.lower_bound(addr);
+    auto next_breakpoint = p.lower_bound(static_cast<u32>(addr));
     BreakpointAddress breakpoint;
 
     if (next_breakpoint != p.end()) {
@@ -330,7 +330,7 @@ bool CheckBreakpoint(PAddr addr, BreakpointType type) {
 
     std::map<u32, Breakpoint>& p = GetBreakpointList(type);
 
-    auto bp = p.find(addr);
+    auto bp = p.find(static_cast<u32>(addr));
     if (bp != p.end()) {
         u32 len = bp->second.len;
 
@@ -452,7 +452,8 @@ static void SendSignal(u32 signal) {
 
     std::string buffer =
         Common::StringFromFormat("T%02x%02x:%08x;%02x:%08x;", latest_signal, 15,
-                                 htonl(Core::CPU().GetPC()), 13, htonl(Core::CPU().GetReg(13)));
+                                 htonl(static_cast<u_long>(Core::CPU().GetPC())), 13,
+                                 htonl(static_cast<u_long>(Core::CPU().GetReg(13))));
     LOG_DEBUG(Debug_GDBStub, "Response: %s", buffer.c_str());
     SendReply(buffer.c_str());
 }
@@ -539,7 +540,7 @@ static void ReadRegister() {
     }
 
     if (id <= R15_REGISTER) {
-        IntToGdbHex(reply, Core::CPU().GetReg(id));
+        IntToGdbHex(reply, static_cast<u32>(Core::CPU().GetReg(static_cast<u64>(id))));
     } else if (id == CPSR_REGISTER) {
         IntToGdbHex(reply, Core::CPU().GetCPSR());
     } else if (id > CPSR_REGISTER && id < FPSCR_REGISTER) {
@@ -563,7 +564,7 @@ static void ReadRegisters() {
     u8* bufptr = buffer;
 
     for (int reg = 0; reg <= R15_REGISTER; reg++) {
-        IntToGdbHex(bufptr + reg * CHAR_BIT, Core::CPU().GetReg(reg));
+        IntToGdbHex(bufptr + reg * CHAR_BIT, static_cast<u32>(Core::CPU().GetReg(reg)));
     }
 
     bufptr += (16 * CHAR_BIT);
@@ -1034,4 +1035,4 @@ bool GetCpuStepFlag() {
 void SetCpuStepFlag(bool is_step) {
     step_loop = is_step;
 }
-};
+}; // namespace GDBStub
diff --git a/src/core/hle/kernel/condition_variable.cpp b/src/core/hle/kernel/condition_variable.cpp
index 5942eae61..561666384 100644
--- a/src/core/hle/kernel/condition_variable.cpp
+++ b/src/core/hle/kernel/condition_variable.cpp
@@ -43,7 +43,7 @@ void ConditionVariable::Acquire(Thread* thread) {
 ResultCode ConditionVariable::Release(s32 target) {
     if (target == -1) {
         // When -1, wake up all waiting threads
-        SetAvailableCount(GetWaitingThreads().size());
+        SetAvailableCount(static_cast<s32>(GetWaitingThreads().size()));
         WakeupAllWaitingThreads();
     } else {
         // Otherwise, wake up just a single thread
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp
index 73bb6a8be..3899dad09 100644
--- a/src/core/hle/kernel/hle_ipc.cpp
+++ b/src/core/hle/kernel/hle_ipc.cpp
@@ -210,7 +210,7 @@ ResultCode HLERequestContext::WriteToOutgoingCommandBuffer(u32_le* dst_cmdbuf, P
 
         for (auto& object : domain_objects) {
             request_handlers.emplace_back(object);
-            dst_cmdbuf[domain_offset++] = request_handlers.size();
+            dst_cmdbuf[domain_offset++] = static_cast<u32_le>(request_handlers.size());
         }
     }
     return RESULT_SUCCESS;
diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp
index 015fb164e..c624e734e 100644
--- a/src/core/hle/service/vi/vi.cpp
+++ b/src/core/hle/service/vi/vi.cpp
@@ -95,7 +95,7 @@ public:
 
         Header header{};
         header.data_offset = sizeof(Header);
-        header.data_size = write_index - sizeof(Header);
+        header.data_size = static_cast<u32_le>(write_index - sizeof(Header));
         std::memcpy(buffer.data(), &header, sizeof(Header));
 
         return buffer;