diff options
| author | 2015-07-25 20:19:39 -0400 | |
|---|---|---|
| committer | 2015-07-25 20:35:18 -0400 | |
| commit | 0191c26521930d439d5474dd2e861ef595405147 (patch) | |
| tree | 2804060011f6f34e5ca71f7c25ecd5206a5be524 /src/core/arm/skyeye_common | |
| parent | dyncom: Move arminit.cpp and armsupp.cpp into skyeye_common (diff) | |
| download | yuzu-0191c26521930d439d5474dd2e861ef595405147.tar.gz yuzu-0191c26521930d439d5474dd2e861ef595405147.tar.xz yuzu-0191c26521930d439d5474dd2e861ef595405147.zip | |
dyncom: Move helper functions to their own header
Diffstat (limited to 'src/core/arm/skyeye_common')
| -rw-r--r-- | src/core/arm/skyeye_common/armdefs.h | 34 | ||||
| -rw-r--r-- | src/core/arm/skyeye_common/armmmu.h | 1 | ||||
| -rw-r--r-- | src/core/arm/skyeye_common/armsupp.cpp | 9 | ||||
| -rw-r--r-- | src/core/arm/skyeye_common/armsupp.h | 42 |
4 files changed, 48 insertions, 38 deletions
diff --git a/src/core/arm/skyeye_common/armdefs.h b/src/core/arm/skyeye_common/armdefs.h index a0ec108c7..f183b5098 100644 --- a/src/core/arm/skyeye_common/armdefs.h +++ b/src/core/arm/skyeye_common/armdefs.h | |||
| @@ -22,9 +22,6 @@ | |||
| 22 | #include "common/common_types.h" | 22 | #include "common/common_types.h" |
| 23 | #include "core/arm/skyeye_common/arm_regformat.h" | 23 | #include "core/arm/skyeye_common/arm_regformat.h" |
| 24 | 24 | ||
| 25 | #define BITS(s, a, b) ((s << ((sizeof(s) * 8 - 1) - b)) >> (sizeof(s) * 8 - b + a - 1)) | ||
| 26 | #define BIT(s, n) ((s >> (n)) & 1) | ||
| 27 | |||
| 28 | // Signal levels | 25 | // Signal levels |
| 29 | enum { | 26 | enum { |
| 30 | LOW = 0, | 27 | LOW = 0, |
| @@ -47,9 +44,6 @@ enum { | |||
| 47 | ABORT_BASE_UPDATED = 2 | 44 | ABORT_BASE_UPDATED = 2 |
| 48 | }; | 45 | }; |
| 49 | 46 | ||
| 50 | #define POS(i) ( (~(i)) >> 31 ) | ||
| 51 | #define NEG(i) ( (i) >> 31 ) | ||
| 52 | |||
| 53 | typedef u64 ARMdword; // must be 64 bits wide | 47 | typedef u64 ARMdword; // must be 64 bits wide |
| 54 | typedef u32 ARMword; // must be 32 bits wide | 48 | typedef u32 ARMword; // must be 32 bits wide |
| 55 | typedef u16 ARMhword; // must be 16 bits wide | 49 | typedef u16 ARMhword; // must be 16 bits wide |
| @@ -288,31 +282,3 @@ enum { | |||
| 288 | ONCE = 2, // Execute just one iteration | 282 | ONCE = 2, // Execute just one iteration |
| 289 | RUN = 3 // Continuous execution | 283 | RUN = 3 // Continuous execution |
| 290 | }; | 284 | }; |
| 291 | |||
| 292 | |||
| 293 | bool AddOverflow(ARMword, ARMword, ARMword); | ||
| 294 | bool SubOverflow(ARMword, ARMword, ARMword); | ||
| 295 | |||
| 296 | void ARMul_SelectProcessor(ARMul_State*, unsigned); | ||
| 297 | |||
| 298 | u32 AddWithCarry(u32, u32, u32, bool*, bool*); | ||
| 299 | bool ARMul_AddOverflowQ(ARMword, ARMword); | ||
| 300 | |||
| 301 | u8 ARMul_SignedSaturatedAdd8(u8, u8); | ||
| 302 | u8 ARMul_SignedSaturatedSub8(u8, u8); | ||
| 303 | u16 ARMul_SignedSaturatedAdd16(u16, u16); | ||
| 304 | u16 ARMul_SignedSaturatedSub16(u16, u16); | ||
| 305 | |||
| 306 | u8 ARMul_UnsignedSaturatedAdd8(u8, u8); | ||
| 307 | u16 ARMul_UnsignedSaturatedAdd16(u16, u16); | ||
| 308 | u8 ARMul_UnsignedSaturatedSub8(u8, u8); | ||
| 309 | u16 ARMul_UnsignedSaturatedSub16(u16, u16); | ||
| 310 | u8 ARMul_UnsignedAbsoluteDifference(u8, u8); | ||
| 311 | u32 ARMul_SignedSatQ(s32, u8, bool*); | ||
| 312 | u32 ARMul_UnsignedSatQ(s32, u8, bool*); | ||
| 313 | |||
| 314 | bool InBigEndianMode(ARMul_State*); | ||
| 315 | bool InAPrivilegedMode(ARMul_State*); | ||
| 316 | |||
| 317 | u32 ReadCP15Register(ARMul_State* cpu, u32 crn, u32 opcode_1, u32 crm, u32 opcode_2); | ||
| 318 | void WriteCP15Register(ARMul_State* cpu, u32 value, u32 crn, u32 opcode_1, u32 crm, u32 opcode_2); | ||
diff --git a/src/core/arm/skyeye_common/armmmu.h b/src/core/arm/skyeye_common/armmmu.h index c67d7209b..6aa2e0771 100644 --- a/src/core/arm/skyeye_common/armmmu.h +++ b/src/core/arm/skyeye_common/armmmu.h | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | 24 | ||
| 25 | #include "core/memory.h" | 25 | #include "core/memory.h" |
| 26 | #include "core/arm/skyeye_common/armdefs.h" | 26 | #include "core/arm/skyeye_common/armdefs.h" |
| 27 | #include "core/arm/skyeye_common/armsupp.h" | ||
| 27 | 28 | ||
| 28 | // Register numbers in the MMU | 29 | // Register numbers in the MMU |
| 29 | enum | 30 | enum |
diff --git a/src/core/arm/skyeye_common/armsupp.cpp b/src/core/arm/skyeye_common/armsupp.cpp index 83f7f3e2c..e1d4509c4 100644 --- a/src/core/arm/skyeye_common/armsupp.cpp +++ b/src/core/arm/skyeye_common/armsupp.cpp | |||
| @@ -18,8 +18,9 @@ | |||
| 18 | #include "common/logging/log.h" | 18 | #include "common/logging/log.h" |
| 19 | 19 | ||
| 20 | #include "core/mem_map.h" | 20 | #include "core/mem_map.h" |
| 21 | #include "core/arm/skyeye_common/armdefs.h" | ||
| 22 | #include "core/arm/skyeye_common/arm_regformat.h" | 21 | #include "core/arm/skyeye_common/arm_regformat.h" |
| 22 | #include "core/arm/skyeye_common/armdefs.h" | ||
| 23 | #include "core/arm/skyeye_common/armsupp.h" | ||
| 23 | 24 | ||
| 24 | // Unsigned sum of absolute difference | 25 | // Unsigned sum of absolute difference |
| 25 | u8 ARMul_UnsignedAbsoluteDifference(u8 left, u8 right) | 26 | u8 ARMul_UnsignedAbsoluteDifference(u8 left, u8 right) |
| @@ -47,21 +48,21 @@ u32 AddWithCarry(u32 left, u32 right, u32 carry_in, bool* carry_out_occurred, bo | |||
| 47 | } | 48 | } |
| 48 | 49 | ||
| 49 | // Compute whether an addition of A and B, giving RESULT, overflowed. | 50 | // Compute whether an addition of A and B, giving RESULT, overflowed. |
| 50 | bool AddOverflow(ARMword a, ARMword b, ARMword result) | 51 | bool AddOverflow(u32 a, u32 b, u32 result) |
| 51 | { | 52 | { |
| 52 | return ((NEG(a) && NEG(b) && POS(result)) || | 53 | return ((NEG(a) && NEG(b) && POS(result)) || |
| 53 | (POS(a) && POS(b) && NEG(result))); | 54 | (POS(a) && POS(b) && NEG(result))); |
| 54 | } | 55 | } |
| 55 | 56 | ||
| 56 | // Compute whether a subtraction of A and B, giving RESULT, overflowed. | 57 | // Compute whether a subtraction of A and B, giving RESULT, overflowed. |
| 57 | bool SubOverflow(ARMword a, ARMword b, ARMword result) | 58 | bool SubOverflow(u32 a, u32 b, u32 result) |
| 58 | { | 59 | { |
| 59 | return ((NEG(a) && POS(b) && POS(result)) || | 60 | return ((NEG(a) && POS(b) && POS(result)) || |
| 60 | (POS(a) && NEG(b) && NEG(result))); | 61 | (POS(a) && NEG(b) && NEG(result))); |
| 61 | } | 62 | } |
| 62 | 63 | ||
| 63 | // Returns true if the Q flag should be set as a result of overflow. | 64 | // Returns true if the Q flag should be set as a result of overflow. |
| 64 | bool ARMul_AddOverflowQ(ARMword a, ARMword b) | 65 | bool ARMul_AddOverflowQ(u32 a, u32 b) |
| 65 | { | 66 | { |
| 66 | u32 result = a + b; | 67 | u32 result = a + b; |
| 67 | if (((result ^ a) & (u32)0x80000000) && ((a ^ b) & (u32)0x80000000) == 0) | 68 | if (((result ^ a) & (u32)0x80000000) && ((a ^ b) & (u32)0x80000000) == 0) |
diff --git a/src/core/arm/skyeye_common/armsupp.h b/src/core/arm/skyeye_common/armsupp.h new file mode 100644 index 000000000..d82b21107 --- /dev/null +++ b/src/core/arm/skyeye_common/armsupp.h | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | // Copyright 2014 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include "common/common_types.h" | ||
| 8 | |||
| 9 | struct ARMul_State; | ||
| 10 | |||
| 11 | #define BITS(s, a, b) ((s << ((sizeof(s) * 8 - 1) - b)) >> (sizeof(s) * 8 - b + a - 1)) | ||
| 12 | #define BIT(s, n) ((s >> (n)) & 1) | ||
| 13 | |||
| 14 | #define POS(i) ( (~(i)) >> 31 ) | ||
| 15 | #define NEG(i) ( (i) >> 31 ) | ||
| 16 | |||
| 17 | bool AddOverflow(u32, u32, u32); | ||
| 18 | bool SubOverflow(u32, u32, u32); | ||
| 19 | |||
| 20 | void ARMul_SelectProcessor(ARMul_State*, unsigned); | ||
| 21 | |||
| 22 | u32 AddWithCarry(u32, u32, u32, bool*, bool*); | ||
| 23 | bool ARMul_AddOverflowQ(u32, u32); | ||
| 24 | |||
| 25 | u8 ARMul_SignedSaturatedAdd8(u8, u8); | ||
| 26 | u8 ARMul_SignedSaturatedSub8(u8, u8); | ||
| 27 | u16 ARMul_SignedSaturatedAdd16(u16, u16); | ||
| 28 | u16 ARMul_SignedSaturatedSub16(u16, u16); | ||
| 29 | |||
| 30 | u8 ARMul_UnsignedSaturatedAdd8(u8, u8); | ||
| 31 | u16 ARMul_UnsignedSaturatedAdd16(u16, u16); | ||
| 32 | u8 ARMul_UnsignedSaturatedSub8(u8, u8); | ||
| 33 | u16 ARMul_UnsignedSaturatedSub16(u16, u16); | ||
| 34 | u8 ARMul_UnsignedAbsoluteDifference(u8, u8); | ||
| 35 | u32 ARMul_SignedSatQ(s32, u8, bool*); | ||
| 36 | u32 ARMul_UnsignedSatQ(s32, u8, bool*); | ||
| 37 | |||
| 38 | bool InBigEndianMode(ARMul_State*); | ||
| 39 | bool InAPrivilegedMode(ARMul_State*); | ||
| 40 | |||
| 41 | u32 ReadCP15Register(ARMul_State* cpu, u32 crn, u32 opcode_1, u32 crm, u32 opcode_2); | ||
| 42 | void WriteCP15Register(ARMul_State* cpu, u32 value, u32 crn, u32 opcode_1, u32 crm, u32 opcode_2); | ||