mirror of
https://git.naxdy.org/Mirror/Ryujinx.git
synced 2025-03-14 22:40:18 +00:00
T16: Implement LDR (literal)
This commit is contained in:
parent
d84c2417aa
commit
a9f952ad40
5 changed files with 31 additions and 3 deletions
|
@ -7,5 +7,9 @@ namespace ARMeilleure.Decoders
|
||||||
|
|
||||||
bool WBack { get; }
|
bool WBack { get; }
|
||||||
bool IsLoad { get; }
|
bool IsLoad { get; }
|
||||||
|
bool Index { get; }
|
||||||
|
bool Add { get; }
|
||||||
|
|
||||||
|
int Immediate { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
23
ARMeilleure/Decoders/OpCodeT16MemLit.cs
Normal file
23
ARMeilleure/Decoders/OpCodeT16MemLit.cs
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
namespace ARMeilleure.Decoders
|
||||||
|
{
|
||||||
|
class OpCodeT16MemLit : OpCodeT16, IOpCode32Mem
|
||||||
|
{
|
||||||
|
public int Rt { get; }
|
||||||
|
public int Rn => 15;
|
||||||
|
|
||||||
|
public bool WBack => false;
|
||||||
|
public bool IsLoad => true;
|
||||||
|
public bool Index => true;
|
||||||
|
public bool Add => true;
|
||||||
|
|
||||||
|
public int Immediate { get; }
|
||||||
|
|
||||||
|
public new static OpCode Create(InstDescriptor inst, ulong address, int opCode, bool inITBlock) => new OpCodeT16MemLit(inst, address, opCode, inITBlock);
|
||||||
|
public OpCodeT16MemLit(InstDescriptor inst, ulong address, int opCode, bool inITBlock) : base(inst, address, opCode, inITBlock)
|
||||||
|
{
|
||||||
|
Rt = (opCode >> 8) & 7;
|
||||||
|
|
||||||
|
Immediate = (opCode & 0xff) << 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1004,6 +1004,7 @@ namespace ARMeilleure.Decoders
|
||||||
SetT16("01000110xxxxxxxx", InstName.Mov, InstEmit32.Mov, OpCodeT16AluRegHigh.Create);
|
SetT16("01000110xxxxxxxx", InstName.Mov, InstEmit32.Mov, OpCodeT16AluRegHigh.Create);
|
||||||
SetT16("010001110xxxx000", InstName.Bx, InstEmit32.Bx, OpCodeT16BReg.Create);
|
SetT16("010001110xxxx000", InstName.Bx, InstEmit32.Bx, OpCodeT16BReg.Create);
|
||||||
SetT16("010001111xxxx000", InstName.Blx, InstEmit32.Blx, OpCodeT16BReg.Create);
|
SetT16("010001111xxxx000", InstName.Blx, InstEmit32.Blx, OpCodeT16BReg.Create);
|
||||||
|
SetT16("01001xxxxxxxxxxx", InstName.Ldr, InstEmit32.Ldr, OpCodeT16MemLit.Create);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
FillFastLookupTable(InstA32FastLookup, AllInstA32, ToFastLookupIndexA);
|
FillFastLookupTable(InstA32FastLookup, AllInstA32, ToFastLookupIndexA);
|
||||||
|
|
|
@ -151,7 +151,7 @@ namespace ARMeilleure.Instructions
|
||||||
|
|
||||||
private static void EmitLoadOrStore(ArmEmitterContext context, int size, AccessType accType)
|
private static void EmitLoadOrStore(ArmEmitterContext context, int size, AccessType accType)
|
||||||
{
|
{
|
||||||
OpCode32Mem op = (OpCode32Mem)context.CurrOp;
|
IOpCode32Mem op = (IOpCode32Mem)context.CurrOp;
|
||||||
|
|
||||||
Operand n = context.Copy(GetIntA32AlignedPC(context, op.Rn));
|
Operand n = context.Copy(GetIntA32AlignedPC(context, op.Rn));
|
||||||
Operand m = GetMemM(context, setCarry: false);
|
Operand m = GetMemM(context, setCarry: false);
|
||||||
|
|
|
@ -551,7 +551,7 @@ namespace ARMeilleure.Instructions
|
||||||
|
|
||||||
case OpCode32MemReg op: return GetIntA32(context, op.Rm);
|
case OpCode32MemReg op: return GetIntA32(context, op.Rm);
|
||||||
|
|
||||||
case OpCode32Mem op: return Const(op.Immediate);
|
case IOpCode32Mem op: return Const(op.Immediate);
|
||||||
|
|
||||||
case OpCode32SimdMemImm op: return Const(op.Immediate);
|
case OpCode32SimdMemImm op: return Const(op.Immediate);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue