Skip to content

Commit c9637ef

Browse files
committed
Moving EBX into EBP for the new jump address.
1 parent 2fd6111 commit c9637ef

File tree

1 file changed

+65
-66
lines changed

1 file changed

+65
-66
lines changed

src/core/ix86/iR3000A.cc

Lines changed: 65 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ class X86DynaRecCPU : public PCSX::R3000Acpu {
107107
uint32_t m_pc; /* recompiler pc */
108108

109109
bool m_needsStackFrame;
110-
bool m_pcInEBX;
110+
bool m_pcInEBP;
111111
bool m_stopRecompile;
112112

113113
uint32_t m_functionPtr;
@@ -2373,12 +2373,12 @@ void X86DynaRecCPU::recSRAV() {
23732373

23742374
void X86DynaRecCPU::recSYSCALL() {
23752375
gen.MOV32ItoM((uint32_t)&m_psxRegs.pc, (uint32_t)m_pc - 4);
2376-
gen.MOV32ItoR(PCSX::ix86::EBX, 0xffffffff);
2376+
gen.MOV32ItoR(PCSX::ix86::EBP, 0xffffffff);
23772377
gen.MOV32ItoM((uint32_t)&m_arg2, m_inDelaySlot ? 1 : 0);
23782378
gen.MOV32ItoM((uint32_t)&m_arg1, 0x20);
23792379
gen.MOV32ItoM((uint32_t)&m_functionPtr, 0);
23802380

2381-
m_pcInEBX = true;
2381+
m_pcInEBP = true;
23822382
m_stopRecompile = true;
23832383
}
23842384

@@ -2433,19 +2433,19 @@ void X86DynaRecCPU::recBLTZ() {
24332433

24342434
if (IsConst(_Rs_)) {
24352435
if ((int32_t)m_iRegs[_Rs_].k < 0) {
2436-
m_pcInEBX = true;
2436+
m_pcInEBP = true;
24372437
m_stopRecompile = true;
2438-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2438+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
24392439
}
24402440
return;
24412441
}
24422442

2443-
m_pcInEBX = true;
2443+
m_pcInEBP = true;
24442444
m_stopRecompile = true;
2445-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2445+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
24462446
gen.CMP32ItoM((uint32_t)&m_psxRegs.GPR.r[_Rs_], 0);
24472447
unsigned slot = gen.JL32(0);
2448-
gen.MOV32ItoR(PCSX::ix86::EBX, m_pc + 4);
2448+
gen.MOV32ItoR(PCSX::ix86::EBP, m_pc + 4);
24492449
gen.x86SetJ32(slot);
24502450
}
24512451

@@ -2458,19 +2458,19 @@ void X86DynaRecCPU::recBGTZ() {
24582458

24592459
if (IsConst(_Rs_)) {
24602460
if ((int32_t)m_iRegs[_Rs_].k > 0) {
2461-
m_pcInEBX = true;
2461+
m_pcInEBP = true;
24622462
m_stopRecompile = true;
2463-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2463+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
24642464
}
24652465
return;
24662466
}
24672467

2468-
m_pcInEBX = true;
2468+
m_pcInEBP = true;
24692469
m_stopRecompile = true;
2470-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2470+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
24712471
gen.CMP32ItoM((uint32_t)&m_psxRegs.GPR.r[_Rs_], 0);
24722472
unsigned slot = gen.JG32(0);
2473-
gen.MOV32ItoR(PCSX::ix86::EBX, m_pc + 4);
2473+
gen.MOV32ItoR(PCSX::ix86::EBP, m_pc + 4);
24742474
gen.x86SetJ32(slot);
24752475
}
24762476

@@ -2486,9 +2486,9 @@ void X86DynaRecCPU::recBLTZAL() {
24862486
delayedLoad.active = true;
24872487
delayedLoad.index = 31;
24882488
gen.MOV32ItoR(PCSX::ix86::EDI, m_pc + 4);
2489-
m_pcInEBX = true;
2489+
m_pcInEBP = true;
24902490
m_stopRecompile = true;
2491-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2491+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
24922492
}
24932493
return;
24942494
}
@@ -2499,13 +2499,13 @@ void X86DynaRecCPU::recBLTZAL() {
24992499
delayedLoad.active = true;
25002500
delayedLoad.index = 31;
25012501
gen.MOV32MtoR(PCSX::ix86::EDI, (uint32_t)&m_psxRegs.GPR.n.ra);
2502-
m_pcInEBX = true;
2502+
m_pcInEBP = true;
25032503
m_stopRecompile = true;
2504-
gen.MOV32ItoR(PCSX::ix86::EBX, m_pc + 4);
2504+
gen.MOV32ItoR(PCSX::ix86::EBP, m_pc + 4);
25052505
gen.CMP32ItoM((uint32_t)&m_psxRegs.GPR.r[_Rs_], 0);
25062506
unsigned slot = gen.JGE32(0);
25072507
gen.MOV32ItoR(PCSX::ix86::EDI, m_pc + 4);
2508-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2508+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
25092509
gen.x86SetJ32(slot);
25102510
}
25112511

@@ -2521,9 +2521,9 @@ void X86DynaRecCPU::recBGEZAL() {
25212521
delayedLoad.active = true;
25222522
delayedLoad.index = 31;
25232523
gen.MOV32ItoR(PCSX::ix86::EDI, m_pc + 4);
2524-
m_pcInEBX = true;
2524+
m_pcInEBP = true;
25252525
m_stopRecompile = true;
2526-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2526+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
25272527
}
25282528
return;
25292529
}
@@ -2534,13 +2534,13 @@ void X86DynaRecCPU::recBGEZAL() {
25342534
delayedLoad.active = true;
25352535
delayedLoad.index = 31;
25362536
gen.MOV32MtoR(PCSX::ix86::EDI, (uint32_t)&m_psxRegs.GPR.n.ra);
2537-
m_pcInEBX = true;
2537+
m_pcInEBP = true;
25382538
m_stopRecompile = true;
2539-
gen.MOV32ItoR(PCSX::ix86::EBX, m_pc + 4);
2539+
gen.MOV32ItoR(PCSX::ix86::EBP, m_pc + 4);
25402540
gen.CMP32ItoM((uint32_t)&m_psxRegs.GPR.r[_Rs_], 0);
25412541
unsigned slot = gen.JL32(0);
25422542
gen.MOV32ItoR(PCSX::ix86::EDI, m_pc + 4);
2543-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2543+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
25442544
gen.x86SetJ32(slot);
25452545
}
25462546

@@ -2549,8 +2549,8 @@ void X86DynaRecCPU::recJ() {
25492549
uint32_t target = _Target_ * 4 + (m_pc & 0xf0000000);
25502550
m_nextIsDelaySlot = true;
25512551
m_stopRecompile = true;
2552-
m_pcInEBX = true;
2553-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2552+
m_pcInEBP = true;
2553+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
25542554
}
25552555

25562556
void X86DynaRecCPU::recJAL() {
@@ -2563,19 +2563,19 @@ void X86DynaRecCPU::recJAL() {
25632563
uint32_t target = _Target_ * 4 + (m_pc & 0xf0000000);
25642564
m_nextIsDelaySlot = true;
25652565
m_stopRecompile = true;
2566-
m_pcInEBX = true;
2567-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2566+
m_pcInEBP = true;
2567+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
25682568
}
25692569

25702570
void X86DynaRecCPU::recJR() {
25712571
// jr Rs
25722572
m_nextIsDelaySlot = true;
25732573
m_stopRecompile = true;
2574-
m_pcInEBX = true;
2574+
m_pcInEBP = true;
25752575
if (IsConst(_Rs_)) {
2576-
gen.MOV32ItoR(PCSX::ix86::EBX, m_iRegs[_Rs_].k);
2576+
gen.MOV32ItoR(PCSX::ix86::EBP, m_iRegs[_Rs_].k);
25772577
} else {
2578-
gen.MOV32MtoR(PCSX::ix86::EBX, (uint32_t)&m_psxRegs.GPR.r[_Rs_]);
2578+
gen.MOV32MtoR(PCSX::ix86::EBP, (uint32_t)&m_psxRegs.GPR.r[_Rs_]);
25792579
}
25802580
}
25812581

@@ -2588,11 +2588,11 @@ void X86DynaRecCPU::recJALR() {
25882588
gen.MOV32ItoR(PCSX::ix86::EDI, m_pc + 4);
25892589
m_nextIsDelaySlot = true;
25902590
m_stopRecompile = true;
2591-
m_pcInEBX = true;
2591+
m_pcInEBP = true;
25922592
if (IsConst(_Rs_)) {
2593-
gen.MOV32ItoR(PCSX::ix86::EBX, m_iRegs[_Rs_].k);
2593+
gen.MOV32ItoR(PCSX::ix86::EBP, m_iRegs[_Rs_].k);
25942594
} else {
2595-
gen.MOV32MtoR(PCSX::ix86::EBX, (uint32_t)&m_psxRegs.GPR.r[_Rs_]);
2595+
gen.MOV32MtoR(PCSX::ix86::EBP, (uint32_t)&m_psxRegs.GPR.r[_Rs_]);
25962596
}
25972597
}
25982598

@@ -2605,9 +2605,9 @@ void X86DynaRecCPU::recBEQ() {
26052605

26062606
if (IsConst(_Rs_) && IsConst(_Rt_)) {
26072607
if (m_iRegs[_Rs_].k == m_iRegs[_Rt_].k) {
2608-
m_pcInEBX = true;
2608+
m_pcInEBP = true;
26092609
m_stopRecompile = true;
2610-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2610+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
26112611
}
26122612
return;
26132613
} else if (IsConst(_Rs_)) {
@@ -2618,11 +2618,11 @@ void X86DynaRecCPU::recBEQ() {
26182618
gen.MOV32MtoR(PCSX::ix86::EAX, (uint32_t)&m_psxRegs.GPR.r[_Rs_]);
26192619
gen.CMP32MtoR(PCSX::ix86::EAX, (uint32_t)&m_psxRegs.GPR.r[_Rt_]);
26202620
}
2621-
m_pcInEBX = true;
2621+
m_pcInEBP = true;
26222622
m_stopRecompile = true;
2623-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2623+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
26242624
unsigned slot = gen.JE32(0);
2625-
gen.MOV32ItoR(PCSX::ix86::EBX, m_pc + 4);
2625+
gen.MOV32ItoR(PCSX::ix86::EBP, m_pc + 4);
26262626
gen.x86SetJ32(slot);
26272627
}
26282628

@@ -2635,9 +2635,9 @@ void X86DynaRecCPU::recBNE() {
26352635

26362636
if (IsConst(_Rs_) && IsConst(_Rt_)) {
26372637
if (m_iRegs[_Rs_].k != m_iRegs[_Rt_].k) {
2638-
m_pcInEBX = true;
2638+
m_pcInEBP = true;
26392639
m_stopRecompile = true;
2640-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2640+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
26412641
}
26422642
return;
26432643
} else if (IsConst(_Rs_)) {
@@ -2648,11 +2648,11 @@ void X86DynaRecCPU::recBNE() {
26482648
gen.MOV32MtoR(PCSX::ix86::EAX, (uint32_t)&m_psxRegs.GPR.r[_Rs_]);
26492649
gen.CMP32MtoR(PCSX::ix86::EAX, (uint32_t)&m_psxRegs.GPR.r[_Rt_]);
26502650
}
2651-
m_pcInEBX = true;
2651+
m_pcInEBP = true;
26522652
m_stopRecompile = true;
2653-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2653+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
26542654
unsigned slot = gen.JNE32(0);
2655-
gen.MOV32ItoR(PCSX::ix86::EBX, m_pc + 4);
2655+
gen.MOV32ItoR(PCSX::ix86::EBP, m_pc + 4);
26562656
gen.x86SetJ32(slot);
26572657
}
26582658

@@ -2665,19 +2665,19 @@ void X86DynaRecCPU::recBLEZ() {
26652665

26662666
if (IsConst(_Rs_)) {
26672667
if ((int32_t)m_iRegs[_Rs_].k <= 0) {
2668-
m_pcInEBX = true;
2668+
m_pcInEBP = true;
26692669
m_stopRecompile = true;
2670-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2670+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
26712671
}
26722672
return;
26732673
}
26742674

2675-
m_pcInEBX = true;
2675+
m_pcInEBP = true;
26762676
m_stopRecompile = true;
2677-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2677+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
26782678
gen.CMP32ItoM((uint32_t)&m_psxRegs.GPR.r[_Rs_], 0);
26792679
unsigned slot = gen.JLE32(0);
2680-
gen.MOV32ItoR(PCSX::ix86::EBX, m_pc + 4);
2680+
gen.MOV32ItoR(PCSX::ix86::EBP, m_pc + 4);
26812681
gen.x86SetJ32(slot);
26822682
}
26832683

@@ -2690,19 +2690,19 @@ void X86DynaRecCPU::recBGEZ() {
26902690

26912691
if (IsConst(_Rs_)) {
26922692
if ((int32_t)m_iRegs[_Rs_].k >= 0) {
2693-
m_pcInEBX = true;
2693+
m_pcInEBP = true;
26942694
m_stopRecompile = true;
2695-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2695+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
26962696
}
26972697
return;
26982698
}
26992699

2700-
m_pcInEBX = true;
2700+
m_pcInEBP = true;
27012701
m_stopRecompile = true;
2702-
gen.MOV32ItoR(PCSX::ix86::EBX, target);
2702+
gen.MOV32ItoR(PCSX::ix86::EBP, target);
27032703
gen.CMP32ItoM((uint32_t)&m_psxRegs.GPR.r[_Rs_], 0);
27042704
unsigned slot = gen.JGE32(0);
2705-
gen.MOV32ItoR(PCSX::ix86::EBX, m_pc + 4);
2705+
gen.MOV32ItoR(PCSX::ix86::EBP, m_pc + 4);
27062706
gen.x86SetJ32(slot);
27072707
}
27082708

@@ -2722,9 +2722,9 @@ void X86DynaRecCPU::recCFC0() {
27222722
}
27232723

27242724
void X86DynaRecCPU::testSWInt() {
2725-
if (!m_pcInEBX) gen.MOV32ItoR(PCSX::ix86::EBX, (uint32_t)m_pc);
2725+
if (!m_pcInEBP) gen.MOV32ItoR(PCSX::ix86::EBP, (uint32_t)m_pc);
27262726

2727-
m_pcInEBX = true;
2727+
m_pcInEBP = true;
27282728
m_stopRecompile = true;
27292729

27302730
gen.MOV32MtoR(PCSX::ix86::EDX, (uint32_t)&m_psxRegs.CP0.n.Cause);
@@ -2740,8 +2740,8 @@ void X86DynaRecCPU::testSWInt() {
27402740
gen.MOV32ItoM((uint32_t)&m_functionPtr, 0);
27412741
gen.MOV32RtoM((uint32_t)&m_arg1, PCSX::ix86::EDX);
27422742
gen.MOV32ItoM((uint32_t)&m_arg2, m_inDelaySlot);
2743-
gen.MOV32RtoM((uint32_t)&m_psxRegs.pc, PCSX::ix86::EBX);
2744-
gen.MOV32ItoR(PCSX::ix86::EBX, 0xffffffff);
2743+
gen.MOV32RtoM((uint32_t)&m_psxRegs.pc, PCSX::ix86::EBP);
2744+
gen.MOV32ItoR(PCSX::ix86::EBP, 0xffffffff);
27452745
gen.x86SetJ8(slot1);
27462746
gen.x86SetJ8(slot2);
27472747
}
@@ -2788,15 +2788,15 @@ void X86DynaRecCPU::recHLE() {
27882788
if (hleCode >= (sizeof(psxHLEt) / sizeof(psxHLEt[0]))) {
27892789
recNULL();
27902790
} else {
2791-
if (m_pcInEBX) {
2792-
gen.MOV32RtoM((uint32_t)&m_psxRegs.pc, PCSX::ix86::EBX);
2791+
if (m_pcInEBP) {
2792+
gen.MOV32RtoM((uint32_t)&m_psxRegs.pc, PCSX::ix86::EBP);
27932793
} else {
27942794
gen.MOV32ItoM((uint32_t)&m_psxRegs.pc, (uint32_t)m_pc);
27952795
}
2796-
gen.MOV32ItoR(PCSX::ix86::EBX, 0xffffffff);
2796+
gen.MOV32ItoR(PCSX::ix86::EBP, 0xffffffff);
27972797
gen.MOV32ItoM((uint32_t)&m_functionPtr, (uint32_t)psxHLEt[hleCode]);
27982798

2799-
m_pcInEBX = true;
2799+
m_pcInEBP = true;
28002800
m_stopRecompile = true;
28012801
}
28022802
}
@@ -3051,7 +3051,7 @@ void X86DynaRecCPU::recRecompile() {
30513051
int8_t *startPtr = gen.x86GetPtr();
30523052
(*(uint32_t *)PC_REC(m_pc)) = (uint32_t)startPtr;
30533053
m_needsStackFrame = false;
3054-
m_pcInEBX = false;
3054+
m_pcInEBP = false;
30553055
m_nextIsDelaySlot = false;
30563056
m_inDelaySlot = false;
30573057
m_stopRecompile = false;
@@ -3060,7 +3060,6 @@ void X86DynaRecCPU::recRecompile() {
30603060
m_delayedLoadInfo[1].active = false;
30613061
unsigned count = 0;
30623062
gen.PUSH32R(PCSX::ix86::EBP);
3063-
gen.MOV32RtoR(PCSX::ix86::EBP, PCSX::ix86::ESP);
30643063
gen.PUSH32R(PCSX::ix86::EBX);
30653064
gen.PUSH32R(PCSX::ix86::ESI);
30663065
gen.PUSH32R(PCSX::ix86::EDI);
@@ -3112,13 +3111,13 @@ void X86DynaRecCPU::recRecompile() {
31123111
count = ((m_pc - old_pc) / 4) * PCSX::Emulator::BIAS;
31133112
gen.ADD32ItoM((uint32_t)&m_psxRegs.cycle, count);
31143113

3115-
if (m_pcInEBX) {
3116-
gen.MOV32RtoR(PCSX::ix86::EAX, PCSX::ix86::EBX);
3114+
if (m_pcInEBP) {
3115+
gen.MOV32RtoR(PCSX::ix86::EAX, PCSX::ix86::EBP);
31173116
} else {
31183117
gen.MOV32ItoR(PCSX::ix86::EAX, m_pc);
31193118
}
31203119

3121-
if (m_needsStackFrame || m_pcInEBX) {
3120+
if (m_needsStackFrame || m_pcInEBP) {
31223121
gen.POP32R(PCSX::ix86::EDI);
31233122
gen.POP32R(PCSX::ix86::ESI);
31243123
gen.POP32R(PCSX::ix86::EBX);

0 commit comments

Comments
 (0)