aboutsummaryrefslogtreecommitdiff
path: root/src/ARMJIT_x64
diff options
context:
space:
mode:
authorRSDuck <rsduck@users.noreply.github.com>2019-07-21 17:28:16 +0200
committerRSDuck <rsduck@users.noreply.github.com>2020-04-26 13:03:10 +0200
commit4a0f6b3b4bd60815d0c8259e4ec2a944bfb716be (patch)
tree9a07ecd2ec19263e9f49c1fd9ccbd2b2d0d31f7c /src/ARMJIT_x64
parent9d180c7bbc8ccb3459ab2ab14dd2adc7a0f71cf3 (diff)
jit: fix thumb hi reg alu and mcr halt
+ mcr/mrc aren't always, msr_imm is never unk on ARM7
Diffstat (limited to 'src/ARMJIT_x64')
-rw-r--r--src/ARMJIT_x64/ARMJIT_ALU.cpp4
-rw-r--r--src/ARMJIT_x64/ARMJIT_Branch.cpp21
2 files changed, 15 insertions, 10 deletions
diff --git a/src/ARMJIT_x64/ARMJIT_ALU.cpp b/src/ARMJIT_x64/ARMJIT_ALU.cpp
index 013f54c..bdf06f7 100644
--- a/src/ARMJIT_x64/ARMJIT_ALU.cpp
+++ b/src/ARMJIT_x64/ARMJIT_ALU.cpp
@@ -663,7 +663,7 @@ void Compiler::T_Comp_ALU_HiReg()
switch (op)
{
case 0x0: // ADD
- Comp_ArithTriOp(&Compiler::ADD, rdMapped, rdMapped, rs, false, opSymmetric|opRetriveCV);
+ Comp_ArithTriOp(&Compiler::ADD, rdMapped, rdMapped, rs, false, opSymmetric);
break;
case 0x1: // CMP
Comp_CmpOp(2, rdMapped, rs, false);
@@ -671,8 +671,6 @@ void Compiler::T_Comp_ALU_HiReg()
case 0x2: // MOV
if (rdMapped != rs)
MOV(32, rdMapped, rs);
- TEST(32, rdMapped, rdMapped);
- Comp_RetriveFlags(false, false, false);
break;
}
diff --git a/src/ARMJIT_x64/ARMJIT_Branch.cpp b/src/ARMJIT_x64/ARMJIT_Branch.cpp
index 6ae4aad..9d4c1e2 100644
--- a/src/ARMJIT_x64/ARMJIT_Branch.cpp
+++ b/src/ARMJIT_x64/ARMJIT_Branch.cpp
@@ -235,16 +235,23 @@ void Compiler::T_Comp_B()
void Compiler::T_Comp_BranchXchangeReg()
{
bool link = CurInstr.Instr & (1 << 7);
- if (link && Num == 1)
- {
- printf("BLX unsupported on ARM7!!!\n");
- return;
- }
- OpArg rn = MapReg(CurInstr.A_Reg(3));
if (link)
+ {
+ if (Num == 1)
+ {
+ printf("BLX unsupported on ARM7!!!\n");
+ return;
+ }
+ MOV(32, R(RSCRATCH), MapReg(CurInstr.A_Reg(3)));
MOV(32, MapReg(14), Imm32(R15 - 1));
- Comp_JumpTo(rn.GetSimpleReg());
+ Comp_JumpTo(RSCRATCH);
+ }
+ else
+ {
+ OpArg rn = MapReg(CurInstr.A_Reg(3));
+ Comp_JumpTo(rn.GetSimpleReg());
+ }
}
void Compiler::T_Comp_BL_LONG_1()