aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Cpu/LightningJit/Arm32/InstInfoForTable.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Cpu/LightningJit/Arm32/InstInfoForTable.cs')
-rw-r--r--src/Ryujinx.Cpu/LightningJit/Arm32/InstInfoForTable.cs79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/InstInfoForTable.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/InstInfoForTable.cs
new file mode 100644
index 00000000..25739d56
--- /dev/null
+++ b/src/Ryujinx.Cpu/LightningJit/Arm32/InstInfoForTable.cs
@@ -0,0 +1,79 @@
+using Ryujinx.Cpu.LightningJit.Table;
+using System;
+
+namespace Ryujinx.Cpu.LightningJit.Arm32
+{
+ readonly struct InstInfoForTable : IInstInfo
+ {
+ public uint Encoding { get; }
+ public uint EncodingMask { get; }
+ public InstEncoding[] Constraints { get; }
+ public InstMeta Meta { get; }
+ public IsaVersion Version => Meta.Version;
+ public IsaFeature Feature => Meta.Feature;
+
+ public InstInfoForTable(
+ uint encoding,
+ uint encodingMask,
+ InstEncoding[] constraints,
+ InstName name,
+ Action<CodeGenContext, uint> emitFunc,
+ IsaVersion isaVersion,
+ IsaFeature isaFeature,
+ InstFlags flags)
+ {
+ Encoding = encoding;
+ EncodingMask = encodingMask;
+ Constraints = constraints;
+ Meta = new(name, emitFunc, isaVersion, isaFeature, flags);
+ }
+
+ public InstInfoForTable(
+ uint encoding,
+ uint encodingMask,
+ InstEncoding[] constraints,
+ InstName name,
+ Action<CodeGenContext, uint> emitFunc,
+ IsaVersion isaVersion,
+ InstFlags flags) : this(encoding, encodingMask, constraints, name, emitFunc, isaVersion, IsaFeature.None, flags)
+ {
+ }
+
+ public InstInfoForTable(
+ uint encoding,
+ uint encodingMask,
+ InstName name,
+ Action<CodeGenContext, uint> emitFunc,
+ IsaVersion isaVersion,
+ IsaFeature isaFeature,
+ InstFlags flags) : this(encoding, encodingMask, null, name, emitFunc, isaVersion, isaFeature, flags)
+ {
+ }
+
+ public InstInfoForTable(
+ uint encoding,
+ uint encodingMask,
+ InstName name,
+ Action<CodeGenContext, uint> emitFunc,
+ IsaVersion isaVersion,
+ InstFlags flags) : this(encoding, encodingMask, null, name, emitFunc, isaVersion, IsaFeature.None, flags)
+ {
+ }
+
+ public bool IsConstrained(uint encoding)
+ {
+ if (Constraints != null)
+ {
+ foreach (InstEncoding constraint in Constraints)
+ {
+ if ((encoding & constraint.EncodingMask) == constraint.Encoding)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+ }
+}