From 2055622c844784ceba21678fe8baccba8f882b9e Mon Sep 17 00:00:00 2001 From: merry Date: Fri, 11 Feb 2022 12:07:52 +0000 Subject: [PATCH] T16: Implement SXTH, SXTB, UXTH, UTXB --- ARMeilleure/Decoders/OpCodeT16AluUx.cs | 22 ++++++++++++++++++++++ ARMeilleure/Decoders/OpCodeTable.cs | 4 ++++ 2 files changed, 26 insertions(+) create mode 100644 ARMeilleure/Decoders/OpCodeT16AluUx.cs diff --git a/ARMeilleure/Decoders/OpCodeT16AluUx.cs b/ARMeilleure/Decoders/OpCodeT16AluUx.cs new file mode 100644 index 000000000..3debb761e --- /dev/null +++ b/ARMeilleure/Decoders/OpCodeT16AluUx.cs @@ -0,0 +1,22 @@ +namespace ARMeilleure.Decoders +{ + class OpCodeT16AluUx : OpCodeT16, IOpCode32AluUx + { + public int Rm { get; } + public int Rd { get; } + public int Rn { get; } + + public bool SetFlags => false; + + public int RotateBits => 0; + public bool Add => false; + + public static new OpCode Create(InstDescriptor inst, ulong address, int opCode, bool inITBlock) => new OpCodeT16AluUx(inst, address, opCode, inITBlock); + + public OpCodeT16AluUx(InstDescriptor inst, ulong address, int opCode, bool inITBlock) : base(inst, address, opCode, inITBlock) + { + Rd = (opCode >> 0) & 0x7; + Rm = (opCode >> 3) & 0x7; + } + } +} \ No newline at end of file diff --git a/ARMeilleure/Decoders/OpCodeTable.cs b/ARMeilleure/Decoders/OpCodeTable.cs index 2553eec3c..a9fd433f3 100644 --- a/ARMeilleure/Decoders/OpCodeTable.cs +++ b/ARMeilleure/Decoders/OpCodeTable.cs @@ -1025,6 +1025,10 @@ namespace ARMeilleure.Decoders SetT16("10101xxxxxxxxxxx", InstName.Add, InstEmit32.Add, OpCodeT16SpRel.Create); SetT16("101100000xxxxxxx", InstName.Add, InstEmit32.Add, OpCodeT16AddSubSp.Create); SetT16("101100001xxxxxxx", InstName.Sub, InstEmit32.Sub, OpCodeT16AddSubSp.Create); + SetT16("1011001000xxxxxx", InstName.Sxth, InstEmit32.Sxth, OpCodeT16AluUx.Create); + SetT16("1011001001xxxxxx", InstName.Sxtb, InstEmit32.Sxtb, OpCodeT16AluUx.Create); + SetT16("1011001010xxxxxx", InstName.Uxth, InstEmit32.Uxth, OpCodeT16AluUx.Create); + SetT16("1011001011xxxxxx", InstName.Uxtb, InstEmit32.Uxtb, OpCodeT16AluUx.Create); #endregion FillFastLookupTable(InstA32FastLookup, AllInstA32, ToFastLookupIndexA);