InstInfoForTable.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using Ryujinx.Cpu.LightningJit.Table;
  2. using System;
  3. namespace Ryujinx.Cpu.LightningJit.Arm32
  4. {
  5. readonly struct InstInfoForTable : IInstInfo
  6. {
  7. public uint Encoding { get; }
  8. public uint EncodingMask { get; }
  9. public InstEncoding[] Constraints { get; }
  10. public InstMeta Meta { get; }
  11. public IsaVersion Version => Meta.Version;
  12. public IsaFeature Feature => Meta.Feature;
  13. public InstInfoForTable(
  14. uint encoding,
  15. uint encodingMask,
  16. InstEncoding[] constraints,
  17. InstName name,
  18. Action<CodeGenContext, uint> emitFunc,
  19. IsaVersion isaVersion,
  20. IsaFeature isaFeature,
  21. InstFlags flags)
  22. {
  23. Encoding = encoding;
  24. EncodingMask = encodingMask;
  25. Constraints = constraints;
  26. Meta = new(name, emitFunc, isaVersion, isaFeature, flags);
  27. }
  28. public InstInfoForTable(
  29. uint encoding,
  30. uint encodingMask,
  31. InstEncoding[] constraints,
  32. InstName name,
  33. Action<CodeGenContext, uint> emitFunc,
  34. IsaVersion isaVersion,
  35. InstFlags flags) : this(encoding, encodingMask, constraints, name, emitFunc, isaVersion, IsaFeature.None, flags)
  36. {
  37. }
  38. public InstInfoForTable(
  39. uint encoding,
  40. uint encodingMask,
  41. InstName name,
  42. Action<CodeGenContext, uint> emitFunc,
  43. IsaVersion isaVersion,
  44. IsaFeature isaFeature,
  45. InstFlags flags) : this(encoding, encodingMask, null, name, emitFunc, isaVersion, isaFeature, flags)
  46. {
  47. }
  48. public InstInfoForTable(
  49. uint encoding,
  50. uint encodingMask,
  51. InstName name,
  52. Action<CodeGenContext, uint> emitFunc,
  53. IsaVersion isaVersion,
  54. InstFlags flags) : this(encoding, encodingMask, null, name, emitFunc, isaVersion, IsaFeature.None, flags)
  55. {
  56. }
  57. public bool IsConstrained(uint encoding)
  58. {
  59. if (Constraints != null)
  60. {
  61. foreach (InstEncoding constraint in Constraints)
  62. {
  63. if ((encoding & constraint.EncodingMask) == constraint.Encoding)
  64. {
  65. return true;
  66. }
  67. }
  68. }
  69. return false;
  70. }
  71. }
  72. }