[Project64] Add LoadArmRegPointerByteToArmReg
This commit is contained in:
parent
e42cb0f2c7
commit
4686ce7127
|
@ -416,6 +416,38 @@ void CArmOps::IfBlock(ArmItMask mask, ArmCompareType CompareType)
|
|||
AddCode16(op.Hex);
|
||||
}
|
||||
|
||||
void CArmOps::LoadArmRegPointerByteToArmReg(ArmReg DestReg, ArmReg RegPointer, uint16_t offset)
|
||||
{
|
||||
if (mInItBlock) { g_Notify->BreakPoint(__FILE__,__LINE__); }
|
||||
|
||||
if ((DestReg > 0x7 || RegPointer > 0x7 || (offset & ~0x1f) != 0))
|
||||
{
|
||||
if ((offset & (~0xFFF)) != 0)
|
||||
{
|
||||
CPU_Message(" RegPointer: %d Reg: %d Offset: 0x%X", RegPointer, DestReg, offset);
|
||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||
return;
|
||||
}
|
||||
CPU_Message(" ldrb.w\t%s, [%s, #%d]", ArmRegName(DestReg), ArmRegName(RegPointer), (uint32_t)offset);
|
||||
Arm32Opcode op = { 0 };
|
||||
op.imm12.rt = DestReg;
|
||||
op.imm12.rn = RegPointer;
|
||||
op.imm12.imm = offset;
|
||||
op.imm12.opcode = 0xF89;
|
||||
AddCode32(op.Hex);
|
||||
}
|
||||
else
|
||||
{
|
||||
CPU_Message(" ldrb\t%s, [%s%s%s]", ArmRegName(DestReg), ArmRegName(RegPointer), offset == 0 ? "" : ",", offset == 0 ? "" : stdstr_f("#%d",offset).c_str());
|
||||
ArmThumbOpcode op = {0};
|
||||
op.Imm5.rt = DestReg;
|
||||
op.Imm5.rn = RegPointer;
|
||||
op.Imm5.imm5 = offset;
|
||||
op.Imm5.opcode = 0xF;
|
||||
AddCode16(op.Hex);
|
||||
}
|
||||
}
|
||||
|
||||
void CArmOps::LoadArmRegPointerByteToArmReg(ArmReg DestReg, ArmReg RegPointer, ArmReg RegPointer2, uint8_t shift)
|
||||
{
|
||||
if (mInItBlock) { g_Notify->BreakPoint(__FILE__,__LINE__); }
|
||||
|
|
|
@ -168,6 +168,7 @@ protected:
|
|||
static void CompareArmRegToConst(ArmReg Reg, uint32_t value);
|
||||
static void CompareArmRegToArmReg(ArmReg Reg1, ArmReg Reg2);
|
||||
static void IfBlock(ArmItMask mask, ArmCompareType CompareType);
|
||||
static void LoadArmRegPointerByteToArmReg(ArmReg DestReg, ArmReg RegPointer, uint16_t offset);
|
||||
static void LoadArmRegPointerByteToArmReg(ArmReg DestReg, ArmReg RegPointer, ArmReg RegPointer2, uint8_t shift);
|
||||
static void LoadArmRegPointerToArmReg(ArmReg DestReg, ArmReg RegPointer, uint8_t Offset);
|
||||
static void LoadArmRegPointerToArmReg(ArmReg DestReg, ArmReg RegPointer, ArmReg RegPointer2, uint8_t shift);
|
||||
|
|
Loading…
Reference in New Issue