aboutsummaryrefslogtreecommitdiff
path: root/ARMeilleure/Decoders/OpCode32SimdRegElem.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ARMeilleure/Decoders/OpCode32SimdRegElem.cs')
-rw-r--r--ARMeilleure/Decoders/OpCode32SimdRegElem.cs21
1 files changed, 21 insertions, 0 deletions
diff --git a/ARMeilleure/Decoders/OpCode32SimdRegElem.cs b/ARMeilleure/Decoders/OpCode32SimdRegElem.cs
new file mode 100644
index 00000000..4bf15cca
--- /dev/null
+++ b/ARMeilleure/Decoders/OpCode32SimdRegElem.cs
@@ -0,0 +1,21 @@
+namespace ARMeilleure.Decoders
+{
+ class OpCode32SimdRegElem : OpCode32SimdReg
+ {
+ public OpCode32SimdRegElem(InstDescriptor inst, ulong address, int opCode) : base(inst, address, opCode)
+ {
+ Q = ((opCode >> 24) & 0x1) != 0;
+ F = ((opCode >> 8) & 0x1) != 0;
+ Size = ((opCode >> 20) & 0x3);
+
+ RegisterSize = Q ? RegisterSize.Simd128 : RegisterSize.Simd64;
+
+ Vm = ((opCode >> 5) & 0x1) | ((opCode << 1) & 0x1e);
+
+ if (DecoderHelper.VectorArgumentsInvalid(Q, Vd, Vn) || Size == 0 || (Size == 1 && F))
+ {
+ Instruction = InstDescriptor.Undefined;
+ }
+ }
+ }
+}